diff --git a/.hgignore b/.hgignore index d44806c51b..ea6889df61 100644 --- a/.hgignore +++ b/.hgignore @@ -60,6 +60,7 @@ GtkModule.so ver.cpp lib*_link.a Data/UserPrefs +Data/uPrefs Data/GamePrefs/*.cfg PBProject/Hardware.plist Themes/pump diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/Changelog_sm-ssc.txt index 9a695ec50c..20b7ecc9cf 100644 --- a/Docs/Changelog_sm-ssc.txt +++ b/Docs/Changelog_sm-ssc.txt @@ -16,6 +16,8 @@ sm-ssc v1.2.4 | 20110??? 20110320 -------- * [PlayerOptions] Added SetNoteSkin(string) Lua binding. [AJ] +* [PlayerOptions] Tons of new Lua bindings. See the Lua documentation for all + of them, there's too many to print here. [AJ] 20110317 -------- diff --git a/src/Font.cpp b/src/Font.cpp index fed6ed7835..4534f76d09 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -13,7 +13,8 @@ FontPage::FontPage(): m_iHeight(0), m_iLineSpacing(0), m_fVshift(0), m_iDrawExtraPixelsLeft(0), m_iDrawExtraPixelsRight(0), - m_sTexturePath("") {} + m_FontPageTextures(), m_sTexturePath(""), m_aGlyphs(), + m_iCharToGlyphNo() {} void FontPage::Load( const FontPageSettings &cfg ) { @@ -221,9 +222,9 @@ int Font::GetLineHeightInSourcePixels( const wstring &szLine ) const Font::Font(): m_iRefCount(1), path(""), m_apPages(), m_pDefault(NULL), - m_bRightToLeft(false), m_DefaultStrokeColor(RageColor(0,0,0,0)), - m_sChars("") {} // strokes aren't shown by default, hence the Color. - + m_iCharToGlyph(), m_bRightToLeft(false), + // strokes aren't shown by default, hence the Color. + m_DefaultStrokeColor(RageColor(0,0,0,0)), m_sChars("") {} Font::~Font() { Unload(); @@ -712,8 +713,8 @@ void Font::Load( const RString &sIniPath, RString sChars ) for(unsigned i = 0; i < ImportList.size(); ++i) { - RString fPath = THEME->GetPathF( "", ImportList[i], true ); - if( fPath == "" ) + RString sPath = THEME->GetPathF( "", ImportList[i], true ); + if( sPath == "" ) { RString s = ssprintf( "Font \"%s\" imports a font \"%s\" that doesn't exist", sIniPath.c_str(), ImportList[i].c_str() ); Dialog::OK( s ); @@ -721,7 +722,7 @@ void Font::Load( const RString &sIniPath, RString sChars ) } Font subfont; - subfont.Load(fPath,""); + subfont.Load(sPath,""); MergeFont(subfont); } } diff --git a/src/Font.h b/src/Font.h index 4242693a34..d57a6b5eae 100644 --- a/src/Font.h +++ b/src/Font.h @@ -84,7 +84,9 @@ struct FontPageSettings m_iDefaultWidth(-1), m_iAdvanceExtraPixels(1), m_fScaleAllWidthsBy(1), - m_sTextureHints("default") + m_sTextureHints("default"), + CharToGlyphNo(), + m_mapGlyphWidths() { } /** diff --git a/src/MusicWheelItem.cpp b/src/MusicWheelItem.cpp index 659de68a4d..3ecf7d81d3 100644 --- a/src/MusicWheelItem.cpp +++ b/src/MusicWheelItem.cpp @@ -33,14 +33,12 @@ static const char *MusicWheelItemTypeNames[] = { }; XToString( MusicWheelItemType ); -MusicWheelItemData::MusicWheelItemData( WheelItemDataType type, Song* pSong, RString sSectionName, Course* pCourse, RageColor color, int iSectionCount ): - WheelItemBaseData(type, sSectionName, color) -{ - m_pSong = pSong; - m_pCourse = pCourse; - m_Flags = WheelNotifyIcon::Flags(); - m_iSectionCount = iSectionCount; -} +MusicWheelItemData::MusicWheelItemData( WheelItemDataType type, Song* pSong, + RString sSectionName, Course* pCourse, + RageColor color, int iSectionCount ): + WheelItemBaseData(type, sSectionName, color), + m_pCourse(pCourse), m_pSong(pSong), m_Flags(WheelNotifyIcon::Flags()), + m_iSectionCount(iSectionCount), m_sLabel(""), m_pAction() {} MusicWheelItem::MusicWheelItem( RString sType ): WheelItemBase( sType ) @@ -126,6 +124,7 @@ MusicWheelItem::MusicWheelItem( const MusicWheelItem &cpy ): WheelItemBase( cpy ), GRADES_SHOW_MACHINE( cpy.GRADES_SHOW_MACHINE ), m_TextBanner( cpy.m_TextBanner ), + m_pTextSectionCount( cpy.m_pTextSectionCount ), m_WheelNotifyIcon( cpy.m_WheelNotifyIcon ) { FOREACH_ENUM( MusicWheelItemType, i ) @@ -158,7 +157,7 @@ MusicWheelItem::MusicWheelItem( const MusicWheelItem &cpy ): } } - m_pTextSectionCount = new BitmapText( *cpy.m_pTextSectionCount ); + //m_pTextSectionCount = new BitmapText( *cpy.m_pTextSectionCount ); this->AddChild( m_pTextSectionCount ); this->AddChild( &m_WheelNotifyIcon ); diff --git a/src/MusicWheelItem.h b/src/MusicWheelItem.h index 1d83357b5e..6155e24d70 100644 --- a/src/MusicWheelItem.h +++ b/src/MusicWheelItem.h @@ -62,8 +62,11 @@ private: struct MusicWheelItemData : public WheelItemBaseData { - MusicWheelItemData() : m_iSectionCount(0) { } - MusicWheelItemData( WheelItemDataType type, Song* pSong, RString sSectionName, Course* pCourse, RageColor color, int iSectionCount ); + MusicWheelItemData() : m_pCourse(NULL), m_pSong(NULL), m_Flags(), + m_iSectionCount(0), m_sLabel(""), m_pAction() { } + MusicWheelItemData( WheelItemDataType type, Song* pSong, + RString sSectionName, Course* pCourse, + RageColor color, int iSectionCount ); Course* m_pCourse; Song* m_pSong; diff --git a/src/PlayerOptions.cpp b/src/PlayerOptions.cpp index f67bb13339..e91dbb8742 100644 --- a/src/PlayerOptions.cpp +++ b/src/PlayerOptions.cpp @@ -840,7 +840,15 @@ void PlayerOptions::ResetPrefs( ResetPrefsType type ) class LunaPlayerOptions: public Luna { public: - DEFINE_METHOD( GetNoteSkin, m_sNoteSkin ) + // NoteSkins + static int GetNoteSkin( T *p, lua_State *L ) + { + if( p->m_sNoteSkin.empty() ) + lua_pushstring( L, CommonMetrics::DEFAULT_NOTESKIN_NAME.GetValue() ); + else + lua_pushstring( L, p->m_sNoteSkin ); + return 1; + } static int SetNoteSkin( T *p, lua_State *L ) { if( NOTESKIN->DoesNoteSkinExist(SArg(1)) ) @@ -848,10 +856,209 @@ public: return 0; } + // Speed Mods + static int GetCMod( T *p, lua_State *L ) + { + if( p->m_fTimeSpacing ) + lua_pushnumber( L, p->m_fTimeSpacing ); + else + lua_pushnil(L); + return 1; + } + static int GetXMod( T *p, lua_State *L ) + { + if( !p->m_fTimeSpacing ) + lua_pushnumber( L, p->m_fScrollSpeed ); + else + lua_pushnil(L); + return 1; + } + + // Accel + DEFINE_METHOD( GetBoost, m_fAccels[PlayerOptions::ACCEL_BOOST] ) + DEFINE_METHOD( GetBrake, m_fAccels[PlayerOptions::ACCEL_BRAKE] ) + DEFINE_METHOD( GetWave, m_fAccels[PlayerOptions::ACCEL_WAVE] ) + DEFINE_METHOD( GetExpand, m_fAccels[PlayerOptions::ACCEL_EXPAND] ) + DEFINE_METHOD( GetBoomerang, m_fAccels[PlayerOptions::ACCEL_BOOMERANG] ) + + // Effect + DEFINE_METHOD( GetDrunk, m_fEffects[PlayerOptions::EFFECT_DRUNK] ) // MoonGyuHyuk + DEFINE_METHOD( GetDizzy, m_fEffects[PlayerOptions::EFFECT_DIZZY] ) + DEFINE_METHOD( GetConfusion, m_fEffects[PlayerOptions::EFFECT_CONFUSION] ) + DEFINE_METHOD( GetMini, m_fEffects[PlayerOptions::EFFECT_MINI] ) + DEFINE_METHOD( GetTiny, m_fEffects[PlayerOptions::EFFECT_TINY] ) + DEFINE_METHOD( GetFlip, m_fEffects[PlayerOptions::EFFECT_FLIP] ) + DEFINE_METHOD( GetInvert, m_fEffects[PlayerOptions::EFFECT_INVERT] ) + DEFINE_METHOD( GetTornado, m_fEffects[PlayerOptions::EFFECT_TORNADO] ) + DEFINE_METHOD( GetTipsy, m_fEffects[PlayerOptions::EFFECT_TIPSY] ) + DEFINE_METHOD( GetBumpy, m_fEffects[PlayerOptions::EFFECT_BUMPY] ) + DEFINE_METHOD( GetBeat, m_fEffects[PlayerOptions::EFFECT_BEAT] ) + DEFINE_METHOD( GetXMode, m_fEffects[PlayerOptions::EFFECT_XMODE] ) + DEFINE_METHOD( GetTwirl, m_fEffects[PlayerOptions::EFFECT_TWIRL] ) + DEFINE_METHOD( GetRoll, m_fEffects[PlayerOptions::EFFECT_ROLL] ) + + // Appearance + DEFINE_METHOD( GetHidden, m_fAppearances[PlayerOptions::APPEARANCE_HIDDEN] ) + DEFINE_METHOD( GetHiddenOffset, m_fAppearances[PlayerOptions::APPEARANCE_HIDDEN_OFFSET] ) + DEFINE_METHOD( GetSudden, m_fAppearances[PlayerOptions::APPEARANCE_SUDDEN] ) + DEFINE_METHOD( GetSuddenOffset, m_fAppearances[PlayerOptions::APPEARANCE_SUDDEN_OFFSET] ) + DEFINE_METHOD( GetStealth, m_fAppearances[PlayerOptions::APPEARANCE_STEALTH] ) + DEFINE_METHOD( GetBlink, m_fAppearances[PlayerOptions::APPEARANCE_BLINK] ) + DEFINE_METHOD( GetRandomVanish, m_fAppearances[PlayerOptions::APPEARANCE_RANDOMVANISH] ) + + // Scroll + DEFINE_METHOD( GetReverse, m_fScrolls[PlayerOptions::SCROLL_REVERSE] ) + static int GetReversePercentForColumn( T *p, lua_State *L ) + { + // todo: make sure IArg is within boundaries -aj + lua_pushnumber( L, p->GetReversePercentForColumn(IArg(1)) ); + return 1; + } + DEFINE_METHOD( GetSplit, m_fScrolls[PlayerOptions::SCROLL_SPLIT] ) + DEFINE_METHOD( GetAlternate, m_fScrolls[PlayerOptions::SCROLL_ALTERNATE] ) + DEFINE_METHOD( GetCross, m_fScrolls[PlayerOptions::SCROLL_CROSS] ) + DEFINE_METHOD( GetCentered, m_fScrolls[PlayerOptions::SCROLL_CENTERED] ) + + // Turns + DEFINE_METHOD( GetMirror, m_bTurns[PlayerOptions::TURN_MIRROR] ) + DEFINE_METHOD( GetLeft, m_bTurns[PlayerOptions::TURN_LEFT] ) + DEFINE_METHOD( GetRight, m_bTurns[PlayerOptions::TURN_RIGHT] ) + DEFINE_METHOD( GetShuffle, m_bTurns[PlayerOptions::TURN_SHUFFLE] ) + DEFINE_METHOD( GetSoftShuffle, m_bTurns[PlayerOptions::TURN_SOFT_SHUFFLE] ) + DEFINE_METHOD( GetSuperShuffle, m_bTurns[PlayerOptions::TURN_SUPER_SHUFFLE] ) + + // Transform + DEFINE_METHOD( GetNoHolds, m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] ) + DEFINE_METHOD( GetNoRolls, m_bTransforms[PlayerOptions::TRANSFORM_NOROLLS] ) + DEFINE_METHOD( GetNoMines, m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] ) + DEFINE_METHOD( GetLittle, m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) + DEFINE_METHOD( GetWide, m_bTransforms[PlayerOptions::TRANSFORM_WIDE] ) + DEFINE_METHOD( GetBig, m_bTransforms[PlayerOptions::TRANSFORM_BIG] ) + DEFINE_METHOD( GetQuick, m_bTransforms[PlayerOptions::TRANSFORM_QUICK] ) + DEFINE_METHOD( GetBMRize, m_bTransforms[PlayerOptions::TRANSFORM_BMRIZE] ) + DEFINE_METHOD( GetSkippy, m_bTransforms[PlayerOptions::TRANSFORM_SKIPPY] ) + DEFINE_METHOD( GetMines, m_bTransforms[PlayerOptions::TRANSFORM_MINES] ) + DEFINE_METHOD( GetAttackMines, m_bTransforms[PlayerOptions::TRANSFORM_ATTACKMINES] ) + DEFINE_METHOD( GetEcho, m_bTransforms[PlayerOptions::TRANSFORM_ECHO] ) + DEFINE_METHOD( GetStomp, m_bTransforms[PlayerOptions::TRANSFORM_STOMP] ) + DEFINE_METHOD( GetPlanted, m_bTransforms[PlayerOptions::TRANSFORM_PLANTED] ) + DEFINE_METHOD( GetFloored, m_bTransforms[PlayerOptions::TRANSFORM_FLOORED] ) + DEFINE_METHOD( GetTwister, m_bTransforms[PlayerOptions::TRANSFORM_TWISTER] ) + DEFINE_METHOD( GetHoldRolls, m_bTransforms[PlayerOptions::TRANSFORM_HOLDROLLS] ) + DEFINE_METHOD( GetNoJumps, m_bTransforms[PlayerOptions::TRANSFORM_NOJUMPS] ) + DEFINE_METHOD( GetNoHands, m_bTransforms[PlayerOptions::TRANSFORM_NOHANDS] ) + DEFINE_METHOD( GetNoLifts, m_bTransforms[PlayerOptions::TRANSFORM_NOLIFTS] ) + DEFINE_METHOD( GetNoFakes, m_bTransforms[PlayerOptions::TRANSFORM_NOFAKES] ) + DEFINE_METHOD( GetNoQuads, m_bTransforms[PlayerOptions::TRANSFORM_NOQUADS] ) + DEFINE_METHOD( GetNoStretch, m_bTransforms[PlayerOptions::TRANSFORM_NOSTRETCH] ) + + // Others + DEFINE_METHOD( GetDark, m_fDark ) + DEFINE_METHOD( GetBlind, m_fBlind ) + DEFINE_METHOD( GetCover, m_fCover ) + DEFINE_METHOD( GetRandomAttacks, m_fRandAttack ) + DEFINE_METHOD( GetSongAttacks, m_fSongAttack ) + DEFINE_METHOD( GetSkew, m_fSkew ) + DEFINE_METHOD( GetPassmark, m_fPassmark ) + DEFINE_METHOD( GetRandomSpeed, m_fRandomSpeed ) + LunaPlayerOptions() { + ADD_METHOD( GetDark ); + // SetDark + ADD_METHOD( GetBlind ); + // SetBlind + ADD_METHOD( GetCover ); + // SetCover + // GetMuteOnError, SetMuteOnError ADD_METHOD( GetNoteSkin ); ADD_METHOD( SetNoteSkin ); + // GetPerspectiveTilt, SetPerspectiveTilt + ADD_METHOD( GetPassmark ); + // SetPassmark + ADD_METHOD( GetRandomAttacks ); + // SetRandomAttacks + ADD_METHOD( GetRandomSpeed ); + // SetRandomSpeed + ADD_METHOD( GetSkew ); + // SetSkew + ADD_METHOD( GetSongAttacks ); + // SetSongAttacks + ADD_METHOD( GetCMod ); + ADD_METHOD( GetXMod ); + + // Accel + ADD_METHOD( GetBoost ); + ADD_METHOD( GetBrake ); + ADD_METHOD( GetWave ); + ADD_METHOD( GetExpand ); + ADD_METHOD( GetBoomerang ); + + // Effect + ADD_METHOD( GetDrunk ); + ADD_METHOD( GetDizzy ); + ADD_METHOD( GetConfusion ); + ADD_METHOD( GetMini ); + ADD_METHOD( GetTiny ); + ADD_METHOD( GetFlip ); + ADD_METHOD( GetInvert ); + ADD_METHOD( GetTornado ); + ADD_METHOD( GetTipsy ); + ADD_METHOD( GetBumpy ); + ADD_METHOD( GetBeat ); + ADD_METHOD( GetXMode ); + ADD_METHOD( GetTwirl ); + ADD_METHOD( GetRoll ); + + // Appearance + ADD_METHOD( GetHidden ); + ADD_METHOD( GetHiddenOffset ); + ADD_METHOD( GetSudden ); + ADD_METHOD( GetSuddenOffset ); + ADD_METHOD( GetStealth ); + ADD_METHOD( GetBlink ); + ADD_METHOD( GetRandomVanish ); + + // Scroll + ADD_METHOD( GetReverse ); + ADD_METHOD( GetReversePercentForColumn ); + ADD_METHOD( GetSplit ); + ADD_METHOD( GetAlternate ); + ADD_METHOD( GetCross ); + ADD_METHOD( GetCentered ); + + // Turns + ADD_METHOD( GetMirror ); + ADD_METHOD( GetLeft ); + ADD_METHOD( GetRight ); + ADD_METHOD( GetShuffle ); + ADD_METHOD( GetSoftShuffle ); + ADD_METHOD( GetSuperShuffle ); + + // Transform + ADD_METHOD( GetNoHolds ); + ADD_METHOD( GetNoRolls ); + ADD_METHOD( GetNoMines ); + ADD_METHOD( GetLittle ); + ADD_METHOD( GetWide ); + ADD_METHOD( GetBig ); + ADD_METHOD( GetQuick ); + ADD_METHOD( GetBMRize ); + ADD_METHOD( GetSkippy ); + ADD_METHOD( GetMines ); + ADD_METHOD( GetAttackMines ); + ADD_METHOD( GetEcho ); + ADD_METHOD( GetStomp ); + ADD_METHOD( GetPlanted ); + ADD_METHOD( GetFloored ); + ADD_METHOD( GetTwister ); + ADD_METHOD( GetHoldRolls ); + ADD_METHOD( GetNoJumps ); + ADD_METHOD( GetNoHands ); + ADD_METHOD( GetNoLifts ); + ADD_METHOD( GetNoFakes ); + ADD_METHOD( GetNoQuads ); + ADD_METHOD( GetNoStretch ); } }; diff --git a/src/PlayerOptions.h b/src/PlayerOptions.h index a95523a7a5..8a66d1d758 100644 --- a/src/PlayerOptions.h +++ b/src/PlayerOptions.h @@ -162,9 +162,9 @@ public: /* All floats have a corresponding speed setting, which determines how fast * PlayerOptions::Approach approaches. */ bool m_bSetScrollSpeed; // true if the scroll speed was set by FromString - float m_fTimeSpacing, m_SpeedfTimeSpacing; // instead of Beat spacing - float m_fScrollSpeed, m_SpeedfScrollSpeed; // used if !m_bTimeSpacing - float m_fScrollBPM, m_SpeedfScrollBPM; // used if m_bTimeSpacing + float m_fTimeSpacing, m_SpeedfTimeSpacing; // instead of Beat spacing (CMods, mMods) + float m_fScrollSpeed, m_SpeedfScrollSpeed; // used if !m_bTimeSpacing (xMods) + float m_fScrollBPM, m_SpeedfScrollBPM; // used if m_bTimeSpacing (CMod) float m_fAccels[NUM_ACCELS], m_SpeedfAccels[NUM_ACCELS]; float m_fEffects[NUM_EFFECTS], m_SpeedfEffects[NUM_EFFECTS]; float m_fAppearances[NUM_APPEARANCES],m_SpeedfAppearances[NUM_APPEARANCES]; @@ -189,7 +189,7 @@ public: bool m_bTransforms[NUM_TRANSFORMS]; bool m_bMuteOnError; /** @brief How can the Player fail a song? */ - enum FailType { + enum FailType { FAIL_IMMEDIATE=0, /**< fail immediately when life touches 0 */ FAIL_IMMEDIATE_CONTINUE, /**< Same as above, but allow playing the rest of the song */ FAIL_AT_END, /**< fail if life is at 0 when the song ends */ diff --git a/src/RageSoundReader_WAV.cpp b/src/RageSoundReader_WAV.cpp index 19263ce22e..0af1f10e30 100644 --- a/src/RageSoundReader_WAV.cpp +++ b/src/RageSoundReader_WAV.cpp @@ -374,7 +374,7 @@ public: int iFramesToCopy = (m_iBufferAvail-m_iBufferUsed) / iBytesPerFrame; iFramesToCopy = min( iFramesToCopy, (int) (iFrames-iGotFrames) ); int iSamplesToCopy = iFramesToCopy * iSamplesPerFrame; - int iBytesToCopy = iSamplesToCopy * sizeof(int16_t); + int iBytesToCopy = iSamplesToCopy * sizeof(float); memcpy( buf, m_pBuffer+m_iBufferUsed, iBytesToCopy ); m_iBufferUsed += iBytesToCopy; iGotFrames += iFramesToCopy; diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index 641bae8beb..fc34084c53 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -97,12 +97,15 @@ static Preference g_bEasterEggs( "EasterEggs", true ); PlayerInfo::PlayerInfo(): m_pn(PLAYER_INVALID), m_mp(MultiPlayer_Invalid), m_bIsDummy(false), m_iDummyIndex(0), m_iAddToDifficulty(0), - m_bPlayerEnabled(false), m_pLifeMeter(NULL), + m_bPlayerEnabled(false), m_PlayerStateDummy(), + m_PlayerStageStatsDummy(), m_SoundEffectControl(), + m_vpStepsQueue(), m_asModifiersQueue(), m_pLifeMeter(NULL), m_ptextCourseSongNumber(NULL), m_ptextStepsDescription(NULL), m_pPrimaryScoreDisplay(NULL), m_pSecondaryScoreDisplay(NULL), m_pPrimaryScoreKeeper(NULL), m_pSecondaryScoreKeeper(NULL), - m_pActiveAttackList(NULL), m_pPlayer(NULL), m_pInventory(NULL), - m_pStepsDisplay(NULL) {} + m_ptextPlayerOptions(NULL), m_pActiveAttackList(NULL), + m_NoteData(), m_pPlayer(NULL), m_pInventory(NULL), + m_pStepsDisplay(NULL), m_sprOniGameOver() {} void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, int iAddToDifficulty ) { diff --git a/src/ScreenPlayerOptions.cpp b/src/ScreenPlayerOptions.cpp index f6d9e0ca1b..ffa39f85a3 100644 --- a/src/ScreenPlayerOptions.cpp +++ b/src/ScreenPlayerOptions.cpp @@ -77,7 +77,7 @@ void ScreenPlayerOptions::Input( const InputEventPlus &input ) { // apply the game default mods, but not the Profile saved mods GAMESTATE->m_pPlayerState[pn]->ResetToDefaultPlayerOptions( ModsLevel_Preferred ); - + MESSAGEMAN->Broadcast( ssprintf("CancelAllP%i", pn+1) ); for( unsigned r=0; r