From 91349b3f4f3c6f5e9e2522908dcfd273b3ccb963 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 5 May 2011 23:27:34 -0400 Subject: [PATCH 01/94] Let's redo the [Xcode4] branch! Hopefully we've learned our lesson from last time. --- .hgignore | 2 +- .../project.pbxproj | 8368 +++++++++++++++++ 2 files changed, 8369 insertions(+), 1 deletion(-) create mode 100644 Xcode/stepmania_xcode4.xcodeproj/project.pbxproj diff --git a/.hgignore b/.hgignore index 7bb444fb3c..137e87b0b2 100644 --- a/.hgignore +++ b/.hgignore @@ -47,7 +47,7 @@ Docs/doxygen PBProject/build Xcode/build *.xcodeproj/xcuserdata -*.xcodeproj/project.xcworkspace/xcuserdata +*.xcodeproj/project.xcworkspace src/build-* src/Release-* src/libtomcrypt/build-* diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..7f4bc6c9ad --- /dev/null +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -0,0 +1,8368 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 44; + objects = { + +/* Begin PBXAggregateTarget section */ + AA7A2BB30AE09D0F0054C5BA /* all lua */ = { + isa = PBXAggregateTarget; + buildConfigurationList = AA7A2BBD0AE09D4E0054C5BA /* Build configuration list for PBXAggregateTarget "all lua" */; + buildPhases = ( + ); + dependencies = ( + AA7A2BB50AE09D160054C5BA /* PBXTargetDependency */, + AA7A2BB70AE09D160054C5BA /* PBXTargetDependency */, + ); + name = "all lua"; + productName = "all lua"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; }; + 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; }; + 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; }; + 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B766989132FF71500586512 /* NotesLoaderSMA.h */; }; + 2B76698C132FF71500586512 /* NotesLoaderSMA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */; }; + 2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */; }; + 2BA7925F1304F20D002BD8E1 /* NotesLoaderSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */; }; + 2BA792601304F20D002BD8E1 /* NotesWriterSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */; }; + 2BA792611304F20D002BD8E1 /* NotesWriterSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA7925D1304F20D002BD8E1 /* NotesWriterSSC.h */; }; + 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD06FDD137240CF0018CB9F /* json_batchallocator.h */; }; + 2BD06FEF137242680018CB9F /* json_internalarray.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FDE137240CF0018CB9F /* json_internalarray.inl */; }; + 2BD06FF0137242680018CB9F /* json_internalmap.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FDF137240CF0018CB9F /* json_internalmap.inl */; }; + 2BD06FF1137242680018CB9F /* json_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BD06FE0137240CF0018CB9F /* json_reader.cpp */; }; + 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BD06FE1137240CF0018CB9F /* json_value.cpp */; }; + 2BD06FF3137242680018CB9F /* json_valueiterator.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FE2137240CF0018CB9F /* json_valueiterator.inl */; }; + 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BD06FE3137240CF0018CB9F /* json_writer.cpp */; }; + 2BDB88E9137201F700E6FD3A /* lapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B2137201F700E6FD3A /* lapi.c */; }; + 2BDB88EA137201F700E6FD3A /* lapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88B3137201F700E6FD3A /* lapi.h */; }; + 2BDB88EB137201F700E6FD3A /* lauxlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B4137201F700E6FD3A /* lauxlib.c */; }; + 2BDB88EC137201F700E6FD3A /* lauxlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88B5137201F700E6FD3A /* lauxlib.h */; }; + 2BDB88ED137201F700E6FD3A /* lbaselib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B6137201F700E6FD3A /* lbaselib.c */; }; + 2BDB88EE137201F700E6FD3A /* lcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B7137201F700E6FD3A /* lcode.c */; }; + 2BDB88EF137201F700E6FD3A /* lcode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88B8137201F700E6FD3A /* lcode.h */; }; + 2BDB88F0137201F700E6FD3A /* ldblib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88B9137201F700E6FD3A /* ldblib.c */; }; + 2BDB88F1137201F700E6FD3A /* ldebug.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BA137201F700E6FD3A /* ldebug.c */; }; + 2BDB88F2137201F700E6FD3A /* ldebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88BB137201F700E6FD3A /* ldebug.h */; }; + 2BDB88F3137201F700E6FD3A /* ldo.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BC137201F700E6FD3A /* ldo.c */; }; + 2BDB88F4137201F700E6FD3A /* ldo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88BD137201F700E6FD3A /* ldo.h */; }; + 2BDB88F5137201F700E6FD3A /* ldump.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BE137201F700E6FD3A /* ldump.c */; }; + 2BDB88F6137201F700E6FD3A /* lfunc.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88BF137201F700E6FD3A /* lfunc.c */; }; + 2BDB88F7137201F700E6FD3A /* lfunc.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C0137201F700E6FD3A /* lfunc.h */; }; + 2BDB88F8137201F700E6FD3A /* lgc.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C1137201F700E6FD3A /* lgc.c */; }; + 2BDB88F9137201F700E6FD3A /* lgc.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C2137201F700E6FD3A /* lgc.h */; }; + 2BDB88FA137201F700E6FD3A /* linit.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C3137201F700E6FD3A /* linit.c */; }; + 2BDB88FB137201F700E6FD3A /* liolib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C4137201F700E6FD3A /* liolib.c */; }; + 2BDB88FC137201F700E6FD3A /* llex.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C5137201F700E6FD3A /* llex.c */; }; + 2BDB88FD137201F700E6FD3A /* llex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C6137201F700E6FD3A /* llex.h */; }; + 2BDB88FE137201F700E6FD3A /* llimits.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88C7137201F700E6FD3A /* llimits.h */; }; + 2BDB88FF137201F700E6FD3A /* lmathlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C8137201F700E6FD3A /* lmathlib.c */; }; + 2BDB8900137201F700E6FD3A /* lmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88C9137201F700E6FD3A /* lmem.c */; }; + 2BDB8901137201F700E6FD3A /* lmem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88CA137201F700E6FD3A /* lmem.h */; }; + 2BDB8902137201F700E6FD3A /* loadlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88CB137201F700E6FD3A /* loadlib.c */; }; + 2BDB8903137201F700E6FD3A /* lobject.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88CC137201F700E6FD3A /* lobject.c */; }; + 2BDB8904137201F700E6FD3A /* lobject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88CD137201F700E6FD3A /* lobject.h */; }; + 2BDB8905137201F700E6FD3A /* lopcodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88CE137201F700E6FD3A /* lopcodes.c */; }; + 2BDB8906137201F700E6FD3A /* lopcodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88CF137201F700E6FD3A /* lopcodes.h */; }; + 2BDB8907137201F700E6FD3A /* loslib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D0137201F700E6FD3A /* loslib.c */; }; + 2BDB8908137201F700E6FD3A /* lparser.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D1137201F700E6FD3A /* lparser.c */; }; + 2BDB8909137201F700E6FD3A /* lparser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D2137201F700E6FD3A /* lparser.h */; }; + 2BDB890A137201F700E6FD3A /* lstate.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D3137201F700E6FD3A /* lstate.c */; }; + 2BDB890B137201F700E6FD3A /* lstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D4137201F700E6FD3A /* lstate.h */; }; + 2BDB890C137201F700E6FD3A /* lstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D5137201F700E6FD3A /* lstring.c */; }; + 2BDB890D137201F700E6FD3A /* lstring.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D6137201F700E6FD3A /* lstring.h */; }; + 2BDB890E137201F700E6FD3A /* lstrlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D7137201F700E6FD3A /* lstrlib.c */; }; + 2BDB890F137201F700E6FD3A /* ltable.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88D8137201F700E6FD3A /* ltable.c */; }; + 2BDB8910137201F700E6FD3A /* ltable.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88D9137201F700E6FD3A /* ltable.h */; }; + 2BDB8911137201F700E6FD3A /* ltablib.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DA137201F700E6FD3A /* ltablib.c */; }; + 2BDB8912137201F700E6FD3A /* ltm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DB137201F700E6FD3A /* ltm.c */; }; + 2BDB8913137201F700E6FD3A /* ltm.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88DC137201F700E6FD3A /* ltm.h */; }; + 2BDB8914137201F700E6FD3A /* lua.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DD137201F700E6FD3A /* lua.c */; }; + 2BDB8915137201F700E6FD3A /* lua.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88DE137201F700E6FD3A /* lua.h */; }; + 2BDB8916137201F700E6FD3A /* luac.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88DF137201F700E6FD3A /* luac.c */; }; + 2BDB8917137201F700E6FD3A /* luaconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E0137201F700E6FD3A /* luaconf.h */; }; + 2BDB8918137201F700E6FD3A /* lualib.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E1137201F700E6FD3A /* lualib.h */; }; + 2BDB8919137201F700E6FD3A /* lundump.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E2137201F700E6FD3A /* lundump.c */; }; + 2BDB891A137201F700E6FD3A /* lundump.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E3137201F700E6FD3A /* lundump.h */; }; + 2BDB891B137201F700E6FD3A /* lvm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E4137201F700E6FD3A /* lvm.c */; }; + 2BDB891C137201F700E6FD3A /* lvm.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E5137201F700E6FD3A /* lvm.h */; }; + 2BDB891D137201F700E6FD3A /* lzio.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E6137201F700E6FD3A /* lzio.c */; }; + 2BDB891E137201F700E6FD3A /* lzio.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDB88E7137201F700E6FD3A /* lzio.h */; }; + 2BDB891F137201F700E6FD3A /* print.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BDB88E8137201F700E6FD3A /* print.c */; }; + 3659B56F0F902143002B6B68 /* CommandLineActions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3659B56D0F902143002B6B68 /* CommandLineActions.cpp */; }; + 3659B5700F902143002B6B68 /* CommandLineActions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3659B56E0F902143002B6B68 /* CommandLineActions.h */; }; + 367D575B0EDE56F200B46814 /* ScreenHighScores.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 367D57590EDE56F200B46814 /* ScreenHighScores.cpp */; }; + 3688B8530BD42DAA004186AD /* NotesLoaderMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */; }; + 36C6888311297FFE00453295 /* RageFileDriverReadAhead.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36C6887F11297FFE00453295 /* RageFileDriverReadAhead.cpp */; }; + 36C6888411297FFE00453295 /* RageFileDriverReadAhead.h in Headers */ = {isa = PBXBuildFile; fileRef = 36C6888011297FFE00453295 /* RageFileDriverReadAhead.h */; }; + 36C6888511297FFE00453295 /* RageFileManager_ReadAhead.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36C6888111297FFE00453295 /* RageFileManager_ReadAhead.cpp */; }; + 36C6888611297FFE00453295 /* RageFileManager_ReadAhead.h in Headers */ = {isa = PBXBuildFile; fileRef = 36C6888211297FFE00453295 /* RageFileManager_ReadAhead.h */; }; + 36CA531C0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36CA531A0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp */; }; + 36CA531D0F91564A0063D59D /* ScreenOptionsCourseOverview.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CA531B0F91564A0063D59D /* ScreenOptionsCourseOverview.h */; }; + 36CA53200F9156860063D59D /* ScreenOptionsEditCourse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36CA531E0F9156860063D59D /* ScreenOptionsEditCourse.cpp */; }; + 36CA53210F9156860063D59D /* ScreenOptionsEditCourse.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CA531F0F9156860063D59D /* ScreenOptionsEditCourse.h */; }; + AA059ABC0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */; }; + AA059ABD0B8CCFB5006F8139 /* ActorMultiTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA059ABB0B8CCFB5006F8139 /* ActorMultiTexture.h */; }; + AA059ABE0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */; }; + AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA059E2A0B8F0C66006F8139 /* libz_link.a */; }; + AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA059E2A0B8F0C66006F8139 /* libz_link.a */; }; + AA05A0B00BA2EFF3006F8139 /* OptionsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */; }; + AA05A0B10BA2EFF3006F8139 /* OptionsList.h in Headers */ = {isa = PBXBuildFile; fileRef = AA05A0AF0BA2EFF3006F8139 /* OptionsList.h */; }; + AA05A0B20BA2EFF3006F8139 /* OptionsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */; }; + AA07008A0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */; }; + AA07008C0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */; }; + AA07008D0B61F177003B85BB /* RageSoundReader_PostBuffering.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0700890B61F177003B85BB /* RageSoundReader_PostBuffering.h */; }; + AA0732900954381800F396C5 /* XmlFileUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07328C0954381800F396C5 /* XmlFileUtil.cpp */; }; + AA07A55F0843E72B00E33D21 /* ScreenDebugOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */; }; + AA07A5630843E72B00E33D21 /* ScreenSaveSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */; }; + AA07A5650843E72B00E33D21 /* ScreenSMOnlineLogin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A55B0843E72B00E33D21 /* ScreenSMOnlineLogin.cpp */; }; + AA07A5670843E72B00E33D21 /* ScreenSyncOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */; }; + AA0A3DE8060513A00044E6B1 /* ScreenSetTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */; }; + AA0E04D4076C4CD500716D81 /* RageFileBasic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */; }; + AA0E04D6076C4CD500716D81 /* RageFileDriverDeflate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */; }; + AA0E04D8076C4CD500716D81 /* RageFileDriverSlice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */; }; + AA1145DD075DFADF0050A3D1 /* ScreenPackages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */; }; + AA1145DF075DFADF0050A3D1 /* ScreenSystemLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */; }; + AA11A20F0DC5A1B0006BD8AC /* ModIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */; }; + AA11A2110DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */; }; + AA11A2130DC5A1B0006BD8AC /* ModIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */; }; + AA11A2140DC5A1B0006BD8AC /* ModIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AA11A20C0DC5A1B0006BD8AC /* ModIcon.h */; }; + AA11A2150DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */; }; + AA11A2160DC5A1B0006BD8AC /* ModIconRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA11A20E0DC5A1B0006BD8AC /* ModIconRow.h */; }; + AA139C4706923EBE00C1F6ED /* Style.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA139C4606923EBE00C1F6ED /* Style.cpp */; }; + AA147F1B0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */; }; + AA147F1C0A0F78D8006EADF6 /* VectorHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA147F180A0F78D8006EADF6 /* VectorHelper.h */; }; + AA147F1D0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */; }; + AA1893600BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */; }; + AA1893610BD777C500AEC0BF /* ScreenProfileLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = AA18935D0BD777C400AEC0BF /* ScreenProfileLoad.h */; }; + AA1893620BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */; }; + AA1893630BD777C500AEC0BF /* ScreenProfileSave.h in Headers */ = {isa = PBXBuildFile; fileRef = AA18935F0BD777C400AEC0BF /* ScreenProfileSave.h */; }; + AA1893640BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */; }; + AA1893660BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */; }; + AA18937D0BD77ECE00AEC0BF /* NotesLoaderMidi.h in Headers */ = {isa = PBXBuildFile; fileRef = 3688B8520BD42DAA004186AD /* NotesLoaderMidi.h */; }; + AA18937E0BD77ECF00AEC0BF /* NotesLoaderMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */; }; + AA1B083C0762532800835464 /* Command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08370762532800835464 /* Command.cpp */; }; + AA1B083E0762532800835464 /* GameCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08390762532800835464 /* GameCommand.cpp */; }; + AA1B08400762532800835464 /* Preference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B083B0762532800835464 /* Preference.cpp */; }; + AA1CD943060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */; }; + AA1DE9570C5468CE00D59F20 /* Hardware.plist in Resources */ = {isa = PBXBuildFile; fileRef = AA1DE9560C5468CE00D59F20 /* Hardware.plist */; }; + AA1DE9580C5468CE00D59F20 /* Hardware.plist in Resources */ = {isa = PBXBuildFile; fileRef = AA1DE9560C5468CE00D59F20 /* Hardware.plist */; }; + AA1F9C4809AF1BF5002C15A8 /* PumpDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */; }; + AA1F9C4909AF1BF5002C15A8 /* PumpDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1F9C4509AF1BF5002C15A8 /* PumpDevice.h */; }; + AA1F9C4A09AF1BF5002C15A8 /* PumpDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */; }; + AA21D59D0712ADE4008B825F /* ScreenDimensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */; }; + AA21E4790A9826CD00684CEA /* libjpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4730A9826CD00684CEA /* libjpeg_link.a */; }; + AA21E47B0A9826CD00684CEA /* libogg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4750A9826CD00684CEA /* libogg_link.a */; }; + AA21E47C0A9826CD00684CEA /* libpng_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4760A9826CD00684CEA /* libpng_link.a */; }; + AA21E47D0A9826CD00684CEA /* libtheora_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4770A9826CD00684CEA /* libtheora_link.a */; }; + AA21E47E0A9826CD00684CEA /* libvorbis_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4780A9826CD00684CEA /* libvorbis_link.a */; }; + AA21E47F0A9826CD00684CEA /* libjpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4730A9826CD00684CEA /* libjpeg_link.a */; }; + AA21E4810A9826CD00684CEA /* libogg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4750A9826CD00684CEA /* libogg_link.a */; }; + AA21E4820A9826CD00684CEA /* libpng_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4760A9826CD00684CEA /* libpng_link.a */; }; + AA21E4830A9826CD00684CEA /* libtheora_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4770A9826CD00684CEA /* libtheora_link.a */; }; + AA21E4840A9826CD00684CEA /* libvorbis_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA21E4780A9826CD00684CEA /* libvorbis_link.a */; }; + AA22CBA506DE909C0083BA97 /* ScreenNetSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */; }; + AA230EB006043704002672F3 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAE06043704002672F3 /* AudioToolbox.framework */; }; + AA230EB106043704002672F3 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAF06043704002672F3 /* AudioUnit.framework */; }; + AA251B7705841FCE00027ACB /* RageFileDriverZip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */; }; + AA2828B3062FC0B8006F61EC /* SignalHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */; }; + AA28B47C058F2F5E0097C109 /* MemoryCardManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */; }; + AA29CD3E0558741A00961A51 /* smicon.icns in Resources */ = {isa = PBXBuildFile; fileRef = AAB895E504A9057100D02EE9 /* smicon.icns */; }; + AA29CD420558741A00961A51 /* RageBitmapTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */; }; + AA29CD430558741A00961A51 /* RageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */; }; + AA29CD440558741A00961A51 /* RageException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7204770A7C005F316C /* RageException.cpp */; }; + AA29CD450558741A00961A51 /* RageInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7404770A7C005F316C /* RageInput.cpp */; }; + AA29CD460558741A00961A51 /* RageInputDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */; }; + AA29CD470558741A00961A51 /* RageLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7804770A7C005F316C /* RageLog.cpp */; }; + AA29CD480558741A00961A51 /* RageMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7A04770A7C005F316C /* RageMath.cpp */; }; + AA29CD490558741A00961A51 /* RageSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7C04770A7C005F316C /* RageSound.cpp */; }; + AA29CD4A0558741A00961A51 /* RageSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */; }; + AA29CD4B0558741A00961A51 /* RageSoundReader_Preload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */; }; + AA29CD4E0558741A00961A51 /* RageTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8904770A7C005F316C /* RageTexture.cpp */; }; + AA29CD4F0558741A00961A51 /* RageTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */; }; + AA29CD500558741A00961A51 /* RageThreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8D04770A7C005F316C /* RageThreads.cpp */; }; + AA29CD510558741A00961A51 /* RageTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8F04770A7C005F316C /* RageTimer.cpp */; }; + AA29CD520558741A00961A51 /* RageUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD9204770A7C005F316C /* RageUtil.cpp */; }; + AA29CD560558741A00961A51 /* Character.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCB04770C79005F316C /* Character.cpp */; }; + AA29CD570558741A00961A51 /* CodeDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCD04770C79005F316C /* CodeDetector.cpp */; }; + AA29CD580558741A00961A51 /* Course.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCF04770C79005F316C /* Course.cpp */; }; + AA29CD590558741A00961A51 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD104770C79005F316C /* Font.cpp */; }; + AA29CD5A0558741A00961A51 /* FontCharAliases.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD304770C79005F316C /* FontCharAliases.cpp */; }; + AA29CD5B0558741A00961A51 /* FontCharmaps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD504770C79005F316C /* FontCharmaps.cpp */; }; + AA29CD5C0558741A00961A51 /* FontManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD704770C79005F316C /* FontManager.cpp */; }; + AA29CD5D0558741A00961A51 /* GameConstantsAndTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */; }; + AA29CD5F0558741A00961A51 /* GameInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDD04770C79005F316C /* GameInput.cpp */; }; + AA29CD600558741A00961A51 /* Grade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDF04770C79005F316C /* Grade.cpp */; }; + AA29CD610558741A00961A51 /* Inventory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE104770C79005F316C /* Inventory.cpp */; }; + AA29CD620558741A00961A51 /* LyricsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE304770C79005F316C /* LyricsLoader.cpp */; }; + AA29CD630558741A00961A51 /* NoteData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE504770C79005F316C /* NoteData.cpp */; }; + AA29CD640558741A00961A51 /* NoteDataWithScoring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */; }; + AA29CD660558741A00961A51 /* NotesLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDED04770C79005F316C /* NotesLoader.cpp */; }; + AA29CD670558741A00961A51 /* NotesLoaderBMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */; }; + AA29CD680558741A00961A51 /* NotesLoaderDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */; }; + AA29CD690558741A00961A51 /* NotesLoaderKSF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */; }; + AA29CD6A0558741A00961A51 /* NotesLoaderSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */; }; + AA29CD6B0558741A00961A51 /* NotesWriterDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */; }; + AA29CD6C0558741A00961A51 /* NotesWriterSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */; }; + AA29CD6D0558741A00961A51 /* NoteTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFB04770C79005F316C /* NoteTypes.cpp */; }; + AA29CD6E0558741A00961A51 /* Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFD04770C79005F316C /* Player.cpp */; }; + AA29CD6F0558741A00961A51 /* PlayerAI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFF04770C79005F316C /* PlayerAI.cpp */; }; + AA29CD700558741A00961A51 /* PlayerNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0104770C79005F316C /* PlayerNumber.cpp */; }; + AA29CD710558741A00961A51 /* PlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0304770C79005F316C /* PlayerOptions.cpp */; }; + AA29CD720558741A00961A51 /* SongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0704770C79005F316C /* SongOptions.cpp */; }; + AA29CD730558741A00961A51 /* StageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0904770C79005F316C /* StageStats.cpp */; }; + AA29CD750558741A00961A51 /* TitleSubstitution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */; }; + AA29CD760558741A00961A51 /* IniFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5804770CAA005F316C /* IniFile.cpp */; }; + AA29CD770558741A00961A51 /* MsdFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5A04770CAA005F316C /* MsdFile.cpp */; }; + AA29CD780558741A00961A51 /* StepMania.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6304770CF7005F316C /* StepMania.cpp */; }; + AA29CD790558741A00961A51 /* Banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6E04770D61005F316C /* Banner.cpp */; }; + AA29CD7A0558741A00961A51 /* BPMDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */; }; + AA29CD7B0558741A00961A51 /* CourseContentsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */; }; + AA29CD7D0558741A00961A51 /* DifficultyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */; }; + AA29CD800558741A00961A51 /* EditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8404770E7C005F316C /* EditMenu.cpp */; }; + AA29CD810558741A00961A51 /* FadingBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */; }; + AA29CD820558741A00961A51 /* GradeDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */; }; + AA29CD840558741A00961A51 /* GrooveRadar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */; }; + AA29CD860558741A00961A51 /* HelpDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */; }; + AA29CD890558741A00961A51 /* MenuTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */; }; + AA29CD8A0558741A00961A51 /* MeterDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */; }; + AA29CD8E0558741A00961A51 /* MusicWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA404770E7C005F316C /* MusicWheel.cpp */; }; + AA29CD8F0558741A00961A51 /* MusicWheelItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */; }; + AA29CD920558741A00961A51 /* OptionsCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */; }; + AA29CD930558741A00961A51 /* ScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */; }; + AA29CD950558741A00961A51 /* SnapDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */; }; + AA29CD960558741A00961A51 /* TextBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB404770E7C005F316C /* TextBanner.cpp */; }; + AA29CD970558741A00961A51 /* WheelNotifyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */; }; + AA29CD980558741A00961A51 /* ArrowEffects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */; }; + AA29CD990558741A00961A51 /* Background.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFF04770F63005F316C /* Background.cpp */; }; + AA29CD9A0558741A00961A51 /* BGAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0104770F63005F316C /* BGAnimation.cpp */; }; + AA29CD9B0558741A00961A51 /* BGAnimationLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */; }; + AA29CD9D0558741A00961A51 /* DancingCharacters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0704770F63005F316C /* DancingCharacters.cpp */; }; + AA29CD9F0558741A00961A51 /* GhostArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */; }; + AA29CDA30558741A00961A51 /* HoldJudgment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1504770F63005F316C /* HoldJudgment.cpp */; }; + AA29CDA50558741A00961A51 /* LifeMeterBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */; }; + AA29CDA60558741A00961A51 /* LifeMeterBattery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */; }; + AA29CDA70558741A00961A51 /* LyricDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */; }; + AA29CDA80558741A00961A51 /* NoteDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2104770F63005F316C /* NoteDisplay.cpp */; }; + AA29CDA90558741A00961A51 /* NoteField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2304770F63005F316C /* NoteField.cpp */; }; + AA29CDAA0558741A00961A51 /* ScoreDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */; }; + AA29CDAB0558741A00961A51 /* ScoreDisplayBattle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */; }; + AA29CDAC0558741A00961A51 /* ScoreDisplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */; }; + AA29CDAD0558741A00961A51 /* ScoreDisplayOni.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */; }; + AA29CDAE0558741A00961A51 /* ScoreDisplayRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */; }; + AA29CDB10558741A00961A51 /* Transition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7004770F86005F316C /* Transition.cpp */; }; + AA29CDB20558741A00961A51 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7504770FFD005F316C /* Actor.cpp */; }; + AA29CDB30558741A00961A51 /* ActorFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7704770FFD005F316C /* ActorFrame.cpp */; }; + AA29CDB40558741A00961A51 /* ActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7904770FFD005F316C /* ActorScroller.cpp */; }; + AA29CDB50558741A00961A51 /* BitmapText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFB904770FFD005F316C /* BitmapText.cpp */; }; + AA29CDB70558741A00961A51 /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBD04770FFD005F316C /* Model.cpp */; }; + AA29CDB80558741A00961A51 /* ModelTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */; }; + AA29CDB90558741A00961A51 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFC204770FFD005F316C /* Sprite.cpp */; }; + AA29CDBA0558741A00961A51 /* Screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E000A047711F3005F316C /* Screen.cpp */; }; + AA29CDBB0558741A00961A51 /* ScreenAttract.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0010047711F3005F316C /* ScreenAttract.cpp */; }; + AA29CDBE0558741A00961A51 /* ScreenDemonstration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */; }; + AA29CDBF0558741A00961A51 /* ScreenEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001D047711F3005F316C /* ScreenEdit.cpp */; settings = {COMPILER_FLAGS = "-finline-limit=300"; }; }; + AA29CDC00558741A00961A51 /* ScreenEditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */; }; + AA29CDC10558741A00961A51 /* ScreenEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */; }; + AA29CDC50558741A00961A51 /* ScreenGameplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0029047711F3005F316C /* ScreenGameplay.cpp */; }; + AA29CDC60558741A00961A51 /* ScreenJukebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0037047711F3005F316C /* ScreenJukebox.cpp */; }; + AA29CDC90558741A00961A51 /* ScreenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E003F047711F3005F316C /* ScreenManager.cpp */; }; + AA29CDCA0558741A00961A51 /* ScreenMapControllers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */; }; + AA29CDCB0558741A00961A51 /* ScreenMiniMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */; }; + AA29CDCD0558741A00961A51 /* ScreenNameEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */; }; + AA29CDCE0558741A00961A51 /* ScreenOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004B047711F3005F316C /* ScreenOptions.cpp */; }; + AA29CDCF0558741A00961A51 /* ScreenPlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */; }; + AA29CDD00558741A00961A51 /* ScreenPrompt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0051047711F3005F316C /* ScreenPrompt.cpp */; }; + AA29CDD10558741A00961A51 /* ScreenRanking.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0053047711F3005F316C /* ScreenRanking.cpp */; }; + AA29CDD30558741A00961A51 /* ScreenSandbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0057047711F3005F316C /* ScreenSandbox.cpp */; }; + AA29CDD40558741A00961A51 /* ScreenSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0059047711F3005F316C /* ScreenSelect.cpp */; }; + AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; + AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; + AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; + AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; + AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; + AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; + AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; + AA29CDE60558741A00961A51 /* AnnouncerManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */; }; + AA29CDE70558741A00961A51 /* GameManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01010477128A005F316C /* GameManager.cpp */; }; + AA29CDE80558741A00961A51 /* GameState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01030477128A005F316C /* GameState.cpp */; }; + AA29CDE90558741A00961A51 /* InputFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01050477128A005F316C /* InputFilter.cpp */; }; + AA29CDEA0558741A00961A51 /* InputMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01070477128A005F316C /* InputMapper.cpp */; }; + AA29CDEB0558741A00961A51 /* InputQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01090477128A005F316C /* InputQueue.cpp */; }; + AA29CDEC0558741A00961A51 /* NoteSkinManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010B0477128A005F316C /* NoteSkinManager.cpp */; }; + AA29CDED0558741A00961A51 /* PrefsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010D0477128A005F316C /* PrefsManager.cpp */; }; + AA29CDEE0558741A00961A51 /* SongManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010F0477128A005F316C /* SongManager.cpp */; }; + AA29CDEF0558741A00961A51 /* ThemeManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01120477128A005F316C /* ThemeManager.cpp */; }; + AA29CDF10558741A00961A51 /* RageSoundDriver_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */; }; + AA29CDF50558741A00961A51 /* MovieTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DB04771F11005F316C /* MovieTexture.cpp */; }; + AA29CDF60558741A00961A51 /* SongCacheIndex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DE04772005005F316C /* SongCacheIndex.cpp */; }; + AA29CDF70558741A00961A51 /* Song.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E20477205A005F316C /* Song.cpp */; }; + AA29CDF80558741A00961A51 /* RandomSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E6047720A3005F316C /* RandomSample.cpp */; }; + AA29CDFA0558741A00961A51 /* RageUtil_CharConversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */; }; + AA29CDFB0558741A00961A51 /* BannerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE35EB04967E25005F316C /* BannerCache.cpp */; }; + AA29CDFE0558741A00961A51 /* ScreenSelectMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */; }; + AA29CE000558741A00961A51 /* CombinedLifeMeterTug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */; }; + AA29CE010558741A00961A51 /* ScoreKeeperRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */; }; + AA29CE030558741A00961A51 /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; + AA29CE040558741A00961A51 /* maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7C04AFD87300D02EE9 /* maketables.c */; }; + AA29CE050558741A00961A51 /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; + AA29CE060558741A00961A51 /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; + AA29CE070558741A00961A51 /* RageUtil_FileDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */; }; + AA29CE090558741A00961A51 /* ActorUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */; }; + AA29CE0B0558741A00961A51 /* ArchHooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */; }; + AA29CE0C0558741A00961A51 /* InputHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */; }; + AA29CE0E0558741A00961A51 /* MovieTexture_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */; }; + AA29CE100558741A00961A51 /* RageFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA272C3004CD757100D02EE9 /* RageFile.cpp */; }; + AA29CE140558741A00961A51 /* CrashHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */; }; + AA29CE150558741A00961A51 /* CrashHandlerChild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */; }; + AA29CE170558741A00961A51 /* ver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA52E9BD04DBBCF400D02EE9 /* ver.cpp */; }; + AA29CE180558741A00961A51 /* Steps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF430FD04DC98BC00D02EE9 /* Steps.cpp */; }; + AA29CE190558741A00961A51 /* NoteDataUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */; }; + AA29CE1E0558741A00961A51 /* BeginnerHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */; }; + AA29CE200558741A00961A51 /* MovieTexture_FFMpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */; }; + AA29CE220558741A00961A51 /* ProfileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C6556050D234B0073A143 /* ProfileManager.cpp */; }; + AA29CE230558741A00961A51 /* RageSoundReader_WAV.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */; }; + AA29CE240558741A00961A51 /* RageSoundReader_FileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */; }; + AA29CE250558741A00961A51 /* RageSoundReader_MP3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC7FF10513A67700D02EE9 /* RageSoundReader_MP3.cpp */; }; + AA29CE260558741A00961A51 /* RageSoundReader_Vorbisfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */; }; + AA29CE280558741A00961A51 /* RageSoundReader_Resample_Good.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */; }; + AA29CE290558741A00961A51 /* ScreenExit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */; }; + AA29CE2B0558741A00961A51 /* ScreenOptionsMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */; }; + AA29CE2C0558741A00961A51 /* ScreenOptionsMasterPrefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */; }; + AA29CE2D0558741A00961A51 /* ScreenReloadSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */; }; + AA29CE2F0558741A00961A51 /* ScreenInstructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0033047711F3005F316C /* ScreenInstructions.cpp */; }; + AA29CE300558741A00961A51 /* ScreenHowToPlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */; }; + AA29CE310558741A00961A51 /* PercentageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */; }; + AA29CE320558741A00961A51 /* ScoreDisplayPercentage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */; }; + AA29CE340558741A00961A51 /* ScreenTestInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */; }; + AA29CE350558741A00961A51 /* ScreenBookkeeping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */; }; + AA29CE360558741A00961A51 /* ScreenNameEntryTraditional.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */; }; + AA29CE370558741A00961A51 /* Bookkeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */; }; + AA29CE380558741A00961A51 /* GraphDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */; }; + AA29CE390558741A00961A51 /* ComboGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */; }; + AA29CE3A0558741A00961A51 /* Attack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF5541054E736D00D02EE9 /* Attack.cpp */; }; + AA29CE3C0558741A00961A51 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AA29CE3D0558741A00961A51 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7CE047AC7BF005F316C /* Carbon.framework */; }; + AA29CE3E0558741A00961A51 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D0047AC7EA005F316C /* IOKit.framework */; }; + AA29CE3F0558741A00961A51 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D2047ACBC9005F316C /* QuickTime.framework */; }; + AA29CE400558741A00961A51 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA8DD84904A2E51400D02EE9 /* OpenGL.framework */; }; + AA29CE420558741A00961A51 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */; }; + AA2C9CA10BAD6F54002441E9 /* CodeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */; }; + AA2C9CA20BAD6F55002441E9 /* CodeSet.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2C9CA00BAD6F54002441E9 /* CodeSet.h */; }; + AA2C9CA30BAD6F55002441E9 /* CodeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */; }; + AA2CA89F0BB745BD002441E9 /* ScreenContinue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */; }; + AA2CA8A00BB745BD002441E9 /* ScreenContinue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2CA89E0BB745BD002441E9 /* ScreenContinue.h */; }; + AA2CA8A10BB745BD002441E9 /* ScreenContinue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */; }; + AA2EA0010A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */; }; + AA2EA0030A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */; }; + AA2EA0040A770208003A0C11 /* ScreenSelectLanguage.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2EA0000A770208003A0C11 /* ScreenSelectLanguage.h */; }; + AA2FB639091212B0000FD574 /* LifeMeter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2FB638091212AF000FD574 /* LifeMeter.cpp */; }; + AA31D5210B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */; }; + AA31D5230B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */; }; + AA31D5250B1EC6550016AB6B /* RageSoundReader_Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA31D51B0B1EC6540016AB6B /* RageSoundReader_Filter.h */; }; + AA31D5260B1EC6550016AB6B /* RageSoundReader_PitchChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */; }; + AA31D5270B1EC6550016AB6B /* RageSoundReader_PitchChange.h in Headers */ = {isa = PBXBuildFile; fileRef = AA31D51D0B1EC6540016AB6B /* RageSoundReader_PitchChange.h */; }; + AA31D5280B1EC6550016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */; }; + AA31D5290B1EC6550016AB6B /* RageSoundReader_SpeedChange.h in Headers */ = {isa = PBXBuildFile; fileRef = AA31D51F0B1EC6540016AB6B /* RageSoundReader_SpeedChange.h */; }; + AA3396B80BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */; }; + AA3396B90BDE195E00E1475F /* RageSoundReader_Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3396B70BDE195E00E1475F /* RageSoundReader_Merge.h */; }; + AA3396BA0BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */; }; + AA339A7E0BF0FA6400E1475F /* LoadingWindow_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AA339A7D0BF0FA6300E1475F /* LoadingWindow_Null.h */; }; + AA3A706206AA1645006F755E /* StyleUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3A706006AA1645006F755E /* StyleUtil.cpp */; }; + AA3D5E6008214C77002AA665 /* ScoreDisplayLifeTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */; }; + AA3D5E91082152B6002AA665 /* StreamDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */; }; + AA3D5E95082152E5002AA665 /* LifeMeterTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */; }; + AA3D790106A275E90064B980 /* RadarValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D78FF06A275E90064B980 /* RadarValues.cpp */; }; + AA3D793306A279530064B980 /* DateTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D793106A279530064B980 /* DateTime.cpp */; }; + AA3E3DF109D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */; }; + AA3E3DF209D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */; }; + AA40D1B909A08D650068C0D5 /* StepMania.pch in Headers */ = {isa = PBXBuildFile; fileRef = AAD64AA10603FE7300EF8CDE /* StepMania.pch */; }; + AA40D1BA09A08D650068C0D5 /* RageBitmapTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD6E04770A7C005F316C /* RageBitmapTexture.h */; }; + AA40D1BB09A08D650068C0D5 /* RageDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7004770A7C005F316C /* RageDisplay.h */; }; + AA40D1BC09A08D650068C0D5 /* RageException.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7304770A7C005F316C /* RageException.h */; }; + AA40D1BD09A08D650068C0D5 /* RageInput.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7504770A7C005F316C /* RageInput.h */; }; + AA40D1BE09A08D650068C0D5 /* RageLog.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7904770A7C005F316C /* RageLog.h */; }; + AA40D1BF09A08D650068C0D5 /* RageMath.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7B04770A7C005F316C /* RageMath.h */; }; + AA40D1C009A08D650068C0D5 /* RageSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7D04770A7C005F316C /* RageSound.h */; }; + AA40D1C109A08D650068C0D5 /* RageSoundManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7F04770A7C005F316C /* RageSoundManager.h */; }; + AA40D1C209A08D650068C0D5 /* RageSoundReader_Preload.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8104770A7C005F316C /* RageSoundReader_Preload.h */; }; + AA40D1C409A08D650068C0D5 /* RageSoundReader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8604770A7C005F316C /* RageSoundReader.h */; }; + AA40D1C509A08D650068C0D5 /* RageTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8A04770A7C005F316C /* RageTexture.h */; }; + AA40D1C609A08D650068C0D5 /* RageTextureManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8C04770A7C005F316C /* RageTextureManager.h */; }; + AA40D1C709A08D650068C0D5 /* RageThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD8E04770A7C005F316C /* RageThreads.h */; }; + AA40D1C809A08D650068C0D5 /* RageTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD9004770A7C005F316C /* RageTimer.h */; }; + AA40D1C909A08D650068C0D5 /* RageTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD9104770A7C005F316C /* RageTypes.h */; }; + AA40D1CA09A08D650068C0D5 /* RageUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD9304770A7C005F316C /* RageUtil.h */; }; + AA40D1CB09A08D650068C0D5 /* Character.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDCC04770C79005F316C /* Character.h */; }; + AA40D1CC09A08D650068C0D5 /* CodeDetector.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDCE04770C79005F316C /* CodeDetector.h */; }; + AA40D1CD09A08D650068C0D5 /* Course.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD004770C79005F316C /* Course.h */; }; + AA40D1CE09A08D650068C0D5 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD204770C79005F316C /* Font.h */; }; + AA40D1CF09A08D650068C0D5 /* FontCharAliases.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD404770C79005F316C /* FontCharAliases.h */; }; + AA40D1D009A08D650068C0D5 /* FontCharmaps.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD604770C79005F316C /* FontCharmaps.h */; }; + AA40D1D109A08D650068C0D5 /* FontManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDD804770C79005F316C /* FontManager.h */; }; + AA40D1D209A08D650068C0D5 /* GameConstantsAndTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDDA04770C79005F316C /* GameConstantsAndTypes.h */; }; + AA40D1D309A08D650068C0D5 /* GameInput.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDDE04770C79005F316C /* GameInput.h */; }; + AA40D1D409A08D650068C0D5 /* Grade.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE004770C79005F316C /* Grade.h */; }; + AA40D1D509A08D650068C0D5 /* Inventory.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE204770C79005F316C /* Inventory.h */; }; + AA40D1D609A08D650068C0D5 /* LyricsLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE404770C79005F316C /* LyricsLoader.h */; }; + AA40D1D709A08D650068C0D5 /* NoteData.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE604770C79005F316C /* NoteData.h */; }; + AA40D1D809A08D650068C0D5 /* NoteDataWithScoring.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDE804770C79005F316C /* NoteDataWithScoring.h */; }; + AA40D1DA09A08D650068C0D5 /* NotesLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDEE04770C79005F316C /* NotesLoader.h */; }; + AA40D1DB09A08D650068C0D5 /* NotesLoaderBMS.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF004770C79005F316C /* NotesLoaderBMS.h */; }; + AA40D1DC09A08D650068C0D5 /* NotesLoaderDWI.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF204770C79005F316C /* NotesLoaderDWI.h */; }; + AA40D1DD09A08D650068C0D5 /* NotesLoaderKSF.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF404770C79005F316C /* NotesLoaderKSF.h */; }; + AA40D1DE09A08D650068C0D5 /* NotesLoaderSM.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF604770C79005F316C /* NotesLoaderSM.h */; }; + AA40D1DF09A08D650068C0D5 /* NotesWriterDWI.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDF804770C79005F316C /* NotesWriterDWI.h */; }; + AA40D1E009A08D650068C0D5 /* NotesWriterSM.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDFA04770C79005F316C /* NotesWriterSM.h */; }; + AA40D1E109A08D650068C0D5 /* NoteTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDFC04770C79005F316C /* NoteTypes.h */; }; + AA40D1E209A08D650068C0D5 /* Player.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFDFE04770C79005F316C /* Player.h */; }; + AA40D1E309A08D650068C0D5 /* PlayerAI.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0004770C79005F316C /* PlayerAI.h */; }; + AA40D1E409A08D650068C0D5 /* PlayerNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0204770C79005F316C /* PlayerNumber.h */; }; + AA40D1E509A08D650068C0D5 /* PlayerOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0404770C79005F316C /* PlayerOptions.h */; }; + AA40D1E609A08D650068C0D5 /* SongOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0804770C79005F316C /* SongOptions.h */; }; + AA40D1E709A08D650068C0D5 /* StageStats.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0A04770C79005F316C /* StageStats.h */; }; + AA40D1E909A08D650068C0D5 /* TitleSubstitution.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE0F04770C79005F316C /* TitleSubstitution.h */; }; + AA40D1EA09A08D650068C0D5 /* IniFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE5904770CAA005F316C /* IniFile.h */; }; + AA40D1EB09A08D650068C0D5 /* MsdFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE5B04770CAA005F316C /* MsdFile.h */; }; + AA40D1EC09A08D650068C0D5 /* global.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6004770CF7005F316C /* global.h */; }; + AA40D1ED09A08D650068C0D5 /* ScreenDimensions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6104770CF7005F316C /* ScreenDimensions.h */; }; + AA40D1EE09A08D650068C0D5 /* StdString.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6204770CF7005F316C /* StdString.h */; }; + AA40D1EF09A08D650068C0D5 /* StepMania.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6404770CF7005F316C /* StepMania.h */; }; + AA40D1F009A08D650068C0D5 /* Banner.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE6F04770D61005F316C /* Banner.h */; }; + AA40D1F109A08D650068C0D5 /* BPMDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE7704770E7C005F316C /* BPMDisplay.h */; }; + AA40D1F209A08D650068C0D5 /* CourseContentsList.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE7904770E7C005F316C /* CourseContentsList.h */; }; + AA40D1F409A08D650068C0D5 /* DifficultyIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE7F04770E7C005F316C /* DifficultyIcon.h */; }; + AA40D1F709A08D650068C0D5 /* EditMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE8504770E7C005F316C /* EditMenu.h */; }; + AA40D1F809A08D650068C0D5 /* FadingBanner.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE8B04770E7C005F316C /* FadingBanner.h */; }; + AA40D1F909A08D650068C0D5 /* GradeDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE8D04770E7C005F316C /* GradeDisplay.h */; }; + AA40D1FA09A08D650068C0D5 /* GrooveRadar.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9104770E7C005F316C /* GrooveRadar.h */; }; + AA40D1FC09A08D650068C0D5 /* HelpDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9504770E7C005F316C /* HelpDisplay.h */; }; + AA40D1FD09A08D650068C0D5 /* MenuTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9B04770E7C005F316C /* MenuTimer.h */; }; + AA40D1FE09A08D650068C0D5 /* MeterDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFE9D04770E7C005F316C /* MeterDisplay.h */; }; + AA40D20209A08D650068C0D5 /* MusicWheel.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEA504770E7C005F316C /* MusicWheel.h */; }; + AA40D20309A08D650068C0D5 /* MusicWheelItem.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEA704770E7C005F316C /* MusicWheelItem.h */; }; + AA40D20609A08D650068C0D5 /* OptionsCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEAD04770E7C005F316C /* OptionsCursor.h */; }; + AA40D20709A08D650068C0D5 /* ScrollBar.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEAF04770E7C005F316C /* ScrollBar.h */; }; + AA40D20909A08D650068C0D5 /* SnapDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEB304770E7C005F316C /* SnapDisplay.h */; }; + AA40D20A09A08D650068C0D5 /* TextBanner.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEB504770E7C005F316C /* TextBanner.h */; }; + AA40D20B09A08D650068C0D5 /* WheelNotifyIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEB704770E7C005F316C /* WheelNotifyIcon.h */; }; + AA40D20C09A08D650068C0D5 /* ArrowEffects.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFEFE04770F63005F316C /* ArrowEffects.h */; }; + AA40D20D09A08D650068C0D5 /* Background.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0004770F63005F316C /* Background.h */; }; + AA40D20E09A08D650068C0D5 /* BGAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0204770F63005F316C /* BGAnimation.h */; }; + AA40D20F09A08D650068C0D5 /* BGAnimationLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0404770F63005F316C /* BGAnimationLayer.h */; }; + AA40D21109A08D650068C0D5 /* DancingCharacters.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0804770F63005F316C /* DancingCharacters.h */; }; + AA40D21209A08D650068C0D5 /* GhostArrowRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF0E04770F63005F316C /* GhostArrowRow.h */; }; + AA40D21309A08D650068C0D5 /* HoldJudgment.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1604770F63005F316C /* HoldJudgment.h */; }; + AA40D21509A08D650068C0D5 /* LifeMeter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1A04770F63005F316C /* LifeMeter.h */; }; + AA40D21609A08D650068C0D5 /* LifeMeterBar.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1C04770F63005F316C /* LifeMeterBar.h */; }; + AA40D21709A08D650068C0D5 /* LifeMeterBattery.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF1E04770F63005F316C /* LifeMeterBattery.h */; }; + AA40D21809A08D650068C0D5 /* LyricDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2004770F63005F316C /* LyricDisplay.h */; }; + AA40D21909A08D650068C0D5 /* NoteDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2204770F63005F316C /* NoteDisplay.h */; }; + AA40D21A09A08D650068C0D5 /* NoteField.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2404770F63005F316C /* NoteField.h */; }; + AA40D21B09A08D650068C0D5 /* ScoreDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2604770F63005F316C /* ScoreDisplay.h */; }; + AA40D21C09A08D650068C0D5 /* ScoreDisplayBattle.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2804770F63005F316C /* ScoreDisplayBattle.h */; }; + AA40D21D09A08D650068C0D5 /* ScoreDisplayNormal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2A04770F63005F316C /* ScoreDisplayNormal.h */; }; + AA40D21E09A08D650068C0D5 /* ScoreDisplayOni.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2C04770F63005F316C /* ScoreDisplayOni.h */; }; + AA40D21F09A08D650068C0D5 /* ScoreDisplayRave.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF2E04770F63005F316C /* ScoreDisplayRave.h */; }; + AA40D22009A08D650068C0D5 /* ScoreKeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF3004770F63005F316C /* ScoreKeeper.h */; }; + AA40D22109A08D650068C0D5 /* Transition.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7104770F86005F316C /* Transition.h */; }; + AA40D22209A08D650068C0D5 /* Actor.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7604770FFD005F316C /* Actor.h */; }; + AA40D22309A08D650068C0D5 /* ActorFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7804770FFD005F316C /* ActorFrame.h */; }; + AA40D22409A08D650068C0D5 /* ActorScroller.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFF7A04770FFD005F316C /* ActorScroller.h */; }; + AA40D22509A08D650068C0D5 /* BitmapText.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFBA04770FFD005F316C /* BitmapText.h */; }; + AA40D22609A08D650068C0D5 /* Model.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFBE04770FFD005F316C /* Model.h */; }; + AA40D22709A08D650068C0D5 /* ModelTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFC004770FFD005F316C /* ModelTypes.h */; }; + AA40D22809A08D650068C0D5 /* Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFC104770FFD005F316C /* Quad.h */; }; + AA40D22909A08D650068C0D5 /* Sprite.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFFC304770FFD005F316C /* Sprite.h */; }; + AA40D22A09A08D650068C0D5 /* Screen.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E000B047711F3005F316C /* Screen.h */; }; + AA40D22B09A08D650068C0D5 /* ScreenAttract.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0011047711F3005F316C /* ScreenAttract.h */; }; + AA40D22D09A08D650068C0D5 /* ScreenDemonstration.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E001C047711F3005F316C /* ScreenDemonstration.h */; }; + AA40D22E09A08D650068C0D5 /* ScreenEdit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E001E047711F3005F316C /* ScreenEdit.h */; }; + AA40D22F09A08D650068C0D5 /* ScreenEditMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0020047711F3005F316C /* ScreenEditMenu.h */; }; + AA40D23009A08D650068C0D5 /* ScreenEvaluation.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0022047711F3005F316C /* ScreenEvaluation.h */; }; + AA40D23309A08D650068C0D5 /* ScreenGameplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E002A047711F3005F316C /* ScreenGameplay.h */; }; + AA40D23409A08D650068C0D5 /* ScreenInstructions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0034047711F3005F316C /* ScreenInstructions.h */; }; + AA40D23509A08D650068C0D5 /* ScreenJukebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0038047711F3005F316C /* ScreenJukebox.h */; }; + AA40D23609A08D650068C0D5 /* ScreenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0040047711F3005F316C /* ScreenManager.h */; }; + AA40D23709A08D650068C0D5 /* ScreenMapControllers.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0042047711F3005F316C /* ScreenMapControllers.h */; }; + AA40D23809A08D650068C0D5 /* ScreenMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0044047711F3005F316C /* ScreenMessage.h */; }; + AA40D23909A08D650068C0D5 /* ScreenMiniMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0046047711F3005F316C /* ScreenMiniMenu.h */; }; + AA40D23B09A08D650068C0D5 /* ScreenNameEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E004A047711F3005F316C /* ScreenNameEntry.h */; }; + AA40D23C09A08D650068C0D5 /* ScreenOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E004C047711F3005F316C /* ScreenOptions.h */; }; + AA40D23D09A08D650068C0D5 /* ScreenPlayerOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0050047711F3005F316C /* ScreenPlayerOptions.h */; }; + AA40D23E09A08D650068C0D5 /* ScreenPrompt.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0052047711F3005F316C /* ScreenPrompt.h */; }; + AA40D23F09A08D650068C0D5 /* ScreenRanking.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0054047711F3005F316C /* ScreenRanking.h */; }; + AA40D24009A08D650068C0D5 /* ScreenSandbox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0058047711F3005F316C /* ScreenSandbox.h */; }; + AA40D24109A08D650068C0D5 /* ScreenSelect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E005A047711F3005F316C /* ScreenSelect.h */; }; + AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */; }; + AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E006A047711F3005F316C /* ScreenSelectMusic.h */; }; + AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0070047711F3005F316C /* ScreenSongOptions.h */; }; + AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007A047711F3005F316C /* ScreenTestFonts.h */; }; + AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007C047711F3005F316C /* ScreenTestSound.h */; }; + AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007E047711F3005F316C /* ScreenTextEntry.h */; }; + AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0080047711F3005F316C /* ScreenTitleMenu.h */; }; + AA40D24E09A08D650068C0D5 /* AnnouncerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01000477128A005F316C /* AnnouncerManager.h */; }; + AA40D24F09A08D650068C0D5 /* GameManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01020477128A005F316C /* GameManager.h */; }; + AA40D25009A08D650068C0D5 /* GameState.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01040477128A005F316C /* GameState.h */; }; + AA40D25109A08D650068C0D5 /* InputFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01060477128A005F316C /* InputFilter.h */; }; + AA40D25209A08D650068C0D5 /* InputMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01080477128A005F316C /* InputMapper.h */; }; + AA40D25309A08D650068C0D5 /* InputQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E010A0477128A005F316C /* InputQueue.h */; }; + AA40D25409A08D650068C0D5 /* NoteSkinManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E010C0477128A005F316C /* NoteSkinManager.h */; }; + AA40D25509A08D650068C0D5 /* PrefsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E010E0477128A005F316C /* PrefsManager.h */; }; + AA40D25609A08D650068C0D5 /* SongManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01100477128A005F316C /* SongManager.h */; }; + AA40D25709A08D650068C0D5 /* ThemeManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01130477128A005F316C /* ThemeManager.h */; }; + AA40D25809A08D650068C0D5 /* RageSoundDriver_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E012F047712BE005F316C /* RageSoundDriver_Null.h */; }; + AA40D25909A08D650068C0D5 /* LowLevelWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01630477136A005F316C /* LowLevelWindow.h */; }; + AA40D25A09A08D650068C0D5 /* SongCacheIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01DF04772005005F316C /* SongCacheIndex.h */; }; + AA40D25C09A08D650068C0D5 /* RandomSample.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E01E7047720A3005F316C /* RandomSample.h */; }; + AA40D25E09A08D650068C0D5 /* RageUtil_CharConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC23F7F0485E68D005F316C /* RageUtil_CharConversions.h */; }; + AA40D25F09A08D650068C0D5 /* BannerCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE35EC04967E26005F316C /* BannerCache.h */; }; + AA40D26109A08D650068C0D5 /* arch_default.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE36F60497CE16005F316C /* arch_default.h */; }; + AA40D26309A08D650068C0D5 /* ArchHooks.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE36FC0497CE44005F316C /* ArchHooks.h */; }; + AA40D26409A08D650068C0D5 /* RageSoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE37030497CF85005F316C /* RageSoundDriver.h */; }; + AA40D26609A08D650068C0D5 /* ActorUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1DC47204A485E900D02EE9 /* ActorUtil.h */; }; + AA40D26709A08D650068C0D5 /* ScreenSelectMaster.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1DC47504A4861700D02EE9 /* ScreenSelectMaster.h */; }; + AA40D26B09A08D650068C0D5 /* CombinedLifeMeterTug.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE443EC04B0F9F600D02EE9 /* CombinedLifeMeterTug.h */; }; + AA40D26C09A08D650068C0D5 /* ScoreKeeperRave.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE443F404B0FEB700D02EE9 /* ScoreKeeperRave.h */; }; + AA40D26D09A08D650068C0D5 /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7B04AFD87300D02EE9 /* internal.h */; }; + AA40D26E09A08D650068C0D5 /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7E04AFD87300D02EE9 /* pcre.h */; }; + AA40D26F09A08D650068C0D5 /* RageUtil_FileDB.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF580A804B3E2DC00D02EE9 /* RageUtil_FileDB.h */; }; + AA40D27109A08D650068C0D5 /* LoadingWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEF3D1004B53E2900D02EE9 /* LoadingWindow.h */; }; + AA40D27209A08D650068C0D5 /* InputHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B36C04C38B4600D02EE9 /* InputHandler.h */; }; + AA40D27309A08D650068C0D5 /* MovieTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B37704C38BF600D02EE9 /* MovieTexture.h */; }; + AA40D27509A08D650068C0D5 /* MovieTexture_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B39104C5921800D02EE9 /* MovieTexture_Null.h */; }; + AA40D27609A08D650068C0D5 /* RageFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA272C3104CD757100D02EE9 /* RageFile.h */; }; + AA40D27709A08D650068C0D5 /* RageInputDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EFD7704770A7C005F316C /* RageInputDevice.h */; }; + AA40D27809A08D650068C0D5 /* RageSoundReader_FileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E7A04D4FE5D00D02EE9 /* RageSoundReader_FileReader.h */; }; + AA40D27909A08D650068C0D5 /* arch_setup.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8F04D5263200D02EE9 /* arch_setup.h */; }; + AA40D27A09A08D650068C0D5 /* CrashHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8804D50FB900D02EE9 /* CrashHandler.h */; }; + AA40D27B09A08D650068C0D5 /* CrashHandlerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8A04D50FB900D02EE9 /* CrashHandlerInternal.h */; }; + AA40D27C09A08D650068C0D5 /* Crash.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4F5904D9220700D02EE9 /* Crash.h */; }; + AA40D27D09A08D650068C0D5 /* Steps.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF430FE04DC98BC00D02EE9 /* Steps.h */; }; + AA40D27E09A08D650068C0D5 /* NoteDataUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4F38C104E2D0B700D02EE9 /* NoteDataUtil.h */; }; + AA40D27F09A08D650068C0D5 /* ProductInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AAADA4AE04E5F3DE00D02EE9 /* ProductInfo.h */; }; + AA40D28009A08D650068C0D5 /* BeginnerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC28BBA04F758E500D02EE9 /* BeginnerHelper.h */; }; + AA40D28209A08D650068C0D5 /* MovieTexture_FFMpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = AA14ED100509F40000E3FAD7 /* MovieTexture_FFMpeg.h */; }; + AA40D28309A08D650068C0D5 /* ProfileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1C6557050D234B0073A143 /* ProfileManager.h */; }; + AA40D28409A08D650068C0D5 /* RageSoundReader_WAV.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1C65A7050FD21F0073A143 /* RageSoundReader_WAV.h */; }; + AA40D28609A08D650068C0D5 /* RageSoundReader_Vorbisfile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1C65A5050FD21F0073A143 /* RageSoundReader_Vorbisfile.h */; }; + AA40D28809A08D650068C0D5 /* RageSoundReader_Resample_Good.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAE28F5052254A900D02EE9 /* RageSoundReader_Resample_Good.h */; }; + AA40D28909A08D650068C0D5 /* ScreenExit.h in Headers */ = {isa = PBXBuildFile; fileRef = AAECF8C005265DB600D02EE9 /* ScreenExit.h */; }; + AA40D28A09A08D650068C0D5 /* ScreenOptionsMaster.h in Headers */ = {isa = PBXBuildFile; fileRef = AA53D28505277DAF00D02EE9 /* ScreenOptionsMaster.h */; }; + AA40D28B09A08D650068C0D5 /* ScreenOptionsMasterPrefs.h in Headers */ = {isa = PBXBuildFile; fileRef = AA53D28705277DAF00D02EE9 /* ScreenOptionsMasterPrefs.h */; }; + AA40D28C09A08D650068C0D5 /* ScreenReloadSongs.h in Headers */ = {isa = PBXBuildFile; fileRef = AA53D28905277DAF00D02EE9 /* ScreenReloadSongs.h */; }; + AA40D28D09A08D650068C0D5 /* ScreenHowToPlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0030047711F3005F316C /* ScreenHowToPlay.h */; }; + AA40D28E09A08D650068C0D5 /* PercentageDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD620A6052EC78B00D02EE9 /* PercentageDisplay.h */; }; + AA40D28F09A08D650068C0D5 /* ScoreDisplayPercentage.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6DAF0905300B3D00D02EE9 /* ScoreDisplayPercentage.h */; }; + AA40D29109A08D650068C0D5 /* ScreenTestInput.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */; }; + AA40D29209A08D650068C0D5 /* ScreenBookkeeping.h in Headers */ = {isa = PBXBuildFile; fileRef = AADBE361053D5F8A00D02EE9 /* ScreenBookkeeping.h */; }; + AA40D29309A08D650068C0D5 /* ScreenNameEntryTraditional.h in Headers */ = {isa = PBXBuildFile; fileRef = AADBE363053D5F8A00D02EE9 /* ScreenNameEntryTraditional.h */; }; + AA40D29409A08D650068C0D5 /* Bookkeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = AADBE369053DA38C00D02EE9 /* Bookkeeper.h */; }; + AA40D29509A08D650068C0D5 /* GraphDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF551E0549F39700D02EE9 /* GraphDisplay.h */; }; + AA40D29609A08D650068C0D5 /* ComboGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF55220549F43A00D02EE9 /* ComboGraph.h */; }; + AA40D29709A08D650068C0D5 /* Attack.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF5542054E736D00D02EE9 /* Attack.h */; }; + AA40D29809A08D650068C0D5 /* RageTextureID.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9EC2F1055F5126007E5098 /* RageTextureID.h */; }; + AA40D29909A08D650068C0D5 /* CombinedLifeMeter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9D236C0561B6CE00FC7F14 /* CombinedLifeMeter.h */; }; + AA40D29A09A08D650068C0D5 /* LightsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DCE40567660A00B5D56F /* LightsManager.h */; }; + AA40D29B09A08D650068C0D5 /* LightsDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DCEE0567663800B5D56F /* LightsDriver.h */; }; + AA40D29D09A08D650068C0D5 /* PaneDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DDDF0569C71000B5D56F /* PaneDisplay.h */; }; + AA40D29E09A08D650068C0D5 /* DifficultyList.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6DDE70569C80900B5D56F /* DifficultyList.h */; }; + AA40D29F09A08D650068C0D5 /* LightsDriver_SystemMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB691F305704FA50078BED4 /* LightsDriver_SystemMessage.h */; }; + AA40D2A009A08D650068C0D5 /* AttackDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB005F10579B8CB000BBA58 /* AttackDisplay.h */; }; + AA40D2A109A08D650068C0D5 /* RageFileDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0085C057F4F7A000BBA58 /* RageFileDriver.h */; }; + AA40D2A209A08D650068C0D5 /* RageFileDriverDirect.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0085E057F4F7A000BBA58 /* RageFileDriverDirect.h */; }; + AA40D2A309A08D650068C0D5 /* RageFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB00860057F4F7A000BBA58 /* RageFileManager.h */; }; + AA40D2A409A08D650068C0D5 /* RageFileDriverZip.h in Headers */ = {isa = PBXBuildFile; fileRef = AA251B7605841FCE00027ACB /* RageFileDriverZip.h */; }; + AA40D2A509A08D650068C0D5 /* Style.h in Headers */ = {isa = PBXBuildFile; fileRef = AA25200D0587225500027ACB /* Style.h */; }; + AA40D2A609A08D650068C0D5 /* MemoryCardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */; }; + AA40D2A709A08D650068C0D5 /* MemoryCardDriver_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE78760591287100E8BF50 /* MemoryCardDriver_Null.h */; }; + AA40D2A809A08D650068C0D5 /* DualScrollBar.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE788B05912B0600E8BF50 /* DualScrollBar.h */; }; + AA40D2A909A08D650068C0D5 /* TimingData.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C430599B50D00779F33 /* TimingData.h */; }; + AA40D2AA09A08D650068C0D5 /* MemoryCardDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C470599B54D00779F33 /* MemoryCardDisplay.h */; }; + AA40D2AB09A08D650068C0D5 /* ReceptorArrow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C4F0599B58D00779F33 /* ReceptorArrow.h */; }; + AA40D2AC09A08D650068C0D5 /* ReceptorArrowRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA729C510599B58D00779F33 /* ReceptorArrowRow.h */; }; + AA40D2AD09A08D650068C0D5 /* ScreenEnding.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE321B05ACD8ED001A0E84 /* ScreenEnding.h */; }; + AA40D2AE09A08D650068C0D5 /* Foreground.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE321F05ACD931001A0E84 /* Foreground.h */; }; + AA40D2AF09A08D650068C0D5 /* RageFileDriverDirectHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AABE322305ACDA52001A0E84 /* RageFileDriverDirectHelpers.h */; }; + AA40D2B009A08D650068C0D5 /* RageUtil_CircularBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD3D5AB05B5AB4E00014FAC /* RageUtil_CircularBuffer.h */; }; + AA40D2B109A08D650068C0D5 /* ModelManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF4206605D63FA700056441 /* ModelManager.h */; }; + AA40D2B209A08D650068C0D5 /* RageModelGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF4206A05D6400800056441 /* RageModelGeometry.h */; }; + AA40D2B309A08D650068C0D5 /* Profile.h in Headers */ = {isa = PBXBuildFile; fileRef = AA50201E05D6D7B200ACEFD0 /* Profile.h */; }; + AA40D2B409A08D650068C0D5 /* XmlFile.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC6889A05D7F3C800964E6D /* XmlFile.h */; }; + AA40D2B509A08D650068C0D5 /* HighScore.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBD80705D8E9FC00B44FC2 /* HighScore.h */; }; + AA40D2B609A08D650068C0D5 /* CryptManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AABD0B3705DF3F22004F7929 /* CryptManager.h */; }; + AA40D2B809A08D650068C0D5 /* Backtrace.h in Headers */ = {isa = PBXBuildFile; fileRef = AAED6F290601C528002D2DEE /* Backtrace.h */; }; + AA40D2B909A08D650068C0D5 /* BacktraceNames.h in Headers */ = {isa = PBXBuildFile; fileRef = AAED6F2B0601C528002D2DEE /* BacktraceNames.h */; }; + AA40D2BA09A08D650068C0D5 /* ScreenSetTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0A3DE7060513A00044E6B1 /* ScreenSetTime.h */; }; + AA40D2BB09A08D650068C0D5 /* NetworkSyncManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE7804A060814AC0034E65F /* NetworkSyncManager.h */; }; + AA40D2BD09A08D650068C0D5 /* ActiveAttackList.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE7812C0608249E0034E65F /* ActiveAttackList.h */; }; + AA40D2BF09A08D650068C0D5 /* ScreenTestLights.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF7435A06110E8D00B19AD1 /* ScreenTestLights.h */; }; + AA40D2C009A08D650068C0D5 /* RageDisplay_Null.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF7458F061181F700B19AD1 /* RageDisplay_Null.h */; }; + AA40D2CB09A08D650068C0D5 /* EnumHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8F136F0624BAB200C6A467 /* EnumHelper.h */; }; + AA40D2CC09A08D650068C0D5 /* RageSoundPosMap.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD36083062BB8AE00D0CED8 /* RageSoundPosMap.h */; }; + AA40D2CD09A08D650068C0D5 /* SignalHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AADB4E8C04D50FB900D02EE9 /* SignalHandler.h */; }; + AA40D2CE09A08D650068C0D5 /* CourseUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5C73F80637A5F000AFB891 /* CourseUtil.h */; }; + AA40D2CF09A08D650068C0D5 /* SongUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5C73FA0637A5F000AFB891 /* SongUtil.h */; }; + AA40D2D009A08D650068C0D5 /* StepsUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5C73FC0637A5F000AFB891 /* StepsUtil.h */; }; + AA40D2D109A08D650068C0D5 /* ScreenWithMenuElements.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA6BFEB0644AB3700AFBBC8 /* ScreenWithMenuElements.h */; }; + AA40D2F209A08D650068C0D5 /* RageSurface_Load_GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF66D0659E78D00738526 /* RageSurface_Load_GIF.h */; }; + AA40D2F309A08D650068C0D5 /* RageSurface_Load_JPEG.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF66F0659E78D00738526 /* RageSurface_Load_JPEG.h */; }; + AA40D2F409A08D650068C0D5 /* RageSurface_Load_PNG.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF6710659E78D00738526 /* RageSurface_Load_PNG.h */; }; + AA40D2F509A08D650068C0D5 /* RageSurface_Load_XPM.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF6730659E78D00738526 /* RageSurface_Load_XPM.h */; }; + AA40D2F609A08D650068C0D5 /* RageSurface_Load.h in Headers */ = {isa = PBXBuildFile; fileRef = AABBF6750659E78D00738526 /* RageSurface_Load.h */; }; + AA40D2F809A08D650068C0D5 /* Difficulty.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD6A713065E0FDF0042165A /* Difficulty.h */; }; + AA40D2F909A08D650068C0D5 /* Foreach.h in Headers */ = {isa = PBXBuildFile; fileRef = AA70E3640663112800DAE1FD /* Foreach.h */; }; + AA40D2FA09A08D650068C0D5 /* Trail.h in Headers */ = {isa = PBXBuildFile; fileRef = AA70E3660663112800DAE1FD /* Trail.h */; }; + AA40D2FB09A08D650068C0D5 /* TrailUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA70E3680663112800DAE1FD /* TrailUtil.h */; }; + AA40D2FC09A08D650068C0D5 /* ScreenNetworkOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA42F5E7067068D30013509E /* ScreenNetworkOptions.h */; }; + AA40D2FD09A08D650068C0D5 /* Dialog.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD675F006795175006002B0 /* Dialog.h */; }; + AA40D2FE09A08D650068C0D5 /* DialogDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD675F106795175006002B0 /* DialogDriver.h */; }; + AA40D30009A08D650068C0D5 /* Threads.h in Headers */ = {isa = PBXBuildFile; fileRef = AA60E0BC067992D7008ADC41 /* Threads.h */; }; + AA40D30109A08D650068C0D5 /* Threads_Pthreads.h in Headers */ = {isa = PBXBuildFile; fileRef = AA60E0BE067992D7008ADC41 /* Threads_Pthreads.h */; }; + AA40D30209A08D650068C0D5 /* RageSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA91587A067D2C2C00078E36 /* RageSurface.h */; }; + AA40D30309A08D650068C0D5 /* RageSurface_Load_BMP.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9091A0067ED43000C1FCFF /* RageSurface_Load_BMP.h */; }; + AA40D30409A08D650068C0D5 /* RageSurface_Save_BMP.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9091A4067ED46400C1FCFF /* RageSurface_Save_BMP.h */; }; + AA40D30509A08D650068C0D5 /* GameSoundManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC9F32F069E22BB00D53E2C /* GameSoundManager.h */; }; + AA40D30609A08D650068C0D5 /* MemoryCardDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC9F333069E22CF00D53E2C /* MemoryCardDriver.h */; }; + AA40D30709A08D650068C0D5 /* RadarValues.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D790006A275E90064B980 /* RadarValues.h */; }; + AA40D30809A08D650068C0D5 /* DateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D793206A279530064B980 /* DateTime.h */; }; + AA40D30909A08D650068C0D5 /* CommonMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3A705E06AA144C006F755E /* CommonMetrics.h */; }; + AA40D30A09A08D650068C0D5 /* StyleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3A706106AA1645006F755E /* StyleUtil.h */; }; + AA40D30B09A08D650068C0D5 /* Game.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A78AA06B5C72200B03E97 /* Game.h */; }; + AA40D30C09A08D650068C0D5 /* ScreenNetSelectMusic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA22CBA406DE909C0083BA97 /* ScreenNetSelectMusic.h */; }; + AA40D30E09A08D650068C0D5 /* RageSurfaceUtils_Palettize.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB9C8AC06EAF64400AD97CD /* RageSurfaceUtils_Palettize.h */; }; + AA40D30F09A08D650068C0D5 /* RageSurfaceUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB9C8AE06EAF64400AD97CD /* RageSurfaceUtils.h */; }; + AA40D31009A08D650068C0D5 /* ScreenNetEvaluation.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB9C8B406EAF66C00AD97CD /* ScreenNetEvaluation.h */; }; + AA40D31109A08D650068C0D5 /* RageFileDriverMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = AA64218706EC606F00C21584 /* RageFileDriverMemory.h */; }; + AA40D31209A08D650068C0D5 /* DarwinThreadHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8A3EC806EDDAE4002F25AB /* DarwinThreadHelpers.h */; }; + AA40D31309A08D650068C0D5 /* RageUtil_BackgroundLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8A405006EEFF72002F25AB /* RageUtil_BackgroundLoader.h */; }; + AA40D31409A08D650068C0D5 /* Preference.h in Headers */ = {isa = PBXBuildFile; fileRef = AA54709106F559DF008EB9B2 /* Preference.h */; }; + AA40D31509A08D650068C0D5 /* ThemeMetric.h in Headers */ = {isa = PBXBuildFile; fileRef = AA21D5A10712AE16008B825F /* ThemeMetric.h */; }; + AA40D31609A08D650068C0D5 /* InputHandler_MonkeyKeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFC6CF0072A30440053AAD3 /* InputHandler_MonkeyKeyboard.h */; }; + AA40D31709A08D650068C0D5 /* AutoKeysounds.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAB2CDE072BD2EC00CD9FC9 /* AutoKeysounds.h */; }; + AA40D31809A08D650068C0D5 /* RageSoundMixBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAB2CE2072BD2FA00CD9FC9 /* RageSoundMixBuffer.h */; }; + AA40D31909A08D650068C0D5 /* RageSoundReader_Chain.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */; }; + AA40D31A09A08D650068C0D5 /* RageSoundUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */; }; + AA40D31B09A08D650068C0D5 /* ScreenNetRoom.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF793F2074FE69E00D74516 /* ScreenNetRoom.h */; }; + AA40D31C09A08D650068C0D5 /* ScreenNetSelectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF793F4074FE69E00D74516 /* ScreenNetSelectBase.h */; }; + AA40D31D09A08D650068C0D5 /* ScreenPackages.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1145DA075DFADF0050A3D1 /* ScreenPackages.h */; }; + AA40D31E09A08D650068C0D5 /* ScreenSystemLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */; }; + AA40D31F09A08D650068C0D5 /* Command.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1B08380762532800835464 /* Command.h */; }; + AA40D32009A08D650068C0D5 /* GameCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1B083A0762532800835464 /* GameCommand.h */; }; + AA40D32109A08D650068C0D5 /* RageFileBasic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0E04CF076C4CD500716D81 /* RageFileBasic.h */; }; + AA40D32209A08D650068C0D5 /* RageFileDriverDeflate.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0E04D1076C4CD500716D81 /* RageFileDriverDeflate.h */; }; + AA40D32309A08D650068C0D5 /* RageFileDriverSlice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0E04D3076C4CD500716D81 /* RageFileDriverSlice.h */; }; + AA40D32409A08D650068C0D5 /* RageSurface_Save_JPEG.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */; }; + AA40D32509A08D650068C0D5 /* RageSurfaceUtils_Dither.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC6C907A20AFE00793F0E /* RageSurfaceUtils_Dither.h */; }; + AA40D32609A08D650068C0D5 /* RageSurfaceUtils_Zoom.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC6CB07A20AFE00793F0E /* RageSurfaceUtils_Zoom.h */; }; + AA40D32709A08D650068C0D5 /* LuaBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC78C07A4FF5600793F0E /* LuaBinding.h */; }; + AA40D32809A08D650068C0D5 /* LuaManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC78E07A4FF5600793F0E /* LuaManager.h */; }; + AA40D32909A08D650068C0D5 /* PlayerState.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBC78F07A4FF5600793F0E /* PlayerState.h */; }; + AA40D32C09A08D650068C0D5 /* RageFileDriverTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = AACA592B07B5E23400763545 /* RageFileDriverTimeout.h */; }; + AA40D32D09A08D650068C0D5 /* RageUtil_AutoPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = AACA592C07B5E23400763545 /* RageUtil_AutoPtr.h */; }; + AA40D32E09A08D650068C0D5 /* RageUtil_WorkerThread.h in Headers */ = {isa = PBXBuildFile; fileRef = AACA592E07B5E23400763545 /* RageUtil_WorkerThread.h */; }; + AA40D32F09A08D650068C0D5 /* LuaReference.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A207C9391B00EA04E1 /* LuaReference.h */; }; + AA40D33009A08D650068C0D5 /* MessageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A407C9391B00EA04E1 /* MessageManager.h */; }; + AA40D33109A08D650068C0D5 /* StatsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A607C9391B00EA04E1 /* StatsManager.h */; }; + AA40D33209A08D650068C0D5 /* SubscriptionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2A707C9391B00EA04E1 /* SubscriptionManager.h */; }; + AA40D33309A08D650068C0D5 /* AutoActor.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2B007C9395400EA04E1 /* AutoActor.h */; }; + AA40D33409A08D650068C0D5 /* OptionRow.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2B507C939A200EA04E1 /* OptionRow.h */; }; + AA40D33509A08D650068C0D5 /* PlayerStageStats.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2B907C939F800EA04E1 /* PlayerStageStats.h */; }; + AA40D33609A08D650068C0D5 /* RollingNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2BC07C939F800EA04E1 /* RollingNumbers.h */; }; + AA40D33709A08D650068C0D5 /* ScoreDisplayCalories.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8BD2BE07C939F800EA04E1 /* ScoreDisplayCalories.h */; }; + AA40D34009A08D650068C0D5 /* UnlockManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA80C75307F20D0D00C99272 /* UnlockManager.h */; }; + AA40D34109A08D650068C0D5 /* OptionRowHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AA80C75807F20D6600C99272 /* OptionRowHandler.h */; }; + AA40D34209A08D650068C0D5 /* ScoreDisplayAliveTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7144B00809EEEC00545684 /* ScoreDisplayAliveTime.h */; }; + AA40D34309A08D650068C0D5 /* ScoreDisplayLifeTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D5E5D08214C77002AA665 /* ScoreDisplayLifeTime.h */; }; + AA40D34409A08D650068C0D5 /* StreamDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D5E90082152B6002AA665 /* StreamDisplay.h */; }; + AA40D34509A08D650068C0D5 /* LifeMeterTime.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D5E5B08214C77002AA665 /* LifeMeterTime.h */; }; + AA40D34609A08D650068C0D5 /* WheelBase.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAFE81D0835E7FF00FC43E0 /* WheelBase.h */; }; + AA40D34709A08D650068C0D5 /* WheelItemBase.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAFE81F0835E7FF00FC43E0 /* WheelItemBase.h */; }; + AA40D34909A08D650068C0D5 /* ScreenDebugOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07A5560843E72B00E33D21 /* ScreenDebugOverlay.h */; }; + AA40D34B09A08D650068C0D5 /* ScreenSaveSync.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07A55A0843E72B00E33D21 /* ScreenSaveSync.h */; }; + AA40D34D09A08D650068C0D5 /* ScreenSyncOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */; }; + AA40D34E09A08D650068C0D5 /* BackgroundUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7DA2F0085760E90057F1EA /* BackgroundUtil.h */; }; + AA40D34F09A08D650068C0D5 /* ScreenSplash.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB6B476085761B700CEE7BA /* ScreenSplash.h */; }; + AA40D35009A08D650068C0D5 /* RageTexturePreloader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA91ACB00878BB2C00FB2F8F /* RageTexturePreloader.h */; }; + AA40D35109A08D650068C0D5 /* ScreenOptionsEditProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFAB5BC0889098600767BF7 /* ScreenOptionsEditProfile.h */; }; + AA40D35209A08D650068C0D5 /* GameLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFAB5CC08890B5200767BF7 /* GameLoop.h */; }; + AA40D35309A08D650068C0D5 /* CharacterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E74608B64B1400FA24CA /* CharacterManager.h */; }; + AA40D35409A08D650068C0D5 /* CourseLoaderCRS.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E74C08B64B5600FA24CA /* CourseLoaderCRS.h */; }; + AA40D35509A08D650068C0D5 /* CourseWriterCRS.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E74E08B64B5600FA24CA /* CourseWriterCRS.h */; }; + AA40D35909A08D650068C0D5 /* ScreenOptionsManageCourses.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E75C08B64B9A00FA24CA /* ScreenOptionsManageCourses.h */; }; + AA40D35A09A08D650068C0D5 /* ScreenOptionsManageProfiles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA77E75E08B64B9A00FA24CA /* ScreenOptionsManageProfiles.h */; }; + AA40D35B09A08D650068C0D5 /* ScreenGameplayNormal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */; }; + AA40D35C09A08D650068C0D5 /* ActorSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE2708E7D793005087FC /* ActorSound.h */; }; + AA40D35D09A08D650068C0D5 /* InputEventPlus.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE3908E7D832005087FC /* InputEventPlus.h */; }; + AA40D35F09A08D650068C0D5 /* ScreenGameplayLesson.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE4A08E7D893005087FC /* ScreenGameplayLesson.h */; }; + AA40D36209A08D650068C0D5 /* LuaExpressionTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = AACFBE6208E7DBA8005087FC /* LuaExpressionTransform.h */; }; + AA40D36309A08D650068C0D5 /* DynamicActorScroller.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF3442A08F1C36A0006EDB7 /* DynamicActorScroller.h */; }; + AA40D36409A08D650068C0D5 /* ScoreKeeperNormal.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF34ADD0900AEBD0006EDB7 /* ScoreKeeperNormal.h */; }; + AA40D36509A08D650068C0D5 /* ScreenStatsOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF34AEC0900B00C0006EDB7 /* ScreenStatsOverlay.h */; }; + AA40D36709A08D650068C0D5 /* MovieTexture_Generic.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA372D10909934500141131 /* MovieTexture_Generic.h */; }; + AA40D36809A08D650068C0D5 /* MovieTexture_Theora.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA372D30909934500141131 /* MovieTexture_Theora.h */; }; + AA40D36B09A08D650068C0D5 /* SpecialFiles.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEED0094D7FCB000029DE /* SpecialFiles.h */; }; + AA40D36C09A08D650068C0D5 /* ScreenOptionsManageEditSteps.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEEE6094D807E000029DE /* ScreenOptionsManageEditSteps.h */; }; + AA40D36D09A08D650068C0D5 /* ScreenOptionsMemoryCard.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEEE8094D807E000029DE /* ScreenOptionsMemoryCard.h */; }; + AA40D36E09A08D650068C0D5 /* ScreenServiceAction.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFBEEEA094D807E000029DE /* ScreenServiceAction.h */; }; + AA40D36F09A08D650068C0D5 /* DisplayResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07328B0954381800F396C5 /* DisplayResolutions.h */; }; + AA40D37009A08D650068C0D5 /* XmlFileUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = AA07328D0954381800F396C5 /* XmlFileUtil.h */; }; + AA40D37109A08D650068C0D5 /* LocalizedString.h in Headers */ = {isa = PBXBuildFile; fileRef = AADD1CC3095C233F0088C9DF /* LocalizedString.h */; }; + AA40D37509A08D650068C0D5 /* HIDDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA44705209846B0800983E82 /* HIDDevice.h */; }; + AA40D37609A08D650068C0D5 /* JoystickDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA44708C0984720900983E82 /* JoystickDevice.h */; }; + AA40D37709A08D650068C0D5 /* KeyboardDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4470BA098476F600983E82 /* KeyboardDevice.h */; }; + AA40D37809A08D650068C0D5 /* Tween.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC0C8C10984AE3B0075FC53 /* Tween.h */; }; + AA40D37909A08D650068C0D5 /* ScreenUnlockStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = AA65877A098C322800CE55CC /* ScreenUnlockStatus.h */; }; + AA40D37A09A08D650068C0D5 /* AdjustSync.h in Headers */ = {isa = PBXBuildFile; fileRef = AA84B7060996F8370085EECB /* AdjustSync.h */; }; + AA40D37C09A08D650068C0D5 /* smicon.icns in Resources */ = {isa = PBXBuildFile; fileRef = AAB895E504A9057100D02EE9 /* smicon.icns */; }; + AA40D38109A08D650068C0D5 /* RageUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD9204770A7C005F316C /* RageUtil.cpp */; }; + AA40D38209A08D650068C0D5 /* RageBitmapTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */; }; + AA40D38309A08D650068C0D5 /* RageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */; }; + AA40D38409A08D650068C0D5 /* RageException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7204770A7C005F316C /* RageException.cpp */; }; + AA40D38509A08D650068C0D5 /* RageInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7404770A7C005F316C /* RageInput.cpp */; }; + AA40D38609A08D650068C0D5 /* RageInputDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */; }; + AA40D38709A08D650068C0D5 /* RageLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7804770A7C005F316C /* RageLog.cpp */; }; + AA40D38809A08D650068C0D5 /* RageMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7A04770A7C005F316C /* RageMath.cpp */; }; + AA40D38909A08D650068C0D5 /* RageSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7C04770A7C005F316C /* RageSound.cpp */; }; + AA40D38A09A08D650068C0D5 /* RageSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */; }; + AA40D38B09A08D650068C0D5 /* RageSoundReader_Preload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */; }; + AA40D38D09A08D650068C0D5 /* RageTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8904770A7C005F316C /* RageTexture.cpp */; }; + AA40D38E09A08D650068C0D5 /* RageTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */; }; + AA40D38F09A08D650068C0D5 /* RageThreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8D04770A7C005F316C /* RageThreads.cpp */; }; + AA40D39009A08D650068C0D5 /* RageTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFD8F04770A7C005F316C /* RageTimer.cpp */; }; + AA40D39109A08D650068C0D5 /* Character.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCB04770C79005F316C /* Character.cpp */; }; + AA40D39209A08D650068C0D5 /* CodeDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCD04770C79005F316C /* CodeDetector.cpp */; }; + AA40D39309A08D650068C0D5 /* Course.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDCF04770C79005F316C /* Course.cpp */; }; + AA40D39409A08D650068C0D5 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD104770C79005F316C /* Font.cpp */; }; + AA40D39509A08D650068C0D5 /* FontCharAliases.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD304770C79005F316C /* FontCharAliases.cpp */; }; + AA40D39609A08D650068C0D5 /* FontCharmaps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD504770C79005F316C /* FontCharmaps.cpp */; }; + AA40D39709A08D650068C0D5 /* FontManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD704770C79005F316C /* FontManager.cpp */; }; + AA40D39809A08D650068C0D5 /* GameConstantsAndTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */; }; + AA40D39909A08D650068C0D5 /* GameInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDD04770C79005F316C /* GameInput.cpp */; }; + AA40D39A09A08D650068C0D5 /* Grade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDDF04770C79005F316C /* Grade.cpp */; }; + AA40D39B09A08D650068C0D5 /* Inventory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE104770C79005F316C /* Inventory.cpp */; }; + AA40D39C09A08D650068C0D5 /* LyricsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE304770C79005F316C /* LyricsLoader.cpp */; }; + AA40D39D09A08D650068C0D5 /* NoteData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE504770C79005F316C /* NoteData.cpp */; }; + AA40D39E09A08D650068C0D5 /* NoteDataWithScoring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */; }; + AA40D3A009A08D650068C0D5 /* NotesLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDED04770C79005F316C /* NotesLoader.cpp */; }; + AA40D3A109A08D650068C0D5 /* NotesLoaderBMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */; }; + AA40D3A209A08D650068C0D5 /* NotesLoaderDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */; }; + AA40D3A309A08D650068C0D5 /* NotesLoaderKSF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */; }; + AA40D3A409A08D650068C0D5 /* NotesLoaderSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */; }; + AA40D3A509A08D650068C0D5 /* NotesWriterDWI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */; }; + AA40D3A609A08D650068C0D5 /* NotesWriterSM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */; }; + AA40D3A709A08D650068C0D5 /* NoteTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFB04770C79005F316C /* NoteTypes.cpp */; }; + AA40D3A809A08D650068C0D5 /* Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFD04770C79005F316C /* Player.cpp */; }; + AA40D3A909A08D650068C0D5 /* PlayerAI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFDFF04770C79005F316C /* PlayerAI.cpp */; }; + AA40D3AA09A08D650068C0D5 /* PlayerNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0104770C79005F316C /* PlayerNumber.cpp */; }; + AA40D3AB09A08D650068C0D5 /* PlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0304770C79005F316C /* PlayerOptions.cpp */; }; + AA40D3AC09A08D650068C0D5 /* SongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0704770C79005F316C /* SongOptions.cpp */; }; + AA40D3AD09A08D650068C0D5 /* StageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0904770C79005F316C /* StageStats.cpp */; }; + AA40D3AE09A08D650068C0D5 /* TitleSubstitution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */; }; + AA40D3AF09A08D650068C0D5 /* IniFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5804770CAA005F316C /* IniFile.cpp */; }; + AA40D3B009A08D650068C0D5 /* MsdFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE5A04770CAA005F316C /* MsdFile.cpp */; }; + AA40D3B109A08D650068C0D5 /* StepMania.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6304770CF7005F316C /* StepMania.cpp */; }; + AA40D3B209A08D650068C0D5 /* Banner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE6E04770D61005F316C /* Banner.cpp */; }; + AA40D3B309A08D650068C0D5 /* BPMDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */; }; + AA40D3B409A08D650068C0D5 /* CourseContentsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */; }; + AA40D3B609A08D650068C0D5 /* DifficultyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */; }; + AA40D3B909A08D650068C0D5 /* EditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8404770E7C005F316C /* EditMenu.cpp */; }; + AA40D3BA09A08D650068C0D5 /* FadingBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */; }; + AA40D3BB09A08D650068C0D5 /* GradeDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */; }; + AA40D3BC09A08D650068C0D5 /* GrooveRadar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */; }; + AA40D3BE09A08D650068C0D5 /* HelpDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */; }; + AA40D3BF09A08D650068C0D5 /* MenuTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */; }; + AA40D3C009A08D650068C0D5 /* MeterDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */; }; + AA40D3C409A08D650068C0D5 /* MusicWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA404770E7C005F316C /* MusicWheel.cpp */; }; + AA40D3C509A08D650068C0D5 /* MusicWheelItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */; }; + AA40D3C809A08D650068C0D5 /* OptionsCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */; }; + AA40D3C909A08D650068C0D5 /* ScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */; }; + AA40D3CB09A08D650068C0D5 /* SnapDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */; }; + AA40D3CC09A08D650068C0D5 /* TextBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB404770E7C005F316C /* TextBanner.cpp */; }; + AA40D3CD09A08D650068C0D5 /* WheelNotifyIcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */; }; + AA40D3CE09A08D650068C0D5 /* ArrowEffects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */; }; + AA40D3CF09A08D650068C0D5 /* Background.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFEFF04770F63005F316C /* Background.cpp */; }; + AA40D3D009A08D650068C0D5 /* BGAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0104770F63005F316C /* BGAnimation.cpp */; }; + AA40D3D109A08D650068C0D5 /* BGAnimationLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */; }; + AA40D3D309A08D650068C0D5 /* DancingCharacters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0704770F63005F316C /* DancingCharacters.cpp */; }; + AA40D3D409A08D650068C0D5 /* GhostArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */; }; + AA40D3D509A08D650068C0D5 /* HoldJudgment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1504770F63005F316C /* HoldJudgment.cpp */; }; + AA40D3D709A08D650068C0D5 /* LifeMeterBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */; }; + AA40D3D809A08D650068C0D5 /* LifeMeterBattery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */; }; + AA40D3D909A08D650068C0D5 /* LyricDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */; }; + AA40D3DA09A08D650068C0D5 /* NoteDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2104770F63005F316C /* NoteDisplay.cpp */; }; + AA40D3DB09A08D650068C0D5 /* NoteField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2304770F63005F316C /* NoteField.cpp */; }; + AA40D3DC09A08D650068C0D5 /* ScoreDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */; }; + AA40D3DD09A08D650068C0D5 /* ScoreDisplayBattle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */; }; + AA40D3DE09A08D650068C0D5 /* ScoreDisplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */; }; + AA40D3DF09A08D650068C0D5 /* ScoreDisplayOni.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */; }; + AA40D3E009A08D650068C0D5 /* ScoreDisplayRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */; }; + AA40D3E109A08D650068C0D5 /* Transition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7004770F86005F316C /* Transition.cpp */; }; + AA40D3E209A08D650068C0D5 /* Actor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7504770FFD005F316C /* Actor.cpp */; }; + AA40D3E309A08D650068C0D5 /* ActorFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7704770FFD005F316C /* ActorFrame.cpp */; }; + AA40D3E409A08D650068C0D5 /* ActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFF7904770FFD005F316C /* ActorScroller.cpp */; }; + AA40D3E509A08D650068C0D5 /* BitmapText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFB904770FFD005F316C /* BitmapText.cpp */; }; + AA40D3E609A08D650068C0D5 /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBD04770FFD005F316C /* Model.cpp */; }; + AA40D3E709A08D650068C0D5 /* ModelTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */; }; + AA40D3E809A08D650068C0D5 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6EFFC204770FFD005F316C /* Sprite.cpp */; }; + AA40D3E909A08D650068C0D5 /* Screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E000A047711F3005F316C /* Screen.cpp */; }; + AA40D3EA09A08D650068C0D5 /* ScreenAttract.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0010047711F3005F316C /* ScreenAttract.cpp */; }; + AA40D3EC09A08D650068C0D5 /* ScreenDemonstration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */; }; + AA40D3ED09A08D650068C0D5 /* ScreenEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001D047711F3005F316C /* ScreenEdit.cpp */; settings = {COMPILER_FLAGS = "-finline-limit=300"; }; }; + AA40D3EE09A08D650068C0D5 /* ScreenEditMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */; }; + AA40D3EF09A08D650068C0D5 /* ScreenEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */; }; + AA40D3F209A08D650068C0D5 /* ScreenGameplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0029047711F3005F316C /* ScreenGameplay.cpp */; }; + AA40D3F309A08D650068C0D5 /* ScreenJukebox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0037047711F3005F316C /* ScreenJukebox.cpp */; }; + AA40D3F409A08D650068C0D5 /* ScreenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E003F047711F3005F316C /* ScreenManager.cpp */; }; + AA40D3F509A08D650068C0D5 /* ScreenMapControllers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */; }; + AA40D3F609A08D650068C0D5 /* ScreenMiniMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */; }; + AA40D3F809A08D650068C0D5 /* ScreenNameEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */; }; + AA40D3F909A08D650068C0D5 /* ScreenOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004B047711F3005F316C /* ScreenOptions.cpp */; }; + AA40D3FA09A08D650068C0D5 /* ScreenPlayerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */; }; + AA40D3FB09A08D650068C0D5 /* ScreenPrompt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0051047711F3005F316C /* ScreenPrompt.cpp */; }; + AA40D3FC09A08D650068C0D5 /* ScreenRanking.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0053047711F3005F316C /* ScreenRanking.cpp */; }; + AA40D3FD09A08D650068C0D5 /* ScreenSandbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0057047711F3005F316C /* ScreenSandbox.cpp */; }; + AA40D3FE09A08D650068C0D5 /* ScreenSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0059047711F3005F316C /* ScreenSelect.cpp */; }; + AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; + AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; + AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; + AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; + AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; + AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; + AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; + AA40D40B09A08D650068C0D5 /* AnnouncerManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */; }; + AA40D40C09A08D650068C0D5 /* GameManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01010477128A005F316C /* GameManager.cpp */; }; + AA40D40D09A08D650068C0D5 /* GameState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01030477128A005F316C /* GameState.cpp */; }; + AA40D40E09A08D650068C0D5 /* InputFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01050477128A005F316C /* InputFilter.cpp */; }; + AA40D40F09A08D650068C0D5 /* InputMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01070477128A005F316C /* InputMapper.cpp */; }; + AA40D41009A08D650068C0D5 /* InputQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01090477128A005F316C /* InputQueue.cpp */; }; + AA40D41109A08D650068C0D5 /* NoteSkinManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010B0477128A005F316C /* NoteSkinManager.cpp */; }; + AA40D41209A08D650068C0D5 /* PrefsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010D0477128A005F316C /* PrefsManager.cpp */; }; + AA40D41309A08D650068C0D5 /* SongManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E010F0477128A005F316C /* SongManager.cpp */; }; + AA40D41409A08D650068C0D5 /* ThemeManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01120477128A005F316C /* ThemeManager.cpp */; }; + AA40D41509A08D650068C0D5 /* RageSoundDriver_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */; }; + AA40D41709A08D650068C0D5 /* MovieTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DB04771F11005F316C /* MovieTexture.cpp */; }; + AA40D41809A08D650068C0D5 /* SongCacheIndex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01DE04772005005F316C /* SongCacheIndex.cpp */; }; + AA40D41909A08D650068C0D5 /* Song.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E20477205A005F316C /* Song.cpp */; }; + AA40D41A09A08D650068C0D5 /* RandomSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E01E6047720A3005F316C /* RandomSample.cpp */; }; + AA40D41C09A08D650068C0D5 /* RageUtil_CharConversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */; }; + AA40D41D09A08D650068C0D5 /* BannerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE35EB04967E25005F316C /* BannerCache.cpp */; }; + AA40D42009A08D650068C0D5 /* ScreenSelectMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */; }; + AA40D42109A08D650068C0D5 /* CombinedLifeMeterTug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */; }; + AA40D42209A08D650068C0D5 /* ScoreKeeperRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */; }; + AA40D42309A08D650068C0D5 /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; + AA40D42409A08D650068C0D5 /* maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7C04AFD87300D02EE9 /* maketables.c */; }; + AA40D42509A08D650068C0D5 /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; + AA40D42609A08D650068C0D5 /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; + AA40D42709A08D650068C0D5 /* RageUtil_FileDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */; }; + AA40D42909A08D650068C0D5 /* ActorUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */; }; + AA40D42A09A08D650068C0D5 /* ArchHooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */; }; + AA40D42B09A08D650068C0D5 /* InputHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */; }; + AA40D42D09A08D650068C0D5 /* MovieTexture_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */; }; + AA40D42E09A08D650068C0D5 /* RageFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA272C3004CD757100D02EE9 /* RageFile.cpp */; }; + AA40D42F09A08D650068C0D5 /* CrashHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */; }; + AA40D43009A08D650068C0D5 /* CrashHandlerChild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */; }; + AA40D43109A08D650068C0D5 /* ver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA52E9BD04DBBCF400D02EE9 /* ver.cpp */; }; + AA40D43209A08D650068C0D5 /* Steps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF430FD04DC98BC00D02EE9 /* Steps.cpp */; }; + AA40D43309A08D650068C0D5 /* NoteDataUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */; }; + AA40D43409A08D650068C0D5 /* BeginnerHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */; }; + AA40D43609A08D650068C0D5 /* MovieTexture_FFMpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */; }; + AA40D43709A08D650068C0D5 /* ProfileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C6556050D234B0073A143 /* ProfileManager.cpp */; }; + AA40D43809A08D650068C0D5 /* RageSoundReader_WAV.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */; }; + AA40D43909A08D650068C0D5 /* RageSoundReader_FileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */; }; + AA40D43B09A08D650068C0D5 /* RageSoundReader_Vorbisfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */; }; + AA40D43D09A08D650068C0D5 /* RageSoundReader_Resample_Good.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */; }; + AA40D43E09A08D650068C0D5 /* ScreenExit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */; }; + AA40D43F09A08D650068C0D5 /* ScreenOptionsMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */; }; + AA40D44009A08D650068C0D5 /* ScreenOptionsMasterPrefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */; }; + AA40D44109A08D650068C0D5 /* ScreenReloadSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */; }; + AA40D44209A08D650068C0D5 /* ScreenInstructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0033047711F3005F316C /* ScreenInstructions.cpp */; }; + AA40D44309A08D650068C0D5 /* ScreenHowToPlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */; }; + AA40D44409A08D650068C0D5 /* PercentageDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */; }; + AA40D44509A08D650068C0D5 /* ScoreDisplayPercentage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */; }; + AA40D44709A08D650068C0D5 /* ScreenTestInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */; }; + AA40D44809A08D650068C0D5 /* ScreenBookkeeping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */; }; + AA40D44909A08D650068C0D5 /* ScreenNameEntryTraditional.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */; }; + AA40D44A09A08D650068C0D5 /* Bookkeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */; }; + AA40D44B09A08D650068C0D5 /* GraphDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */; }; + AA40D44C09A08D650068C0D5 /* ComboGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */; }; + AA40D44D09A08D650068C0D5 /* Attack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF5541054E736D00D02EE9 /* Attack.cpp */; }; + AA40D44E09A08D650068C0D5 /* RageTextureID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */; }; + AA40D44F09A08D650068C0D5 /* LightsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DCE30567660A00B5D56F /* LightsManager.cpp */; }; + AA40D45009A08D650068C0D5 /* PaneDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */; }; + AA40D45109A08D650068C0D5 /* DifficultyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */; }; + AA40D45209A08D650068C0D5 /* LightsDriver_SystemMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */; }; + AA40D45309A08D650068C0D5 /* AttackDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */; }; + AA40D45409A08D650068C0D5 /* RageFileDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */; }; + AA40D45509A08D650068C0D5 /* RageFileDriverDirect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */; }; + AA40D45609A08D650068C0D5 /* RageFileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */; }; + AA40D45709A08D650068C0D5 /* RageFileDriverZip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */; }; + AA40D45809A08D650068C0D5 /* MemoryCardManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */; }; + AA40D45909A08D650068C0D5 /* DualScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */; }; + AA40D45A09A08D650068C0D5 /* TimingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C420599B50D00779F33 /* TimingData.cpp */; }; + AA40D45B09A08D650068C0D5 /* MemoryCardDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */; }; + AA40D45C09A08D650068C0D5 /* ReceptorArrow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */; }; + AA40D45D09A08D650068C0D5 /* ReceptorArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */; }; + AA40D45E09A08D650068C0D5 /* ScreenEnding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */; }; + AA40D45F09A08D650068C0D5 /* Foreground.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321E05ACD931001A0E84 /* Foreground.cpp */; }; + AA40D46009A08D650068C0D5 /* RageFileDriverDirectHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */; }; + AA40D46109A08D650068C0D5 /* ModelManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206505D63FA700056441 /* ModelManager.cpp */; }; + AA40D46209A08D650068C0D5 /* RageModelGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206905D6400800056441 /* RageModelGeometry.cpp */; }; + AA40D46309A08D650068C0D5 /* Profile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA50201D05D6D7B200ACEFD0 /* Profile.cpp */; }; + AA40D46409A08D650068C0D5 /* HighScore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */; }; + AA40D46509A08D650068C0D5 /* CryptManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABD0B3605DF3F22004F7929 /* CryptManager.cpp */; settings = {COMPILER_FLAGS = "-O0 -Wno-uninitialized"; }; }; + AA40D46609A08D650068C0D5 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA71EA005EE154E00D2E8FF /* global.cpp */; }; + AA40D46709A08D650068C0D5 /* Backtrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F280601C528002D2DEE /* Backtrace.cpp */; }; + AA40D46809A08D650068C0D5 /* BacktraceNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */; }; + AA40D46909A08D650068C0D5 /* ScreenSetTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */; }; + AA40D46A09A08D650068C0D5 /* NetworkSyncManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */; }; + AA40D46C09A08D650068C0D5 /* ActiveAttackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */; }; + AA40D46D09A08D650068C0D5 /* RageSoundDriver_Generic_Software.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */; }; + AA40D46E09A08D650068C0D5 /* ScreenTestLights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */; }; + AA40D46F09A08D650068C0D5 /* RageDisplay_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */; }; + AA40D47409A08D650068C0D5 /* RageSoundPosMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */; }; + AA40D47509A08D650068C0D5 /* SignalHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */; }; + AA40D47609A08D650068C0D5 /* CourseUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */; }; + AA40D47709A08D650068C0D5 /* SongUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F90637A5F000AFB891 /* SongUtil.cpp */; }; + AA40D47809A08D650068C0D5 /* StepsUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */; }; + AA40D47909A08D650068C0D5 /* ScreenWithMenuElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */; }; + AA40D49009A08D650068C0D5 /* RageSurface_Load_GIF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */; }; + AA40D49109A08D650068C0D5 /* RageSurface_Load_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */; }; + AA40D49209A08D650068C0D5 /* RageSurface_Load_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */; }; + AA40D49309A08D650068C0D5 /* RageSurface_Load_XPM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */; }; + AA40D49409A08D650068C0D5 /* RageSurface_Load.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6740659E78D00738526 /* RageSurface_Load.cpp */; }; + AA40D49609A08D650068C0D5 /* Difficulty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD6A712065E0FDF0042165A /* Difficulty.cpp */; }; + AA40D49709A08D650068C0D5 /* Trail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3650663112800DAE1FD /* Trail.cpp */; }; + AA40D49809A08D650068C0D5 /* TrailUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3670663112800DAE1FD /* TrailUtil.cpp */; }; + AA40D49909A08D650068C0D5 /* ScreenNetworkOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */; }; + AA40D49A09A08D650068C0D5 /* Dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD675EF06795175006002B0 /* Dialog.cpp */; }; + AA40D49C09A08D650068C0D5 /* Threads_Pthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */; }; + AA40D49D09A08D650068C0D5 /* RageSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA915879067D2C2C00078E36 /* RageSurface.cpp */; }; + AA40D49E09A08D650068C0D5 /* RageSurface_Load_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */; }; + AA40D49F09A08D650068C0D5 /* RageSurface_Save_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */; }; + AA40D4A009A08D650068C0D5 /* Style.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA139C4606923EBE00C1F6ED /* Style.cpp */; }; + AA40D4A109A08D650068C0D5 /* GameSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */; }; + AA40D4A209A08D650068C0D5 /* MemoryCardDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */; }; + AA40D4A309A08D650068C0D5 /* RadarValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D78FF06A275E90064B980 /* RadarValues.cpp */; }; + AA40D4A409A08D650068C0D5 /* DateTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D793106A279530064B980 /* DateTime.cpp */; }; + AA40D4A509A08D650068C0D5 /* StyleUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3A706006AA1645006F755E /* StyleUtil.cpp */; }; + AA40D4A609A08D650068C0D5 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9A78A906B5C72200B03E97 /* Game.cpp */; }; + AA40D4A709A08D650068C0D5 /* ScreenNetSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */; }; + AA40D4A909A08D650068C0D5 /* RageSurfaceUtils_Palettize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */; }; + AA40D4AA09A08D650068C0D5 /* RageSurfaceUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */; }; + AA40D4AB09A08D650068C0D5 /* ScreenNetEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */; }; + AA40D4AC09A08D650068C0D5 /* RageFileDriverMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */; }; + AA40D4AD09A08D650068C0D5 /* DarwinThreadHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */; }; + AA40D4AE09A08D650068C0D5 /* RageUtil_BackgroundLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */; }; + AA40D4AF09A08D650068C0D5 /* ScreenDimensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */; }; + AA40D4B009A08D650068C0D5 /* InputHandler_MonkeyKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */; }; + AA40D4B109A08D650068C0D5 /* AutoKeysounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */; }; + AA40D4B209A08D650068C0D5 /* RageSoundMixBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */; }; + AA40D4B309A08D650068C0D5 /* RageSoundReader_Chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */; }; + AA40D4B409A08D650068C0D5 /* RageSoundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */; }; + AA40D4B509A08D650068C0D5 /* ScreenNetRoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */; }; + AA40D4B609A08D650068C0D5 /* ScreenNetSelectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */; }; + AA40D4B709A08D650068C0D5 /* ScreenPackages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */; }; + AA40D4B809A08D650068C0D5 /* ScreenSystemLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */; }; + AA40D4B909A08D650068C0D5 /* Command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08370762532800835464 /* Command.cpp */; }; + AA40D4BA09A08D650068C0D5 /* GameCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B08390762532800835464 /* GameCommand.cpp */; }; + AA40D4BB09A08D650068C0D5 /* Preference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1B083B0762532800835464 /* Preference.cpp */; }; + AA40D4BC09A08D650068C0D5 /* RageFileBasic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */; }; + AA40D4BD09A08D650068C0D5 /* RageFileDriverDeflate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */; }; + AA40D4BE09A08D650068C0D5 /* RageFileDriverSlice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */; }; + AA40D4BF09A08D650068C0D5 /* RageSurface_Save_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */; }; + AA40D4C009A08D650068C0D5 /* RageSurfaceUtils_Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */; }; + AA40D4C109A08D650068C0D5 /* RageSurfaceUtils_Zoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */; }; + AA40D4C209A08D650068C0D5 /* LuaManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */; }; + AA40D4C609A08D650068C0D5 /* RageFileDriverTimeout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */; }; + AA40D4C709A08D650068C0D5 /* RageUtil_WorkerThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */; }; + AA40D4C809A08D650068C0D5 /* LuaReference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */; }; + AA40D4C909A08D650068C0D5 /* MessageManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */; }; + AA40D4CA09A08D650068C0D5 /* StatsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */; }; + AA40D4CB09A08D650068C0D5 /* AutoActor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */; }; + AA40D4CC09A08D650068C0D5 /* OptionRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */; }; + AA40D4CD09A08D650068C0D5 /* PlayerStageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */; }; + AA40D4CE09A08D650068C0D5 /* PlayerState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */; }; + AA40D4CF09A08D650068C0D5 /* RollingNumbers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */; }; + AA40D4D009A08D650068C0D5 /* ScoreDisplayCalories.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */; }; + AA40D4D109A08D650068C0D5 /* CommonMetrics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */; }; + AA40D4D209A08D650068C0D5 /* UnlockManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75207F20D0D00C99272 /* UnlockManager.cpp */; }; + AA40D4D309A08D650068C0D5 /* OptionRowHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */; }; + AA40D4D409A08D650068C0D5 /* ScreenMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */; }; + AA40D4D509A08D650068C0D5 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E6E0907F518E800C3EBB4 /* Quad.cpp */; }; + AA40D4D609A08D650068C0D5 /* ScoreDisplayAliveTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */; }; + AA40D4D709A08D650068C0D5 /* ScoreDisplayLifeTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */; }; + AA40D4D809A08D650068C0D5 /* StreamDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */; }; + AA40D4D909A08D650068C0D5 /* LifeMeterTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */; }; + AA40D4DA09A08D650068C0D5 /* WheelBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */; }; + AA40D4DB09A08D650068C0D5 /* WheelItemBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */; }; + AA40D4DD09A08D650068C0D5 /* ScreenDebugOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */; }; + AA40D4DF09A08D650068C0D5 /* ScreenSaveSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */; }; + AA40D4E109A08D650068C0D5 /* ScreenSyncOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */; }; + AA40D4E209A08D650068C0D5 /* BackgroundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */; }; + AA40D4E309A08D650068C0D5 /* ScreenSplash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */; }; + AA40D4E409A08D650068C0D5 /* LuaBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8EE0750866E266002C51A7 /* LuaBinding.cpp */; }; + AA40D4E509A08D650068C0D5 /* RageTexturePreloader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */; }; + AA40D4E609A08D650068C0D5 /* ScreenOptionsEditProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */; }; + AA40D4E709A08D650068C0D5 /* GameLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */; }; + AA40D4E809A08D650068C0D5 /* CharacterManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74508B64B1400FA24CA /* CharacterManager.cpp */; }; + AA40D4E909A08D650068C0D5 /* CourseLoaderCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */; }; + AA40D4EA09A08D650068C0D5 /* CourseWriterCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */; }; + AA40D4EE09A08D650068C0D5 /* ScreenOptionsManageCourses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */; }; + AA40D4EF09A08D650068C0D5 /* ScreenOptionsManageProfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */; }; + AA40D4F109A08D650068C0D5 /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; }; + AA40D4F209A08D650068C0D5 /* ActorSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE2608E7D793005087FC /* ActorSound.cpp */; }; + AA40D4F409A08D650068C0D5 /* ScreenGameplayLesson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */; }; + AA40D4F709A08D650068C0D5 /* LuaExpressionTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */; }; + AA40D4F809A08D650068C0D5 /* DynamicActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */; }; + AA40D4F909A08D650068C0D5 /* ScoreKeeperNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */; }; + AA40D4FA09A08D650068C0D5 /* ScreenStatsOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */; }; + AA40D4FC09A08D650068C0D5 /* MovieTexture_Generic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D00909934500141131 /* MovieTexture_Generic.cpp */; }; + AA40D4FD09A08D650068C0D5 /* MovieTexture_Theora.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D20909934500141131 /* MovieTexture_Theora.cpp */; }; + AA40D4FF09A08D650068C0D5 /* LifeMeter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA2FB638091212AF000FD574 /* LifeMeter.cpp */; }; + AA40D50109A08D650068C0D5 /* SpecialFiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */; }; + AA40D50209A08D650068C0D5 /* ScreenOptionsManageEditSteps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */; }; + AA40D50309A08D650068C0D5 /* ScreenOptionsMemoryCard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */; }; + AA40D50409A08D650068C0D5 /* ScreenServiceAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */; }; + AA40D50609A08D650068C0D5 /* XmlFileUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA07328C0954381800F396C5 /* XmlFileUtil.cpp */; }; + AA40D50709A08D650068C0D5 /* XmlFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6889905D7F3C800964E6D /* XmlFile.cpp */; }; + AA40D50809A08D650068C0D5 /* LocalizedString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */; }; + AA40D50D09A08D650068C0D5 /* SMMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = AABBFCD209838C3A00F077E2 /* SMMain.mm */; }; + AA40D50E09A08D650068C0D5 /* HIDDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44705309846B0800983E82 /* HIDDevice.cpp */; }; + AA40D50F09A08D650068C0D5 /* JoystickDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44708D0984720900983E82 /* JoystickDevice.cpp */; }; + AA40D51009A08D650068C0D5 /* KeyboardDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4470BB098476F600983E82 /* KeyboardDevice.cpp */; }; + AA40D51109A08D650068C0D5 /* Tween.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0C8C00984AE3B0075FC53 /* Tween.cpp */; }; + AA40D51209A08D650068C0D5 /* ScreenUnlockStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */; }; + AA40D51309A08D650068C0D5 /* AdjustSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA84B7050996F8370085EECB /* AdjustSync.cpp */; }; + AA40D51509A08D650068C0D5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AA40D51609A08D650068C0D5 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7CE047AC7BF005F316C /* Carbon.framework */; }; + AA40D51709A08D650068C0D5 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D0047AC7EA005F316C /* IOKit.framework */; }; + AA40D51809A08D650068C0D5 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0F7D2047ACBC9005F316C /* QuickTime.framework */; }; + AA40D51909A08D650068C0D5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA8DD84904A2E51400D02EE9 /* OpenGL.framework */; }; + AA40D51A09A08D650068C0D5 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */; }; + AA40D51C09A08D650068C0D5 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAE06043704002672F3 /* AudioToolbox.framework */; }; + AA40D51D09A08D650068C0D5 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA230EAF06043704002672F3 /* AudioUnit.framework */; }; + AA40D51E09A08D650068C0D5 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA8E0020696984300FCE1F9 /* CoreAudio.framework */; }; + AA40D51F09A08D650068C0D5 /* vecLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA77E8A108B6ABD500FA24CA /* vecLib.framework */; }; + AA42F5E8067068D30013509E /* ScreenNetworkOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */; }; + AA44705509846B0800983E82 /* HIDDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44705309846B0800983E82 /* HIDDevice.cpp */; }; + AA44708F0984720900983E82 /* JoystickDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA44708D0984720900983E82 /* JoystickDevice.cpp */; }; + AA4470BD098476F600983E82 /* KeyboardDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4470BB098476F600983E82 /* KeyboardDevice.cpp */; }; + AA4F27B20B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */; }; + AA4F27B40B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */; }; + AA4F27B60B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */; }; + AA4F27B70B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4F27AF0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h */; }; + AA4F27B80B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */; }; + AA4F27B90B2C01B400ADEA79 /* RageSoundReader_Pan.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4F27B10B2C01B400ADEA79 /* RageSoundReader_Pan.h */; }; + AA50201F05D6D7B200ACEFD0 /* Profile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA50201D05D6D7B200ACEFD0 /* Profile.cpp */; }; + AA5A51F40A8441AA006DBB92 /* ModsGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5A51F20A8441AA006DBB92 /* ModsGroup.h */; }; + AA5C73FD0637A5F100AFB891 /* CourseUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */; }; + AA5C73FF0637A5F100AFB891 /* SongUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73F90637A5F000AFB891 /* SongUtil.cpp */; }; + AA5C74010637A5F100AFB891 /* StepsUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */; }; + AA5D16570A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */; }; + AA5D16590A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */; }; + AA5D165A0A79805C00F17E86 /* RageTextureRenderTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5D16560A79805C00F17E86 /* RageTextureRenderTarget.h */; }; + AA5D166C0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */; }; + AA5D166E0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */; }; + AA5D166F0A798C0E00F17E86 /* ActorFrameTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5D166B0A798C0E00F17E86 /* ActorFrameTexture.h */; }; + AA608EC00B0F85E400B39AC4 /* DialogDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */; }; + AA608EC10B0F85E400B39AC4 /* DialogDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */; }; + AA608FAD0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */; }; + AA608FAE0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */; }; + AA6090E60B141D1C00B39AC4 /* GamePreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */; }; + AA6090E80B141D1C00B39AC4 /* GamePreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */; }; + AA6090E90B141D1C00B39AC4 /* GamePreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6090E50B141D1C00B39AC4 /* GamePreferences.h */; }; + AA60E0C2067992D7008ADC41 /* Threads_Pthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */; }; + AA64218806EC606F00C21584 /* RageFileDriverMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */; }; + AA65877B098C322800CE55CC /* ScreenUnlockStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */; }; + AA6999610ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */; }; + AA6999620ACE1CBB000237F9 /* ControllerStateDisplay.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6999600ACE1CBB000237F9 /* ControllerStateDisplay.h */; }; + AA6999630ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */; }; + AA6C6AD80DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */; }; + AA6C6ADA0DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */; }; + AA6C6ADB0DC6B17B00E7A13E /* ArchHooks_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6AD70DC6B17B00E7A13E /* ArchHooks_MacOSX.h */; }; + AA6C6ADE0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */; }; + AA6C6AE00DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */; }; + AA6C6AE10DC6B1DC00E7A13E /* DialogDriver_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6ADD0DC6B1DC00E7A13E /* DialogDriver_MacOSX.h */; }; + AA6C6AE50DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */; }; + AA6C6AE60DC6B22800E7A13E /* LoadingWindow_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6AE20DC6B22800E7A13E /* LoadingWindow_MacOSX.h */; }; + AA6C6AE70DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */; }; + AA6C6B030DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */; }; + AA6C6B040DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6B000DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h */; }; + AA6C6B050DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */; }; + AA6C6B080DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */; }; + AA6C6B0A0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */; }; + AA6C6B0B0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6B070DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h */; }; + AA6C6B0E0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */; }; + AA6C6B100DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */; }; + AA6C6B110DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6C6B0D0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h */; }; + AA6E6E0A07F518E800C3EBB4 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E6E0907F518E800C3EBB4 /* Quad.cpp */; }; + AA70E36A0663112800DAE1FD /* Trail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3650663112800DAE1FD /* Trail.cpp */; }; + AA70E36C0663112800DAE1FD /* TrailUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA70E3670663112800DAE1FD /* TrailUtil.cpp */; }; + AA7144B10809EEEC00545684 /* ScoreDisplayAliveTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */; }; + AA729C440599B50D00779F33 /* TimingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C420599B50D00779F33 /* TimingData.cpp */; }; + AA729C480599B54D00779F33 /* MemoryCardDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */; }; + AA729C520599B58D00779F33 /* ReceptorArrow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */; }; + AA729C540599B58D00779F33 /* ReceptorArrowRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */; }; + AA77E74708B64B1400FA24CA /* CharacterManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74508B64B1400FA24CA /* CharacterManager.cpp */; }; + AA77E74F08B64B5600FA24CA /* CourseLoaderCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */; }; + AA77E75108B64B5600FA24CA /* CourseWriterCRS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */; }; + AA77E76508B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */; }; + AA77E76708B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */; }; + AA77E8B108B6ABD500FA24CA /* vecLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA77E8A108B6ABD500FA24CA /* vecLib.framework */; }; + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AA7ADC27072CAB7F00C50A7F /* RageSoundReader_Chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */; }; + AA7ADC29072CAB7F00C50A7F /* RageSoundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */; }; + AA7C8AFC0B6744F700FD9940 /* bn_error.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A800B6744F600FD9940 /* bn_error.c */; }; + AA7C8AFD0B6744F700FD9940 /* bn_fast_mp_invmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */; }; + AA7C8AFE0B6744F700FD9940 /* bn_fast_mp_montgomery_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */; }; + AA7C8AFF0B6744F700FD9940 /* bn_fast_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A830B6744F600FD9940 /* bn_fast_s_mp_mul_digs.c */; }; + AA7C8B000B6744F700FD9940 /* bn_fast_s_mp_mul_high_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A840B6744F600FD9940 /* bn_fast_s_mp_mul_high_digs.c */; }; + AA7C8B010B6744F700FD9940 /* bn_fast_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A850B6744F600FD9940 /* bn_fast_s_mp_sqr.c */; }; + AA7C8B020B6744F700FD9940 /* bn_mp_2expt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A860B6744F600FD9940 /* bn_mp_2expt.c */; }; + AA7C8B030B6744F700FD9940 /* bn_mp_abs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A870B6744F600FD9940 /* bn_mp_abs.c */; }; + AA7C8B040B6744F700FD9940 /* bn_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A880B6744F600FD9940 /* bn_mp_add.c */; }; + AA7C8B050B6744F700FD9940 /* bn_mp_add_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A890B6744F600FD9940 /* bn_mp_add_d.c */; }; + AA7C8B060B6744F700FD9940 /* bn_mp_addmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8A0B6744F600FD9940 /* bn_mp_addmod.c */; }; + AA7C8B070B6744F700FD9940 /* bn_mp_and.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8B0B6744F600FD9940 /* bn_mp_and.c */; }; + AA7C8B080B6744F700FD9940 /* bn_mp_clamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8C0B6744F600FD9940 /* bn_mp_clamp.c */; }; + AA7C8B090B6744F700FD9940 /* bn_mp_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8D0B6744F600FD9940 /* bn_mp_clear.c */; }; + AA7C8B0A0B6744F700FD9940 /* bn_mp_clear_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8E0B6744F600FD9940 /* bn_mp_clear_multi.c */; }; + AA7C8B0B0B6744F700FD9940 /* bn_mp_cmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A8F0B6744F600FD9940 /* bn_mp_cmp.c */; }; + AA7C8B0C0B6744F700FD9940 /* bn_mp_cmp_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A900B6744F600FD9940 /* bn_mp_cmp_d.c */; }; + AA7C8B0D0B6744F700FD9940 /* bn_mp_cmp_mag.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A910B6744F600FD9940 /* bn_mp_cmp_mag.c */; }; + AA7C8B0E0B6744F700FD9940 /* bn_mp_cnt_lsb.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A920B6744F600FD9940 /* bn_mp_cnt_lsb.c */; }; + AA7C8B0F0B6744F700FD9940 /* bn_mp_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A930B6744F600FD9940 /* bn_mp_copy.c */; }; + AA7C8B100B6744F700FD9940 /* bn_mp_count_bits.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A940B6744F600FD9940 /* bn_mp_count_bits.c */; }; + AA7C8B110B6744F700FD9940 /* bn_mp_div.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A950B6744F600FD9940 /* bn_mp_div.c */; }; + AA7C8B120B6744F700FD9940 /* bn_mp_div_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A960B6744F600FD9940 /* bn_mp_div_2.c */; }; + AA7C8B130B6744F700FD9940 /* bn_mp_div_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A970B6744F600FD9940 /* bn_mp_div_2d.c */; }; + AA7C8B140B6744F700FD9940 /* bn_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A980B6744F600FD9940 /* bn_mp_div_3.c */; }; + AA7C8B150B6744F700FD9940 /* bn_mp_div_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A990B6744F600FD9940 /* bn_mp_div_d.c */; }; + AA7C8B160B6744F700FD9940 /* bn_mp_dr_is_modulus.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9A0B6744F600FD9940 /* bn_mp_dr_is_modulus.c */; }; + AA7C8B170B6744F700FD9940 /* bn_mp_dr_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9B0B6744F600FD9940 /* bn_mp_dr_reduce.c */; }; + AA7C8B180B6744F700FD9940 /* bn_mp_dr_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9C0B6744F600FD9940 /* bn_mp_dr_setup.c */; }; + AA7C8B190B6744F700FD9940 /* bn_mp_exch.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9D0B6744F600FD9940 /* bn_mp_exch.c */; }; + AA7C8B1A0B6744F700FD9940 /* bn_mp_expt_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9E0B6744F600FD9940 /* bn_mp_expt_d.c */; }; + AA7C8B1B0B6744F700FD9940 /* bn_mp_exptmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A9F0B6744F600FD9940 /* bn_mp_exptmod.c */; }; + AA7C8B1C0B6744F700FD9940 /* bn_mp_exptmod_fast.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA00B6744F600FD9940 /* bn_mp_exptmod_fast.c */; }; + AA7C8B1D0B6744F700FD9940 /* bn_mp_exteuclid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA10B6744F600FD9940 /* bn_mp_exteuclid.c */; }; + AA7C8B1E0B6744F700FD9940 /* bn_mp_fread.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA20B6744F600FD9940 /* bn_mp_fread.c */; }; + AA7C8B1F0B6744F700FD9940 /* bn_mp_fwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA30B6744F600FD9940 /* bn_mp_fwrite.c */; }; + AA7C8B200B6744F700FD9940 /* bn_mp_gcd.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA40B6744F600FD9940 /* bn_mp_gcd.c */; }; + AA7C8B210B6744F700FD9940 /* bn_mp_get_int.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA50B6744F600FD9940 /* bn_mp_get_int.c */; }; + AA7C8B220B6744F700FD9940 /* bn_mp_grow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA60B6744F600FD9940 /* bn_mp_grow.c */; }; + AA7C8B230B6744F700FD9940 /* bn_mp_init.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA70B6744F600FD9940 /* bn_mp_init.c */; }; + AA7C8B240B6744F700FD9940 /* bn_mp_init_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA80B6744F600FD9940 /* bn_mp_init_copy.c */; }; + AA7C8B250B6744F700FD9940 /* bn_mp_init_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AA90B6744F600FD9940 /* bn_mp_init_multi.c */; }; + AA7C8B260B6744F700FD9940 /* bn_mp_init_set.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAA0B6744F600FD9940 /* bn_mp_init_set.c */; }; + AA7C8B270B6744F700FD9940 /* bn_mp_init_set_int.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAB0B6744F600FD9940 /* bn_mp_init_set_int.c */; }; + AA7C8B280B6744F700FD9940 /* bn_mp_init_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAC0B6744F600FD9940 /* bn_mp_init_size.c */; }; + AA7C8B290B6744F700FD9940 /* bn_mp_invmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAD0B6744F600FD9940 /* bn_mp_invmod.c */; }; + AA7C8B2A0B6744F700FD9940 /* bn_mp_invmod_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAE0B6744F600FD9940 /* bn_mp_invmod_slow.c */; }; + AA7C8B2B0B6744F700FD9940 /* bn_mp_is_square.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AAF0B6744F600FD9940 /* bn_mp_is_square.c */; }; + AA7C8B2C0B6744F700FD9940 /* bn_mp_jacobi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB00B6744F600FD9940 /* bn_mp_jacobi.c */; }; + AA7C8B2D0B6744F700FD9940 /* bn_mp_karatsuba_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB10B6744F600FD9940 /* bn_mp_karatsuba_mul.c */; }; + AA7C8B2E0B6744F700FD9940 /* bn_mp_karatsuba_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB20B6744F600FD9940 /* bn_mp_karatsuba_sqr.c */; }; + AA7C8B2F0B6744F700FD9940 /* bn_mp_lcm.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB30B6744F600FD9940 /* bn_mp_lcm.c */; }; + AA7C8B300B6744F700FD9940 /* bn_mp_lshd.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB40B6744F700FD9940 /* bn_mp_lshd.c */; }; + AA7C8B310B6744F700FD9940 /* bn_mp_mod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB50B6744F700FD9940 /* bn_mp_mod.c */; }; + AA7C8B320B6744F700FD9940 /* bn_mp_mod_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB60B6744F700FD9940 /* bn_mp_mod_2d.c */; }; + AA7C8B330B6744F700FD9940 /* bn_mp_mod_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB70B6744F700FD9940 /* bn_mp_mod_d.c */; }; + AA7C8B340B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB80B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c */; }; + AA7C8B350B6744F700FD9940 /* bn_mp_montgomery_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AB90B6744F700FD9940 /* bn_mp_montgomery_reduce.c */; }; + AA7C8B360B6744F700FD9940 /* bn_mp_montgomery_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABA0B6744F700FD9940 /* bn_mp_montgomery_setup.c */; }; + AA7C8B370B6744F700FD9940 /* bn_mp_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABB0B6744F700FD9940 /* bn_mp_mul.c */; }; + AA7C8B380B6744F700FD9940 /* bn_mp_mul_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABC0B6744F700FD9940 /* bn_mp_mul_2.c */; }; + AA7C8B390B6744F700FD9940 /* bn_mp_mul_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABD0B6744F700FD9940 /* bn_mp_mul_2d.c */; }; + AA7C8B3A0B6744F700FD9940 /* bn_mp_mul_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABE0B6744F700FD9940 /* bn_mp_mul_d.c */; }; + AA7C8B3B0B6744F700FD9940 /* bn_mp_mulmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ABF0B6744F700FD9940 /* bn_mp_mulmod.c */; }; + AA7C8B3C0B6744F700FD9940 /* bn_mp_n_root.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC00B6744F700FD9940 /* bn_mp_n_root.c */; }; + AA7C8B3D0B6744F700FD9940 /* bn_mp_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC10B6744F700FD9940 /* bn_mp_neg.c */; }; + AA7C8B3E0B6744F700FD9940 /* bn_mp_or.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC20B6744F700FD9940 /* bn_mp_or.c */; }; + AA7C8B3F0B6744F700FD9940 /* bn_mp_prime_fermat.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC30B6744F700FD9940 /* bn_mp_prime_fermat.c */; }; + AA7C8B400B6744F700FD9940 /* bn_mp_prime_is_divisible.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC40B6744F700FD9940 /* bn_mp_prime_is_divisible.c */; }; + AA7C8B410B6744F700FD9940 /* bn_mp_prime_is_prime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC50B6744F700FD9940 /* bn_mp_prime_is_prime.c */; }; + AA7C8B420B6744F700FD9940 /* bn_mp_prime_miller_rabin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC60B6744F700FD9940 /* bn_mp_prime_miller_rabin.c */; }; + AA7C8B430B6744F700FD9940 /* bn_mp_prime_next_prime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC70B6744F700FD9940 /* bn_mp_prime_next_prime.c */; }; + AA7C8B440B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC80B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c */; }; + AA7C8B450B6744F700FD9940 /* bn_mp_prime_random_ex.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AC90B6744F700FD9940 /* bn_mp_prime_random_ex.c */; }; + AA7C8B460B6744F700FD9940 /* bn_mp_radix_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACA0B6744F700FD9940 /* bn_mp_radix_size.c */; }; + AA7C8B470B6744F700FD9940 /* bn_mp_radix_smap.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACB0B6744F700FD9940 /* bn_mp_radix_smap.c */; }; + AA7C8B480B6744F700FD9940 /* bn_mp_rand.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACC0B6744F700FD9940 /* bn_mp_rand.c */; }; + AA7C8B490B6744F700FD9940 /* bn_mp_read_radix.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACD0B6744F700FD9940 /* bn_mp_read_radix.c */; }; + AA7C8B4A0B6744F700FD9940 /* bn_mp_read_signed_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACE0B6744F700FD9940 /* bn_mp_read_signed_bin.c */; }; + AA7C8B4B0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ACF0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c */; }; + AA7C8B4C0B6744F700FD9940 /* bn_mp_reduce.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD00B6744F700FD9940 /* bn_mp_reduce.c */; }; + AA7C8B4D0B6744F700FD9940 /* bn_mp_reduce_2k.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD10B6744F700FD9940 /* bn_mp_reduce_2k.c */; }; + AA7C8B4E0B6744F700FD9940 /* bn_mp_reduce_2k_l.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD20B6744F700FD9940 /* bn_mp_reduce_2k_l.c */; }; + AA7C8B4F0B6744F700FD9940 /* bn_mp_reduce_2k_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD30B6744F700FD9940 /* bn_mp_reduce_2k_setup.c */; }; + AA7C8B500B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD40B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c */; }; + AA7C8B510B6744F700FD9940 /* bn_mp_reduce_is_2k.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD50B6744F700FD9940 /* bn_mp_reduce_is_2k.c */; }; + AA7C8B520B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD60B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c */; }; + AA7C8B530B6744F700FD9940 /* bn_mp_reduce_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD70B6744F700FD9940 /* bn_mp_reduce_setup.c */; }; + AA7C8B540B6744F700FD9940 /* bn_mp_rshd.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD80B6744F700FD9940 /* bn_mp_rshd.c */; }; + AA7C8B550B6744F700FD9940 /* bn_mp_set.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AD90B6744F700FD9940 /* bn_mp_set.c */; }; + AA7C8B560B6744F700FD9940 /* bn_mp_set_int.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADA0B6744F700FD9940 /* bn_mp_set_int.c */; }; + AA7C8B570B6744F700FD9940 /* bn_mp_shrink.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADB0B6744F700FD9940 /* bn_mp_shrink.c */; }; + AA7C8B580B6744F700FD9940 /* bn_mp_signed_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADC0B6744F700FD9940 /* bn_mp_signed_bin_size.c */; }; + AA7C8B590B6744F700FD9940 /* bn_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADD0B6744F700FD9940 /* bn_mp_sqr.c */; }; + AA7C8B5A0B6744F700FD9940 /* bn_mp_sqrmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADE0B6744F700FD9940 /* bn_mp_sqrmod.c */; }; + AA7C8B5B0B6744F700FD9940 /* bn_mp_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8ADF0B6744F700FD9940 /* bn_mp_sqrt.c */; }; + AA7C8B5C0B6744F700FD9940 /* bn_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE00B6744F700FD9940 /* bn_mp_sub.c */; }; + AA7C8B5D0B6744F700FD9940 /* bn_mp_sub_d.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE10B6744F700FD9940 /* bn_mp_sub_d.c */; }; + AA7C8B5E0B6744F700FD9940 /* bn_mp_submod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE20B6744F700FD9940 /* bn_mp_submod.c */; }; + AA7C8B5F0B6744F700FD9940 /* bn_mp_to_signed_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE30B6744F700FD9940 /* bn_mp_to_signed_bin.c */; }; + AA7C8B600B6744F700FD9940 /* bn_mp_to_signed_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE40B6744F700FD9940 /* bn_mp_to_signed_bin_n.c */; }; + AA7C8B610B6744F700FD9940 /* bn_mp_to_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE50B6744F700FD9940 /* bn_mp_to_unsigned_bin.c */; }; + AA7C8B620B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE60B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c */; }; + AA7C8B630B6744F700FD9940 /* bn_mp_toom_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE70B6744F700FD9940 /* bn_mp_toom_mul.c */; }; + AA7C8B640B6744F700FD9940 /* bn_mp_toom_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE80B6744F700FD9940 /* bn_mp_toom_sqr.c */; }; + AA7C8B650B6744F700FD9940 /* bn_mp_toradix.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AE90B6744F700FD9940 /* bn_mp_toradix.c */; }; + AA7C8B660B6744F700FD9940 /* bn_mp_toradix_n.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEA0B6744F700FD9940 /* bn_mp_toradix_n.c */; }; + AA7C8B670B6744F700FD9940 /* bn_mp_unsigned_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEB0B6744F700FD9940 /* bn_mp_unsigned_bin_size.c */; }; + AA7C8B680B6744F700FD9940 /* bn_mp_xor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEC0B6744F700FD9940 /* bn_mp_xor.c */; }; + AA7C8B690B6744F700FD9940 /* bn_mp_zero.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AED0B6744F700FD9940 /* bn_mp_zero.c */; }; + AA7C8B6A0B6744F700FD9940 /* bn_prime_tab.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEE0B6744F700FD9940 /* bn_prime_tab.c */; }; + AA7C8B6B0B6744F700FD9940 /* bn_reverse.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AEF0B6744F700FD9940 /* bn_reverse.c */; }; + AA7C8B6C0B6744F700FD9940 /* bn_s_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF00B6744F700FD9940 /* bn_s_mp_add.c */; }; + AA7C8B6D0B6744F700FD9940 /* bn_s_mp_exptmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF10B6744F700FD9940 /* bn_s_mp_exptmod.c */; }; + AA7C8B6E0B6744F700FD9940 /* bn_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF20B6744F700FD9940 /* bn_s_mp_mul_digs.c */; }; + AA7C8B6F0B6744F700FD9940 /* bn_s_mp_mul_high_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF30B6744F700FD9940 /* bn_s_mp_mul_high_digs.c */; }; + AA7C8B700B6744F700FD9940 /* bn_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF40B6744F700FD9940 /* bn_s_mp_sqr.c */; }; + AA7C8B710B6744F700FD9940 /* bn_s_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF50B6744F700FD9940 /* bn_s_mp_sub.c */; }; + AA7C8B720B6744F700FD9940 /* bncore.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8AF60B6744F700FD9940 /* bncore.c */; }; + AA7C8B730B6744F700FD9940 /* tommath.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8AF90B6744F700FD9940 /* tommath.h */; }; + AA7C8B740B6744F700FD9940 /* tommath_class.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8AFA0B6744F700FD9940 /* tommath_class.h */; }; + AA7C8B750B6744F700FD9940 /* tommath_superclass.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */; }; + AA7C8C560B67467D00FD9940 /* aes.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B950B67467C00FD9940 /* aes.c */; }; + AA7C8C580B67467D00FD9940 /* hash_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B990B67467C00FD9940 /* hash_memory.c */; }; + AA7C8C590B67467D00FD9940 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B9A0B67467C00FD9940 /* md5.c */; }; + AA7C8C5A0B67467D00FD9940 /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8B9B0B67467C00FD9940 /* sha1.c */; }; + AA7C8C5B0B67467D00FD9940 /* tomcrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8B9D0B67467C00FD9940 /* tomcrypt.h */; }; + AA7C8C5C0B67467D00FD9940 /* tomcrypt_argchk.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8B9E0B67467C00FD9940 /* tomcrypt_argchk.h */; }; + AA7C8C5D0B67467D00FD9940 /* tomcrypt_cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8B9F0B67467C00FD9940 /* tomcrypt_cfg.h */; }; + AA7C8C5E0B67467D00FD9940 /* tomcrypt_cipher.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA00B67467C00FD9940 /* tomcrypt_cipher.h */; }; + AA7C8C5F0B67467D00FD9940 /* tomcrypt_custom.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA10B67467C00FD9940 /* tomcrypt_custom.h */; }; + AA7C8C600B67467D00FD9940 /* tomcrypt_hash.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA20B67467C00FD9940 /* tomcrypt_hash.h */; }; + AA7C8C610B67467D00FD9940 /* tomcrypt_mac.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA30B67467C00FD9940 /* tomcrypt_mac.h */; }; + AA7C8C620B67467D00FD9940 /* tomcrypt_macros.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA40B67467C00FD9940 /* tomcrypt_macros.h */; }; + AA7C8C630B67467D00FD9940 /* tomcrypt_math.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA50B67467C00FD9940 /* tomcrypt_math.h */; }; + AA7C8C640B67467D00FD9940 /* tomcrypt_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA60B67467C00FD9940 /* tomcrypt_misc.h */; }; + AA7C8C650B67467D00FD9940 /* tomcrypt_pk.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA70B67467C00FD9940 /* tomcrypt_pk.h */; }; + AA7C8C660B67467D00FD9940 /* tomcrypt_pkcs.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA80B67467C00FD9940 /* tomcrypt_pkcs.h */; }; + AA7C8C670B67467D00FD9940 /* tomcrypt_prng.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8BA90B67467C00FD9940 /* tomcrypt_prng.h */; }; + AA7C8C680B67467D00FD9940 /* ltc_ecc_fp_mulmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAC0B67467C00FD9940 /* ltc_ecc_fp_mulmod.c */; }; + AA7C8C690B67467D00FD9940 /* ltm_desc.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAD0B67467C00FD9940 /* ltm_desc.c */; }; + AA7C8C6A0B67467D00FD9940 /* multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAE0B67467C00FD9940 /* multi.c */; }; + AA7C8C6B0B67467D00FD9940 /* rand_prime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BAF0B67467C00FD9940 /* rand_prime.c */; }; + AA7C8C6C0B67467D00FD9940 /* base64_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB20B67467C00FD9940 /* base64_decode.c */; }; + AA7C8C6D0B67467D00FD9940 /* base64_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB30B67467C00FD9940 /* base64_encode.c */; }; + AA7C8C6E0B67467D00FD9940 /* burn_stack.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB40B67467C00FD9940 /* burn_stack.c */; }; + AA7C8C6F0B67467D00FD9940 /* crypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB60B67467C00FD9940 /* crypt.c */; }; + AA7C8C700B67467D00FD9940 /* crypt_argchk.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB70B67467C00FD9940 /* crypt_argchk.c */; }; + AA7C8C710B67467D00FD9940 /* crypt_cipher_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB80B67467C00FD9940 /* crypt_cipher_descriptor.c */; }; + AA7C8C720B67467D00FD9940 /* crypt_cipher_is_valid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BB90B67467C00FD9940 /* crypt_cipher_is_valid.c */; }; + AA7C8C730B67467D00FD9940 /* crypt_find_cipher.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBA0B67467C00FD9940 /* crypt_find_cipher.c */; }; + AA7C8C740B67467D00FD9940 /* crypt_find_cipher_any.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBB0B67467C00FD9940 /* crypt_find_cipher_any.c */; }; + AA7C8C750B67467D00FD9940 /* crypt_find_cipher_id.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBC0B67467C00FD9940 /* crypt_find_cipher_id.c */; }; + AA7C8C760B67467D00FD9940 /* crypt_find_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBD0B67467C00FD9940 /* crypt_find_hash.c */; }; + AA7C8C770B67467D00FD9940 /* crypt_find_hash_any.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBE0B67467C00FD9940 /* crypt_find_hash_any.c */; }; + AA7C8C780B67467D00FD9940 /* crypt_find_hash_id.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BBF0B67467C00FD9940 /* crypt_find_hash_id.c */; }; + AA7C8C790B67467D00FD9940 /* crypt_find_hash_oid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC00B67467C00FD9940 /* crypt_find_hash_oid.c */; }; + AA7C8C7A0B67467D00FD9940 /* crypt_find_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC10B67467C00FD9940 /* crypt_find_prng.c */; }; + AA7C8C7B0B67467D00FD9940 /* crypt_fsa.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC20B67467C00FD9940 /* crypt_fsa.c */; }; + AA7C8C7C0B67467D00FD9940 /* crypt_hash_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC30B67467C00FD9940 /* crypt_hash_descriptor.c */; }; + AA7C8C7D0B67467D00FD9940 /* crypt_hash_is_valid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC40B67467C00FD9940 /* crypt_hash_is_valid.c */; }; + AA7C8C7E0B67467D00FD9940 /* crypt_ltc_mp_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC50B67467C00FD9940 /* crypt_ltc_mp_descriptor.c */; }; + AA7C8C7F0B67467D00FD9940 /* crypt_prng_descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC60B67467C00FD9940 /* crypt_prng_descriptor.c */; }; + AA7C8C800B67467D00FD9940 /* crypt_prng_is_valid.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC70B67467C00FD9940 /* crypt_prng_is_valid.c */; }; + AA7C8C810B67467D00FD9940 /* crypt_register_cipher.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC80B67467C00FD9940 /* crypt_register_cipher.c */; }; + AA7C8C820B67467D00FD9940 /* crypt_register_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BC90B67467C00FD9940 /* crypt_register_hash.c */; }; + AA7C8C830B67467D00FD9940 /* crypt_register_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCA0B67467C00FD9940 /* crypt_register_prng.c */; }; + AA7C8C840B67467D00FD9940 /* crypt_unregister_cipher.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCB0B67467C00FD9940 /* crypt_unregister_cipher.c */; }; + AA7C8C850B67467D00FD9940 /* crypt_unregister_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCC0B67467C00FD9940 /* crypt_unregister_hash.c */; }; + AA7C8C860B67467D00FD9940 /* crypt_unregister_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCD0B67467C00FD9940 /* crypt_unregister_prng.c */; }; + AA7C8C870B67467D00FD9940 /* error_to_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BCE0B67467C00FD9940 /* error_to_string.c */; }; + AA7C8C880B67467D00FD9940 /* pkcs_5_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD00B67467C00FD9940 /* pkcs_5_1.c */; }; + AA7C8C890B67467D00FD9940 /* pkcs_5_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD10B67467C00FD9940 /* pkcs_5_2.c */; }; + AA7C8C8A0B67467D00FD9940 /* zeromem.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD20B67467C00FD9940 /* zeromem.c */; }; + AA7C8C8B0B67467D00FD9940 /* cbc_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD50B67467C00FD9940 /* cbc_decrypt.c */; }; + AA7C8C8C0B67467D00FD9940 /* cbc_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD60B67467C00FD9940 /* cbc_done.c */; }; + AA7C8C8D0B67467D00FD9940 /* cbc_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD70B67467C00FD9940 /* cbc_encrypt.c */; }; + AA7C8C8E0B67467D00FD9940 /* cbc_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD80B67467C00FD9940 /* cbc_getiv.c */; }; + AA7C8C8F0B67467D00FD9940 /* cbc_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BD90B67467C00FD9940 /* cbc_setiv.c */; }; + AA7C8C900B67467D00FD9940 /* cbc_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDA0B67467C00FD9940 /* cbc_start.c */; }; + AA7C8C910B67467D00FD9940 /* cfb_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDC0B67467C00FD9940 /* cfb_decrypt.c */; }; + AA7C8C920B67467D00FD9940 /* cfb_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDD0B67467C00FD9940 /* cfb_done.c */; }; + AA7C8C930B67467D00FD9940 /* cfb_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDE0B67467C00FD9940 /* cfb_encrypt.c */; }; + AA7C8C940B67467D00FD9940 /* cfb_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BDF0B67467C00FD9940 /* cfb_getiv.c */; }; + AA7C8C950B67467D00FD9940 /* cfb_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE00B67467C00FD9940 /* cfb_setiv.c */; }; + AA7C8C960B67467D00FD9940 /* cfb_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE10B67467C00FD9940 /* cfb_start.c */; }; + AA7C8C970B67467D00FD9940 /* ctr_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE30B67467C00FD9940 /* ctr_decrypt.c */; }; + AA7C8C980B67467D00FD9940 /* ctr_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE40B67467C00FD9940 /* ctr_done.c */; }; + AA7C8C990B67467D00FD9940 /* ctr_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE50B67467C00FD9940 /* ctr_encrypt.c */; }; + AA7C8C9A0B67467D00FD9940 /* ctr_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE60B67467C00FD9940 /* ctr_getiv.c */; }; + AA7C8C9B0B67467D00FD9940 /* ctr_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE70B67467C00FD9940 /* ctr_setiv.c */; }; + AA7C8C9C0B67467D00FD9940 /* ctr_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE80B67467C00FD9940 /* ctr_start.c */; }; + AA7C8C9D0B67467D00FD9940 /* ctr_test.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BE90B67467C00FD9940 /* ctr_test.c */; }; + AA7C8C9E0B67467D00FD9940 /* ecb_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BEB0B67467C00FD9940 /* ecb_decrypt.c */; }; + AA7C8C9F0B67467D00FD9940 /* ecb_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BEC0B67467C00FD9940 /* ecb_done.c */; }; + AA7C8CA00B67467D00FD9940 /* ecb_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BED0B67467C00FD9940 /* ecb_encrypt.c */; }; + AA7C8CA10B67467D00FD9940 /* ecb_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BEE0B67467C00FD9940 /* ecb_start.c */; }; + AA7C8CA20B67467D00FD9940 /* ofb_decrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF00B67467C00FD9940 /* ofb_decrypt.c */; }; + AA7C8CA30B67467D00FD9940 /* ofb_done.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF10B67467C00FD9940 /* ofb_done.c */; }; + AA7C8CA40B67467D00FD9940 /* ofb_encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF20B67467C00FD9940 /* ofb_encrypt.c */; }; + AA7C8CA50B67467D00FD9940 /* ofb_getiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF30B67467C00FD9940 /* ofb_getiv.c */; }; + AA7C8CA60B67467D00FD9940 /* ofb_setiv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF40B67467C00FD9940 /* ofb_setiv.c */; }; + AA7C8CA70B67467D00FD9940 /* ofb_start.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BF50B67467C00FD9940 /* ofb_start.c */; }; + AA7C8CA80B67467D00FD9940 /* der_decode_bit_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFA0B67467C00FD9940 /* der_decode_bit_string.c */; }; + AA7C8CA90B67467D00FD9940 /* der_encode_bit_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFB0B67467C00FD9940 /* der_encode_bit_string.c */; }; + AA7C8CAA0B67467D00FD9940 /* der_length_bit_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFC0B67467C00FD9940 /* der_length_bit_string.c */; }; + AA7C8CAB0B67467D00FD9940 /* der_decode_boolean.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFE0B67467C00FD9940 /* der_decode_boolean.c */; }; + AA7C8CAC0B67467D00FD9940 /* der_encode_boolean.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8BFF0B67467C00FD9940 /* der_encode_boolean.c */; }; + AA7C8CAD0B67467D00FD9940 /* der_length_boolean.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C000B67467C00FD9940 /* der_length_boolean.c */; }; + AA7C8CAE0B67467D00FD9940 /* der_decode_choice.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C020B67467C00FD9940 /* der_decode_choice.c */; }; + AA7C8CAF0B67467D00FD9940 /* der_decode_ia5_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C040B67467C00FD9940 /* der_decode_ia5_string.c */; }; + AA7C8CB00B67467D00FD9940 /* der_encode_ia5_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C050B67467D00FD9940 /* der_encode_ia5_string.c */; }; + AA7C8CB10B67467D00FD9940 /* der_length_ia5_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C060B67467D00FD9940 /* der_length_ia5_string.c */; }; + AA7C8CB20B67467D00FD9940 /* der_decode_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C080B67467D00FD9940 /* der_decode_integer.c */; }; + AA7C8CB30B67467D00FD9940 /* der_encode_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C090B67467D00FD9940 /* der_encode_integer.c */; }; + AA7C8CB40B67467D00FD9940 /* der_length_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0A0B67467D00FD9940 /* der_length_integer.c */; }; + AA7C8CB50B67467D00FD9940 /* der_decode_object_identifier.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0C0B67467D00FD9940 /* der_decode_object_identifier.c */; }; + AA7C8CB60B67467D00FD9940 /* der_encode_object_identifier.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0D0B67467D00FD9940 /* der_encode_object_identifier.c */; }; + AA7C8CB70B67467D00FD9940 /* der_length_object_identifier.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C0E0B67467D00FD9940 /* der_length_object_identifier.c */; }; + AA7C8CB80B67467D00FD9940 /* der_decode_octet_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C100B67467D00FD9940 /* der_decode_octet_string.c */; }; + AA7C8CB90B67467D00FD9940 /* der_encode_octet_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C110B67467D00FD9940 /* der_encode_octet_string.c */; }; + AA7C8CBA0B67467D00FD9940 /* der_length_octet_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C120B67467D00FD9940 /* der_length_octet_string.c */; }; + AA7C8CBB0B67467D00FD9940 /* der_decode_printable_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C140B67467D00FD9940 /* der_decode_printable_string.c */; }; + AA7C8CBC0B67467D00FD9940 /* der_encode_printable_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C150B67467D00FD9940 /* der_encode_printable_string.c */; }; + AA7C8CBD0B67467D00FD9940 /* der_length_printable_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C160B67467D00FD9940 /* der_length_printable_string.c */; }; + AA7C8CBE0B67467D00FD9940 /* der_decode_sequence_ex.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C180B67467D00FD9940 /* der_decode_sequence_ex.c */; }; + AA7C8CBF0B67467D00FD9940 /* der_decode_sequence_flexi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C190B67467D00FD9940 /* der_decode_sequence_flexi.c */; }; + AA7C8CC00B67467D00FD9940 /* der_decode_sequence_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1A0B67467D00FD9940 /* der_decode_sequence_multi.c */; }; + AA7C8CC10B67467D00FD9940 /* der_encode_sequence_ex.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1B0B67467D00FD9940 /* der_encode_sequence_ex.c */; }; + AA7C8CC20B67467D00FD9940 /* der_encode_sequence_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1C0B67467D00FD9940 /* der_encode_sequence_multi.c */; }; + AA7C8CC30B67467D00FD9940 /* der_length_sequence.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1D0B67467D00FD9940 /* der_length_sequence.c */; }; + AA7C8CC40B67467D00FD9940 /* der_sequence_free.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C1E0B67467D00FD9940 /* der_sequence_free.c */; }; + AA7C8CC50B67467D00FD9940 /* der_encode_set.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C200B67467D00FD9940 /* der_encode_set.c */; }; + AA7C8CC60B67467D00FD9940 /* der_encode_setof.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C210B67467D00FD9940 /* der_encode_setof.c */; }; + AA7C8CC70B67467D00FD9940 /* der_decode_short_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C230B67467D00FD9940 /* der_decode_short_integer.c */; }; + AA7C8CC80B67467D00FD9940 /* der_encode_short_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C240B67467D00FD9940 /* der_encode_short_integer.c */; }; + AA7C8CC90B67467D00FD9940 /* der_length_short_integer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C250B67467D00FD9940 /* der_length_short_integer.c */; }; + AA7C8CCA0B67467D00FD9940 /* der_decode_utctime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C270B67467D00FD9940 /* der_decode_utctime.c */; }; + AA7C8CCB0B67467D00FD9940 /* der_encode_utctime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C280B67467D00FD9940 /* der_encode_utctime.c */; }; + AA7C8CCC0B67467D00FD9940 /* der_length_utctime.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C290B67467D00FD9940 /* der_length_utctime.c */; }; + AA7C8CCD0B67467D00FD9940 /* der_decode_utf8_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2B0B67467D00FD9940 /* der_decode_utf8_string.c */; }; + AA7C8CCE0B67467D00FD9940 /* der_encode_utf8_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2C0B67467D00FD9940 /* der_encode_utf8_string.c */; }; + AA7C8CCF0B67467D00FD9940 /* der_length_utf8_string.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2D0B67467D00FD9940 /* der_length_utf8_string.c */; }; + AA7C8CD00B67467D00FD9940 /* dsa_decrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C2F0B67467D00FD9940 /* dsa_decrypt_key.c */; }; + AA7C8CD10B67467D00FD9940 /* dsa_encrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C300B67467D00FD9940 /* dsa_encrypt_key.c */; }; + AA7C8CD20B67467D00FD9940 /* dsa_export.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C310B67467D00FD9940 /* dsa_export.c */; }; + AA7C8CD30B67467D00FD9940 /* dsa_free.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C320B67467D00FD9940 /* dsa_free.c */; }; + AA7C8CD40B67467D00FD9940 /* dsa_import.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C330B67467D00FD9940 /* dsa_import.c */; }; + AA7C8CD50B67467D00FD9940 /* dsa_make_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C340B67467D00FD9940 /* dsa_make_key.c */; }; + AA7C8CD60B67467D00FD9940 /* dsa_shared_secret.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C350B67467D00FD9940 /* dsa_shared_secret.c */; }; + AA7C8CD70B67467D00FD9940 /* dsa_sign_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C360B67467D00FD9940 /* dsa_sign_hash.c */; }; + AA7C8CD80B67467D00FD9940 /* dsa_verify_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C370B67467D00FD9940 /* dsa_verify_hash.c */; }; + AA7C8CD90B67467D00FD9940 /* dsa_verify_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C380B67467D00FD9940 /* dsa_verify_key.c */; }; + AA7C8CDA0B67467D00FD9940 /* pkcs_1_i2osp.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3A0B67467D00FD9940 /* pkcs_1_i2osp.c */; }; + AA7C8CDB0B67467D00FD9940 /* pkcs_1_mgf1.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3B0B67467D00FD9940 /* pkcs_1_mgf1.c */; }; + AA7C8CDC0B67467D00FD9940 /* pkcs_1_oaep_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3C0B67467D00FD9940 /* pkcs_1_oaep_decode.c */; }; + AA7C8CDD0B67467D00FD9940 /* pkcs_1_oaep_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3D0B67467D00FD9940 /* pkcs_1_oaep_encode.c */; }; + AA7C8CDE0B67467D00FD9940 /* pkcs_1_os2ip.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3E0B67467D00FD9940 /* pkcs_1_os2ip.c */; }; + AA7C8CDF0B67467D00FD9940 /* pkcs_1_pss_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C3F0B67467D00FD9940 /* pkcs_1_pss_decode.c */; }; + AA7C8CE00B67467D00FD9940 /* pkcs_1_pss_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C400B67467D00FD9940 /* pkcs_1_pss_encode.c */; }; + AA7C8CE10B67467D00FD9940 /* pkcs_1_v1_5_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C410B67467D00FD9940 /* pkcs_1_v1_5_decode.c */; }; + AA7C8CE20B67467D00FD9940 /* pkcs_1_v1_5_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C420B67467D00FD9940 /* pkcs_1_v1_5_encode.c */; }; + AA7C8CE30B67467D00FD9940 /* rsa_decrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C440B67467D00FD9940 /* rsa_decrypt_key.c */; }; + AA7C8CE40B67467D00FD9940 /* rsa_encrypt_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C450B67467D00FD9940 /* rsa_encrypt_key.c */; }; + AA7C8CE50B67467D00FD9940 /* rsa_export.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C460B67467D00FD9940 /* rsa_export.c */; }; + AA7C8CE60B67467D00FD9940 /* rsa_exptmod.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C470B67467D00FD9940 /* rsa_exptmod.c */; }; + AA7C8CE70B67467D00FD9940 /* rsa_free.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C480B67467D00FD9940 /* rsa_free.c */; }; + AA7C8CE80B67467D00FD9940 /* rsa_import.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C490B67467D00FD9940 /* rsa_import.c */; }; + AA7C8CE90B67467D00FD9940 /* rsa_make_key.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4A0B67467D00FD9940 /* rsa_make_key.c */; }; + AA7C8CEA0B67467D00FD9940 /* rsa_sign_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4B0B67467D00FD9940 /* rsa_sign_hash.c */; }; + AA7C8CEB0B67467D00FD9940 /* rsa_verify_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4C0B67467D00FD9940 /* rsa_verify_hash.c */; }; + AA7C8CEC0B67467D00FD9940 /* fortuna.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4E0B67467D00FD9940 /* fortuna.c */; }; + AA7C8CED0B67467D00FD9940 /* rc4.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C4F0B67467D00FD9940 /* rc4.c */; }; + AA7C8CEE0B67467D00FD9940 /* rng_get_bytes.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C500B67467D00FD9940 /* rng_get_bytes.c */; }; + AA7C8CEF0B67467D00FD9940 /* rng_make_prng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C510B67467D00FD9940 /* rng_make_prng.c */; }; + AA7C8CF00B67467D00FD9940 /* sober128.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C520B67467D00FD9940 /* sober128.c */; }; + AA7C8CF20B67467D00FD9940 /* sprng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C540B67467D00FD9940 /* sprng.c */; }; + AA7C8CF30B67467D00FD9940 /* yarrow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C550B67467D00FD9940 /* yarrow.c */; }; + AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; + AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; + AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; + AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; + AA7C8DAE0B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; + AA7C8DAF0B68CB2200FD9940 /* GameplayAssist.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */; }; + AA7C8DB00B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; + AA7CDD950D8395F90001DAFC /* Song.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7CDD930D8395F90001DAFC /* Song.h */; }; + AA7DA2F1085760E90057F1EA /* BackgroundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */; }; + AA80C75407F20D0D00C99272 /* UnlockManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75207F20D0D00C99272 /* UnlockManager.cpp */; }; + AA80C75907F20D6600C99272 /* OptionRowHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */; }; + AA80C75C07F20D8000C99272 /* ScreenMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */; }; + AA84B7070996F8370085EECB /* AdjustSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA84B7050996F8370085EECB /* AdjustSync.cpp */; }; + AA8A3E6406EDCD11002F25AB /* DarwinThreadHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */; }; + AA8A405106EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */; }; + AA8BD2A807C9391B00EA04E1 /* LuaReference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */; }; + AA8BD2AA07C9391B00EA04E1 /* MessageManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */; }; + AA8BD2AC07C9391B00EA04E1 /* StatsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */; }; + AA8BD2B107C9395400EA04E1 /* AutoActor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */; }; + AA8BD2B607C939A200EA04E1 /* OptionRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */; }; + AA8BD2BF07C939F800EA04E1 /* PlayerStageStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */; }; + AA8BD2C107C939F800EA04E1 /* PlayerState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */; }; + AA8BD2C207C939F800EA04E1 /* RollingNumbers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */; }; + AA8BD2C407C939F800EA04E1 /* ScoreDisplayCalories.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */; }; + AA8BD2C707C93A1E00EA04E1 /* CommonMetrics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */; }; + AA8CF5180A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */; }; + AA8CF5190A4518BE0005F1B4 /* RageSoundDriver_AU.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8CF5150A4518BE0005F1B4 /* RageSoundDriver_AU.h */; }; + AA8CF51A0A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */; }; + AA8EE0760866E266002C51A7 /* LuaBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8EE0750866E266002C51A7 /* LuaBinding.cpp */; }; + AA9091A1067ED43000C1FCFF /* RageSurface_Load_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */; }; + AA9091A5067ED46400C1FCFF /* RageSurface_Save_BMP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */; }; + AA909E1F0B45B676002852D3 /* RageDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E1D0B45B676002852D3 /* RageDriver.cpp */; }; + AA909E210B45B676002852D3 /* RageDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E1D0B45B676002852D3 /* RageDriver.cpp */; }; + AA909E220B45B676002852D3 /* RageDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = AA909E1E0B45B676002852D3 /* RageDriver.h */; }; + AA909E240B45B696002852D3 /* LowLevelWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E230B45B696002852D3 /* LowLevelWindow.cpp */; }; + AA909E250B45B696002852D3 /* LowLevelWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E230B45B696002852D3 /* LowLevelWindow.cpp */; }; + AA909E270B45B6AC002852D3 /* LoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */; }; + AA909E280B45B6AC002852D3 /* LoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */; }; + AA909E3D0B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */; }; + AA909E3F0B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */; }; + AA909E410B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */; }; + AA909E420B45B8FB002852D3 /* RageSoundReader_Extend.h in Headers */ = {isa = PBXBuildFile; fileRef = AA909E3A0B45B8FA002852D3 /* RageSoundReader_Extend.h */; }; + AA909E430B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */; }; + AA909E440B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA909E3C0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.h */; }; + AA909E490B45B93E002852D3 /* LightsDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E480B45B93E002852D3 /* LightsDriver.cpp */; }; + AA909E4A0B45B93E002852D3 /* LightsDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA909E480B45B93E002852D3 /* LightsDriver.cpp */; }; + AA91587D067D2C2C00078E36 /* RageSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA915879067D2C2C00078E36 /* RageSurface.cpp */; }; + AA91ACB10878BB2C00FB2F8F /* RageTexturePreloader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */; }; + AA9A78AB06B5C72200B03E97 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9A78A906B5C72200B03E97 /* Game.cpp */; }; + AA9EC2F2055F5126007E5098 /* RageTextureID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */; }; + AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */; }; + AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */; }; + AAA0713D0CE7B3BB005A3060 /* bit.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070B40CE7B3AD005A3060 /* bit.c */; }; + AAA0713E0CE7B3BB005A3060 /* bit.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070B50CE7B3AD005A3060 /* bit.h */; }; + AAA071490CE7B3BB005A3060 /* decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C00CE7B3AD005A3060 /* decoder.c */; }; + AAA0714A0CE7B3BB005A3060 /* decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C10CE7B3AD005A3060 /* decoder.h */; }; + AAA0714C0CE7B3BB005A3060 /* fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C30CE7B3AD005A3060 /* fixed.c */; }; + AAA0714D0CE7B3BB005A3060 /* fixed.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C40CE7B3AD005A3060 /* fixed.h */; }; + AAA0714E0CE7B3BB005A3060 /* frame.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C50CE7B3AD005A3060 /* frame.c */; }; + AAA0714F0CE7B3BB005A3060 /* frame.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C60CE7B3AD005A3060 /* frame.h */; }; + AAA071500CE7B3BB005A3060 /* global.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C70CE7B3AD005A3060 /* global.h */; }; + AAA071510CE7B3BB005A3060 /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C80CE7B3AD005A3060 /* huffman.c */; }; + AAA071520CE7B3BB005A3060 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C90CE7B3AD005A3060 /* huffman.h */; }; + AAA071570CE7B3BB005A3060 /* layer12.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070CE0CE7B3AD005A3060 /* layer12.c */; }; + AAA071580CE7B3BB005A3060 /* layer12.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070CF0CE7B3AD005A3060 /* layer12.h */; }; + AAA071590CE7B3BB005A3060 /* layer3.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070D00CE7B3AD005A3060 /* layer3.c */; }; + AAA0715A0CE7B3BB005A3060 /* layer3.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D10CE7B3AD005A3060 /* layer3.h */; }; + AAA0715D0CE7B3BB005A3060 /* mad.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D40CE7B3AD005A3060 /* mad.h */; }; + AAA0716F0CE7B3BB005A3060 /* stream.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070E80CE7B3AD005A3060 /* stream.c */; }; + AAA071700CE7B3BB005A3060 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070E90CE7B3AD005A3060 /* stream.h */; }; + AAA071710CE7B3BB005A3060 /* synth.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EA0CE7B3AD005A3060 /* synth.c */; }; + AAA071720CE7B3BB005A3060 /* synth.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070EB0CE7B3AD005A3060 /* synth.h */; }; + AAA071730CE7B3BB005A3060 /* timer.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EC0CE7B3AD005A3060 /* timer.c */; }; + AAA071740CE7B3BB005A3060 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070ED0CE7B3AD005A3060 /* timer.h */; }; + AAA071770CE7B3BB005A3060 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070F00CE7B3AE005A3060 /* version.c */; }; + AAA071780CE7B3BB005A3060 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070F10CE7B3AE005A3060 /* version.h */; }; + AAA0717F0CE7B4FB005A3060 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070F10CE7B3AE005A3060 /* version.h */; }; + AAA071800CE7B4FB005A3060 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070F00CE7B3AE005A3060 /* version.c */; }; + AAA071810CE7B4FC005A3060 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070ED0CE7B3AD005A3060 /* timer.h */; }; + AAA071820CE7B4FD005A3060 /* timer.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EC0CE7B3AD005A3060 /* timer.c */; }; + AAA071830CE7B4FE005A3060 /* synth.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070EB0CE7B3AD005A3060 /* synth.h */; }; + AAA071840CE7B4FE005A3060 /* synth.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070EA0CE7B3AD005A3060 /* synth.c */; }; + AAA071850CE7B4FF005A3060 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070E90CE7B3AD005A3060 /* stream.h */; }; + AAA071860CE7B501005A3060 /* stream.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070E80CE7B3AD005A3060 /* stream.c */; }; + AAA071870CE7B502005A3060 /* mad.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D40CE7B3AD005A3060 /* mad.h */; }; + AAA071880CE7B502005A3060 /* layer3.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070D10CE7B3AD005A3060 /* layer3.h */; }; + AAA071890CE7B503005A3060 /* layer3.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070D00CE7B3AD005A3060 /* layer3.c */; }; + AAA0718A0CE7B503005A3060 /* layer12.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070CF0CE7B3AD005A3060 /* layer12.h */; }; + AAA0718B0CE7B505005A3060 /* layer12.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070CE0CE7B3AD005A3060 /* layer12.c */; }; + AAA0718C0CE7B505005A3060 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C90CE7B3AD005A3060 /* huffman.h */; }; + AAA0718D0CE7B506005A3060 /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C80CE7B3AD005A3060 /* huffman.c */; }; + AAA0718E0CE7B508005A3060 /* global.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C70CE7B3AD005A3060 /* global.h */; }; + AAA0718F0CE7B508005A3060 /* frame.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C60CE7B3AD005A3060 /* frame.h */; }; + AAA071900CE7B509005A3060 /* frame.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C50CE7B3AD005A3060 /* frame.c */; }; + AAA071910CE7B509005A3060 /* fixed.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C40CE7B3AD005A3060 /* fixed.h */; }; + AAA071920CE7B50A005A3060 /* fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C30CE7B3AD005A3060 /* fixed.c */; }; + AAA071930CE7B50B005A3060 /* decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070C10CE7B3AD005A3060 /* decoder.h */; }; + AAA071940CE7B50B005A3060 /* decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070C00CE7B3AD005A3060 /* decoder.c */; }; + AAA071950CE7B50C005A3060 /* bit.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA070B50CE7B3AD005A3060 /* bit.h */; }; + AAA071960CE7B50D005A3060 /* bit.c in Sources */ = {isa = PBXBuildFile; fileRef = AAA070B40CE7B3AD005A3060 /* bit.c */; }; + AAA071B40CE7C9C9005A3060 /* libmad.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA070A90CE7B0DF005A3060 /* libmad.a */; }; + AAA372D40909934500141131 /* MovieTexture_Generic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D00909934500141131 /* MovieTexture_Generic.cpp */; }; + AAA372D60909934500141131 /* MovieTexture_Theora.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA372D20909934500141131 /* MovieTexture_Theora.cpp */; }; + AAA6BFEC0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */; }; + AAA71EA105EE154E00D2E8FF /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA71EA005EE154E00D2E8FF /* global.cpp */; }; + AAA7D4C90C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */; }; + AAA7D4CB0C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */; }; + AAA7D4CC0C7E872600FB8F78 /* ScreenOptionsToggleSongs.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA7D4C80C7E872500FB8F78 /* ScreenOptionsToggleSongs.h */; }; + AAA8E0030696984300FCE1F9 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA8E0020696984300FCE1F9 /* CoreAudio.framework */; }; + AAAA11C70A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */; }; + AAAA11C80A662F9D00B2BD88 /* ScoreKeeperShared.h in Headers */ = {isa = PBXBuildFile; fileRef = AAAA11C40A662F9C00B2BD88 /* ScoreKeeperShared.h */; }; + AAAA11C90A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */; }; + AAAB2CDF072BD2EC00CD9FC9 /* AutoKeysounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */; }; + AAAB2CE3072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */; }; + AAAFE8200835E7FF00FC43E0 /* WheelBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */; }; + AAAFE8220835E7FF00FC43E0 /* WheelItemBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */; }; + AAAFE8300835E8B100FC43E0 /* RoomWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAAFE82E0835E8B100FC43E0 /* RoomWheel.cpp */; }; + AAB005F20579B8CB000BBA58 /* AttackDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */; }; + AAB00861057F4F7A000BBA58 /* RageFileDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */; }; + AAB00863057F4F7A000BBA58 /* RageFileDriverDirect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */; }; + AAB00865057F4F7A000BBA58 /* RageFileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */; }; + AAB3B7DC0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */; }; + AAB3B7DE0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */; }; + AAB3B7DF0C6C582E001BF487 /* ScreenSelectProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B7DB0C6C582D001BF487 /* ScreenSelectProfile.h */; }; + AAB3BB590C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */; }; + AAB3BB5B0C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */; }; + AAB3BB5C0C718F2D001BF487 /* RageUtil_CachedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3BB580C718F2C001BF487 /* RageUtil_CachedObject.h */; }; + AAB55EBB09A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */; }; + AAB55EBD09A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */; }; + AAB55EBF09A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */; }; + AAB55FFF09A84E62008FDC69 /* ScreenUnlockCelebrate.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EBA09A7E3D3008FDC69 /* ScreenUnlockCelebrate.h */; }; + AAB5600009A84E63008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */; }; + AAB5600109A84E64008FDC69 /* ScreenUnlockBrowse.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EB809A7E3D3008FDC69 /* ScreenUnlockBrowse.h */; }; + AAB5600209A84E65008FDC69 /* ScreenUnlockBrowse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */; }; + AAB691F405704FA50078BED4 /* LightsDriver_SystemMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */; }; + AAB6B477085761B700CEE7BA /* ScreenSplash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */; }; + AAB779FB0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */; }; + AAB779FD0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */; }; + AAB779FE0B0D9CB200B74314 /* ScoreKeeperGuitar.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB779FA0B0D9CB200B74314 /* ScoreKeeperGuitar.h */; }; + AAB9C8AF06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */; }; + AAB9C8B106EAF64400AD97CD /* RageSurfaceUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */; }; + AAB9C8B506EAF66C00AD97CD /* ScreenNetEvaluation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */; }; + AABBD80805D8E9FC00B44FC2 /* HighScore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */; }; + AABBF6760659E78D00738526 /* RageSurface_Load_GIF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */; }; + AABBF6780659E78D00738526 /* RageSurface_Load_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */; }; + AABBF67A0659E78D00738526 /* RageSurface_Load_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */; }; + AABBF67C0659E78D00738526 /* RageSurface_Load_XPM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */; }; + AABBF67E0659E78D00738526 /* RageSurface_Load.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABBF6740659E78D00738526 /* RageSurface_Load.cpp */; }; + AABBFCD309838C3A00F077E2 /* SMMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = AABBFCD209838C3A00F077E2 /* SMMain.mm */; }; + AABD0B3A05DF3F22004F7929 /* CryptManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABD0B3605DF3F22004F7929 /* CryptManager.cpp */; settings = {COMPILER_FLAGS = "-O0 -Wno-uninitialized"; }; }; + AABE321C05ACD8ED001A0E84 /* ScreenEnding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */; }; + AABE322005ACD931001A0E84 /* Foreground.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE321E05ACD931001A0E84 /* Foreground.cpp */; }; + AABE322405ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */; }; + AABE788E05912B0600E8BF50 /* DualScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */; }; + AABE830E0A9524D400001678 /* ModsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE830D0A9524D400001678 /* ModsGroup.cpp */; }; + AABE830F0A9524D400001678 /* ModsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AABE830D0A9524D400001678 /* ModsGroup.cpp */; }; + AAC0BFE10E2951EC00F56EEB /* CryptHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */; }; + AAC0BFE30E2951EC00F56EEB /* CryptHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */; }; + AAC0BFE40E2951EC00F56EEB /* CryptHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC0BFE00E2951EC00F56EEB /* CryptHelpers.h */; }; + AAC0C8C20984AE3B0075FC53 /* Tween.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC0C8C00984AE3B0075FC53 /* Tween.cpp */; }; + AAC6DCE50567660A00B5D56F /* LightsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DCE30567660A00B5D56F /* LightsManager.cpp */; }; + AAC6DDE00569C71000B5D56F /* PaneDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */; }; + AAC6DDE80569C80900B5D56F /* DifficultyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */; }; + AAC9F330069E22BB00D53E2C /* GameSoundManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */; }; + AAC9F334069E22CF00D53E2C /* MemoryCardDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */; }; + AACA593107B5E23400763545 /* RageFileDriverTimeout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */; }; + AACA593407B5E23400763545 /* RageUtil_WorkerThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */; }; + AACFBE2808E7D793005087FC /* ActorSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE2608E7D793005087FC /* ActorSound.cpp */; }; + AACFBE4F08E7D893005087FC /* ScreenGameplayLesson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */; }; + AACFBE6308E7DBA8005087FC /* LuaExpressionTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */; }; + AAD36084062BB8AE00D0CED8 /* RageSoundPosMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */; }; + AAD5219C095513DA00073D86 /* XmlFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAC6889905D7F3C800964E6D /* XmlFile.cpp */; }; + AAD675F606795175006002B0 /* Dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD675EF06795175006002B0 /* Dialog.cpp */; }; + AAD6A714065E0FDF0042165A /* Difficulty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD6A712065E0FDF0042165A /* Difficulty.cpp */; }; + AAD8F9340A4B97DF000311CF /* ScreenGameplayShared.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD8F9320A4B97DF000311CF /* ScreenGameplayShared.h */; }; + AAD8F9350A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */; }; + AAD8F9370A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */; }; + AADD1CC5095C233F0088C9DF /* LocalizedString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */; }; + AAE2D6D40A67481E00071546 /* ScoreKeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */; }; + AAE2D6D50A67481E00071546 /* ScoreKeeper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */; }; + AAE77F580AC3B52500AEFC64 /* RageTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */; }; + AAE77F590AC3B52500AEFC64 /* RageTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */; }; + AAE780400AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */; }; + AAE780440AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */; }; + AAE780450AC76A1200AEFC64 /* WorkoutGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE7803D0AC76A1200AEFC64 /* WorkoutGraph.h */; }; + AAE7804B060814AC0034E65F /* NetworkSyncManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */; }; + AAE7808706081A000034E65F /* ezsockets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7808506081A000034E65F /* ezsockets.cpp */; }; + AAE7812D0608249E0034E65F /* ActiveAttackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */; }; + AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AAEBC6CC07A20AFE00793F0E /* RageSurface_Save_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */; }; + AAEBC6CE07A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */; }; + AAEBC6D007A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */; }; + AAEBC79107A4FF5600793F0E /* LuaManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */; }; + AAEBF5600B5C517E005F3C7C /* SampleHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */; }; + AAEBF5620B5C517E005F3C7C /* SampleHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */; }; + AAEBF5630B5C517E005F3C7C /* SampleHistory.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBF55F0B5C517E005F3C7C /* SampleHistory.h */; }; + AAEBF57E0B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */; }; + AAEBF5800B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */; }; + AAEBF5810B5C83F4005F3C7C /* SoundEffectControl.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEBF57D0B5C83F4005F3C7C /* SoundEffectControl.h */; }; + AAED6F2C0601C528002D2DEE /* Backtrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F280601C528002D2DEE /* Backtrace.cpp */; }; + AAED6F2E0601C528002D2DEE /* BacktraceNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */; }; + AAEDFD690A03762B00590617 /* Crash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEDFD680A03762B00590617 /* Crash.cpp */; }; + AAEDFD6A0A03762B00590617 /* Crash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEDFD680A03762B00590617 /* Crash.cpp */; }; + AAF3442B08F1C36A0006EDB7 /* DynamicActorScroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */; }; + AAF34ADE0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */; }; + AAF34AED0900B00C0006EDB7 /* ScreenStatsOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */; }; + AAF4206705D63FA700056441 /* ModelManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206505D63FA700056441 /* ModelManager.cpp */; }; + AAF4206B05D6400800056441 /* RageModelGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF4206905D6400800056441 /* RageModelGeometry.cpp */; }; + AAF6A2F909B695BA00D5C614 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAF6A2F709B695BA00D5C614 /* Localizable.strings */; }; + AAF6A2FA09B695BA00D5C614 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAF6A2F709B695BA00D5C614 /* Localizable.strings */; }; + AAF7435B06110E8D00B19AD1 /* ScreenTestLights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */; }; + AAF74590061181F700B19AD1 /* RageDisplay_Null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */; }; + AAF793F5074FE69E00D74516 /* ScreenNetRoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */; }; + AAF793F7074FE69E00D74516 /* ScreenNetSelectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */; }; + AAFAB5C10889098600767BF7 /* ScreenOptionsEditProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */; }; + AAFAB5CD08890B5200767BF7 /* GameLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */; }; + AAFAFC8F0AC8DB9F00427A6E /* EnumHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */; }; + AAFAFC900AC8DB9F00427A6E /* EnumHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */; }; + AAFB549E0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */; }; + AAFB549F0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */; }; + AAFBEED1094D7FCB000029DE /* SpecialFiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */; }; + AAFBEEEB094D807E000029DE /* ScreenOptionsManageEditSteps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */; }; + AAFBEEED094D807E000029DE /* ScreenOptionsMemoryCard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */; }; + AAFBEEEF094D807E000029DE /* ScreenServiceAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */; }; + AAFC6CF1072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */; }; + AAFE710B0A91ADE6005F2290 /* ActorProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */; }; + AAFE710D0A91ADE6005F2290 /* ActorProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */; }; + AAFE710E0A91ADE6005F2290 /* ActorProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFE710A0A91ADE6005F2290 /* ActorProxy.h */; }; + AAFE711F0A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */; }; + AAFE71200A91B551005F2290 /* RoomInfoDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE711D0A91B551005F2290 /* RoomInfoDisplay.cpp */; }; + AAFE71220A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */; }; + AAFE712A0A91B58F005F2290 /* RageSurface_Save_PNG.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFE71280A91B58F005F2290 /* RageSurface_Save_PNG.h */; }; + AAFF41A30F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; }; + AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; + AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; }; + AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; + EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */; }; + EE2153AA10A75BEE0074B01B /* NotesLoaderPMS.h in Headers */ = {isa = PBXBuildFile; fileRef = EE2153A810A75BEE0074B01B /* NotesLoaderPMS.h */; }; + EE879B60132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE879B5C132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp */; }; + EE879B61132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h in Headers */ = {isa = PBXBuildFile; fileRef = EE879B5D132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h */; }; + EE879B62132DEE720078FDDC /* RageDisplay_Legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE879B5E132DEE720078FDDC /* RageDisplay_Legacy.cpp */; }; + EE879B63132DEE720078FDDC /* RageDisplay_Legacy.h in Headers */ = {isa = PBXBuildFile; fileRef = EE879B5F132DEE720078FDDC /* RageDisplay_Legacy.h */; }; + EE879BC3132E06C50078FDDC /* glew.c in Sources */ = {isa = PBXBuildFile; fileRef = EE879BAA132E06C50078FDDC /* glew.c */; }; + EE906F6612BF3A1B00146C96 /* ScreenInstallOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE906F6412BF3A1B00146C96 /* ScreenInstallOverlay.cpp */; }; + EE906F6712BF3A1B00146C96 /* ScreenInstallOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = EE906F6512BF3A1B00146C96 /* ScreenInstallOverlay.h */; }; + EE906F8212BF3AF800146C96 /* JsonUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE906F8012BF3AF800146C96 /* JsonUtil.cpp */; }; + EE906F8312BF3AF800146C96 /* JsonUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = EE906F8112BF3AF800146C96 /* JsonUtil.h */; }; + EE906F8A12BF3C7C00146C96 /* FileDownload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE906F8812BF3C7C00146C96 /* FileDownload.cpp */; }; + EE906F8B12BF3C7C00146C96 /* FileDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = EE906F8912BF3C7C00146C96 /* FileDownload.h */; }; + EEA7C84310A805A300082E7B /* ScreenPackagesSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEA7C84110A805A300082E7B /* ScreenPackagesSSC.cpp */; }; + EEA7C84410A805A300082E7B /* ScreenPackagesSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = EEA7C84210A805A300082E7B /* ScreenPackagesSSC.h */; }; + EEC7863F0E58208B00F559BC /* StepsDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */; }; + F4BC045409E6B578003F770B /* ScreenGameplaySyncMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */; }; + F4BC045509E6B582003F770B /* ScreenGameplaySyncMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AA30C61907F5E2EF0066F398 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA30C60F07F5E24A0066F398; + remoteInfo = version; + }; + AA40D1B609A08D650068C0D5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA30C60F07F5E24A0066F398; + remoteInfo = version; + }; + AA7A2BA50AE09C9B0054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; + AA7A2BAD0AE09CDB0054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; + AA7A2BB40AE09D160054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7A2B930AE09B520054C5BA; + remoteInfo = lua; + }; + AA7A2BB60AE09D160054C5BA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7A2BAA0AE09CD50054C5BA; + remoteInfo = luac; + }; + AA7C8D150B6748B800FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C895E0B67444700FD9940; + remoteInfo = tommath; + }; + AA7C8D170B6748B800FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C8B8A0B67460600FD9940; + remoteInfo = tomcrypt; + }; + AA7C8D1B0B6748CD00FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C895E0B67444700FD9940; + remoteInfo = tommath; + }; + AA7C8D1D0B6748CD00FD9940 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA7C8B8A0B67460600FD9940; + remoteInfo = tomcrypt; + }; + AAA071A90CE7B879005A3060 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAA070A80CE7B0DF005A3060; + remoteInfo = mad; + }; + AAE781FD0AC7E61900AEFC64 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; + AAE782010AC7E63100AEFC64 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAE7817D0AC7E37B00AEFC64; + remoteInfo = "lua-5.1"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + AA40D37D09A08D650068C0D5 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA4B428C05733DF2005FB5DB /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenGameplayNormal.cpp; path = ../src/ScreenGameplayNormal.cpp; sourceTree = ""; }; + 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayNormal.h; path = ../src/ScreenGameplayNormal.h; sourceTree = ""; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; }; + 2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; }; + 2B766989132FF71500586512 /* NotesLoaderSMA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderSMA.h; path = ../src/NotesLoaderSMA.h; sourceTree = SOURCE_ROOT; }; + 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSMA.cpp; path = ../src/NotesLoaderSMA.cpp; sourceTree = SOURCE_ROOT; }; + 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSSC.cpp; path = ../src/NotesLoaderSSC.cpp; sourceTree = SOURCE_ROOT; }; + 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderSSC.h; path = ../src/NotesLoaderSSC.h; sourceTree = SOURCE_ROOT; }; + 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesWriterSSC.cpp; path = ../src/NotesWriterSSC.cpp; sourceTree = SOURCE_ROOT; }; + 2BA7925D1304F20D002BD8E1 /* NotesWriterSSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesWriterSSC.h; path = ../src/NotesWriterSSC.h; sourceTree = SOURCE_ROOT; }; + 2BD06FDD137240CF0018CB9F /* json_batchallocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = json_batchallocator.h; path = ../extern/jsoncpp/src/lib_json/json_batchallocator.h; sourceTree = SOURCE_ROOT; }; + 2BD06FDE137240CF0018CB9F /* json_internalarray.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_internalarray.inl; path = ../extern/jsoncpp/src/lib_json/json_internalarray.inl; sourceTree = SOURCE_ROOT; }; + 2BD06FDF137240CF0018CB9F /* json_internalmap.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_internalmap.inl; path = ../extern/jsoncpp/src/lib_json/json_internalmap.inl; sourceTree = SOURCE_ROOT; }; + 2BD06FE0137240CF0018CB9F /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_reader.cpp; path = ../extern/jsoncpp/src/lib_json/json_reader.cpp; sourceTree = SOURCE_ROOT; }; + 2BD06FE1137240CF0018CB9F /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_value.cpp; path = ../extern/jsoncpp/src/lib_json/json_value.cpp; sourceTree = SOURCE_ROOT; }; + 2BD06FE2137240CF0018CB9F /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_valueiterator.inl; path = ../extern/jsoncpp/src/lib_json/json_valueiterator.inl; sourceTree = SOURCE_ROOT; }; + 2BD06FE3137240CF0018CB9F /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_writer.cpp; path = ../extern/jsoncpp/src/lib_json/json_writer.cpp; sourceTree = SOURCE_ROOT; }; + 2BDB88B2137201F700E6FD3A /* lapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lapi.c; path = "../extern/lua-5.1/src/lapi.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B3137201F700E6FD3A /* lapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lapi.h; path = "../extern/lua-5.1/src/lapi.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88B4137201F700E6FD3A /* lauxlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lauxlib.c; path = "../extern/lua-5.1/src/lauxlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B5137201F700E6FD3A /* lauxlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lauxlib.h; path = "../extern/lua-5.1/src/lauxlib.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88B6137201F700E6FD3A /* lbaselib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lbaselib.c; path = "../extern/lua-5.1/src/lbaselib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B7137201F700E6FD3A /* lcode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lcode.c; path = "../extern/lua-5.1/src/lcode.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88B8137201F700E6FD3A /* lcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcode.h; path = "../extern/lua-5.1/src/lcode.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88B9137201F700E6FD3A /* ldblib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldblib.c; path = "../extern/lua-5.1/src/ldblib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BA137201F700E6FD3A /* ldebug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldebug.c; path = "../extern/lua-5.1/src/ldebug.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BB137201F700E6FD3A /* ldebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldebug.h; path = "../extern/lua-5.1/src/ldebug.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88BC137201F700E6FD3A /* ldo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldo.c; path = "../extern/lua-5.1/src/ldo.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BD137201F700E6FD3A /* ldo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldo.h; path = "../extern/lua-5.1/src/ldo.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88BE137201F700E6FD3A /* ldump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldump.c; path = "../extern/lua-5.1/src/ldump.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88BF137201F700E6FD3A /* lfunc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lfunc.c; path = "../extern/lua-5.1/src/lfunc.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C0137201F700E6FD3A /* lfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lfunc.h; path = "../extern/lua-5.1/src/lfunc.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C1137201F700E6FD3A /* lgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lgc.c; path = "../extern/lua-5.1/src/lgc.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C2137201F700E6FD3A /* lgc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lgc.h; path = "../extern/lua-5.1/src/lgc.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C3137201F700E6FD3A /* linit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = linit.c; path = "../extern/lua-5.1/src/linit.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C4137201F700E6FD3A /* liolib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = liolib.c; path = "../extern/lua-5.1/src/liolib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C5137201F700E6FD3A /* llex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = llex.c; path = "../extern/lua-5.1/src/llex.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C6137201F700E6FD3A /* llex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = llex.h; path = "../extern/lua-5.1/src/llex.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C7137201F700E6FD3A /* llimits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = llimits.h; path = "../extern/lua-5.1/src/llimits.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88C8137201F700E6FD3A /* lmathlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lmathlib.c; path = "../extern/lua-5.1/src/lmathlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88C9137201F700E6FD3A /* lmem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lmem.c; path = "../extern/lua-5.1/src/lmem.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CA137201F700E6FD3A /* lmem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lmem.h; path = "../extern/lua-5.1/src/lmem.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88CB137201F700E6FD3A /* loadlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loadlib.c; path = "../extern/lua-5.1/src/loadlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CC137201F700E6FD3A /* lobject.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lobject.c; path = "../extern/lua-5.1/src/lobject.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CD137201F700E6FD3A /* lobject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lobject.h; path = "../extern/lua-5.1/src/lobject.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88CE137201F700E6FD3A /* lopcodes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lopcodes.c; path = "../extern/lua-5.1/src/lopcodes.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88CF137201F700E6FD3A /* lopcodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lopcodes.h; path = "../extern/lua-5.1/src/lopcodes.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D0137201F700E6FD3A /* loslib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loslib.c; path = "../extern/lua-5.1/src/loslib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D1137201F700E6FD3A /* lparser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lparser.c; path = "../extern/lua-5.1/src/lparser.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D2137201F700E6FD3A /* lparser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lparser.h; path = "../extern/lua-5.1/src/lparser.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D3137201F700E6FD3A /* lstate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstate.c; path = "../extern/lua-5.1/src/lstate.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D4137201F700E6FD3A /* lstate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lstate.h; path = "../extern/lua-5.1/src/lstate.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D5137201F700E6FD3A /* lstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstring.c; path = "../extern/lua-5.1/src/lstring.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D6137201F700E6FD3A /* lstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lstring.h; path = "../extern/lua-5.1/src/lstring.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88D7137201F700E6FD3A /* lstrlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstrlib.c; path = "../extern/lua-5.1/src/lstrlib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D8137201F700E6FD3A /* ltable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltable.c; path = "../extern/lua-5.1/src/ltable.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88D9137201F700E6FD3A /* ltable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ltable.h; path = "../extern/lua-5.1/src/ltable.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88DA137201F700E6FD3A /* ltablib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltablib.c; path = "../extern/lua-5.1/src/ltablib.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88DB137201F700E6FD3A /* ltm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltm.c; path = "../extern/lua-5.1/src/ltm.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88DC137201F700E6FD3A /* ltm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ltm.h; path = "../extern/lua-5.1/src/ltm.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88DD137201F700E6FD3A /* lua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua.c; path = "../extern/lua-5.1/src/lua.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88DE137201F700E6FD3A /* lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua.h; path = "../extern/lua-5.1/src/lua.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88DF137201F700E6FD3A /* luac.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = luac.c; path = "../extern/lua-5.1/src/luac.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E0137201F700E6FD3A /* luaconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = luaconf.h; path = "../extern/lua-5.1/src/luaconf.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E1137201F700E6FD3A /* lualib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lualib.h; path = "../extern/lua-5.1/src/lualib.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E2137201F700E6FD3A /* lundump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lundump.c; path = "../extern/lua-5.1/src/lundump.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E3137201F700E6FD3A /* lundump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lundump.h; path = "../extern/lua-5.1/src/lundump.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E4137201F700E6FD3A /* lvm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lvm.c; path = "../extern/lua-5.1/src/lvm.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E5137201F700E6FD3A /* lvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lvm.h; path = "../extern/lua-5.1/src/lvm.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E6137201F700E6FD3A /* lzio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lzio.c; path = "../extern/lua-5.1/src/lzio.c"; sourceTree = SOURCE_ROOT; }; + 2BDB88E7137201F700E6FD3A /* lzio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lzio.h; path = "../extern/lua-5.1/src/lzio.h"; sourceTree = SOURCE_ROOT; }; + 2BDB88E8137201F700E6FD3A /* print.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = print.c; path = "../extern/lua-5.1/src/print.c"; sourceTree = SOURCE_ROOT; }; + 3659B56D0F902143002B6B68 /* CommandLineActions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CommandLineActions.cpp; sourceTree = ""; }; + 3659B56E0F902143002B6B68 /* CommandLineActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandLineActions.h; sourceTree = ""; }; + 367D57590EDE56F200B46814 /* ScreenHighScores.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenHighScores.cpp; path = ../src/ScreenHighScores.cpp; sourceTree = SOURCE_ROOT; }; + 367D575A0EDE56F200B46814 /* ScreenHighScores.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenHighScores.h; path = ../src/ScreenHighScores.h; sourceTree = SOURCE_ROOT; }; + 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderMidi.cpp; path = ../src/NotesLoaderMidi.cpp; sourceTree = ""; }; + 3688B8520BD42DAA004186AD /* NotesLoaderMidi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NotesLoaderMidi.h; path = ../src/NotesLoaderMidi.h; sourceTree = ""; }; + 36C6887F11297FFE00453295 /* RageFileDriverReadAhead.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageFileDriverReadAhead.cpp; path = ../src/RageFileDriverReadAhead.cpp; sourceTree = SOURCE_ROOT; }; + 36C6888011297FFE00453295 /* RageFileDriverReadAhead.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageFileDriverReadAhead.h; path = ../src/RageFileDriverReadAhead.h; sourceTree = SOURCE_ROOT; }; + 36C6888111297FFE00453295 /* RageFileManager_ReadAhead.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageFileManager_ReadAhead.cpp; path = ../src/RageFileManager_ReadAhead.cpp; sourceTree = SOURCE_ROOT; }; + 36C6888211297FFE00453295 /* RageFileManager_ReadAhead.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageFileManager_ReadAhead.h; path = ../src/RageFileManager_ReadAhead.h; sourceTree = SOURCE_ROOT; }; + 36CA531A0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsCourseOverview.cpp; path = ../src/ScreenOptionsCourseOverview.cpp; sourceTree = SOURCE_ROOT; }; + 36CA531B0F91564A0063D59D /* ScreenOptionsCourseOverview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsCourseOverview.h; path = ../src/ScreenOptionsCourseOverview.h; sourceTree = SOURCE_ROOT; }; + 36CA531E0F9156860063D59D /* ScreenOptionsEditCourse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsEditCourse.cpp; path = ../src/ScreenOptionsEditCourse.cpp; sourceTree = SOURCE_ROOT; }; + 36CA531F0F9156860063D59D /* ScreenOptionsEditCourse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsEditCourse.h; path = ../src/ScreenOptionsEditCourse.h; sourceTree = SOURCE_ROOT; }; + AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ActorMultiTexture.cpp; path = ../src/ActorMultiTexture.cpp; sourceTree = ""; }; + AA059ABB0B8CCFB5006F8139 /* ActorMultiTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ActorMultiTexture.h; path = ../src/ActorMultiTexture.h; sourceTree = ""; }; + AA059E2A0B8F0C66006F8139 /* libz_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libz_link.a; sourceTree = ""; }; + AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsList.cpp; path = ../src/OptionsList.cpp; sourceTree = ""; }; + AA05A0AF0BA2EFF3006F8139 /* OptionsList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptionsList.h; path = ../src/OptionsList.h; sourceTree = ""; }; + AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_PostBuffering.cpp; path = ../src/RageSoundReader_PostBuffering.cpp; sourceTree = ""; }; + AA0700890B61F177003B85BB /* RageSoundReader_PostBuffering.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_PostBuffering.h; path = ../src/RageSoundReader_PostBuffering.h; sourceTree = ""; }; + AA07328B0954381800F396C5 /* DisplayResolutions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DisplayResolutions.h; path = ../src/DisplayResolutions.h; sourceTree = ""; }; + AA07328C0954381800F396C5 /* XmlFileUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = XmlFileUtil.cpp; path = ../src/XmlFileUtil.cpp; sourceTree = ""; }; + AA07328D0954381800F396C5 /* XmlFileUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = XmlFileUtil.h; path = ../src/XmlFileUtil.h; sourceTree = ""; }; + AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenDebugOverlay.cpp; path = ../src/ScreenDebugOverlay.cpp; sourceTree = ""; }; + AA07A5560843E72B00E33D21 /* ScreenDebugOverlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenDebugOverlay.h; path = ../src/ScreenDebugOverlay.h; sourceTree = ""; }; + AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSaveSync.cpp; path = ../src/ScreenSaveSync.cpp; sourceTree = ""; }; + AA07A55A0843E72B00E33D21 /* ScreenSaveSync.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSaveSync.h; path = ../src/ScreenSaveSync.h; sourceTree = ""; }; + AA07A55B0843E72B00E33D21 /* ScreenSMOnlineLogin.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSMOnlineLogin.cpp; path = ../src/ScreenSMOnlineLogin.cpp; sourceTree = ""; }; + AA07A55C0843E72B00E33D21 /* ScreenSMOnlineLogin.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSMOnlineLogin.h; path = ../src/ScreenSMOnlineLogin.h; sourceTree = ""; }; + AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSyncOverlay.cpp; path = ../src/ScreenSyncOverlay.cpp; sourceTree = ""; }; + AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSyncOverlay.h; path = ../src/ScreenSyncOverlay.h; sourceTree = ""; }; + AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSetTime.cpp; path = ../src/ScreenSetTime.cpp; sourceTree = ""; }; + AA0A3DE7060513A00044E6B1 /* ScreenSetTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSetTime.h; path = ../src/ScreenSetTime.h; sourceTree = ""; }; + AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileBasic.cpp; path = ../src/RageFileBasic.cpp; sourceTree = ""; }; + AA0E04CF076C4CD500716D81 /* RageFileBasic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileBasic.h; path = ../src/RageFileBasic.h; sourceTree = ""; }; + AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverDeflate.cpp; path = ../src/RageFileDriverDeflate.cpp; sourceTree = ""; }; + AA0E04D1076C4CD500716D81 /* RageFileDriverDeflate.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverDeflate.h; path = ../src/RageFileDriverDeflate.h; sourceTree = ""; }; + AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverSlice.cpp; path = ../src/RageFileDriverSlice.cpp; sourceTree = ""; }; + AA0E04D3076C4CD500716D81 /* RageFileDriverSlice.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverSlice.h; path = ../src/RageFileDriverSlice.h; sourceTree = ""; }; + AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenPackages.cpp; path = ../src/ScreenPackages.cpp; sourceTree = ""; }; + AA1145DA075DFADF0050A3D1 /* ScreenPackages.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenPackages.h; path = ../src/ScreenPackages.h; sourceTree = ""; }; + AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSystemLayer.cpp; path = ../src/ScreenSystemLayer.cpp; sourceTree = ""; }; + AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSystemLayer.h; path = ../src/ScreenSystemLayer.h; sourceTree = ""; }; + AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ModIcon.cpp; path = ../src/ModIcon.cpp; sourceTree = SOURCE_ROOT; }; + AA11A20C0DC5A1B0006BD8AC /* ModIcon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ModIcon.h; path = ../src/ModIcon.h; sourceTree = SOURCE_ROOT; }; + AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ModIconRow.cpp; path = ../src/ModIconRow.cpp; sourceTree = SOURCE_ROOT; }; + AA11A20E0DC5A1B0006BD8AC /* ModIconRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ModIconRow.h; path = ../src/ModIconRow.h; sourceTree = SOURCE_ROOT; }; + AA139C4606923EBE00C1F6ED /* Style.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Style.cpp; path = ../src/Style.cpp; sourceTree = ""; }; + AA147F180A0F78D8006EADF6 /* VectorHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = VectorHelper.h; sourceTree = ""; }; + AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VectorHelper.cpp; sourceTree = ""; }; + AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_FFMpeg.cpp; path = MovieTexture/MovieTexture_FFMpeg.cpp; sourceTree = ""; }; + AA14ED100509F40000E3FAD7 /* MovieTexture_FFMpeg.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_FFMpeg.h; path = MovieTexture/MovieTexture_FFMpeg.h; sourceTree = ""; }; + AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenProfileLoad.cpp; path = ../src/ScreenProfileLoad.cpp; sourceTree = ""; }; + AA18935D0BD777C400AEC0BF /* ScreenProfileLoad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenProfileLoad.h; path = ../src/ScreenProfileLoad.h; sourceTree = ""; }; + AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenProfileSave.cpp; path = ../src/ScreenProfileSave.cpp; sourceTree = ""; }; + AA18935F0BD777C400AEC0BF /* ScreenProfileSave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenProfileSave.h; path = ../src/ScreenProfileSave.h; sourceTree = ""; }; + AA1B08370762532800835464 /* Command.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Command.cpp; path = ../src/Command.cpp; sourceTree = ""; }; + AA1B08380762532800835464 /* Command.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Command.h; path = ../src/Command.h; sourceTree = ""; }; + AA1B08390762532800835464 /* GameCommand.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameCommand.cpp; path = ../src/GameCommand.cpp; sourceTree = ""; }; + AA1B083A0762532800835464 /* GameCommand.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameCommand.h; path = ../src/GameCommand.h; sourceTree = ""; }; + AA1B083B0762532800835464 /* Preference.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Preference.cpp; path = ../src/Preference.cpp; sourceTree = ""; }; + AA1C6556050D234B0073A143 /* ProfileManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ProfileManager.cpp; path = ../src/ProfileManager.cpp; sourceTree = ""; }; + AA1C6557050D234B0073A143 /* ProfileManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ProfileManager.h; path = ../src/ProfileManager.h; sourceTree = ""; }; + AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Vorbisfile.cpp; path = ../src/RageSoundReader_Vorbisfile.cpp; sourceTree = ""; }; + AA1C65A5050FD21F0073A143 /* RageSoundReader_Vorbisfile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Vorbisfile.h; path = ../src/RageSoundReader_Vorbisfile.h; sourceTree = ""; }; + AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_WAV.cpp; path = ../src/RageSoundReader_WAV.cpp; sourceTree = ""; }; + AA1C65A7050FD21F0073A143 /* RageSoundReader_WAV.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_WAV.h; path = ../src/RageSoundReader_WAV.h; sourceTree = ""; }; + AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = RageSoundDriver_Generic_Software.cpp; sourceTree = ""; }; + AA1DC47204A485E900D02EE9 /* ActorUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorUtil.h; path = ../src/ActorUtil.h; sourceTree = ""; }; + AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelectMaster.cpp; path = ../src/ScreenSelectMaster.cpp; sourceTree = ""; }; + AA1DC47504A4861700D02EE9 /* ScreenSelectMaster.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectMaster.h; path = ../src/ScreenSelectMaster.h; sourceTree = ""; }; + AA1DE9560C5468CE00D59F20 /* Hardware.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Hardware.plist; sourceTree = ""; }; + AA1DE9590C5468FE00D59F20 /* Hardware.in.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Hardware.in.plist; sourceTree = ""; }; + AA1F9C4509AF1BF5002C15A8 /* PumpDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PumpDevice.h; sourceTree = ""; }; + AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PumpDevice.cpp; sourceTree = ""; }; + AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenDimensions.cpp; path = ../src/ScreenDimensions.cpp; sourceTree = ""; }; + AA21D5A10712AE16008B825F /* ThemeMetric.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ThemeMetric.h; path = ../src/ThemeMetric.h; sourceTree = ""; }; + AA21E4730A9826CD00684CEA /* libjpeg_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libjpeg_link.a; sourceTree = ""; }; + AA21E4750A9826CD00684CEA /* libogg_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libogg_link.a; sourceTree = ""; }; + AA21E4760A9826CD00684CEA /* libpng_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpng_link.a; sourceTree = ""; }; + AA21E4770A9826CD00684CEA /* libtheora_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtheora_link.a; sourceTree = ""; }; + AA21E4780A9826CD00684CEA /* libvorbis_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbis_link.a; sourceTree = ""; }; + AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetSelectMusic.cpp; path = ../src/ScreenNetSelectMusic.cpp; sourceTree = ""; }; + AA22CBA406DE909C0083BA97 /* ScreenNetSelectMusic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetSelectMusic.h; path = ../src/ScreenNetSelectMusic.h; sourceTree = ""; }; + AA230EAE06043704002672F3 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + AA230EAF06043704002672F3 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; + AA230ECF06043EFD002672F3 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverZip.cpp; path = ../src/RageFileDriverZip.cpp; sourceTree = ""; }; + AA251B7605841FCE00027ACB /* RageFileDriverZip.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverZip.h; path = ../src/RageFileDriverZip.h; sourceTree = ""; }; + AA25200D0587225500027ACB /* Style.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Style.h; path = ../src/Style.h; sourceTree = ""; }; + AA272C3004CD757100D02EE9 /* RageFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFile.cpp; path = ../src/RageFile.cpp; sourceTree = ""; }; + AA272C3104CD757100D02EE9 /* RageFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFile.h; path = ../src/RageFile.h; sourceTree = ""; }; + AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; + AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; + AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; + AA29CE580558741A00961A51 /* sm-ssc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sm-ssc.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; + AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; + AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; + AA2CA89E0BB745BD002441E9 /* ScreenContinue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenContinue.h; path = ../src/ScreenContinue.h; sourceTree = ""; }; + AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenSelectLanguage.cpp; path = ../src/ScreenSelectLanguage.cpp; sourceTree = ""; }; + AA2EA0000A770208003A0C11 /* ScreenSelectLanguage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenSelectLanguage.h; path = ../src/ScreenSelectLanguage.h; sourceTree = ""; }; + AA2FB638091212AF000FD574 /* LifeMeter.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeter.cpp; path = ../src/LifeMeter.cpp; sourceTree = ""; }; + AA31D51B0B1EC6540016AB6B /* RageSoundReader_Filter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Filter.h; path = ../src/RageSoundReader_Filter.h; sourceTree = ""; }; + AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_PitchChange.cpp; path = ../src/RageSoundReader_PitchChange.cpp; sourceTree = ""; }; + AA31D51D0B1EC6540016AB6B /* RageSoundReader_PitchChange.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_PitchChange.h; path = ../src/RageSoundReader_PitchChange.h; sourceTree = ""; }; + AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_SpeedChange.cpp; path = ../src/RageSoundReader_SpeedChange.cpp; sourceTree = ""; }; + AA31D51F0B1EC6540016AB6B /* RageSoundReader_SpeedChange.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_SpeedChange.h; path = ../src/RageSoundReader_SpeedChange.h; sourceTree = ""; }; + AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_Merge.cpp; path = ../src/RageSoundReader_Merge.cpp; sourceTree = ""; }; + AA3396B70BDE195E00E1475F /* RageSoundReader_Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Merge.h; path = ../src/RageSoundReader_Merge.h; sourceTree = ""; }; + AA339A7D0BF0FA6300E1475F /* LoadingWindow_Null.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadingWindow_Null.h; sourceTree = ""; }; + AA3A705E06AA144C006F755E /* CommonMetrics.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CommonMetrics.h; path = ../src/CommonMetrics.h; sourceTree = ""; }; + AA3A706006AA1645006F755E /* StyleUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StyleUtil.cpp; path = ../src/StyleUtil.cpp; sourceTree = ""; }; + AA3A706106AA1645006F755E /* StyleUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StyleUtil.h; path = ../src/StyleUtil.h; sourceTree = ""; }; + AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeterTime.cpp; path = ../src/LifeMeterTime.cpp; sourceTree = ""; }; + AA3D5E5B08214C77002AA665 /* LifeMeterTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeterTime.h; path = ../src/LifeMeterTime.h; sourceTree = ""; }; + AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayLifeTime.cpp; path = ../src/ScoreDisplayLifeTime.cpp; sourceTree = ""; }; + AA3D5E5D08214C77002AA665 /* ScoreDisplayLifeTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayLifeTime.h; path = ../src/ScoreDisplayLifeTime.h; sourceTree = ""; }; + AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StreamDisplay.cpp; path = ../src/StreamDisplay.cpp; sourceTree = ""; }; + AA3D5E90082152B6002AA665 /* StreamDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StreamDisplay.h; path = ../src/StreamDisplay.h; sourceTree = ""; }; + AA3D78FF06A275E90064B980 /* RadarValues.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RadarValues.cpp; path = ../src/RadarValues.cpp; sourceTree = ""; }; + AA3D790006A275E90064B980 /* RadarValues.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RadarValues.h; path = ../src/RadarValues.h; sourceTree = ""; }; + AA3D793106A279530064B980 /* DateTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DateTime.cpp; path = ../src/DateTime.cpp; sourceTree = ""; }; + AA3D793206A279530064B980 /* DateTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DateTime.h; path = ../src/DateTime.h; sourceTree = ""; }; + AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrashHandlerInternal.cpp; sourceTree = ""; }; + AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ArchHooks.cpp; path = ArchHooks/ArchHooks.cpp; sourceTree = ""; }; + AA40D52B09A08D660068C0D5 /* sm-ssc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sm-ssc.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetworkOptions.cpp; path = ../src/ScreenNetworkOptions.cpp; sourceTree = ""; }; + AA42F5E7067068D30013509E /* ScreenNetworkOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetworkOptions.h; path = ../src/ScreenNetworkOptions.h; sourceTree = ""; }; + AA44705209846B0800983E82 /* HIDDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HIDDevice.h; sourceTree = ""; }; + AA44705309846B0800983E82 /* HIDDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HIDDevice.cpp; sourceTree = ""; }; + AA44708C0984720900983E82 /* JoystickDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoystickDevice.h; sourceTree = ""; }; + AA44708D0984720900983E82 /* JoystickDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JoystickDevice.cpp; sourceTree = ""; }; + AA4470BA098476F600983E82 /* KeyboardDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyboardDevice.h; sourceTree = ""; }; + AA4470BB098476F600983E82 /* KeyboardDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeyboardDevice.cpp; sourceTree = ""; }; + AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_ChannelSplit.cpp; path = ../src/RageSoundReader_ChannelSplit.cpp; sourceTree = ""; }; + AA4F27AF0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_ChannelSplit.h; path = ../src/RageSoundReader_ChannelSplit.h; sourceTree = ""; }; + AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_Pan.cpp; path = ../src/RageSoundReader_Pan.cpp; sourceTree = ""; }; + AA4F27B10B2C01B400ADEA79 /* RageSoundReader_Pan.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Pan.h; path = ../src/RageSoundReader_Pan.h; sourceTree = ""; }; + AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteDataUtil.cpp; path = ../src/NoteDataUtil.cpp; sourceTree = ""; }; + AA4F38C104E2D0B700D02EE9 /* NoteDataUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteDataUtil.h; path = ../src/NoteDataUtil.h; sourceTree = ""; }; + AA50201D05D6D7B200ACEFD0 /* Profile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Profile.cpp; path = ../src/Profile.cpp; sourceTree = ""; }; + AA50201E05D6D7B200ACEFD0 /* Profile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Profile.h; path = ../src/Profile.h; sourceTree = ""; }; + AA52E9BD04DBBCF400D02EE9 /* ver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = ver.cpp; sourceTree = ""; }; + AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsMaster.cpp; path = ../src/ScreenOptionsMaster.cpp; sourceTree = ""; }; + AA53D28505277DAF00D02EE9 /* ScreenOptionsMaster.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsMaster.h; path = ../src/ScreenOptionsMaster.h; sourceTree = ""; }; + AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsMasterPrefs.cpp; path = ../src/ScreenOptionsMasterPrefs.cpp; sourceTree = ""; }; + AA53D28705277DAF00D02EE9 /* ScreenOptionsMasterPrefs.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsMasterPrefs.h; path = ../src/ScreenOptionsMasterPrefs.h; sourceTree = ""; }; + AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenReloadSongs.cpp; path = ../src/ScreenReloadSongs.cpp; sourceTree = ""; }; + AA53D28905277DAF00D02EE9 /* ScreenReloadSongs.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenReloadSongs.h; path = ../src/ScreenReloadSongs.h; sourceTree = ""; }; + AA54709106F559DF008EB9B2 /* Preference.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Preference.h; path = ../src/Preference.h; sourceTree = ""; }; + AA5A51F20A8441AA006DBB92 /* ModsGroup.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ModsGroup.h; path = ../src/ModsGroup.h; sourceTree = ""; }; + AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseUtil.cpp; path = ../src/CourseUtil.cpp; sourceTree = ""; }; + AA5C73F80637A5F000AFB891 /* CourseUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseUtil.h; path = ../src/CourseUtil.h; sourceTree = ""; }; + AA5C73F90637A5F000AFB891 /* SongUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongUtil.cpp; path = ../src/SongUtil.cpp; sourceTree = ""; }; + AA5C73FA0637A5F000AFB891 /* SongUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongUtil.h; path = ../src/SongUtil.h; sourceTree = ""; }; + AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StepsUtil.cpp; path = ../src/StepsUtil.cpp; sourceTree = ""; }; + AA5C73FC0637A5F000AFB891 /* StepsUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StepsUtil.h; path = ../src/StepsUtil.h; sourceTree = ""; }; + AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageTextureRenderTarget.cpp; path = ../src/RageTextureRenderTarget.cpp; sourceTree = ""; }; + AA5D16560A79805C00F17E86 /* RageTextureRenderTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageTextureRenderTarget.h; path = ../src/RageTextureRenderTarget.h; sourceTree = ""; }; + AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ActorFrameTexture.cpp; path = ../src/ActorFrameTexture.cpp; sourceTree = ""; }; + AA5D166B0A798C0E00F17E86 /* ActorFrameTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ActorFrameTexture.h; path = ../src/ActorFrameTexture.h; sourceTree = ""; }; + AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DialogDriver.cpp; sourceTree = ""; }; + AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RageSoundDriver.cpp; sourceTree = ""; }; + AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = GamePreferences.cpp; path = ../src/GamePreferences.cpp; sourceTree = ""; }; + AA6090E50B141D1C00B39AC4 /* GamePreferences.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = GamePreferences.h; path = ../src/GamePreferences.h; sourceTree = ""; }; + AA60E0BC067992D7008ADC41 /* Threads.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Threads.h; sourceTree = ""; }; + AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = Threads_Pthreads.cpp; sourceTree = ""; }; + AA60E0BE067992D7008ADC41 /* Threads_Pthreads.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Threads_Pthreads.h; sourceTree = ""; }; + AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverMemory.cpp; path = ../src/RageFileDriverMemory.cpp; sourceTree = ""; }; + AA64218706EC606F00C21584 /* RageFileDriverMemory.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverMemory.h; path = ../src/RageFileDriverMemory.h; sourceTree = ""; }; + AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenUnlockStatus.cpp; path = ../src/ScreenUnlockStatus.cpp; sourceTree = ""; }; + AA65877A098C322800CE55CC /* ScreenUnlockStatus.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenUnlockStatus.h; path = ../src/ScreenUnlockStatus.h; sourceTree = ""; }; + AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ControllerStateDisplay.cpp; path = ../src/ControllerStateDisplay.cpp; sourceTree = ""; }; + AA6999600ACE1CBB000237F9 /* ControllerStateDisplay.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ControllerStateDisplay.h; path = ../src/ControllerStateDisplay.h; sourceTree = ""; }; + AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ArchHooks_MacOSX.cpp; path = ArchHooks/ArchHooks_MacOSX.cpp; sourceTree = ""; }; + AA6C6AD70DC6B17B00E7A13E /* ArchHooks_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ArchHooks_MacOSX.h; path = ArchHooks/ArchHooks_MacOSX.h; sourceTree = ""; }; + AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DialogDriver_MacOSX.cpp; sourceTree = ""; }; + AA6C6ADD0DC6B1DC00E7A13E /* DialogDriver_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialogDriver_MacOSX.h; sourceTree = ""; }; + AA6C6AE20DC6B22800E7A13E /* LoadingWindow_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadingWindow_MacOSX.h; sourceTree = ""; }; + AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LoadingWindow_MacOSX.mm; sourceTree = ""; }; + AA6C6B000DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LowLevelWindow_MacOSX.h; sourceTree = ""; }; + AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LowLevelWindow_MacOSX.mm; sourceTree = ""; }; + AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardDriverThreaded_MacOSX.cpp; sourceTree = ""; }; + AA6C6B070DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardDriverThreaded_MacOSX.h; sourceTree = ""; }; + AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputHandler_MacOSX_HID.cpp; sourceTree = ""; }; + AA6C6B0D0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputHandler_MacOSX_HID.h; sourceTree = ""; }; + AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayPercentage.cpp; path = ../src/ScoreDisplayPercentage.cpp; sourceTree = ""; }; + AA6DAF0905300B3D00D02EE9 /* ScoreDisplayPercentage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayPercentage.h; path = ../src/ScoreDisplayPercentage.h; sourceTree = ""; }; + AA6E000A047711F3005F316C /* Screen.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Screen.cpp; path = ../src/Screen.cpp; sourceTree = ""; }; + AA6E000B047711F3005F316C /* Screen.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Screen.h; path = ../src/Screen.h; sourceTree = ""; }; + AA6E0010047711F3005F316C /* ScreenAttract.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenAttract.cpp; path = ../src/ScreenAttract.cpp; sourceTree = ""; }; + AA6E0011047711F3005F316C /* ScreenAttract.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenAttract.h; path = ../src/ScreenAttract.h; sourceTree = ""; }; + AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenDemonstration.cpp; path = ../src/ScreenDemonstration.cpp; sourceTree = ""; }; + AA6E001C047711F3005F316C /* ScreenDemonstration.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenDemonstration.h; path = ../src/ScreenDemonstration.h; sourceTree = ""; }; + AA6E001D047711F3005F316C /* ScreenEdit.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEdit.cpp; path = ../src/ScreenEdit.cpp; sourceTree = ""; }; + AA6E001E047711F3005F316C /* ScreenEdit.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEdit.h; path = ../src/ScreenEdit.h; sourceTree = ""; }; + AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEditMenu.cpp; path = ../src/ScreenEditMenu.cpp; sourceTree = ""; }; + AA6E0020047711F3005F316C /* ScreenEditMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEditMenu.h; path = ../src/ScreenEditMenu.h; sourceTree = ""; }; + AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEvaluation.cpp; path = ../src/ScreenEvaluation.cpp; sourceTree = ""; }; + AA6E0022047711F3005F316C /* ScreenEvaluation.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEvaluation.h; path = ../src/ScreenEvaluation.h; sourceTree = ""; }; + AA6E0029047711F3005F316C /* ScreenGameplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenGameplay.cpp; path = ../src/ScreenGameplay.cpp; sourceTree = ""; }; + AA6E002A047711F3005F316C /* ScreenGameplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplay.h; path = ../src/ScreenGameplay.h; sourceTree = ""; }; + AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenHowToPlay.cpp; path = ../src/ScreenHowToPlay.cpp; sourceTree = ""; }; + AA6E0030047711F3005F316C /* ScreenHowToPlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenHowToPlay.h; path = ../src/ScreenHowToPlay.h; sourceTree = ""; }; + AA6E0033047711F3005F316C /* ScreenInstructions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenInstructions.cpp; path = ../src/ScreenInstructions.cpp; sourceTree = ""; }; + AA6E0034047711F3005F316C /* ScreenInstructions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenInstructions.h; path = ../src/ScreenInstructions.h; sourceTree = ""; }; + AA6E0037047711F3005F316C /* ScreenJukebox.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenJukebox.cpp; path = ../src/ScreenJukebox.cpp; sourceTree = ""; }; + AA6E0038047711F3005F316C /* ScreenJukebox.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenJukebox.h; path = ../src/ScreenJukebox.h; sourceTree = ""; }; + AA6E003F047711F3005F316C /* ScreenManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenManager.cpp; path = ../src/ScreenManager.cpp; sourceTree = ""; }; + AA6E0040047711F3005F316C /* ScreenManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenManager.h; path = ../src/ScreenManager.h; sourceTree = ""; }; + AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenMapControllers.cpp; path = ../src/ScreenMapControllers.cpp; sourceTree = ""; }; + AA6E0042047711F3005F316C /* ScreenMapControllers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenMapControllers.h; path = ../src/ScreenMapControllers.h; sourceTree = ""; }; + AA6E0044047711F3005F316C /* ScreenMessage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenMessage.h; path = ../src/ScreenMessage.h; sourceTree = ""; }; + AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenMiniMenu.cpp; path = ../src/ScreenMiniMenu.cpp; sourceTree = ""; }; + AA6E0046047711F3005F316C /* ScreenMiniMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenMiniMenu.h; path = ../src/ScreenMiniMenu.h; sourceTree = ""; }; + AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNameEntry.cpp; path = ../src/ScreenNameEntry.cpp; sourceTree = ""; }; + AA6E004A047711F3005F316C /* ScreenNameEntry.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNameEntry.h; path = ../src/ScreenNameEntry.h; sourceTree = ""; }; + AA6E004B047711F3005F316C /* ScreenOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptions.cpp; path = ../src/ScreenOptions.cpp; sourceTree = ""; }; + AA6E004C047711F3005F316C /* ScreenOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptions.h; path = ../src/ScreenOptions.h; sourceTree = ""; }; + AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenPlayerOptions.cpp; path = ../src/ScreenPlayerOptions.cpp; sourceTree = ""; }; + AA6E0050047711F3005F316C /* ScreenPlayerOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenPlayerOptions.h; path = ../src/ScreenPlayerOptions.h; sourceTree = ""; }; + AA6E0051047711F3005F316C /* ScreenPrompt.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenPrompt.cpp; path = ../src/ScreenPrompt.cpp; sourceTree = ""; }; + AA6E0052047711F3005F316C /* ScreenPrompt.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenPrompt.h; path = ../src/ScreenPrompt.h; sourceTree = ""; }; + AA6E0053047711F3005F316C /* ScreenRanking.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenRanking.cpp; path = ../src/ScreenRanking.cpp; sourceTree = ""; }; + AA6E0054047711F3005F316C /* ScreenRanking.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenRanking.h; path = ../src/ScreenRanking.h; sourceTree = ""; }; + AA6E0057047711F3005F316C /* ScreenSandbox.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSandbox.cpp; path = ../src/ScreenSandbox.cpp; sourceTree = ""; }; + AA6E0058047711F3005F316C /* ScreenSandbox.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSandbox.h; path = ../src/ScreenSandbox.h; sourceTree = ""; }; + AA6E0059047711F3005F316C /* ScreenSelect.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelect.cpp; path = ../src/ScreenSelect.cpp; sourceTree = ""; }; + AA6E005A047711F3005F316C /* ScreenSelect.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelect.h; path = ../src/ScreenSelect.h; sourceTree = ""; }; + AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelectCharacter.cpp; path = ../src/ScreenSelectCharacter.cpp; sourceTree = ""; }; + AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectCharacter.h; path = ../src/ScreenSelectCharacter.h; sourceTree = ""; }; + AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSelectMusic.cpp; path = ../src/ScreenSelectMusic.cpp; sourceTree = ""; }; + AA6E006A047711F3005F316C /* ScreenSelectMusic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectMusic.h; path = ../src/ScreenSelectMusic.h; sourceTree = ""; }; + AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSongOptions.cpp; path = ../src/ScreenSongOptions.cpp; sourceTree = ""; }; + AA6E0070047711F3005F316C /* ScreenSongOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSongOptions.h; path = ../src/ScreenSongOptions.h; sourceTree = ""; }; + AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestFonts.cpp; path = ../src/ScreenTestFonts.cpp; sourceTree = ""; }; + AA6E007A047711F3005F316C /* ScreenTestFonts.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestFonts.h; path = ../src/ScreenTestFonts.h; sourceTree = ""; }; + AA6E007B047711F3005F316C /* ScreenTestSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestSound.cpp; path = ../src/ScreenTestSound.cpp; sourceTree = ""; }; + AA6E007C047711F3005F316C /* ScreenTestSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestSound.h; path = ../src/ScreenTestSound.h; sourceTree = ""; }; + AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTextEntry.cpp; path = ../src/ScreenTextEntry.cpp; sourceTree = ""; }; + AA6E007E047711F3005F316C /* ScreenTextEntry.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTextEntry.h; path = ../src/ScreenTextEntry.h; sourceTree = ""; }; + AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTitleMenu.cpp; path = ../src/ScreenTitleMenu.cpp; sourceTree = ""; }; + AA6E0080047711F3005F316C /* ScreenTitleMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTitleMenu.h; path = ../src/ScreenTitleMenu.h; sourceTree = ""; }; + AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AnnouncerManager.cpp; path = ../src/AnnouncerManager.cpp; sourceTree = ""; }; + AA6E01000477128A005F316C /* AnnouncerManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AnnouncerManager.h; path = ../src/AnnouncerManager.h; sourceTree = ""; }; + AA6E01010477128A005F316C /* GameManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameManager.cpp; path = ../src/GameManager.cpp; sourceTree = ""; }; + AA6E01020477128A005F316C /* GameManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameManager.h; path = ../src/GameManager.h; sourceTree = ""; }; + AA6E01030477128A005F316C /* GameState.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameState.cpp; path = ../src/GameState.cpp; sourceTree = ""; }; + AA6E01040477128A005F316C /* GameState.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameState.h; path = ../src/GameState.h; sourceTree = ""; }; + AA6E01050477128A005F316C /* InputFilter.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = InputFilter.cpp; path = ../src/InputFilter.cpp; sourceTree = ""; }; + AA6E01060477128A005F316C /* InputFilter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputFilter.h; path = ../src/InputFilter.h; sourceTree = ""; }; + AA6E01070477128A005F316C /* InputMapper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = InputMapper.cpp; path = ../src/InputMapper.cpp; sourceTree = ""; }; + AA6E01080477128A005F316C /* InputMapper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputMapper.h; path = ../src/InputMapper.h; sourceTree = ""; }; + AA6E01090477128A005F316C /* InputQueue.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = InputQueue.cpp; path = ../src/InputQueue.cpp; sourceTree = ""; }; + AA6E010A0477128A005F316C /* InputQueue.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputQueue.h; path = ../src/InputQueue.h; sourceTree = ""; }; + AA6E010B0477128A005F316C /* NoteSkinManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteSkinManager.cpp; path = ../src/NoteSkinManager.cpp; sourceTree = ""; }; + AA6E010C0477128A005F316C /* NoteSkinManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteSkinManager.h; path = ../src/NoteSkinManager.h; sourceTree = ""; }; + AA6E010D0477128A005F316C /* PrefsManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PrefsManager.cpp; path = ../src/PrefsManager.cpp; sourceTree = ""; }; + AA6E010E0477128A005F316C /* PrefsManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PrefsManager.h; path = ../src/PrefsManager.h; sourceTree = ""; }; + AA6E010F0477128A005F316C /* SongManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongManager.cpp; path = ../src/SongManager.cpp; sourceTree = ""; }; + AA6E01100477128A005F316C /* SongManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongManager.h; path = ../src/SongManager.h; sourceTree = ""; }; + AA6E01120477128A005F316C /* ThemeManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ThemeManager.cpp; path = ../src/ThemeManager.cpp; sourceTree = ""; }; + AA6E01130477128A005F316C /* ThemeManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ThemeManager.h; path = ../src/ThemeManager.h; sourceTree = ""; }; + AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = RageSoundDriver_Null.cpp; sourceTree = ""; }; + AA6E012F047712BE005F316C /* RageSoundDriver_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = RageSoundDriver_Null.h; sourceTree = ""; }; + AA6E01630477136A005F316C /* LowLevelWindow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LowLevelWindow.h; sourceTree = ""; }; + AA6E01DB04771F11005F316C /* MovieTexture.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture.cpp; path = MovieTexture/MovieTexture.cpp; sourceTree = ""; }; + AA6E01DE04772005005F316C /* SongCacheIndex.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongCacheIndex.cpp; path = ../src/SongCacheIndex.cpp; sourceTree = ""; }; + AA6E01DF04772005005F316C /* SongCacheIndex.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongCacheIndex.h; path = ../src/SongCacheIndex.h; sourceTree = ""; }; + AA6E01E20477205A005F316C /* Song.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Song.cpp; path = ../src/Song.cpp; sourceTree = ""; }; + AA6E01E6047720A3005F316C /* RandomSample.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RandomSample.cpp; path = ../src/RandomSample.cpp; sourceTree = ""; }; + AA6E01E7047720A3005F316C /* RandomSample.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RandomSample.h; path = ../src/RandomSample.h; sourceTree = ""; }; + AA6E6E0907F518E800C3EBB4 /* Quad.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Quad.cpp; path = ../src/Quad.cpp; sourceTree = ""; }; + AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageBitmapTexture.cpp; path = ../src/RageBitmapTexture.cpp; sourceTree = ""; }; + AA6EFD6E04770A7C005F316C /* RageBitmapTexture.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageBitmapTexture.h; path = ../src/RageBitmapTexture.h; sourceTree = ""; }; + AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageDisplay.cpp; path = ../src/RageDisplay.cpp; sourceTree = ""; }; + AA6EFD7004770A7C005F316C /* RageDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageDisplay.h; path = ../src/RageDisplay.h; sourceTree = ""; }; + AA6EFD7204770A7C005F316C /* RageException.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageException.cpp; path = ../src/RageException.cpp; sourceTree = ""; }; + AA6EFD7304770A7C005F316C /* RageException.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageException.h; path = ../src/RageException.h; sourceTree = ""; }; + AA6EFD7404770A7C005F316C /* RageInput.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageInput.cpp; path = ../src/RageInput.cpp; sourceTree = ""; }; + AA6EFD7504770A7C005F316C /* RageInput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageInput.h; path = ../src/RageInput.h; sourceTree = ""; }; + AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageInputDevice.cpp; path = ../src/RageInputDevice.cpp; sourceTree = ""; }; + AA6EFD7704770A7C005F316C /* RageInputDevice.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageInputDevice.h; path = ../src/RageInputDevice.h; sourceTree = ""; }; + AA6EFD7804770A7C005F316C /* RageLog.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageLog.cpp; path = ../src/RageLog.cpp; sourceTree = ""; }; + AA6EFD7904770A7C005F316C /* RageLog.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageLog.h; path = ../src/RageLog.h; sourceTree = ""; }; + AA6EFD7A04770A7C005F316C /* RageMath.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageMath.cpp; path = ../src/RageMath.cpp; sourceTree = ""; }; + AA6EFD7B04770A7C005F316C /* RageMath.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageMath.h; path = ../src/RageMath.h; sourceTree = ""; }; + AA6EFD7C04770A7C005F316C /* RageSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSound.cpp; path = ../src/RageSound.cpp; sourceTree = ""; }; + AA6EFD7D04770A7C005F316C /* RageSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSound.h; path = ../src/RageSound.h; sourceTree = ""; }; + AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundManager.cpp; path = ../src/RageSoundManager.cpp; sourceTree = ""; }; + AA6EFD7F04770A7C005F316C /* RageSoundManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundManager.h; path = ../src/RageSoundManager.h; sourceTree = ""; }; + AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Preload.cpp; path = ../src/RageSoundReader_Preload.cpp; sourceTree = ""; }; + AA6EFD8104770A7C005F316C /* RageSoundReader_Preload.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Preload.h; path = ../src/RageSoundReader_Preload.h; sourceTree = ""; }; + AA6EFD8604770A7C005F316C /* RageSoundReader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader.h; path = ../src/RageSoundReader.h; sourceTree = ""; }; + AA6EFD8904770A7C005F316C /* RageTexture.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTexture.cpp; path = ../src/RageTexture.cpp; sourceTree = ""; }; + AA6EFD8A04770A7C005F316C /* RageTexture.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTexture.h; path = ../src/RageTexture.h; sourceTree = ""; }; + AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTextureManager.cpp; path = ../src/RageTextureManager.cpp; sourceTree = ""; }; + AA6EFD8C04770A7C005F316C /* RageTextureManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTextureManager.h; path = ../src/RageTextureManager.h; sourceTree = ""; }; + AA6EFD8D04770A7C005F316C /* RageThreads.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageThreads.cpp; path = ../src/RageThreads.cpp; sourceTree = ""; }; + AA6EFD8E04770A7C005F316C /* RageThreads.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageThreads.h; path = ../src/RageThreads.h; sourceTree = ""; }; + AA6EFD8F04770A7C005F316C /* RageTimer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTimer.cpp; path = ../src/RageTimer.cpp; sourceTree = ""; }; + AA6EFD9004770A7C005F316C /* RageTimer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTimer.h; path = ../src/RageTimer.h; sourceTree = ""; }; + AA6EFD9104770A7C005F316C /* RageTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTypes.h; path = ../src/RageTypes.h; sourceTree = ""; }; + AA6EFD9204770A7C005F316C /* RageUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil.cpp; path = ../src/RageUtil.cpp; sourceTree = ""; }; + AA6EFD9304770A7C005F316C /* RageUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil.h; path = ../src/RageUtil.h; sourceTree = ""; }; + AA6EFDCB04770C79005F316C /* Character.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Character.cpp; path = ../src/Character.cpp; sourceTree = ""; }; + AA6EFDCC04770C79005F316C /* Character.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Character.h; path = ../src/Character.h; sourceTree = ""; }; + AA6EFDCD04770C79005F316C /* CodeDetector.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CodeDetector.cpp; path = ../src/CodeDetector.cpp; sourceTree = ""; }; + AA6EFDCE04770C79005F316C /* CodeDetector.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CodeDetector.h; path = ../src/CodeDetector.h; sourceTree = ""; }; + AA6EFDCF04770C79005F316C /* Course.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Course.cpp; path = ../src/Course.cpp; sourceTree = ""; }; + AA6EFDD004770C79005F316C /* Course.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Course.h; path = ../src/Course.h; sourceTree = ""; }; + AA6EFDD104770C79005F316C /* Font.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Font.cpp; path = ../src/Font.cpp; sourceTree = ""; }; + AA6EFDD204770C79005F316C /* Font.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Font.h; path = ../src/Font.h; sourceTree = ""; }; + AA6EFDD304770C79005F316C /* FontCharAliases.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FontCharAliases.cpp; path = ../src/FontCharAliases.cpp; sourceTree = ""; }; + AA6EFDD404770C79005F316C /* FontCharAliases.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FontCharAliases.h; path = ../src/FontCharAliases.h; sourceTree = ""; }; + AA6EFDD504770C79005F316C /* FontCharmaps.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FontCharmaps.cpp; path = ../src/FontCharmaps.cpp; sourceTree = ""; }; + AA6EFDD604770C79005F316C /* FontCharmaps.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FontCharmaps.h; path = ../src/FontCharmaps.h; sourceTree = ""; }; + AA6EFDD704770C79005F316C /* FontManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FontManager.cpp; path = ../src/FontManager.cpp; sourceTree = ""; }; + AA6EFDD804770C79005F316C /* FontManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FontManager.h; path = ../src/FontManager.h; sourceTree = ""; }; + AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameConstantsAndTypes.cpp; path = ../src/GameConstantsAndTypes.cpp; sourceTree = ""; }; + AA6EFDDA04770C79005F316C /* GameConstantsAndTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameConstantsAndTypes.h; path = ../src/GameConstantsAndTypes.h; sourceTree = ""; }; + AA6EFDDD04770C79005F316C /* GameInput.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameInput.cpp; path = ../src/GameInput.cpp; sourceTree = ""; }; + AA6EFDDE04770C79005F316C /* GameInput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameInput.h; path = ../src/GameInput.h; sourceTree = ""; }; + AA6EFDDF04770C79005F316C /* Grade.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Grade.cpp; path = ../src/Grade.cpp; sourceTree = ""; }; + AA6EFDE004770C79005F316C /* Grade.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Grade.h; path = ../src/Grade.h; sourceTree = ""; }; + AA6EFDE104770C79005F316C /* Inventory.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Inventory.cpp; path = ../src/Inventory.cpp; sourceTree = ""; }; + AA6EFDE204770C79005F316C /* Inventory.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Inventory.h; path = ../src/Inventory.h; sourceTree = ""; }; + AA6EFDE304770C79005F316C /* LyricsLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LyricsLoader.cpp; path = ../src/LyricsLoader.cpp; sourceTree = ""; }; + AA6EFDE404770C79005F316C /* LyricsLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LyricsLoader.h; path = ../src/LyricsLoader.h; sourceTree = ""; }; + AA6EFDE504770C79005F316C /* NoteData.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteData.cpp; path = ../src/NoteData.cpp; sourceTree = ""; }; + AA6EFDE604770C79005F316C /* NoteData.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteData.h; path = ../src/NoteData.h; sourceTree = ""; }; + AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteDataWithScoring.cpp; path = ../src/NoteDataWithScoring.cpp; sourceTree = ""; }; + AA6EFDE804770C79005F316C /* NoteDataWithScoring.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteDataWithScoring.h; path = ../src/NoteDataWithScoring.h; sourceTree = ""; }; + AA6EFDED04770C79005F316C /* NotesLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoader.cpp; path = ../src/NotesLoader.cpp; sourceTree = ""; }; + AA6EFDEE04770C79005F316C /* NotesLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoader.h; path = ../src/NotesLoader.h; sourceTree = ""; }; + AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderBMS.cpp; path = ../src/NotesLoaderBMS.cpp; sourceTree = ""; }; + AA6EFDF004770C79005F316C /* NotesLoaderBMS.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderBMS.h; path = ../src/NotesLoaderBMS.h; sourceTree = ""; }; + AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderDWI.cpp; path = ../src/NotesLoaderDWI.cpp; sourceTree = ""; }; + AA6EFDF204770C79005F316C /* NotesLoaderDWI.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderDWI.h; path = ../src/NotesLoaderDWI.h; sourceTree = ""; }; + AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderKSF.cpp; path = ../src/NotesLoaderKSF.cpp; sourceTree = ""; }; + AA6EFDF404770C79005F316C /* NotesLoaderKSF.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderKSF.h; path = ../src/NotesLoaderKSF.h; sourceTree = ""; }; + AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesLoaderSM.cpp; path = ../src/NotesLoaderSM.cpp; sourceTree = ""; }; + AA6EFDF604770C79005F316C /* NotesLoaderSM.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesLoaderSM.h; path = ../src/NotesLoaderSM.h; sourceTree = ""; }; + AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesWriterDWI.cpp; path = ../src/NotesWriterDWI.cpp; sourceTree = ""; }; + AA6EFDF804770C79005F316C /* NotesWriterDWI.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesWriterDWI.h; path = ../src/NotesWriterDWI.h; sourceTree = ""; }; + AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NotesWriterSM.cpp; path = ../src/NotesWriterSM.cpp; sourceTree = ""; }; + AA6EFDFA04770C79005F316C /* NotesWriterSM.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NotesWriterSM.h; path = ../src/NotesWriterSM.h; sourceTree = ""; }; + AA6EFDFB04770C79005F316C /* NoteTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteTypes.cpp; path = ../src/NoteTypes.cpp; sourceTree = ""; }; + AA6EFDFC04770C79005F316C /* NoteTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteTypes.h; path = ../src/NoteTypes.h; sourceTree = ""; }; + AA6EFDFD04770C79005F316C /* Player.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Player.cpp; path = ../src/Player.cpp; sourceTree = ""; }; + AA6EFDFE04770C79005F316C /* Player.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Player.h; path = ../src/Player.h; sourceTree = ""; }; + AA6EFDFF04770C79005F316C /* PlayerAI.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerAI.cpp; path = ../src/PlayerAI.cpp; sourceTree = ""; }; + AA6EFE0004770C79005F316C /* PlayerAI.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerAI.h; path = ../src/PlayerAI.h; sourceTree = ""; }; + AA6EFE0104770C79005F316C /* PlayerNumber.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerNumber.cpp; path = ../src/PlayerNumber.cpp; sourceTree = ""; }; + AA6EFE0204770C79005F316C /* PlayerNumber.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerNumber.h; path = ../src/PlayerNumber.h; sourceTree = ""; }; + AA6EFE0304770C79005F316C /* PlayerOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerOptions.cpp; path = ../src/PlayerOptions.cpp; sourceTree = ""; }; + AA6EFE0404770C79005F316C /* PlayerOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerOptions.h; path = ../src/PlayerOptions.h; sourceTree = ""; }; + AA6EFE0704770C79005F316C /* SongOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SongOptions.cpp; path = ../src/SongOptions.cpp; sourceTree = ""; }; + AA6EFE0804770C79005F316C /* SongOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SongOptions.h; path = ../src/SongOptions.h; sourceTree = ""; }; + AA6EFE0904770C79005F316C /* StageStats.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StageStats.cpp; path = ../src/StageStats.cpp; sourceTree = ""; }; + AA6EFE0A04770C79005F316C /* StageStats.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StageStats.h; path = ../src/StageStats.h; sourceTree = ""; }; + AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TitleSubstitution.cpp; path = ../src/TitleSubstitution.cpp; sourceTree = ""; }; + AA6EFE0F04770C79005F316C /* TitleSubstitution.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TitleSubstitution.h; path = ../src/TitleSubstitution.h; sourceTree = ""; }; + AA6EFE5804770CAA005F316C /* IniFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = IniFile.cpp; path = ../src/IniFile.cpp; sourceTree = ""; }; + AA6EFE5904770CAA005F316C /* IniFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = IniFile.h; path = ../src/IniFile.h; sourceTree = ""; }; + AA6EFE5A04770CAA005F316C /* MsdFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MsdFile.cpp; path = ../src/MsdFile.cpp; sourceTree = ""; }; + AA6EFE5B04770CAA005F316C /* MsdFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MsdFile.h; path = ../src/MsdFile.h; sourceTree = ""; }; + AA6EFE6004770CF7005F316C /* global.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = global.h; sourceTree = ""; }; + AA6EFE6104770CF7005F316C /* ScreenDimensions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenDimensions.h; path = ../src/ScreenDimensions.h; sourceTree = ""; }; + AA6EFE6204770CF7005F316C /* StdString.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = StdString.h; sourceTree = ""; }; + AA6EFE6304770CF7005F316C /* StepMania.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = StepMania.cpp; sourceTree = ""; }; + AA6EFE6404770CF7005F316C /* StepMania.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = StepMania.h; sourceTree = ""; }; + AA6EFE6E04770D61005F316C /* Banner.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Banner.cpp; path = ../src/Banner.cpp; sourceTree = ""; }; + AA6EFE6F04770D61005F316C /* Banner.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Banner.h; path = ../src/Banner.h; sourceTree = ""; }; + AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BPMDisplay.cpp; path = ../src/BPMDisplay.cpp; sourceTree = ""; }; + AA6EFE7704770E7C005F316C /* BPMDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BPMDisplay.h; path = ../src/BPMDisplay.h; sourceTree = ""; }; + AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseContentsList.cpp; path = ../src/CourseContentsList.cpp; sourceTree = ""; }; + AA6EFE7904770E7C005F316C /* CourseContentsList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseContentsList.h; path = ../src/CourseContentsList.h; sourceTree = ""; }; + AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DifficultyIcon.cpp; path = ../src/DifficultyIcon.cpp; sourceTree = ""; }; + AA6EFE7F04770E7C005F316C /* DifficultyIcon.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DifficultyIcon.h; path = ../src/DifficultyIcon.h; sourceTree = ""; }; + AA6EFE8404770E7C005F316C /* EditMenu.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = EditMenu.cpp; path = ../src/EditMenu.cpp; sourceTree = ""; }; + AA6EFE8504770E7C005F316C /* EditMenu.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = EditMenu.h; path = ../src/EditMenu.h; sourceTree = ""; }; + AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = FadingBanner.cpp; path = ../src/FadingBanner.cpp; sourceTree = ""; }; + AA6EFE8B04770E7C005F316C /* FadingBanner.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = FadingBanner.h; path = ../src/FadingBanner.h; sourceTree = ""; }; + AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GradeDisplay.cpp; path = ../src/GradeDisplay.cpp; sourceTree = ""; }; + AA6EFE8D04770E7C005F316C /* GradeDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GradeDisplay.h; path = ../src/GradeDisplay.h; sourceTree = ""; }; + AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GrooveRadar.cpp; path = ../src/GrooveRadar.cpp; sourceTree = ""; }; + AA6EFE9104770E7C005F316C /* GrooveRadar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GrooveRadar.h; path = ../src/GrooveRadar.h; sourceTree = ""; }; + AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = HelpDisplay.cpp; path = ../src/HelpDisplay.cpp; sourceTree = ""; }; + AA6EFE9504770E7C005F316C /* HelpDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = HelpDisplay.h; path = ../src/HelpDisplay.h; sourceTree = ""; }; + AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MenuTimer.cpp; path = ../src/MenuTimer.cpp; sourceTree = ""; }; + AA6EFE9B04770E7C005F316C /* MenuTimer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MenuTimer.h; path = ../src/MenuTimer.h; sourceTree = ""; }; + AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MeterDisplay.cpp; path = ../src/MeterDisplay.cpp; sourceTree = ""; }; + AA6EFE9D04770E7C005F316C /* MeterDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MeterDisplay.h; path = ../src/MeterDisplay.h; sourceTree = ""; }; + AA6EFEA404770E7C005F316C /* MusicWheel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MusicWheel.cpp; path = ../src/MusicWheel.cpp; sourceTree = ""; }; + AA6EFEA504770E7C005F316C /* MusicWheel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MusicWheel.h; path = ../src/MusicWheel.h; sourceTree = ""; }; + AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MusicWheelItem.cpp; path = ../src/MusicWheelItem.cpp; sourceTree = ""; }; + AA6EFEA704770E7C005F316C /* MusicWheelItem.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MusicWheelItem.h; path = ../src/MusicWheelItem.h; sourceTree = ""; }; + AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = OptionsCursor.cpp; path = ../src/OptionsCursor.cpp; sourceTree = ""; }; + AA6EFEAD04770E7C005F316C /* OptionsCursor.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = OptionsCursor.h; path = ../src/OptionsCursor.h; sourceTree = ""; }; + AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScrollBar.cpp; path = ../src/ScrollBar.cpp; sourceTree = ""; }; + AA6EFEAF04770E7C005F316C /* ScrollBar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScrollBar.h; path = ../src/ScrollBar.h; sourceTree = ""; }; + AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = SnapDisplay.cpp; path = ../src/SnapDisplay.cpp; sourceTree = ""; }; + AA6EFEB304770E7C005F316C /* SnapDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SnapDisplay.h; path = ../src/SnapDisplay.h; sourceTree = ""; }; + AA6EFEB404770E7C005F316C /* TextBanner.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TextBanner.cpp; path = ../src/TextBanner.cpp; sourceTree = ""; }; + AA6EFEB504770E7C005F316C /* TextBanner.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TextBanner.h; path = ../src/TextBanner.h; sourceTree = ""; }; + AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = WheelNotifyIcon.cpp; path = ../src/WheelNotifyIcon.cpp; sourceTree = ""; }; + AA6EFEB704770E7C005F316C /* WheelNotifyIcon.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = WheelNotifyIcon.h; path = ../src/WheelNotifyIcon.h; sourceTree = ""; }; + AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ArrowEffects.cpp; path = ../src/ArrowEffects.cpp; sourceTree = ""; }; + AA6EFEFE04770F63005F316C /* ArrowEffects.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ArrowEffects.h; path = ../src/ArrowEffects.h; sourceTree = ""; }; + AA6EFEFF04770F63005F316C /* Background.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Background.cpp; path = ../src/Background.cpp; sourceTree = ""; }; + AA6EFF0004770F63005F316C /* Background.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Background.h; path = ../src/Background.h; sourceTree = ""; }; + AA6EFF0104770F63005F316C /* BGAnimation.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BGAnimation.cpp; path = ../src/BGAnimation.cpp; sourceTree = ""; }; + AA6EFF0204770F63005F316C /* BGAnimation.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BGAnimation.h; path = ../src/BGAnimation.h; sourceTree = ""; }; + AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BGAnimationLayer.cpp; path = ../src/BGAnimationLayer.cpp; sourceTree = ""; }; + AA6EFF0404770F63005F316C /* BGAnimationLayer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BGAnimationLayer.h; path = ../src/BGAnimationLayer.h; sourceTree = ""; }; + AA6EFF0704770F63005F316C /* DancingCharacters.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DancingCharacters.cpp; path = ../src/DancingCharacters.cpp; sourceTree = ""; }; + AA6EFF0804770F63005F316C /* DancingCharacters.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DancingCharacters.h; path = ../src/DancingCharacters.h; sourceTree = ""; }; + AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GhostArrowRow.cpp; path = ../src/GhostArrowRow.cpp; sourceTree = ""; }; + AA6EFF0E04770F63005F316C /* GhostArrowRow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GhostArrowRow.h; path = ../src/GhostArrowRow.h; sourceTree = ""; }; + AA6EFF1504770F63005F316C /* HoldJudgment.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = HoldJudgment.cpp; path = ../src/HoldJudgment.cpp; sourceTree = ""; }; + AA6EFF1604770F63005F316C /* HoldJudgment.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = HoldJudgment.h; path = ../src/HoldJudgment.h; sourceTree = ""; }; + AA6EFF1A04770F63005F316C /* LifeMeter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeter.h; path = ../src/LifeMeter.h; sourceTree = ""; }; + AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeterBar.cpp; path = ../src/LifeMeterBar.cpp; sourceTree = ""; }; + AA6EFF1C04770F63005F316C /* LifeMeterBar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeterBar.h; path = ../src/LifeMeterBar.h; sourceTree = ""; }; + AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LifeMeterBattery.cpp; path = ../src/LifeMeterBattery.cpp; sourceTree = ""; }; + AA6EFF1E04770F63005F316C /* LifeMeterBattery.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LifeMeterBattery.h; path = ../src/LifeMeterBattery.h; sourceTree = ""; }; + AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LyricDisplay.cpp; path = ../src/LyricDisplay.cpp; sourceTree = ""; }; + AA6EFF2004770F63005F316C /* LyricDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LyricDisplay.h; path = ../src/LyricDisplay.h; sourceTree = ""; }; + AA6EFF2104770F63005F316C /* NoteDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteDisplay.cpp; path = ../src/NoteDisplay.cpp; sourceTree = ""; }; + AA6EFF2204770F63005F316C /* NoteDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteDisplay.h; path = ../src/NoteDisplay.h; sourceTree = ""; }; + AA6EFF2304770F63005F316C /* NoteField.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NoteField.cpp; path = ../src/NoteField.cpp; sourceTree = ""; }; + AA6EFF2404770F63005F316C /* NoteField.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NoteField.h; path = ../src/NoteField.h; sourceTree = ""; }; + AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplay.cpp; path = ../src/ScoreDisplay.cpp; sourceTree = ""; }; + AA6EFF2604770F63005F316C /* ScoreDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplay.h; path = ../src/ScoreDisplay.h; sourceTree = ""; }; + AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayBattle.cpp; path = ../src/ScoreDisplayBattle.cpp; sourceTree = ""; }; + AA6EFF2804770F63005F316C /* ScoreDisplayBattle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayBattle.h; path = ../src/ScoreDisplayBattle.h; sourceTree = ""; }; + AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayNormal.cpp; path = ../src/ScoreDisplayNormal.cpp; sourceTree = ""; }; + AA6EFF2A04770F63005F316C /* ScoreDisplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayNormal.h; path = ../src/ScoreDisplayNormal.h; sourceTree = ""; }; + AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayOni.cpp; path = ../src/ScoreDisplayOni.cpp; sourceTree = ""; }; + AA6EFF2C04770F63005F316C /* ScoreDisplayOni.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayOni.h; path = ../src/ScoreDisplayOni.h; sourceTree = ""; }; + AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayRave.cpp; path = ../src/ScoreDisplayRave.cpp; sourceTree = ""; }; + AA6EFF2E04770F63005F316C /* ScoreDisplayRave.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayRave.h; path = ../src/ScoreDisplayRave.h; sourceTree = ""; }; + AA6EFF3004770F63005F316C /* ScoreKeeper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreKeeper.h; path = ../src/ScoreKeeper.h; sourceTree = ""; }; + AA6EFF7004770F86005F316C /* Transition.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Transition.cpp; path = ../src/Transition.cpp; sourceTree = ""; }; + AA6EFF7104770F86005F316C /* Transition.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Transition.h; path = ../src/Transition.h; sourceTree = ""; }; + AA6EFF7504770FFD005F316C /* Actor.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Actor.cpp; path = ../src/Actor.cpp; sourceTree = ""; }; + AA6EFF7604770FFD005F316C /* Actor.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Actor.h; path = ../src/Actor.h; sourceTree = ""; }; + AA6EFF7704770FFD005F316C /* ActorFrame.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorFrame.cpp; path = ../src/ActorFrame.cpp; sourceTree = ""; }; + AA6EFF7804770FFD005F316C /* ActorFrame.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorFrame.h; path = ../src/ActorFrame.h; sourceTree = ""; }; + AA6EFF7904770FFD005F316C /* ActorScroller.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorScroller.cpp; path = ../src/ActorScroller.cpp; sourceTree = ""; }; + AA6EFF7A04770FFD005F316C /* ActorScroller.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorScroller.h; path = ../src/ActorScroller.h; sourceTree = ""; }; + AA6EFFB904770FFD005F316C /* BitmapText.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BitmapText.cpp; path = ../src/BitmapText.cpp; sourceTree = ""; }; + AA6EFFBA04770FFD005F316C /* BitmapText.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BitmapText.h; path = ../src/BitmapText.h; sourceTree = ""; }; + AA6EFFBD04770FFD005F316C /* Model.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Model.cpp; path = ../src/Model.cpp; sourceTree = ""; }; + AA6EFFBE04770FFD005F316C /* Model.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Model.h; path = ../src/Model.h; sourceTree = ""; }; + AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ModelTypes.cpp; path = ../src/ModelTypes.cpp; sourceTree = ""; }; + AA6EFFC004770FFD005F316C /* ModelTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ModelTypes.h; path = ../src/ModelTypes.h; sourceTree = ""; }; + AA6EFFC104770FFD005F316C /* Quad.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Quad.h; path = ../src/Quad.h; sourceTree = ""; }; + AA6EFFC204770FFD005F316C /* Sprite.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Sprite.cpp; path = ../src/Sprite.cpp; sourceTree = ""; }; + AA6EFFC304770FFD005F316C /* Sprite.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Sprite.h; path = ../src/Sprite.h; sourceTree = ""; }; + AA70E3640663112800DAE1FD /* Foreach.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Foreach.h; sourceTree = ""; }; + AA70E3650663112800DAE1FD /* Trail.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Trail.cpp; path = ../src/Trail.cpp; sourceTree = ""; }; + AA70E3660663112800DAE1FD /* Trail.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Trail.h; path = ../src/Trail.h; sourceTree = ""; }; + AA70E3670663112800DAE1FD /* TrailUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TrailUtil.cpp; path = ../src/TrailUtil.cpp; sourceTree = ""; }; + AA70E3680663112800DAE1FD /* TrailUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TrailUtil.h; path = ../src/TrailUtil.h; sourceTree = ""; }; + AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayAliveTime.cpp; path = ../src/ScoreDisplayAliveTime.cpp; sourceTree = ""; }; + AA7144B00809EEEC00545684 /* ScoreDisplayAliveTime.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayAliveTime.h; path = ../src/ScoreDisplayAliveTime.h; sourceTree = ""; }; + AA729C420599B50D00779F33 /* TimingData.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = TimingData.cpp; path = ../src/TimingData.cpp; sourceTree = ""; }; + AA729C430599B50D00779F33 /* TimingData.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = TimingData.h; path = ../src/TimingData.h; sourceTree = ""; }; + AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardDisplay.cpp; path = ../src/MemoryCardDisplay.cpp; sourceTree = ""; }; + AA729C470599B54D00779F33 /* MemoryCardDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardDisplay.h; path = ../src/MemoryCardDisplay.h; sourceTree = ""; }; + AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ReceptorArrow.cpp; path = ../src/ReceptorArrow.cpp; sourceTree = ""; }; + AA729C4F0599B58D00779F33 /* ReceptorArrow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ReceptorArrow.h; path = ../src/ReceptorArrow.h; sourceTree = ""; }; + AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ReceptorArrowRow.cpp; path = ../src/ReceptorArrowRow.cpp; sourceTree = ""; }; + AA729C510599B58D00779F33 /* ReceptorArrowRow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ReceptorArrowRow.h; path = ../src/ReceptorArrowRow.h; sourceTree = ""; }; + AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = CrashHandler.cpp; sourceTree = ""; }; + AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = CrashHandlerChild.cpp; sourceTree = ""; }; + AA77E74508B64B1400FA24CA /* CharacterManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CharacterManager.cpp; path = ../src/CharacterManager.cpp; sourceTree = ""; }; + AA77E74608B64B1400FA24CA /* CharacterManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CharacterManager.h; path = ../src/CharacterManager.h; sourceTree = ""; }; + AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseLoaderCRS.cpp; path = ../src/CourseLoaderCRS.cpp; sourceTree = ""; }; + AA77E74C08B64B5600FA24CA /* CourseLoaderCRS.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseLoaderCRS.h; path = ../src/CourseLoaderCRS.h; sourceTree = ""; }; + AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CourseWriterCRS.cpp; path = ../src/CourseWriterCRS.cpp; sourceTree = ""; }; + AA77E74E08B64B5600FA24CA /* CourseWriterCRS.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CourseWriterCRS.h; path = ../src/CourseWriterCRS.h; sourceTree = ""; }; + AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsManageCourses.cpp; path = ../src/ScreenOptionsManageCourses.cpp; sourceTree = ""; }; + AA77E75C08B64B9A00FA24CA /* ScreenOptionsManageCourses.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsManageCourses.h; path = ../src/ScreenOptionsManageCourses.h; sourceTree = ""; }; + AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsManageProfiles.cpp; path = ../src/ScreenOptionsManageProfiles.cpp; sourceTree = ""; }; + AA77E75E08B64B9A00FA24CA /* ScreenOptionsManageProfiles.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsManageProfiles.h; path = ../src/ScreenOptionsManageProfiles.h; sourceTree = ""; }; + AA77E8A108B6ABD500FA24CA /* vecLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vecLib.framework; path = /System/Library/Frameworks/vecLib.framework; sourceTree = ""; }; + AA7A2B940AE09B520054C5BA /* lua */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lua; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7A2BAB0AE09CD50054C5BA /* luac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = luac; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Chain.cpp; path = ../src/RageSoundReader_Chain.cpp; sourceTree = ""; }; + AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Chain.h; path = ../src/RageSoundReader_Chain.h; sourceTree = ""; }; + AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundUtil.cpp; path = ../src/RageSoundUtil.cpp; sourceTree = ""; }; + AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundUtil.h; path = ../src/RageSoundUtil.h; sourceTree = ""; }; + AA7C895F0B67444700FD9940 /* libtommath.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtommath.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C8A800B6744F600FD9940 /* bn_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_error.c; sourceTree = ""; }; + AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_invmod.c; sourceTree = ""; }; + AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_montgomery_reduce.c; sourceTree = ""; }; + AA7C8A830B6744F600FD9940 /* bn_fast_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_digs.c; sourceTree = ""; }; + AA7C8A840B6744F600FD9940 /* bn_fast_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_high_digs.c; sourceTree = ""; }; + AA7C8A850B6744F600FD9940 /* bn_fast_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_sqr.c; sourceTree = ""; }; + AA7C8A860B6744F600FD9940 /* bn_mp_2expt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_2expt.c; sourceTree = ""; }; + AA7C8A870B6744F600FD9940 /* bn_mp_abs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_abs.c; sourceTree = ""; }; + AA7C8A880B6744F600FD9940 /* bn_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add.c; sourceTree = ""; }; + AA7C8A890B6744F600FD9940 /* bn_mp_add_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add_d.c; sourceTree = ""; }; + AA7C8A8A0B6744F600FD9940 /* bn_mp_addmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_addmod.c; sourceTree = ""; }; + AA7C8A8B0B6744F600FD9940 /* bn_mp_and.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_and.c; sourceTree = ""; }; + AA7C8A8C0B6744F600FD9940 /* bn_mp_clamp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clamp.c; sourceTree = ""; }; + AA7C8A8D0B6744F600FD9940 /* bn_mp_clear.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear.c; sourceTree = ""; }; + AA7C8A8E0B6744F600FD9940 /* bn_mp_clear_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear_multi.c; sourceTree = ""; }; + AA7C8A8F0B6744F600FD9940 /* bn_mp_cmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp.c; sourceTree = ""; }; + AA7C8A900B6744F600FD9940 /* bn_mp_cmp_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_d.c; sourceTree = ""; }; + AA7C8A910B6744F600FD9940 /* bn_mp_cmp_mag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_mag.c; sourceTree = ""; }; + AA7C8A920B6744F600FD9940 /* bn_mp_cnt_lsb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cnt_lsb.c; sourceTree = ""; }; + AA7C8A930B6744F600FD9940 /* bn_mp_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_copy.c; sourceTree = ""; }; + AA7C8A940B6744F600FD9940 /* bn_mp_count_bits.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_count_bits.c; sourceTree = ""; }; + AA7C8A950B6744F600FD9940 /* bn_mp_div.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div.c; sourceTree = ""; }; + AA7C8A960B6744F600FD9940 /* bn_mp_div_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2.c; sourceTree = ""; }; + AA7C8A970B6744F600FD9940 /* bn_mp_div_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2d.c; sourceTree = ""; }; + AA7C8A980B6744F600FD9940 /* bn_mp_div_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_3.c; sourceTree = ""; }; + AA7C8A990B6744F600FD9940 /* bn_mp_div_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_d.c; sourceTree = ""; }; + AA7C8A9A0B6744F600FD9940 /* bn_mp_dr_is_modulus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_is_modulus.c; sourceTree = ""; }; + AA7C8A9B0B6744F600FD9940 /* bn_mp_dr_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_reduce.c; sourceTree = ""; }; + AA7C8A9C0B6744F600FD9940 /* bn_mp_dr_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_setup.c; sourceTree = ""; }; + AA7C8A9D0B6744F600FD9940 /* bn_mp_exch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exch.c; sourceTree = ""; }; + AA7C8A9E0B6744F600FD9940 /* bn_mp_expt_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_expt_d.c; sourceTree = ""; }; + AA7C8A9F0B6744F600FD9940 /* bn_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod.c; sourceTree = ""; }; + AA7C8AA00B6744F600FD9940 /* bn_mp_exptmod_fast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod_fast.c; sourceTree = ""; }; + AA7C8AA10B6744F600FD9940 /* bn_mp_exteuclid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exteuclid.c; sourceTree = ""; }; + AA7C8AA20B6744F600FD9940 /* bn_mp_fread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fread.c; sourceTree = ""; }; + AA7C8AA30B6744F600FD9940 /* bn_mp_fwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fwrite.c; sourceTree = ""; }; + AA7C8AA40B6744F600FD9940 /* bn_mp_gcd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_gcd.c; sourceTree = ""; }; + AA7C8AA50B6744F600FD9940 /* bn_mp_get_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_get_int.c; sourceTree = ""; }; + AA7C8AA60B6744F600FD9940 /* bn_mp_grow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_grow.c; sourceTree = ""; }; + AA7C8AA70B6744F600FD9940 /* bn_mp_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init.c; sourceTree = ""; }; + AA7C8AA80B6744F600FD9940 /* bn_mp_init_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_copy.c; sourceTree = ""; }; + AA7C8AA90B6744F600FD9940 /* bn_mp_init_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_multi.c; sourceTree = ""; }; + AA7C8AAA0B6744F600FD9940 /* bn_mp_init_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set.c; sourceTree = ""; }; + AA7C8AAB0B6744F600FD9940 /* bn_mp_init_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set_int.c; sourceTree = ""; }; + AA7C8AAC0B6744F600FD9940 /* bn_mp_init_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_size.c; sourceTree = ""; }; + AA7C8AAD0B6744F600FD9940 /* bn_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod.c; sourceTree = ""; }; + AA7C8AAE0B6744F600FD9940 /* bn_mp_invmod_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod_slow.c; sourceTree = ""; }; + AA7C8AAF0B6744F600FD9940 /* bn_mp_is_square.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_is_square.c; sourceTree = ""; }; + AA7C8AB00B6744F600FD9940 /* bn_mp_jacobi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_jacobi.c; sourceTree = ""; }; + AA7C8AB10B6744F600FD9940 /* bn_mp_karatsuba_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_mul.c; sourceTree = ""; }; + AA7C8AB20B6744F600FD9940 /* bn_mp_karatsuba_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_sqr.c; sourceTree = ""; }; + AA7C8AB30B6744F600FD9940 /* bn_mp_lcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lcm.c; sourceTree = ""; }; + AA7C8AB40B6744F700FD9940 /* bn_mp_lshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lshd.c; sourceTree = ""; }; + AA7C8AB50B6744F700FD9940 /* bn_mp_mod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod.c; sourceTree = ""; }; + AA7C8AB60B6744F700FD9940 /* bn_mp_mod_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_2d.c; sourceTree = ""; }; + AA7C8AB70B6744F700FD9940 /* bn_mp_mod_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_d.c; sourceTree = ""; }; + AA7C8AB80B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_calc_normalization.c; sourceTree = ""; }; + AA7C8AB90B6744F700FD9940 /* bn_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_reduce.c; sourceTree = ""; }; + AA7C8ABA0B6744F700FD9940 /* bn_mp_montgomery_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_setup.c; sourceTree = ""; }; + AA7C8ABB0B6744F700FD9940 /* bn_mp_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul.c; sourceTree = ""; }; + AA7C8ABC0B6744F700FD9940 /* bn_mp_mul_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2.c; sourceTree = ""; }; + AA7C8ABD0B6744F700FD9940 /* bn_mp_mul_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2d.c; sourceTree = ""; }; + AA7C8ABE0B6744F700FD9940 /* bn_mp_mul_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_d.c; sourceTree = ""; }; + AA7C8ABF0B6744F700FD9940 /* bn_mp_mulmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mulmod.c; sourceTree = ""; }; + AA7C8AC00B6744F700FD9940 /* bn_mp_n_root.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_n_root.c; sourceTree = ""; }; + AA7C8AC10B6744F700FD9940 /* bn_mp_neg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_neg.c; sourceTree = ""; }; + AA7C8AC20B6744F700FD9940 /* bn_mp_or.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_or.c; sourceTree = ""; }; + AA7C8AC30B6744F700FD9940 /* bn_mp_prime_fermat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_fermat.c; sourceTree = ""; }; + AA7C8AC40B6744F700FD9940 /* bn_mp_prime_is_divisible.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_divisible.c; sourceTree = ""; }; + AA7C8AC50B6744F700FD9940 /* bn_mp_prime_is_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_prime.c; sourceTree = ""; }; + AA7C8AC60B6744F700FD9940 /* bn_mp_prime_miller_rabin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_miller_rabin.c; sourceTree = ""; }; + AA7C8AC70B6744F700FD9940 /* bn_mp_prime_next_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_next_prime.c; sourceTree = ""; }; + AA7C8AC80B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_rabin_miller_trials.c; sourceTree = ""; }; + AA7C8AC90B6744F700FD9940 /* bn_mp_prime_random_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_random_ex.c; sourceTree = ""; }; + AA7C8ACA0B6744F700FD9940 /* bn_mp_radix_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_size.c; sourceTree = ""; }; + AA7C8ACB0B6744F700FD9940 /* bn_mp_radix_smap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_smap.c; sourceTree = ""; }; + AA7C8ACC0B6744F700FD9940 /* bn_mp_rand.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rand.c; sourceTree = ""; }; + AA7C8ACD0B6744F700FD9940 /* bn_mp_read_radix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_radix.c; sourceTree = ""; }; + AA7C8ACE0B6744F700FD9940 /* bn_mp_read_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_signed_bin.c; sourceTree = ""; }; + AA7C8ACF0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_unsigned_bin.c; sourceTree = ""; }; + AA7C8AD00B6744F700FD9940 /* bn_mp_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce.c; sourceTree = ""; }; + AA7C8AD10B6744F700FD9940 /* bn_mp_reduce_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k.c; sourceTree = ""; }; + AA7C8AD20B6744F700FD9940 /* bn_mp_reduce_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_l.c; sourceTree = ""; }; + AA7C8AD30B6744F700FD9940 /* bn_mp_reduce_2k_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup.c; sourceTree = ""; }; + AA7C8AD40B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup_l.c; sourceTree = ""; }; + AA7C8AD50B6744F700FD9940 /* bn_mp_reduce_is_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k.c; sourceTree = ""; }; + AA7C8AD60B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k_l.c; sourceTree = ""; }; + AA7C8AD70B6744F700FD9940 /* bn_mp_reduce_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_setup.c; sourceTree = ""; }; + AA7C8AD80B6744F700FD9940 /* bn_mp_rshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rshd.c; sourceTree = ""; }; + AA7C8AD90B6744F700FD9940 /* bn_mp_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set.c; sourceTree = ""; }; + AA7C8ADA0B6744F700FD9940 /* bn_mp_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set_int.c; sourceTree = ""; }; + AA7C8ADB0B6744F700FD9940 /* bn_mp_shrink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_shrink.c; sourceTree = ""; }; + AA7C8ADC0B6744F700FD9940 /* bn_mp_signed_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_signed_bin_size.c; sourceTree = ""; }; + AA7C8ADD0B6744F700FD9940 /* bn_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqr.c; sourceTree = ""; }; + AA7C8ADE0B6744F700FD9940 /* bn_mp_sqrmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrmod.c; sourceTree = ""; }; + AA7C8ADF0B6744F700FD9940 /* bn_mp_sqrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrt.c; sourceTree = ""; }; + AA7C8AE00B6744F700FD9940 /* bn_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub.c; sourceTree = ""; }; + AA7C8AE10B6744F700FD9940 /* bn_mp_sub_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub_d.c; sourceTree = ""; }; + AA7C8AE20B6744F700FD9940 /* bn_mp_submod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_submod.c; sourceTree = ""; }; + AA7C8AE30B6744F700FD9940 /* bn_mp_to_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin.c; sourceTree = ""; }; + AA7C8AE40B6744F700FD9940 /* bn_mp_to_signed_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin_n.c; sourceTree = ""; }; + AA7C8AE50B6744F700FD9940 /* bn_mp_to_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin.c; sourceTree = ""; }; + AA7C8AE60B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin_n.c; sourceTree = ""; }; + AA7C8AE70B6744F700FD9940 /* bn_mp_toom_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_mul.c; sourceTree = ""; }; + AA7C8AE80B6744F700FD9940 /* bn_mp_toom_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_sqr.c; sourceTree = ""; }; + AA7C8AE90B6744F700FD9940 /* bn_mp_toradix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix.c; sourceTree = ""; }; + AA7C8AEA0B6744F700FD9940 /* bn_mp_toradix_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix_n.c; sourceTree = ""; }; + AA7C8AEB0B6744F700FD9940 /* bn_mp_unsigned_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_unsigned_bin_size.c; sourceTree = ""; }; + AA7C8AEC0B6744F700FD9940 /* bn_mp_xor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_xor.c; sourceTree = ""; }; + AA7C8AED0B6744F700FD9940 /* bn_mp_zero.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_zero.c; sourceTree = ""; }; + AA7C8AEE0B6744F700FD9940 /* bn_prime_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_prime_tab.c; sourceTree = ""; }; + AA7C8AEF0B6744F700FD9940 /* bn_reverse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_reverse.c; sourceTree = ""; }; + AA7C8AF00B6744F700FD9940 /* bn_s_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_add.c; sourceTree = ""; }; + AA7C8AF10B6744F700FD9940 /* bn_s_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_exptmod.c; sourceTree = ""; }; + AA7C8AF20B6744F700FD9940 /* bn_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_digs.c; sourceTree = ""; }; + AA7C8AF30B6744F700FD9940 /* bn_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_high_digs.c; sourceTree = ""; }; + AA7C8AF40B6744F700FD9940 /* bn_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sqr.c; sourceTree = ""; }; + AA7C8AF50B6744F700FD9940 /* bn_s_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sub.c; sourceTree = ""; }; + AA7C8AF60B6744F700FD9940 /* bncore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bncore.c; sourceTree = ""; }; + AA7C8AF90B6744F700FD9940 /* tommath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath.h; sourceTree = ""; }; + AA7C8AFA0B6744F700FD9940 /* tommath_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_class.h; sourceTree = ""; }; + AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_superclass.h; sourceTree = ""; }; + AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtomcrypt.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C8B950B67467C00FD9940 /* aes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes.c; sourceTree = ""; }; + AA7C8B960B67467C00FD9940 /* aes_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes_tab.c; sourceTree = ""; }; + AA7C8B990B67467C00FD9940 /* hash_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash_memory.c; sourceTree = ""; }; + AA7C8B9A0B67467C00FD9940 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; + AA7C8B9B0B67467C00FD9940 /* sha1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sha1.c; sourceTree = ""; }; + AA7C8B9D0B67467C00FD9940 /* tomcrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt.h; sourceTree = ""; }; + AA7C8B9E0B67467C00FD9940 /* tomcrypt_argchk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_argchk.h; sourceTree = ""; }; + AA7C8B9F0B67467C00FD9940 /* tomcrypt_cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_cfg.h; sourceTree = ""; }; + AA7C8BA00B67467C00FD9940 /* tomcrypt_cipher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_cipher.h; sourceTree = ""; }; + AA7C8BA10B67467C00FD9940 /* tomcrypt_custom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_custom.h; sourceTree = ""; }; + AA7C8BA20B67467C00FD9940 /* tomcrypt_hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_hash.h; sourceTree = ""; }; + AA7C8BA30B67467C00FD9940 /* tomcrypt_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_mac.h; sourceTree = ""; }; + AA7C8BA40B67467C00FD9940 /* tomcrypt_macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_macros.h; sourceTree = ""; }; + AA7C8BA50B67467C00FD9940 /* tomcrypt_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_math.h; sourceTree = ""; }; + AA7C8BA60B67467C00FD9940 /* tomcrypt_misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_misc.h; sourceTree = ""; }; + AA7C8BA70B67467C00FD9940 /* tomcrypt_pk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_pk.h; sourceTree = ""; }; + AA7C8BA80B67467C00FD9940 /* tomcrypt_pkcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_pkcs.h; sourceTree = ""; }; + AA7C8BA90B67467C00FD9940 /* tomcrypt_prng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tomcrypt_prng.h; sourceTree = ""; }; + AA7C8BAC0B67467C00FD9940 /* ltc_ecc_fp_mulmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ltc_ecc_fp_mulmod.c; sourceTree = ""; }; + AA7C8BAD0B67467C00FD9940 /* ltm_desc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ltm_desc.c; sourceTree = ""; }; + AA7C8BAE0B67467C00FD9940 /* multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = multi.c; sourceTree = ""; }; + AA7C8BAF0B67467C00FD9940 /* rand_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rand_prime.c; sourceTree = ""; }; + AA7C8BB20B67467C00FD9940 /* base64_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = base64_decode.c; sourceTree = ""; }; + AA7C8BB30B67467C00FD9940 /* base64_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = base64_encode.c; sourceTree = ""; }; + AA7C8BB40B67467C00FD9940 /* burn_stack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = burn_stack.c; sourceTree = ""; }; + AA7C8BB60B67467C00FD9940 /* crypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt.c; sourceTree = ""; }; + AA7C8BB70B67467C00FD9940 /* crypt_argchk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_argchk.c; sourceTree = ""; }; + AA7C8BB80B67467C00FD9940 /* crypt_cipher_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_cipher_descriptor.c; sourceTree = ""; }; + AA7C8BB90B67467C00FD9940 /* crypt_cipher_is_valid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_cipher_is_valid.c; sourceTree = ""; }; + AA7C8BBA0B67467C00FD9940 /* crypt_find_cipher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_cipher.c; sourceTree = ""; }; + AA7C8BBB0B67467C00FD9940 /* crypt_find_cipher_any.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_cipher_any.c; sourceTree = ""; }; + AA7C8BBC0B67467C00FD9940 /* crypt_find_cipher_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_cipher_id.c; sourceTree = ""; }; + AA7C8BBD0B67467C00FD9940 /* crypt_find_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash.c; sourceTree = ""; }; + AA7C8BBE0B67467C00FD9940 /* crypt_find_hash_any.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash_any.c; sourceTree = ""; }; + AA7C8BBF0B67467C00FD9940 /* crypt_find_hash_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash_id.c; sourceTree = ""; }; + AA7C8BC00B67467C00FD9940 /* crypt_find_hash_oid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_hash_oid.c; sourceTree = ""; }; + AA7C8BC10B67467C00FD9940 /* crypt_find_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_find_prng.c; sourceTree = ""; }; + AA7C8BC20B67467C00FD9940 /* crypt_fsa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_fsa.c; sourceTree = ""; }; + AA7C8BC30B67467C00FD9940 /* crypt_hash_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_hash_descriptor.c; sourceTree = ""; }; + AA7C8BC40B67467C00FD9940 /* crypt_hash_is_valid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_hash_is_valid.c; sourceTree = ""; }; + AA7C8BC50B67467C00FD9940 /* crypt_ltc_mp_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_ltc_mp_descriptor.c; sourceTree = ""; }; + AA7C8BC60B67467C00FD9940 /* crypt_prng_descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_prng_descriptor.c; sourceTree = ""; }; + AA7C8BC70B67467C00FD9940 /* crypt_prng_is_valid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_prng_is_valid.c; sourceTree = ""; }; + AA7C8BC80B67467C00FD9940 /* crypt_register_cipher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_register_cipher.c; sourceTree = ""; }; + AA7C8BC90B67467C00FD9940 /* crypt_register_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_register_hash.c; sourceTree = ""; }; + AA7C8BCA0B67467C00FD9940 /* crypt_register_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_register_prng.c; sourceTree = ""; }; + AA7C8BCB0B67467C00FD9940 /* crypt_unregister_cipher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_unregister_cipher.c; sourceTree = ""; }; + AA7C8BCC0B67467C00FD9940 /* crypt_unregister_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_unregister_hash.c; sourceTree = ""; }; + AA7C8BCD0B67467C00FD9940 /* crypt_unregister_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crypt_unregister_prng.c; sourceTree = ""; }; + AA7C8BCE0B67467C00FD9940 /* error_to_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error_to_string.c; sourceTree = ""; }; + AA7C8BD00B67467C00FD9940 /* pkcs_5_1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_5_1.c; sourceTree = ""; }; + AA7C8BD10B67467C00FD9940 /* pkcs_5_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_5_2.c; sourceTree = ""; }; + AA7C8BD20B67467C00FD9940 /* zeromem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zeromem.c; sourceTree = ""; }; + AA7C8BD50B67467C00FD9940 /* cbc_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_decrypt.c; sourceTree = ""; }; + AA7C8BD60B67467C00FD9940 /* cbc_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_done.c; sourceTree = ""; }; + AA7C8BD70B67467C00FD9940 /* cbc_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_encrypt.c; sourceTree = ""; }; + AA7C8BD80B67467C00FD9940 /* cbc_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_getiv.c; sourceTree = ""; }; + AA7C8BD90B67467C00FD9940 /* cbc_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_setiv.c; sourceTree = ""; }; + AA7C8BDA0B67467C00FD9940 /* cbc_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbc_start.c; sourceTree = ""; }; + AA7C8BDC0B67467C00FD9940 /* cfb_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_decrypt.c; sourceTree = ""; }; + AA7C8BDD0B67467C00FD9940 /* cfb_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_done.c; sourceTree = ""; }; + AA7C8BDE0B67467C00FD9940 /* cfb_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_encrypt.c; sourceTree = ""; }; + AA7C8BDF0B67467C00FD9940 /* cfb_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_getiv.c; sourceTree = ""; }; + AA7C8BE00B67467C00FD9940 /* cfb_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_setiv.c; sourceTree = ""; }; + AA7C8BE10B67467C00FD9940 /* cfb_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cfb_start.c; sourceTree = ""; }; + AA7C8BE30B67467C00FD9940 /* ctr_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_decrypt.c; sourceTree = ""; }; + AA7C8BE40B67467C00FD9940 /* ctr_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_done.c; sourceTree = ""; }; + AA7C8BE50B67467C00FD9940 /* ctr_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_encrypt.c; sourceTree = ""; }; + AA7C8BE60B67467C00FD9940 /* ctr_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_getiv.c; sourceTree = ""; }; + AA7C8BE70B67467C00FD9940 /* ctr_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_setiv.c; sourceTree = ""; }; + AA7C8BE80B67467C00FD9940 /* ctr_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_start.c; sourceTree = ""; }; + AA7C8BE90B67467C00FD9940 /* ctr_test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ctr_test.c; sourceTree = ""; }; + AA7C8BEB0B67467C00FD9940 /* ecb_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_decrypt.c; sourceTree = ""; }; + AA7C8BEC0B67467C00FD9940 /* ecb_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_done.c; sourceTree = ""; }; + AA7C8BED0B67467C00FD9940 /* ecb_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_encrypt.c; sourceTree = ""; }; + AA7C8BEE0B67467C00FD9940 /* ecb_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ecb_start.c; sourceTree = ""; }; + AA7C8BF00B67467C00FD9940 /* ofb_decrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_decrypt.c; sourceTree = ""; }; + AA7C8BF10B67467C00FD9940 /* ofb_done.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_done.c; sourceTree = ""; }; + AA7C8BF20B67467C00FD9940 /* ofb_encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_encrypt.c; sourceTree = ""; }; + AA7C8BF30B67467C00FD9940 /* ofb_getiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_getiv.c; sourceTree = ""; }; + AA7C8BF40B67467C00FD9940 /* ofb_setiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_setiv.c; sourceTree = ""; }; + AA7C8BF50B67467C00FD9940 /* ofb_start.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ofb_start.c; sourceTree = ""; }; + AA7C8BFA0B67467C00FD9940 /* der_decode_bit_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_bit_string.c; sourceTree = ""; }; + AA7C8BFB0B67467C00FD9940 /* der_encode_bit_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_bit_string.c; sourceTree = ""; }; + AA7C8BFC0B67467C00FD9940 /* der_length_bit_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_bit_string.c; sourceTree = ""; }; + AA7C8BFE0B67467C00FD9940 /* der_decode_boolean.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_boolean.c; sourceTree = ""; }; + AA7C8BFF0B67467C00FD9940 /* der_encode_boolean.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_boolean.c; sourceTree = ""; }; + AA7C8C000B67467C00FD9940 /* der_length_boolean.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_boolean.c; sourceTree = ""; }; + AA7C8C020B67467C00FD9940 /* der_decode_choice.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_choice.c; sourceTree = ""; }; + AA7C8C040B67467C00FD9940 /* der_decode_ia5_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_ia5_string.c; sourceTree = ""; }; + AA7C8C050B67467D00FD9940 /* der_encode_ia5_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_ia5_string.c; sourceTree = ""; }; + AA7C8C060B67467D00FD9940 /* der_length_ia5_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_ia5_string.c; sourceTree = ""; }; + AA7C8C080B67467D00FD9940 /* der_decode_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_integer.c; sourceTree = ""; }; + AA7C8C090B67467D00FD9940 /* der_encode_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_integer.c; sourceTree = ""; }; + AA7C8C0A0B67467D00FD9940 /* der_length_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_integer.c; sourceTree = ""; }; + AA7C8C0C0B67467D00FD9940 /* der_decode_object_identifier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_object_identifier.c; sourceTree = ""; }; + AA7C8C0D0B67467D00FD9940 /* der_encode_object_identifier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_object_identifier.c; sourceTree = ""; }; + AA7C8C0E0B67467D00FD9940 /* der_length_object_identifier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_object_identifier.c; sourceTree = ""; }; + AA7C8C100B67467D00FD9940 /* der_decode_octet_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_octet_string.c; sourceTree = ""; }; + AA7C8C110B67467D00FD9940 /* der_encode_octet_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_octet_string.c; sourceTree = ""; }; + AA7C8C120B67467D00FD9940 /* der_length_octet_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_octet_string.c; sourceTree = ""; }; + AA7C8C140B67467D00FD9940 /* der_decode_printable_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_printable_string.c; sourceTree = ""; }; + AA7C8C150B67467D00FD9940 /* der_encode_printable_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_printable_string.c; sourceTree = ""; }; + AA7C8C160B67467D00FD9940 /* der_length_printable_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_printable_string.c; sourceTree = ""; }; + AA7C8C180B67467D00FD9940 /* der_decode_sequence_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_sequence_ex.c; sourceTree = ""; }; + AA7C8C190B67467D00FD9940 /* der_decode_sequence_flexi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_sequence_flexi.c; sourceTree = ""; }; + AA7C8C1A0B67467D00FD9940 /* der_decode_sequence_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_sequence_multi.c; sourceTree = ""; }; + AA7C8C1B0B67467D00FD9940 /* der_encode_sequence_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_sequence_ex.c; sourceTree = ""; }; + AA7C8C1C0B67467D00FD9940 /* der_encode_sequence_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_sequence_multi.c; sourceTree = ""; }; + AA7C8C1D0B67467D00FD9940 /* der_length_sequence.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_sequence.c; sourceTree = ""; }; + AA7C8C1E0B67467D00FD9940 /* der_sequence_free.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_sequence_free.c; sourceTree = ""; }; + AA7C8C200B67467D00FD9940 /* der_encode_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_set.c; sourceTree = ""; }; + AA7C8C210B67467D00FD9940 /* der_encode_setof.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_setof.c; sourceTree = ""; }; + AA7C8C230B67467D00FD9940 /* der_decode_short_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_short_integer.c; sourceTree = ""; }; + AA7C8C240B67467D00FD9940 /* der_encode_short_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_short_integer.c; sourceTree = ""; }; + AA7C8C250B67467D00FD9940 /* der_length_short_integer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_short_integer.c; sourceTree = ""; }; + AA7C8C270B67467D00FD9940 /* der_decode_utctime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_utctime.c; sourceTree = ""; }; + AA7C8C280B67467D00FD9940 /* der_encode_utctime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_utctime.c; sourceTree = ""; }; + AA7C8C290B67467D00FD9940 /* der_length_utctime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_utctime.c; sourceTree = ""; }; + AA7C8C2B0B67467D00FD9940 /* der_decode_utf8_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_decode_utf8_string.c; sourceTree = ""; }; + AA7C8C2C0B67467D00FD9940 /* der_encode_utf8_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_encode_utf8_string.c; sourceTree = ""; }; + AA7C8C2D0B67467D00FD9940 /* der_length_utf8_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = der_length_utf8_string.c; sourceTree = ""; }; + AA7C8C2F0B67467D00FD9940 /* dsa_decrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_decrypt_key.c; sourceTree = ""; }; + AA7C8C300B67467D00FD9940 /* dsa_encrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_encrypt_key.c; sourceTree = ""; }; + AA7C8C310B67467D00FD9940 /* dsa_export.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_export.c; sourceTree = ""; }; + AA7C8C320B67467D00FD9940 /* dsa_free.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_free.c; sourceTree = ""; }; + AA7C8C330B67467D00FD9940 /* dsa_import.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_import.c; sourceTree = ""; }; + AA7C8C340B67467D00FD9940 /* dsa_make_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_make_key.c; sourceTree = ""; }; + AA7C8C350B67467D00FD9940 /* dsa_shared_secret.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_shared_secret.c; sourceTree = ""; }; + AA7C8C360B67467D00FD9940 /* dsa_sign_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_sign_hash.c; sourceTree = ""; }; + AA7C8C370B67467D00FD9940 /* dsa_verify_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_verify_hash.c; sourceTree = ""; }; + AA7C8C380B67467D00FD9940 /* dsa_verify_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsa_verify_key.c; sourceTree = ""; }; + AA7C8C3A0B67467D00FD9940 /* pkcs_1_i2osp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_i2osp.c; sourceTree = ""; }; + AA7C8C3B0B67467D00FD9940 /* pkcs_1_mgf1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_mgf1.c; sourceTree = ""; }; + AA7C8C3C0B67467D00FD9940 /* pkcs_1_oaep_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_oaep_decode.c; sourceTree = ""; }; + AA7C8C3D0B67467D00FD9940 /* pkcs_1_oaep_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_oaep_encode.c; sourceTree = ""; }; + AA7C8C3E0B67467D00FD9940 /* pkcs_1_os2ip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_os2ip.c; sourceTree = ""; }; + AA7C8C3F0B67467D00FD9940 /* pkcs_1_pss_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_pss_decode.c; sourceTree = ""; }; + AA7C8C400B67467D00FD9940 /* pkcs_1_pss_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_pss_encode.c; sourceTree = ""; }; + AA7C8C410B67467D00FD9940 /* pkcs_1_v1_5_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_v1_5_decode.c; sourceTree = ""; }; + AA7C8C420B67467D00FD9940 /* pkcs_1_v1_5_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkcs_1_v1_5_encode.c; sourceTree = ""; }; + AA7C8C440B67467D00FD9940 /* rsa_decrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_decrypt_key.c; sourceTree = ""; }; + AA7C8C450B67467D00FD9940 /* rsa_encrypt_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_encrypt_key.c; sourceTree = ""; }; + AA7C8C460B67467D00FD9940 /* rsa_export.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_export.c; sourceTree = ""; }; + AA7C8C470B67467D00FD9940 /* rsa_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_exptmod.c; sourceTree = ""; }; + AA7C8C480B67467D00FD9940 /* rsa_free.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_free.c; sourceTree = ""; }; + AA7C8C490B67467D00FD9940 /* rsa_import.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_import.c; sourceTree = ""; }; + AA7C8C4A0B67467D00FD9940 /* rsa_make_key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_make_key.c; sourceTree = ""; }; + AA7C8C4B0B67467D00FD9940 /* rsa_sign_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_sign_hash.c; sourceTree = ""; }; + AA7C8C4C0B67467D00FD9940 /* rsa_verify_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsa_verify_hash.c; sourceTree = ""; }; + AA7C8C4E0B67467D00FD9940 /* fortuna.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fortuna.c; sourceTree = ""; }; + AA7C8C4F0B67467D00FD9940 /* rc4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rc4.c; sourceTree = ""; }; + AA7C8C500B67467D00FD9940 /* rng_get_bytes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rng_get_bytes.c; sourceTree = ""; }; + AA7C8C510B67467D00FD9940 /* rng_make_prng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rng_make_prng.c; sourceTree = ""; }; + AA7C8C520B67467D00FD9940 /* sober128.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sober128.c; sourceTree = ""; }; + AA7C8C530B67467D00FD9940 /* sober128tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sober128tab.c; sourceTree = ""; }; + AA7C8C540B67467D00FD9940 /* sprng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sprng.c; sourceTree = ""; }; + AA7C8C550B67467D00FD9940 /* yarrow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yarrow.c; sourceTree = ""; }; + AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameplayAssist.cpp; path = ../src/GameplayAssist.cpp; sourceTree = ""; }; + AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GameplayAssist.h; path = ../src/GameplayAssist.h; sourceTree = ""; }; + AA7CDD930D8395F90001DAFC /* Song.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Song.h; path = ../src/Song.h; sourceTree = SOURCE_ROOT; }; + AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BackgroundUtil.cpp; path = ../src/BackgroundUtil.cpp; sourceTree = ""; }; + AA7DA2F0085760E90057F1EA /* BackgroundUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BackgroundUtil.h; path = ../src/BackgroundUtil.h; sourceTree = ""; }; + AA80C75207F20D0D00C99272 /* UnlockManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = UnlockManager.cpp; path = ../src/UnlockManager.cpp; sourceTree = ""; }; + AA80C75307F20D0D00C99272 /* UnlockManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = UnlockManager.h; path = ../src/UnlockManager.h; sourceTree = ""; }; + AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = OptionRowHandler.cpp; path = ../src/OptionRowHandler.cpp; sourceTree = ""; }; + AA80C75807F20D6600C99272 /* OptionRowHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = OptionRowHandler.h; path = ../src/OptionRowHandler.h; sourceTree = ""; }; + AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenMessage.cpp; path = ../src/ScreenMessage.cpp; sourceTree = ""; }; + AA84B7050996F8370085EECB /* AdjustSync.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AdjustSync.cpp; path = ../src/AdjustSync.cpp; sourceTree = ""; }; + AA84B7060996F8370085EECB /* AdjustSync.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AdjustSync.h; path = ../src/AdjustSync.h; sourceTree = ""; }; + AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = DarwinThreadHelpers.cpp; sourceTree = ""; }; + AA8A3EC806EDDAE4002F25AB /* DarwinThreadHelpers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = DarwinThreadHelpers.h; sourceTree = ""; }; + AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_BackgroundLoader.cpp; path = ../src/RageUtil_BackgroundLoader.cpp; sourceTree = ""; }; + AA8A405006EEFF72002F25AB /* RageUtil_BackgroundLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_BackgroundLoader.h; path = ../src/RageUtil_BackgroundLoader.h; sourceTree = ""; }; + AA8B6C7904AFD87300D02EE9 /* chartables.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = chartables.c; sourceTree = ""; }; + AA8B6C7A04AFD87300D02EE9 /* get.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = get.c; sourceTree = ""; }; + AA8B6C7B04AFD87300D02EE9 /* internal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = internal.h; sourceTree = ""; }; + AA8B6C7C04AFD87300D02EE9 /* maketables.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = maketables.c; sourceTree = ""; }; + AA8B6C7D04AFD87300D02EE9 /* pcre.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = pcre.c; sourceTree = ""; }; + AA8B6C7E04AFD87300D02EE9 /* pcre.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = pcre.h; sourceTree = ""; }; + AA8B6C7F04AFD87300D02EE9 /* study.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; path = study.c; sourceTree = ""; }; + AA8B8C49091F48C000D14C5F /* product.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = product.xcconfig; sourceTree = SOURCE_ROOT; }; + AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaReference.cpp; path = ../src/LuaReference.cpp; sourceTree = ""; }; + AA8BD2A207C9391B00EA04E1 /* LuaReference.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaReference.h; path = ../src/LuaReference.h; sourceTree = ""; }; + AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MessageManager.cpp; path = ../src/MessageManager.cpp; sourceTree = ""; }; + AA8BD2A407C9391B00EA04E1 /* MessageManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MessageManager.h; path = ../src/MessageManager.h; sourceTree = ""; }; + AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = StatsManager.cpp; path = ../src/StatsManager.cpp; sourceTree = ""; }; + AA8BD2A607C9391B00EA04E1 /* StatsManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = StatsManager.h; path = ../src/StatsManager.h; sourceTree = ""; }; + AA8BD2A707C9391B00EA04E1 /* SubscriptionManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = SubscriptionManager.h; path = ../src/SubscriptionManager.h; sourceTree = ""; }; + AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AutoActor.cpp; path = ../src/AutoActor.cpp; sourceTree = ""; }; + AA8BD2B007C9395400EA04E1 /* AutoActor.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AutoActor.h; path = ../src/AutoActor.h; sourceTree = ""; }; + AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = OptionRow.cpp; path = ../src/OptionRow.cpp; sourceTree = ""; }; + AA8BD2B507C939A200EA04E1 /* OptionRow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = OptionRow.h; path = ../src/OptionRow.h; sourceTree = ""; }; + AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerStageStats.cpp; path = ../src/PlayerStageStats.cpp; sourceTree = ""; }; + AA8BD2B907C939F800EA04E1 /* PlayerStageStats.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerStageStats.h; path = ../src/PlayerStageStats.h; sourceTree = ""; }; + AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PlayerState.cpp; path = ../src/PlayerState.cpp; sourceTree = ""; }; + AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RollingNumbers.cpp; path = ../src/RollingNumbers.cpp; sourceTree = ""; }; + AA8BD2BC07C939F800EA04E1 /* RollingNumbers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RollingNumbers.h; path = ../src/RollingNumbers.h; sourceTree = ""; }; + AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreDisplayCalories.cpp; path = ../src/ScoreDisplayCalories.cpp; sourceTree = ""; }; + AA8BD2BE07C939F800EA04E1 /* ScoreDisplayCalories.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreDisplayCalories.h; path = ../src/ScoreDisplayCalories.h; sourceTree = ""; }; + AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CommonMetrics.cpp; path = ../src/CommonMetrics.cpp; sourceTree = ""; }; + AA8CF5150A4518BE0005F1B4 /* RageSoundDriver_AU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RageSoundDriver_AU.h; sourceTree = ""; }; + AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RageSoundDriver_AU.cpp; sourceTree = ""; }; + AA8DD84904A2E51400D02EE9 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + AA8EE0750866E266002C51A7 /* LuaBinding.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaBinding.cpp; path = ../src/LuaBinding.cpp; sourceTree = ""; }; + AA8F136F0624BAB200C6A467 /* EnumHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = EnumHelper.h; path = ../src/EnumHelper.h; sourceTree = ""; }; + AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_BMP.cpp; path = ../src/RageSurface_Load_BMP.cpp; sourceTree = ""; }; + AA9091A0067ED43000C1FCFF /* RageSurface_Load_BMP.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_BMP.h; path = ../src/RageSurface_Load_BMP.h; sourceTree = ""; }; + AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Save_BMP.cpp; path = ../src/RageSurface_Save_BMP.cpp; sourceTree = ""; }; + AA9091A4067ED46400C1FCFF /* RageSurface_Save_BMP.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Save_BMP.h; path = ../src/RageSurface_Save_BMP.h; sourceTree = ""; }; + AA909E1D0B45B676002852D3 /* RageDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RageDriver.cpp; sourceTree = ""; }; + AA909E1E0B45B676002852D3 /* RageDriver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RageDriver.h; sourceTree = ""; }; + AA909E230B45B696002852D3 /* LowLevelWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LowLevelWindow.cpp; sourceTree = ""; }; + AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LoadingWindow.cpp; sourceTree = ""; }; + AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_Extend.cpp; path = ../src/RageSoundReader_Extend.cpp; sourceTree = ""; }; + AA909E3A0B45B8FA002852D3 /* RageSoundReader_Extend.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_Extend.h; path = ../src/RageSoundReader_Extend.h; sourceTree = ""; }; + AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader_ThreadedBuffer.cpp; path = ../src/RageSoundReader_ThreadedBuffer.cpp; sourceTree = ""; }; + AA909E3C0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RageSoundReader_ThreadedBuffer.h; path = ../src/RageSoundReader_ThreadedBuffer.h; sourceTree = ""; }; + AA909E480B45B93E002852D3 /* LightsDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LightsDriver.cpp; sourceTree = ""; }; + AA915879067D2C2C00078E36 /* RageSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface.cpp; path = ../src/RageSurface.cpp; sourceTree = ""; }; + AA91587A067D2C2C00078E36 /* RageSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface.h; path = ../src/RageSurface.h; sourceTree = ""; }; + AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTexturePreloader.cpp; path = ../src/RageTexturePreloader.cpp; sourceTree = ""; }; + AA91ACB00878BB2C00FB2F8F /* RageTexturePreloader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTexturePreloader.h; path = ../src/RageTexturePreloader.h; sourceTree = ""; }; + AA9A78A906B5C72200B03E97 /* Game.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = ""; }; + AA9A78AA06B5C72200B03E97 /* Game.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Game.h; path = ../src/Game.h; sourceTree = ""; }; + AA9D236C0561B6CE00FC7F14 /* CombinedLifeMeter.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CombinedLifeMeter.h; path = ../src/CombinedLifeMeter.h; sourceTree = ""; }; + AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageTextureID.cpp; path = ../src/RageTextureID.cpp; sourceTree = ""; }; + AA9EC2F1055F5126007E5098 /* RageTextureID.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageTextureID.h; path = ../src/RageTextureID.h; sourceTree = ""; }; + AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffmpeg_link.a; sourceTree = ""; }; + AAA070A90CE7B0DF005A3060 /* libmad.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libmad.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AAA070B40CE7B3AD005A3060 /* bit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bit.c; sourceTree = ""; }; + AAA070B50CE7B3AD005A3060 /* bit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit.h; sourceTree = ""; }; + AAA070C00CE7B3AD005A3060 /* decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = decoder.c; sourceTree = ""; }; + AAA070C10CE7B3AD005A3060 /* decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoder.h; sourceTree = ""; }; + AAA070C30CE7B3AD005A3060 /* fixed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fixed.c; sourceTree = ""; }; + AAA070C40CE7B3AD005A3060 /* fixed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fixed.h; sourceTree = ""; }; + AAA070C50CE7B3AD005A3060 /* frame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frame.c; sourceTree = ""; }; + AAA070C60CE7B3AD005A3060 /* frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = frame.h; sourceTree = ""; }; + AAA070C70CE7B3AD005A3060 /* global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = global.h; sourceTree = ""; }; + AAA070C80CE7B3AD005A3060 /* huffman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = huffman.c; sourceTree = ""; }; + AAA070C90CE7B3AD005A3060 /* huffman.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = huffman.h; sourceTree = ""; }; + AAA070CE0CE7B3AD005A3060 /* layer12.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layer12.c; sourceTree = ""; }; + AAA070CF0CE7B3AD005A3060 /* layer12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layer12.h; sourceTree = ""; }; + AAA070D00CE7B3AD005A3060 /* layer3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layer3.c; sourceTree = ""; }; + AAA070D10CE7B3AD005A3060 /* layer3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layer3.h; sourceTree = ""; }; + AAA070D40CE7B3AD005A3060 /* mad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mad.h; sourceTree = ""; }; + AAA070E80CE7B3AD005A3060 /* stream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stream.c; sourceTree = ""; }; + AAA070E90CE7B3AD005A3060 /* stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = ""; }; + AAA070EA0CE7B3AD005A3060 /* synth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = synth.c; sourceTree = ""; }; + AAA070EB0CE7B3AD005A3060 /* synth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = synth.h; sourceTree = ""; }; + AAA070EC0CE7B3AD005A3060 /* timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timer.c; sourceTree = ""; }; + AAA070ED0CE7B3AD005A3060 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = ""; }; + AAA070F00CE7B3AE005A3060 /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = ""; }; + AAA070F10CE7B3AE005A3060 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + AAA0F7CE047AC7BF005F316C /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + AAA0F7D0047AC7EA005F316C /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + AAA0F7D2047ACBC9005F316C /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; + AAA372D00909934500141131 /* MovieTexture_Generic.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_Generic.cpp; path = MovieTexture/MovieTexture_Generic.cpp; sourceTree = ""; }; + AAA372D10909934500141131 /* MovieTexture_Generic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_Generic.h; path = MovieTexture/MovieTexture_Generic.h; sourceTree = ""; }; + AAA372D20909934500141131 /* MovieTexture_Theora.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_Theora.cpp; path = MovieTexture/MovieTexture_Theora.cpp; sourceTree = ""; }; + AAA372D30909934500141131 /* MovieTexture_Theora.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_Theora.h; path = MovieTexture/MovieTexture_Theora.h; sourceTree = ""; }; + AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenWithMenuElements.cpp; path = ../src/ScreenWithMenuElements.cpp; sourceTree = ""; }; + AAA6BFEB0644AB3700AFBBC8 /* ScreenWithMenuElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenWithMenuElements.h; path = ../src/ScreenWithMenuElements.h; sourceTree = ""; }; + AAA71EA005EE154E00D2E8FF /* global.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = global.cpp; sourceTree = ""; }; + AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsToggleSongs.cpp; path = ../src/ScreenOptionsToggleSongs.cpp; sourceTree = ""; }; + AAA7D4C80C7E872500FB8F78 /* ScreenOptionsToggleSongs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsToggleSongs.h; path = ../src/ScreenOptionsToggleSongs.h; sourceTree = ""; }; + AAA8E0020696984300FCE1F9 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorUtil.cpp; path = ../src/ActorUtil.cpp; sourceTree = ""; }; + AAAA11C40A662F9C00B2BD88 /* ScoreKeeperShared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScoreKeeperShared.h; path = ../src/ScoreKeeperShared.h; sourceTree = ""; }; + AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreKeeperShared.cpp; path = ../src/ScoreKeeperShared.cpp; sourceTree = ""; }; + AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AutoKeysounds.cpp; path = ../src/AutoKeysounds.cpp; sourceTree = ""; }; + AAAB2CDE072BD2EC00CD9FC9 /* AutoKeysounds.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AutoKeysounds.h; path = ../src/AutoKeysounds.h; sourceTree = ""; }; + AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundMixBuffer.cpp; path = ../src/RageSoundMixBuffer.cpp; sourceTree = ""; }; + AAAB2CE2072BD2FA00CD9FC9 /* RageSoundMixBuffer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundMixBuffer.h; path = ../src/RageSoundMixBuffer.h; sourceTree = ""; }; + AAADA4AE04E5F3DE00D02EE9 /* ProductInfo.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = ProductInfo.h; sourceTree = ""; }; + AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_Resample_Good.cpp; path = ../src/RageSoundReader_Resample_Good.cpp; sourceTree = ""; }; + AAAE28F5052254A900D02EE9 /* RageSoundReader_Resample_Good.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Resample_Good.h; path = ../src/RageSoundReader_Resample_Good.h; sourceTree = ""; }; + AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = WheelBase.cpp; path = ../src/WheelBase.cpp; sourceTree = ""; }; + AAAFE81D0835E7FF00FC43E0 /* WheelBase.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = WheelBase.h; path = ../src/WheelBase.h; sourceTree = ""; }; + AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = WheelItemBase.cpp; path = ../src/WheelItemBase.cpp; sourceTree = ""; }; + AAAFE81F0835E7FF00FC43E0 /* WheelItemBase.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = WheelItemBase.h; path = ../src/WheelItemBase.h; sourceTree = ""; }; + AAAFE82E0835E8B100FC43E0 /* RoomWheel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RoomWheel.cpp; path = ../src/RoomWheel.cpp; sourceTree = ""; }; + AAAFE82F0835E8B100FC43E0 /* RoomWheel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RoomWheel.h; path = ../src/RoomWheel.h; sourceTree = ""; }; + AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = AttackDisplay.cpp; path = ../src/AttackDisplay.cpp; sourceTree = ""; }; + AAB005F10579B8CB000BBA58 /* AttackDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = AttackDisplay.h; path = ../src/AttackDisplay.h; sourceTree = ""; }; + AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriver.cpp; path = ../src/RageFileDriver.cpp; sourceTree = ""; }; + AAB0085C057F4F7A000BBA58 /* RageFileDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriver.h; path = ../src/RageFileDriver.h; sourceTree = ""; }; + AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverDirect.cpp; path = ../src/RageFileDriverDirect.cpp; sourceTree = ""; }; + AAB0085E057F4F7A000BBA58 /* RageFileDriverDirect.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverDirect.h; path = ../src/RageFileDriverDirect.h; sourceTree = ""; }; + AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileManager.cpp; path = ../src/RageFileManager.cpp; sourceTree = ""; }; + AAB00860057F4F7A000BBA58 /* RageFileManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileManager.h; path = ../src/RageFileManager.h; sourceTree = ""; }; + AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = InputHandler.cpp; sourceTree = ""; }; + AAB3B36C04C38B4600D02EE9 /* InputHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = InputHandler.h; sourceTree = ""; }; + AAB3B37704C38BF600D02EE9 /* MovieTexture.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture.h; path = MovieTexture/MovieTexture.h; sourceTree = ""; }; + AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MovieTexture_Null.cpp; path = MovieTexture/MovieTexture_Null.cpp; sourceTree = ""; }; + AAB3B39104C5921800D02EE9 /* MovieTexture_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MovieTexture_Null.h; path = MovieTexture/MovieTexture_Null.h; sourceTree = ""; }; + AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenSelectProfile.cpp; path = ../src/ScreenSelectProfile.cpp; sourceTree = ""; }; + AAB3B7DB0C6C582D001BF487 /* ScreenSelectProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenSelectProfile.h; path = ../src/ScreenSelectProfile.h; sourceTree = ""; }; + AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageUtil_CachedObject.cpp; path = ../src/RageUtil_CachedObject.cpp; sourceTree = ""; }; + AAB3BB580C718F2C001BF487 /* RageUtil_CachedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageUtil_CachedObject.h; path = ../src/RageUtil_CachedObject.h; sourceTree = ""; }; + AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenGameplaySyncMachine.cpp; path = ../src/ScreenGameplaySyncMachine.cpp; sourceTree = ""; }; + AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenGameplaySyncMachine.h; path = ../src/ScreenGameplaySyncMachine.h; sourceTree = ""; }; + AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenUnlockBrowse.cpp; path = ../src/ScreenUnlockBrowse.cpp; sourceTree = ""; }; + AAB55EB809A7E3D3008FDC69 /* ScreenUnlockBrowse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenUnlockBrowse.h; path = ../src/ScreenUnlockBrowse.h; sourceTree = ""; }; + AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenUnlockCelebrate.cpp; path = ../src/ScreenUnlockCelebrate.cpp; sourceTree = ""; }; + AAB55EBA09A7E3D3008FDC69 /* ScreenUnlockCelebrate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScreenUnlockCelebrate.h; path = ../src/ScreenUnlockCelebrate.h; sourceTree = ""; }; + AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = LightsDriver_SystemMessage.cpp; sourceTree = ""; }; + AAB691F305704FA50078BED4 /* LightsDriver_SystemMessage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LightsDriver_SystemMessage.h; sourceTree = ""; }; + AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSplash.cpp; path = ../src/ScreenSplash.cpp; sourceTree = ""; }; + AAB6B476085761B700CEE7BA /* ScreenSplash.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSplash.h; path = ../src/ScreenSplash.h; sourceTree = ""; }; + AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreKeeperGuitar.cpp; path = ../src/ScoreKeeperGuitar.cpp; sourceTree = ""; }; + AAB779FA0B0D9CB200B74314 /* ScoreKeeperGuitar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ScoreKeeperGuitar.h; path = ../src/ScoreKeeperGuitar.h; sourceTree = ""; }; + AAB895E504A9057100D02EE9 /* smicon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = smicon.icns; sourceTree = ""; }; + AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Palettize.cpp; path = ../src/RageSurfaceUtils_Palettize.cpp; sourceTree = ""; }; + AAB9C8AC06EAF64400AD97CD /* RageSurfaceUtils_Palettize.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils_Palettize.h; path = ../src/RageSurfaceUtils_Palettize.h; sourceTree = ""; }; + AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils.cpp; path = ../src/RageSurfaceUtils.cpp; sourceTree = ""; }; + AAB9C8AE06EAF64400AD97CD /* RageSurfaceUtils.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils.h; path = ../src/RageSurfaceUtils.h; sourceTree = ""; }; + AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetEvaluation.cpp; path = ../src/ScreenNetEvaluation.cpp; sourceTree = ""; }; + AAB9C8B406EAF66C00AD97CD /* ScreenNetEvaluation.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetEvaluation.h; path = ../src/ScreenNetEvaluation.h; sourceTree = ""; }; + AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = HighScore.cpp; path = ../src/HighScore.cpp; sourceTree = ""; }; + AABBD80705D8E9FC00B44FC2 /* HighScore.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = HighScore.h; path = ../src/HighScore.h; sourceTree = ""; }; + AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_GIF.cpp; path = ../src/RageSurface_Load_GIF.cpp; sourceTree = ""; }; + AABBF66D0659E78D00738526 /* RageSurface_Load_GIF.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_GIF.h; path = ../src/RageSurface_Load_GIF.h; sourceTree = ""; }; + AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_JPEG.cpp; path = ../src/RageSurface_Load_JPEG.cpp; sourceTree = ""; }; + AABBF66F0659E78D00738526 /* RageSurface_Load_JPEG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_JPEG.h; path = ../src/RageSurface_Load_JPEG.h; sourceTree = ""; }; + AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_PNG.cpp; path = ../src/RageSurface_Load_PNG.cpp; sourceTree = ""; }; + AABBF6710659E78D00738526 /* RageSurface_Load_PNG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_PNG.h; path = ../src/RageSurface_Load_PNG.h; sourceTree = ""; }; + AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load_XPM.cpp; path = ../src/RageSurface_Load_XPM.cpp; sourceTree = ""; }; + AABBF6730659E78D00738526 /* RageSurface_Load_XPM.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load_XPM.h; path = ../src/RageSurface_Load_XPM.h; sourceTree = ""; }; + AABBF6740659E78D00738526 /* RageSurface_Load.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Load.cpp; path = ../src/RageSurface_Load.cpp; sourceTree = ""; }; + AABBF6750659E78D00738526 /* RageSurface_Load.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Load.h; path = ../src/RageSurface_Load.h; sourceTree = ""; }; + AABBFCD209838C3A00F077E2 /* SMMain.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = SMMain.mm; sourceTree = ""; }; + AABD0B3605DF3F22004F7929 /* CryptManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CryptManager.cpp; path = ../src/CryptManager.cpp; sourceTree = ""; }; + AABD0B3705DF3F22004F7929 /* CryptManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CryptManager.h; path = ../src/CryptManager.h; sourceTree = ""; }; + AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenEnding.cpp; path = ../src/ScreenEnding.cpp; sourceTree = ""; }; + AABE321B05ACD8ED001A0E84 /* ScreenEnding.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenEnding.h; path = ../src/ScreenEnding.h; sourceTree = ""; }; + AABE321E05ACD931001A0E84 /* Foreground.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Foreground.cpp; path = ../src/Foreground.cpp; sourceTree = ""; }; + AABE321F05ACD931001A0E84 /* Foreground.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Foreground.h; path = ../src/Foreground.h; sourceTree = ""; }; + AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverDirectHelpers.cpp; path = ../src/RageFileDriverDirectHelpers.cpp; sourceTree = ""; }; + AABE322305ACDA52001A0E84 /* RageFileDriverDirectHelpers.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverDirectHelpers.h; path = ../src/RageFileDriverDirectHelpers.h; sourceTree = ""; }; + AABE35EB04967E25005F316C /* BannerCache.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BannerCache.cpp; path = ../src/BannerCache.cpp; sourceTree = ""; }; + AABE35EC04967E26005F316C /* BannerCache.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BannerCache.h; path = ../src/BannerCache.h; sourceTree = ""; }; + AABE36F60497CE16005F316C /* arch_default.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = arch_default.h; sourceTree = ""; }; + AABE36FC0497CE44005F316C /* ArchHooks.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ArchHooks.h; path = ArchHooks/ArchHooks.h; sourceTree = ""; }; + AABE37030497CF85005F316C /* RageSoundDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = RageSoundDriver.h; sourceTree = ""; }; + AABE78760591287100E8BF50 /* MemoryCardDriver_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = MemoryCardDriver_Null.h; sourceTree = ""; }; + AABE788B05912B0600E8BF50 /* DualScrollBar.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DualScrollBar.h; path = ../src/DualScrollBar.h; sourceTree = ""; }; + AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DualScrollBar.cpp; path = ../src/DualScrollBar.cpp; sourceTree = ""; }; + AABE830D0A9524D400001678 /* ModsGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ModsGroup.cpp; path = ../src/ModsGroup.cpp; sourceTree = ""; }; + AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CryptHelpers.cpp; path = ../src/CryptHelpers.cpp; sourceTree = SOURCE_ROOT; }; + AAC0BFE00E2951EC00F56EEB /* CryptHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CryptHelpers.h; path = ../src/CryptHelpers.h; sourceTree = SOURCE_ROOT; }; + AAC0C8C00984AE3B0075FC53 /* Tween.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Tween.cpp; path = ../src/Tween.cpp; sourceTree = ""; }; + AAC0C8C10984AE3B0075FC53 /* Tween.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Tween.h; path = ../src/Tween.h; sourceTree = ""; }; + AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_CharConversions.cpp; path = ../src/RageUtil_CharConversions.cpp; sourceTree = ""; }; + AAC23F7F0485E68D005F316C /* RageUtil_CharConversions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_CharConversions.h; path = ../src/RageUtil_CharConversions.h; sourceTree = ""; }; + AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = BeginnerHelper.cpp; path = ../src/BeginnerHelper.cpp; sourceTree = ""; }; + AAC28BBA04F758E500D02EE9 /* BeginnerHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = BeginnerHelper.h; path = ../src/BeginnerHelper.h; sourceTree = ""; }; + AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestInput.cpp; path = ../src/ScreenTestInput.cpp; sourceTree = ""; }; + AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestInput.h; path = ../src/ScreenTestInput.h; sourceTree = ""; }; + AAC6889905D7F3C800964E6D /* XmlFile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = XmlFile.cpp; path = ../src/XmlFile.cpp; sourceTree = ""; }; + AAC6889A05D7F3C800964E6D /* XmlFile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = XmlFile.h; path = ../src/XmlFile.h; sourceTree = ""; }; + AAC6DCE30567660A00B5D56F /* LightsManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LightsManager.cpp; path = ../src/LightsManager.cpp; sourceTree = ""; }; + AAC6DCE40567660A00B5D56F /* LightsManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LightsManager.h; path = ../src/LightsManager.h; sourceTree = ""; }; + AAC6DCEE0567663800B5D56F /* LightsDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LightsDriver.h; sourceTree = ""; }; + AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PaneDisplay.cpp; path = ../src/PaneDisplay.cpp; sourceTree = ""; }; + AAC6DDDF0569C71000B5D56F /* PaneDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PaneDisplay.h; path = ../src/PaneDisplay.h; sourceTree = ""; }; + AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DifficultyList.cpp; path = ../src/DifficultyList.cpp; sourceTree = ""; }; + AAC6DDE70569C80900B5D56F /* DifficultyList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DifficultyList.h; path = ../src/DifficultyList.h; sourceTree = ""; }; + AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GameSoundManager.cpp; path = ../src/GameSoundManager.cpp; sourceTree = ""; }; + AAC9F32F069E22BB00D53E2C /* GameSoundManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GameSoundManager.h; path = ../src/GameSoundManager.h; sourceTree = ""; }; + AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = MemoryCardDriver.cpp; sourceTree = ""; }; + AAC9F333069E22CF00D53E2C /* MemoryCardDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = MemoryCardDriver.h; sourceTree = ""; }; + AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageFileDriverTimeout.cpp; path = ../src/RageFileDriverTimeout.cpp; sourceTree = ""; }; + AACA592B07B5E23400763545 /* RageFileDriverTimeout.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageFileDriverTimeout.h; path = ../src/RageFileDriverTimeout.h; sourceTree = ""; }; + AACA592C07B5E23400763545 /* RageUtil_AutoPtr.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_AutoPtr.h; path = ../src/RageUtil_AutoPtr.h; sourceTree = ""; }; + AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_WorkerThread.cpp; path = ../src/RageUtil_WorkerThread.cpp; sourceTree = ""; }; + AACA592E07B5E23400763545 /* RageUtil_WorkerThread.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_WorkerThread.h; path = ../src/RageUtil_WorkerThread.h; sourceTree = ""; }; + AACFBE2608E7D793005087FC /* ActorSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActorSound.cpp; path = ../src/ActorSound.cpp; sourceTree = ""; }; + AACFBE2708E7D793005087FC /* ActorSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActorSound.h; path = ../src/ActorSound.h; sourceTree = ""; }; + AACFBE3908E7D832005087FC /* InputEventPlus.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = InputEventPlus.h; path = ../src/InputEventPlus.h; sourceTree = ""; }; + AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenGameplayLesson.cpp; path = ../src/ScreenGameplayLesson.cpp; sourceTree = ""; }; + AACFBE4A08E7D893005087FC /* ScreenGameplayLesson.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayLesson.h; path = ../src/ScreenGameplayLesson.h; sourceTree = ""; }; + AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaExpressionTransform.cpp; path = ../src/LuaExpressionTransform.cpp; sourceTree = ""; }; + AACFBE6208E7DBA8005087FC /* LuaExpressionTransform.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaExpressionTransform.h; path = ../src/LuaExpressionTransform.h; sourceTree = ""; }; + AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundPosMap.cpp; path = ../src/RageSoundPosMap.cpp; sourceTree = ""; }; + AAD36083062BB8AE00D0CED8 /* RageSoundPosMap.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundPosMap.h; path = ../src/RageSoundPosMap.h; sourceTree = ""; }; + AAD3D5AB05B5AB4E00014FAC /* RageUtil_CircularBuffer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_CircularBuffer.h; path = ../src/RageUtil_CircularBuffer.h; sourceTree = ""; }; + AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = PercentageDisplay.cpp; path = ../src/PercentageDisplay.cpp; sourceTree = ""; }; + AAD620A6052EC78B00D02EE9 /* PercentageDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PercentageDisplay.h; path = ../src/PercentageDisplay.h; sourceTree = ""; }; + AAD64AA10603FE7300EF8CDE /* StepMania.pch */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = StepMania.pch; sourceTree = ""; }; + AAD675EF06795175006002B0 /* Dialog.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = Dialog.cpp; sourceTree = ""; }; + AAD675F006795175006002B0 /* Dialog.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Dialog.h; sourceTree = ""; }; + AAD675F106795175006002B0 /* DialogDriver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = DialogDriver.h; sourceTree = ""; }; + AAD6A712065E0FDF0042165A /* Difficulty.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Difficulty.cpp; path = ../src/Difficulty.cpp; sourceTree = ""; }; + AAD6A713065E0FDF0042165A /* Difficulty.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Difficulty.h; path = ../src/Difficulty.h; sourceTree = ""; }; + AAD8F9320A4B97DF000311CF /* ScreenGameplayShared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenGameplayShared.h; path = ../src/ScreenGameplayShared.h; sourceTree = ""; }; + AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenGameplayShared.cpp; path = ../src/ScreenGameplayShared.cpp; sourceTree = ""; }; + AADB4E7A04D4FE5D00D02EE9 /* RageSoundReader_FileReader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_FileReader.h; path = ../src/RageSoundReader_FileReader.h; sourceTree = ""; }; + AADB4E8804D50FB900D02EE9 /* CrashHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = CrashHandler.h; sourceTree = ""; }; + AADB4E8A04D50FB900D02EE9 /* CrashHandlerInternal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = CrashHandlerInternal.h; sourceTree = ""; }; + AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = SignalHandler.cpp; sourceTree = ""; }; + AADB4E8C04D50FB900D02EE9 /* SignalHandler.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = SignalHandler.h; sourceTree = ""; }; + AADB4E8F04D5263200D02EE9 /* arch_setup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = arch_setup.h; sourceTree = ""; }; + AADB4F5904D9220700D02EE9 /* Crash.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Crash.h; sourceTree = ""; }; + AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenBookkeeping.cpp; path = ../src/ScreenBookkeeping.cpp; sourceTree = ""; }; + AADBE361053D5F8A00D02EE9 /* ScreenBookkeeping.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenBookkeeping.h; path = ../src/ScreenBookkeeping.h; sourceTree = ""; }; + AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNameEntryTraditional.cpp; path = ../src/ScreenNameEntryTraditional.cpp; sourceTree = ""; }; + AADBE363053D5F8A00D02EE9 /* ScreenNameEntryTraditional.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNameEntryTraditional.h; path = ../src/ScreenNameEntryTraditional.h; sourceTree = ""; }; + AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Bookkeeper.cpp; path = ../src/Bookkeeper.cpp; sourceTree = ""; }; + AADBE369053DA38C00D02EE9 /* Bookkeeper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Bookkeeper.h; path = ../src/Bookkeeper.h; sourceTree = ""; }; + AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LocalizedString.cpp; path = ../src/LocalizedString.cpp; sourceTree = ""; }; + AADD1CC3095C233F0088C9DF /* LocalizedString.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LocalizedString.h; path = ../src/LocalizedString.h; sourceTree = ""; }; + AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreKeeper.cpp; path = ../src/ScoreKeeper.cpp; sourceTree = ""; }; + AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = CombinedLifeMeterTug.cpp; path = ../src/CombinedLifeMeterTug.cpp; sourceTree = ""; }; + AAE443EC04B0F9F600D02EE9 /* CombinedLifeMeterTug.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = CombinedLifeMeterTug.h; path = ../src/CombinedLifeMeterTug.h; sourceTree = ""; }; + AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreKeeperRave.cpp; path = ../src/ScoreKeeperRave.cpp; sourceTree = ""; }; + AAE443F404B0FEB700D02EE9 /* ScoreKeeperRave.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreKeeperRave.h; path = ../src/ScoreKeeperRave.h; sourceTree = ""; }; + AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageTypes.cpp; path = ../src/RageTypes.cpp; sourceTree = ""; }; + AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = WorkoutGraph.cpp; path = ../src/WorkoutGraph.cpp; sourceTree = ""; }; + AAE7803D0AC76A1200AEFC64 /* WorkoutGraph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = WorkoutGraph.h; path = ../src/WorkoutGraph.h; sourceTree = ""; }; + AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = NetworkSyncManager.cpp; path = ../src/NetworkSyncManager.cpp; sourceTree = ""; }; + AAE7804A060814AC0034E65F /* NetworkSyncManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = NetworkSyncManager.h; path = ../src/NetworkSyncManager.h; sourceTree = ""; }; + AAE7808506081A000034E65F /* ezsockets.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ezsockets.cpp; path = ../src/ezsockets.cpp; sourceTree = ""; }; + AAE7808606081A000034E65F /* ezsockets.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ezsockets.h; path = ../src/ezsockets.h; sourceTree = ""; }; + AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActiveAttackList.cpp; path = ../src/ActiveAttackList.cpp; sourceTree = ""; }; + AAE7812C0608249E0034E65F /* ActiveAttackList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActiveAttackList.h; path = ../src/ActiveAttackList.h; sourceTree = ""; }; + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Save_JPEG.cpp; path = ../src/RageSurface_Save_JPEG.cpp; sourceTree = ""; }; + AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Save_JPEG.h; path = ../src/RageSurface_Save_JPEG.h; sourceTree = ""; }; + AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Dither.cpp; path = ../src/RageSurfaceUtils_Dither.cpp; sourceTree = ""; }; + AAEBC6C907A20AFE00793F0E /* RageSurfaceUtils_Dither.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils_Dither.h; path = ../src/RageSurfaceUtils_Dither.h; sourceTree = ""; }; + AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Zoom.cpp; path = ../src/RageSurfaceUtils_Zoom.cpp; sourceTree = ""; }; + AAEBC6CB07A20AFE00793F0E /* RageSurfaceUtils_Zoom.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurfaceUtils_Zoom.h; path = ../src/RageSurfaceUtils_Zoom.h; sourceTree = ""; }; + AAEBC78C07A4FF5600793F0E /* LuaBinding.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaBinding.h; path = ../src/LuaBinding.h; sourceTree = ""; }; + AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = LuaManager.cpp; path = ../src/LuaManager.cpp; sourceTree = ""; }; + AAEBC78E07A4FF5600793F0E /* LuaManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = LuaManager.h; path = ../src/LuaManager.h; sourceTree = ""; }; + AAEBC78F07A4FF5600793F0E /* PlayerState.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = PlayerState.h; path = ../src/PlayerState.h; sourceTree = ""; }; + AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SampleHistory.cpp; path = ../src/SampleHistory.cpp; sourceTree = ""; }; + AAEBF55F0B5C517E005F3C7C /* SampleHistory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SampleHistory.h; path = ../src/SampleHistory.h; sourceTree = ""; }; + AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SoundEffectControl.cpp; path = ../src/SoundEffectControl.cpp; sourceTree = ""; }; + AAEBF57D0B5C83F4005F3C7C /* SoundEffectControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SoundEffectControl.h; path = ../src/SoundEffectControl.h; sourceTree = ""; }; + AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenExit.cpp; path = ../src/ScreenExit.cpp; sourceTree = ""; }; + AAECF8C005265DB600D02EE9 /* ScreenExit.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenExit.h; path = ../src/ScreenExit.h; sourceTree = ""; }; + AAED6F280601C528002D2DEE /* Backtrace.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = Backtrace.cpp; sourceTree = ""; }; + AAED6F290601C528002D2DEE /* Backtrace.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = Backtrace.h; sourceTree = ""; }; + AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = BacktraceNames.cpp; sourceTree = ""; }; + AAED6F2B0601C528002D2DEE /* BacktraceNames.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = BacktraceNames.h; sourceTree = ""; }; + AAEDFD680A03762B00590617 /* Crash.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Crash.cpp; sourceTree = ""; }; + AAEF3D1004B53E2900D02EE9 /* LoadingWindow.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = LoadingWindow.h; sourceTree = ""; }; + AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = DynamicActorScroller.cpp; path = ../src/DynamicActorScroller.cpp; sourceTree = ""; }; + AAF3442A08F1C36A0006EDB7 /* DynamicActorScroller.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = DynamicActorScroller.h; path = ../src/DynamicActorScroller.h; sourceTree = ""; }; + AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScoreKeeperNormal.cpp; path = ../src/ScoreKeeperNormal.cpp; sourceTree = ""; }; + AAF34ADD0900AEBD0006EDB7 /* ScoreKeeperNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScoreKeeperNormal.h; path = ../src/ScoreKeeperNormal.h; sourceTree = ""; }; + AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenStatsOverlay.cpp; path = ../src/ScreenStatsOverlay.cpp; sourceTree = ""; }; + AAF34AEC0900B00C0006EDB7 /* ScreenStatsOverlay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenStatsOverlay.h; path = ../src/ScreenStatsOverlay.h; sourceTree = ""; }; + AAF4206505D63FA700056441 /* ModelManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ModelManager.cpp; path = ../src/ModelManager.cpp; sourceTree = ""; }; + AAF4206605D63FA700056441 /* ModelManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ModelManager.h; path = ../src/ModelManager.h; sourceTree = ""; }; + AAF4206905D6400800056441 /* RageModelGeometry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageModelGeometry.cpp; path = ../src/RageModelGeometry.cpp; sourceTree = ""; }; + AAF4206A05D6400800056441 /* RageModelGeometry.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageModelGeometry.h; path = ../src/RageModelGeometry.h; sourceTree = ""; }; + AAF430FD04DC98BC00D02EE9 /* Steps.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Steps.cpp; path = ../src/Steps.cpp; sourceTree = ""; }; + AAF430FE04DC98BC00D02EE9 /* Steps.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Steps.h; path = ../src/Steps.h; sourceTree = ""; }; + AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageUtil_FileDB.cpp; path = ../src/RageUtil_FileDB.cpp; sourceTree = ""; }; + AAF580A804B3E2DC00D02EE9 /* RageUtil_FileDB.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageUtil_FileDB.h; path = ../src/RageUtil_FileDB.h; sourceTree = ""; }; + AAF6A33109B69C7700D5C614 /* it */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A38F09B6A2A600D5C614 /* es */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3AE09B6A88800D5C614 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3B109B6A90C00D5C614 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3B209B6A91000D5C614 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + AAF6A3B309B6A91600D5C614 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestLights.cpp; path = ../src/ScreenTestLights.cpp; sourceTree = ""; }; + AAF7435A06110E8D00B19AD1 /* ScreenTestLights.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestLights.h; path = ../src/ScreenTestLights.h; sourceTree = ""; }; + AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageDisplay_Null.cpp; path = ../src/RageDisplay_Null.cpp; sourceTree = ""; }; + AAF7458F061181F700B19AD1 /* RageDisplay_Null.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageDisplay_Null.h; path = ../src/RageDisplay_Null.h; sourceTree = ""; }; + AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetRoom.cpp; path = ../src/ScreenNetRoom.cpp; sourceTree = ""; }; + AAF793F2074FE69E00D74516 /* ScreenNetRoom.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetRoom.h; path = ../src/ScreenNetRoom.h; sourceTree = ""; }; + AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenNetSelectBase.cpp; path = ../src/ScreenNetSelectBase.cpp; sourceTree = ""; }; + AAF793F4074FE69E00D74516 /* ScreenNetSelectBase.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenNetSelectBase.h; path = ../src/ScreenNetSelectBase.h; sourceTree = ""; }; + AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsEditProfile.cpp; path = ../src/ScreenOptionsEditProfile.cpp; sourceTree = ""; }; + AAFAB5BC0889098600767BF7 /* ScreenOptionsEditProfile.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsEditProfile.h; path = ../src/ScreenOptionsEditProfile.h; sourceTree = ""; }; + AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = GameLoop.cpp; sourceTree = ""; }; + AAFAB5CC08890B5200767BF7 /* GameLoop.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = GameLoop.h; sourceTree = ""; }; + AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = EnumHelper.cpp; path = ../src/EnumHelper.cpp; sourceTree = ""; }; + AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = RageSoundReader.cpp; path = ../src/RageSoundReader.cpp; sourceTree = ""; }; + AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = SpecialFiles.cpp; sourceTree = ""; }; + AAFBEED0094D7FCB000029DE /* SpecialFiles.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = SpecialFiles.h; sourceTree = ""; }; + AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsManageEditSteps.cpp; path = ../src/ScreenOptionsManageEditSteps.cpp; sourceTree = ""; }; + AAFBEEE6094D807E000029DE /* ScreenOptionsManageEditSteps.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsManageEditSteps.h; path = ../src/ScreenOptionsManageEditSteps.h; sourceTree = ""; }; + AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenOptionsMemoryCard.cpp; path = ../src/ScreenOptionsMemoryCard.cpp; sourceTree = ""; }; + AAFBEEE8094D807E000029DE /* ScreenOptionsMemoryCard.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenOptionsMemoryCard.h; path = ../src/ScreenOptionsMemoryCard.h; sourceTree = ""; }; + AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenServiceAction.cpp; path = ../src/ScreenServiceAction.cpp; sourceTree = ""; }; + AAFBEEEA094D807E000029DE /* ScreenServiceAction.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenServiceAction.h; path = ../src/ScreenServiceAction.h; sourceTree = ""; }; + AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; path = InputHandler_MonkeyKeyboard.cpp; sourceTree = ""; }; + AAFC6CF0072A30440053AAD3 /* InputHandler_MonkeyKeyboard.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = InputHandler_MonkeyKeyboard.h; sourceTree = ""; }; + AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_FileReader.cpp; path = ../src/RageSoundReader_FileReader.cpp; sourceTree = ""; }; + AAFC7FF10513A67700D02EE9 /* RageSoundReader_MP3.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundReader_MP3.cpp; path = ../src/RageSoundReader_MP3.cpp; sourceTree = ""; }; + AAFC7FF20513A67700D02EE9 /* RageSoundReader_MP3.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_MP3.h; path = ../src/RageSoundReader_MP3.h; sourceTree = ""; }; + AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ActorProxy.cpp; path = ../src/ActorProxy.cpp; sourceTree = ""; }; + AAFE710A0A91ADE6005F2290 /* ActorProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ActorProxy.h; path = ../src/ActorProxy.h; sourceTree = ""; }; + AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageSurface_Save_PNG.cpp; path = ../src/RageSurface_Save_PNG.cpp; sourceTree = ""; }; + AAFE711D0A91B551005F2290 /* RoomInfoDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RoomInfoDisplay.cpp; path = ../src/RoomInfoDisplay.cpp; sourceTree = ""; }; + AAFE711E0A91B551005F2290 /* RoomInfoDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RoomInfoDisplay.h; path = ../src/RoomInfoDisplay.h; sourceTree = ""; }; + AAFE71280A91B58F005F2290 /* RageSurface_Save_PNG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageSurface_Save_PNG.h; path = ../src/RageSurface_Save_PNG.h; sourceTree = ""; }; + AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenOptionsExportPackage.cpp; path = ../src/ScreenOptionsExportPackage.cpp; sourceTree = SOURCE_ROOT; }; + AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenOptionsExportPackage.h; path = ../src/ScreenOptionsExportPackage.h; sourceTree = SOURCE_ROOT; }; + AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = GraphDisplay.cpp; path = ../src/GraphDisplay.cpp; sourceTree = ""; }; + AAFF551E0549F39700D02EE9 /* GraphDisplay.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = GraphDisplay.h; path = ../src/GraphDisplay.h; sourceTree = ""; }; + AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ComboGraph.cpp; path = ../src/ComboGraph.cpp; sourceTree = ""; }; + AAFF55220549F43A00D02EE9 /* ComboGraph.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ComboGraph.h; path = ../src/ComboGraph.h; sourceTree = ""; }; + AAFF5541054E736D00D02EE9 /* Attack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Attack.cpp; path = ../src/Attack.cpp; sourceTree = ""; }; + AAFF5542054E736D00D02EE9 /* Attack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Attack.h; path = ../src/Attack.h; sourceTree = ""; }; + EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderPMS.cpp; path = ../src/NotesLoaderPMS.cpp; sourceTree = SOURCE_ROOT; }; + EE2153A810A75BEE0074B01B /* NotesLoaderPMS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderPMS.h; path = ../src/NotesLoaderPMS.h; sourceTree = SOURCE_ROOT; }; + EE879B5C132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageDisplay_Legacy_Helpers.cpp; path = ../src/RageDisplay_Legacy_Helpers.cpp; sourceTree = SOURCE_ROOT; }; + EE879B5D132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageDisplay_Legacy_Helpers.h; path = ../src/RageDisplay_Legacy_Helpers.h; sourceTree = SOURCE_ROOT; }; + EE879B5E132DEE720078FDDC /* RageDisplay_Legacy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RageDisplay_Legacy.cpp; path = ../src/RageDisplay_Legacy.cpp; sourceTree = SOURCE_ROOT; }; + EE879B5F132DEE720078FDDC /* RageDisplay_Legacy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RageDisplay_Legacy.h; path = ../src/RageDisplay_Legacy.h; sourceTree = SOURCE_ROOT; }; + EE879BAA132E06C50078FDDC /* glew.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = glew.c; path = src/glew.c; sourceTree = ""; }; + EE906F6412BF3A1B00146C96 /* ScreenInstallOverlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenInstallOverlay.cpp; path = ../src/ScreenInstallOverlay.cpp; sourceTree = SOURCE_ROOT; }; + EE906F6512BF3A1B00146C96 /* ScreenInstallOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenInstallOverlay.h; path = ../src/ScreenInstallOverlay.h; sourceTree = SOURCE_ROOT; }; + EE906F8012BF3AF800146C96 /* JsonUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JsonUtil.cpp; path = ../src/JsonUtil.cpp; sourceTree = SOURCE_ROOT; }; + EE906F8112BF3AF800146C96 /* JsonUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JsonUtil.h; path = ../src/JsonUtil.h; sourceTree = SOURCE_ROOT; }; + EE906F8812BF3C7C00146C96 /* FileDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileDownload.cpp; path = ../src/FileDownload.cpp; sourceTree = SOURCE_ROOT; }; + EE906F8912BF3C7C00146C96 /* FileDownload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileDownload.h; path = ../src/FileDownload.h; sourceTree = SOURCE_ROOT; }; + EEA7C84110A805A300082E7B /* ScreenPackagesSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenPackagesSSC.cpp; path = ../src/ScreenPackagesSSC.cpp; sourceTree = SOURCE_ROOT; }; + EEA7C84210A805A300082E7B /* ScreenPackagesSSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenPackagesSSC.h; path = ../src/ScreenPackagesSSC.h; sourceTree = SOURCE_ROOT; }; + EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StepsDisplay.cpp; path = ../src/StepsDisplay.cpp; sourceTree = ""; }; + EEC7863E0E58208B00F559BC /* StepsDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StepsDisplay.h; path = ../src/StepsDisplay.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AA29CE3B0558741A00961A51 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA29CE3C0558741A00961A51 /* Cocoa.framework in Frameworks */, + AA29CE3D0558741A00961A51 /* Carbon.framework in Frameworks */, + AA29CE3E0558741A00961A51 /* IOKit.framework in Frameworks */, + AA29CE3F0558741A00961A51 /* QuickTime.framework in Frameworks */, + AA29CE400558741A00961A51 /* OpenGL.framework in Frameworks */, + AA29CE420558741A00961A51 /* CoreFoundation.framework in Frameworks */, + AA230EB006043704002672F3 /* AudioToolbox.framework in Frameworks */, + AA230EB106043704002672F3 /* AudioUnit.framework in Frameworks */, + AAA8E0030696984300FCE1F9 /* CoreAudio.framework in Frameworks */, + AA77E8B108B6ABD500FA24CA /* vecLib.framework in Frameworks */, + AA21E4790A9826CD00684CEA /* libjpeg_link.a in Frameworks */, + AA21E47B0A9826CD00684CEA /* libogg_link.a in Frameworks */, + AA21E47C0A9826CD00684CEA /* libpng_link.a in Frameworks */, + AA21E47D0A9826CD00684CEA /* libtheora_link.a in Frameworks */, + AA21E47E0A9826CD00684CEA /* libvorbis_link.a in Frameworks */, + AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */, + AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */, + AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */, + AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */, + AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, + AAA071B40CE7C9C9005A3060 /* libmad.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D51409A08D650068C0D5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D51509A08D650068C0D5 /* Cocoa.framework in Frameworks */, + AA40D51609A08D650068C0D5 /* Carbon.framework in Frameworks */, + AA40D51709A08D650068C0D5 /* IOKit.framework in Frameworks */, + AA40D51809A08D650068C0D5 /* QuickTime.framework in Frameworks */, + AA40D51909A08D650068C0D5 /* OpenGL.framework in Frameworks */, + AA40D51A09A08D650068C0D5 /* CoreFoundation.framework in Frameworks */, + AA40D51C09A08D650068C0D5 /* AudioToolbox.framework in Frameworks */, + AA40D51D09A08D650068C0D5 /* AudioUnit.framework in Frameworks */, + AA40D51E09A08D650068C0D5 /* CoreAudio.framework in Frameworks */, + AA40D51F09A08D650068C0D5 /* vecLib.framework in Frameworks */, + AA21E47F0A9826CD00684CEA /* libjpeg_link.a in Frameworks */, + AA21E4810A9826CD00684CEA /* libogg_link.a in Frameworks */, + AA21E4820A9826CD00684CEA /* libpng_link.a in Frameworks */, + AA21E4830A9826CD00684CEA /* libtheora_link.a in Frameworks */, + AA21E4840A9826CD00684CEA /* libvorbis_link.a in Frameworks */, + AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */, + AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */, + AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */, + AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */, + AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2B920AE09B520054C5BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2BA90AE09CD50054C5BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C895D0B67444700FD9940 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C8B890B67460600FD9940 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAA070A70CE7B0DF005A3060 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAE7817C0AC7E37B00AEFC64 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + AA230EAE06043704002672F3 /* AudioToolbox.framework */, + AA230EAF06043704002672F3 /* AudioUnit.framework */, + AAA0F7CE047AC7BF005F316C /* Carbon.framework */, + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + AAA8E0020696984300FCE1F9 /* CoreAudio.framework */, + AAF33F2A04FF213100F93C24 /* CoreFoundation.framework */, + AA230ECF06043EFD002672F3 /* CoreServices.framework */, + AAA0F7D0047AC7EA005F316C /* IOKit.framework */, + AA8DD84904A2E51400D02EE9 /* OpenGL.framework */, + AAA0F7D2047ACBC9005F316C /* QuickTime.framework */, + AA77E8A108B6ABD500FA24CA /* vecLib.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + AA29CE580558741A00961A51 /* sm-ssc.app */, + AA40D52B09A08D660068C0D5 /* sm-ssc.app */, + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */, + AA7A2B940AE09B520054C5BA /* lua */, + AA7A2BAB0AE09CD50054C5BA /* luac */, + AA7C895F0B67444700FD9940 /* libtommath.a */, + AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */, + AAA070A90CE7B0DF005A3060 /* libmad.a */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* SDL App */ = { + isa = PBXGroup; + children = ( + 2BDB87261371F7FF00E6FD3A /* extern */, + AA6EFF7404770F8B005F316C /* Actors */, + AA6EFEFA04770E84005F316C /* ActorsInGameplay */, + AA6EFE6D04770D3E005F316C /* ActorsInMenus */, + AA6E01400477136A005F316C /* arch */, + AA6E017E0477136A005F316C /* archutils */, + AA6EFDC804770AF1005F316C /* DataStructures */, + AA6EFE5704770C7E005F316C /* FileTypes */, + AA6E00FE047711FF005F316C /* GlobalSingletons */, + 2B766980132FF62B00586512 /* NoteParsing */, + 29B97315FDCFA39411CA2CEA /* Other Source */, + AA6EFDBB04770A83005F316C /* Rage */, + AA6EFE6A04770D01005F316C /* StepMania */, + AA6E00090477103E005F316C /* Screens */, + AA52E9BD04DBBCF400D02EE9 /* ver.cpp */, + AA29CE570558741A00961A51 /* Info-StepMania.plist */, + AAA3741C09099ADA00141131 /* Libraries */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + 29B97317FDCFA39411CA2CEA /* Resources */, + AA8B8C49091F48C000D14C5F /* product.xcconfig */, + ); + name = "SDL App"; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Source */ = { + isa = PBXGroup; + children = ( + AA70E3640663112800DAE1FD /* Foreach.h */, + 3659B56D0F902143002B6B68 /* CommandLineActions.cpp */, + 3659B56E0F902143002B6B68 /* CommandLineActions.h */, + ); + name = "Other Source"; + path = ../src; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + AA1DE9590C5468FE00D59F20 /* Hardware.in.plist */, + AA1DE9560C5468CE00D59F20 /* Hardware.plist */, + AAF6A2F709B695BA00D5C614 /* Localizable.strings */, + AAB895E504A9057100D02EE9 /* smicon.icns */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2B766980132FF62B00586512 /* NoteParsing */ = { + isa = PBXGroup; + children = ( + AA6EFDED04770C79005F316C /* NotesLoader.cpp */, + AA6EFDEE04770C79005F316C /* NotesLoader.h */, + AA6EFDEF04770C79005F316C /* NotesLoaderBMS.cpp */, + AA6EFDF004770C79005F316C /* NotesLoaderBMS.h */, + AA6EFDF104770C79005F316C /* NotesLoaderDWI.cpp */, + AA6EFDF204770C79005F316C /* NotesLoaderDWI.h */, + AA6EFDF304770C79005F316C /* NotesLoaderKSF.cpp */, + AA6EFDF404770C79005F316C /* NotesLoaderKSF.h */, + 3688B8510BD42DAA004186AD /* NotesLoaderMidi.cpp */, + 3688B8520BD42DAA004186AD /* NotesLoaderMidi.h */, + EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */, + EE2153A810A75BEE0074B01B /* NotesLoaderPMS.h */, + AA6EFDF504770C79005F316C /* NotesLoaderSM.cpp */, + AA6EFDF604770C79005F316C /* NotesLoaderSM.h */, + 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */, + 2B766989132FF71500586512 /* NotesLoaderSMA.h */, + 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */, + 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */, + AA6EFDF704770C79005F316C /* NotesWriterDWI.cpp */, + AA6EFDF804770C79005F316C /* NotesWriterDWI.h */, + AA6EFDF904770C79005F316C /* NotesWriterSM.cpp */, + AA6EFDFA04770C79005F316C /* NotesWriterSM.h */, + 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */, + 2BA7925D1304F20D002BD8E1 /* NotesWriterSSC.h */, + ); + name = NoteParsing; + sourceTree = ""; + }; + 2BDB87261371F7FF00E6FD3A /* extern */ = { + isa = PBXGroup; + children = ( + EE879B8E132E06C50078FDDC /* glew-1.5.8 */, + EE906F6F12BF3A5B00146C96 /* json */, + AA7C8A7F0B6744F600FD9940 /* libtommath */, + AA7C8B920B67467C00FD9940 /* libtomcrypt */, + AAE781870AC7E46E00AEFC64 /* lua-5.1 */, + AAA070B20CE7B3AD005A3060 /* mad-0.15.1b */, + AA8B6C7804AFD82B00D02EE9 /* pcre */, + ); + name = extern; + sourceTree = ""; + }; + AA60E0BB067992D7008ADC41 /* Threads */ = { + isa = PBXGroup; + children = ( + AA60E0BC067992D7008ADC41 /* Threads.h */, + AA60E0BD067992D7008ADC41 /* Threads_Pthreads.cpp */, + AA60E0BE067992D7008ADC41 /* Threads_Pthreads.h */, + ); + path = Threads; + sourceTree = ""; + }; + AA6E00090477103E005F316C /* Screens */ = { + isa = PBXGroup; + children = ( + AA6E000A047711F3005F316C /* Screen.cpp */, + AA6E000B047711F3005F316C /* Screen.h */, + AA6E0010047711F3005F316C /* ScreenAttract.cpp */, + AA6E0011047711F3005F316C /* ScreenAttract.h */, + AADBE360053D5F8A00D02EE9 /* ScreenBookkeeping.cpp */, + AADBE361053D5F8A00D02EE9 /* ScreenBookkeeping.h */, + AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */, + AA2CA89E0BB745BD002441E9 /* ScreenContinue.h */, + AA07A5550843E72B00E33D21 /* ScreenDebugOverlay.cpp */, + AA07A5560843E72B00E33D21 /* ScreenDebugOverlay.h */, + AA6E001B047711F3005F316C /* ScreenDemonstration.cpp */, + AA6E001C047711F3005F316C /* ScreenDemonstration.h */, + AA21D59C0712ADE4008B825F /* ScreenDimensions.cpp */, + AA6EFE6104770CF7005F316C /* ScreenDimensions.h */, + AA6E001D047711F3005F316C /* ScreenEdit.cpp */, + AA6E001E047711F3005F316C /* ScreenEdit.h */, + AA6E001F047711F3005F316C /* ScreenEditMenu.cpp */, + AA6E0020047711F3005F316C /* ScreenEditMenu.h */, + AABE321A05ACD8ED001A0E84 /* ScreenEnding.cpp */, + AABE321B05ACD8ED001A0E84 /* ScreenEnding.h */, + AA6E0021047711F3005F316C /* ScreenEvaluation.cpp */, + AA6E0022047711F3005F316C /* ScreenEvaluation.h */, + AAECF8BF05265DB600D02EE9 /* ScreenExit.cpp */, + AAECF8C005265DB600D02EE9 /* ScreenExit.h */, + AA6E0029047711F3005F316C /* ScreenGameplay.cpp */, + AA6E002A047711F3005F316C /* ScreenGameplay.h */, + AACFBE4908E7D893005087FC /* ScreenGameplayLesson.cpp */, + AACFBE4A08E7D893005087FC /* ScreenGameplayLesson.h */, + 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */, + 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */, + AAD8F9330A4B97DF000311CF /* ScreenGameplayShared.cpp */, + AAD8F9320A4B97DF000311CF /* ScreenGameplayShared.h */, + AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */, + AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */, + 367D57590EDE56F200B46814 /* ScreenHighScores.cpp */, + 367D575A0EDE56F200B46814 /* ScreenHighScores.h */, + AA6E002F047711F3005F316C /* ScreenHowToPlay.cpp */, + AA6E0030047711F3005F316C /* ScreenHowToPlay.h */, + EE906F6412BF3A1B00146C96 /* ScreenInstallOverlay.cpp */, + EE906F6512BF3A1B00146C96 /* ScreenInstallOverlay.h */, + AA6E0033047711F3005F316C /* ScreenInstructions.cpp */, + AA6E0034047711F3005F316C /* ScreenInstructions.h */, + AA6E0037047711F3005F316C /* ScreenJukebox.cpp */, + AA6E0038047711F3005F316C /* ScreenJukebox.h */, + AA6E0041047711F3005F316C /* ScreenMapControllers.cpp */, + AA6E0042047711F3005F316C /* ScreenMapControllers.h */, + AA80C75B07F20D7F00C99272 /* ScreenMessage.cpp */, + AA6E0044047711F3005F316C /* ScreenMessage.h */, + AA6E0045047711F3005F316C /* ScreenMiniMenu.cpp */, + AA6E0046047711F3005F316C /* ScreenMiniMenu.h */, + AA6E0049047711F3005F316C /* ScreenNameEntry.cpp */, + AA6E004A047711F3005F316C /* ScreenNameEntry.h */, + AADBE362053D5F8A00D02EE9 /* ScreenNameEntryTraditional.cpp */, + AADBE363053D5F8A00D02EE9 /* ScreenNameEntryTraditional.h */, + AAB9C8B306EAF66C00AD97CD /* ScreenNetEvaluation.cpp */, + AAB9C8B406EAF66C00AD97CD /* ScreenNetEvaluation.h */, + AAF793F1074FE69E00D74516 /* ScreenNetRoom.cpp */, + AAF793F2074FE69E00D74516 /* ScreenNetRoom.h */, + AAF793F3074FE69E00D74516 /* ScreenNetSelectBase.cpp */, + AAF793F4074FE69E00D74516 /* ScreenNetSelectBase.h */, + AA22CBA306DE909C0083BA97 /* ScreenNetSelectMusic.cpp */, + AA22CBA406DE909C0083BA97 /* ScreenNetSelectMusic.h */, + AA42F5E6067068D30013509E /* ScreenNetworkOptions.cpp */, + AA42F5E7067068D30013509E /* ScreenNetworkOptions.h */, + AA6E004B047711F3005F316C /* ScreenOptions.cpp */, + AA6E004C047711F3005F316C /* ScreenOptions.h */, + 36CA531A0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp */, + 36CA531B0F91564A0063D59D /* ScreenOptionsCourseOverview.h */, + 36CA531E0F9156860063D59D /* ScreenOptionsEditCourse.cpp */, + 36CA531F0F9156860063D59D /* ScreenOptionsEditCourse.h */, + AAFAB5BB0889098600767BF7 /* ScreenOptionsEditProfile.cpp */, + AAFAB5BC0889098600767BF7 /* ScreenOptionsEditProfile.h */, + AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */, + AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */, + AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */, + AA77E75C08B64B9A00FA24CA /* ScreenOptionsManageCourses.h */, + AAFBEEE5094D807E000029DE /* ScreenOptionsManageEditSteps.cpp */, + AAFBEEE6094D807E000029DE /* ScreenOptionsManageEditSteps.h */, + AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */, + AA77E75E08B64B9A00FA24CA /* ScreenOptionsManageProfiles.h */, + AA53D28405277DAF00D02EE9 /* ScreenOptionsMaster.cpp */, + AA53D28505277DAF00D02EE9 /* ScreenOptionsMaster.h */, + AA53D28605277DAF00D02EE9 /* ScreenOptionsMasterPrefs.cpp */, + AA53D28705277DAF00D02EE9 /* ScreenOptionsMasterPrefs.h */, + AAFBEEE7094D807E000029DE /* ScreenOptionsMemoryCard.cpp */, + AAFBEEE8094D807E000029DE /* ScreenOptionsMemoryCard.h */, + AAA7D4C70C7E872500FB8F78 /* ScreenOptionsToggleSongs.cpp */, + AAA7D4C80C7E872500FB8F78 /* ScreenOptionsToggleSongs.h */, + AA1145D9075DFADF0050A3D1 /* ScreenPackages.cpp */, + AA1145DA075DFADF0050A3D1 /* ScreenPackages.h */, + EEA7C84110A805A300082E7B /* ScreenPackagesSSC.cpp */, + EEA7C84210A805A300082E7B /* ScreenPackagesSSC.h */, + AA6E004F047711F3005F316C /* ScreenPlayerOptions.cpp */, + AA6E0050047711F3005F316C /* ScreenPlayerOptions.h */, + AA18935C0BD777C400AEC0BF /* ScreenProfileLoad.cpp */, + AA18935D0BD777C400AEC0BF /* ScreenProfileLoad.h */, + AA18935E0BD777C400AEC0BF /* ScreenProfileSave.cpp */, + AA18935F0BD777C400AEC0BF /* ScreenProfileSave.h */, + AA6E0051047711F3005F316C /* ScreenPrompt.cpp */, + AA6E0052047711F3005F316C /* ScreenPrompt.h */, + AA6E0053047711F3005F316C /* ScreenRanking.cpp */, + AA6E0054047711F3005F316C /* ScreenRanking.h */, + AA53D28805277DAF00D02EE9 /* ScreenReloadSongs.cpp */, + AA53D28905277DAF00D02EE9 /* ScreenReloadSongs.h */, + AA6E0057047711F3005F316C /* ScreenSandbox.cpp */, + AA6E0058047711F3005F316C /* ScreenSandbox.h */, + AA07A5590843E72B00E33D21 /* ScreenSaveSync.cpp */, + AA07A55A0843E72B00E33D21 /* ScreenSaveSync.h */, + AA6E0059047711F3005F316C /* ScreenSelect.cpp */, + AA6E005A047711F3005F316C /* ScreenSelect.h */, + AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */, + AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */, + AA2E9FFF0A770208003A0C11 /* ScreenSelectLanguage.cpp */, + AA2EA0000A770208003A0C11 /* ScreenSelectLanguage.h */, + AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */, + AA1DC47504A4861700D02EE9 /* ScreenSelectMaster.h */, + AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */, + AA6E006A047711F3005F316C /* ScreenSelectMusic.h */, + AAB3B7DA0C6C582D001BF487 /* ScreenSelectProfile.cpp */, + AAB3B7DB0C6C582D001BF487 /* ScreenSelectProfile.h */, + AAFBEEE9094D807E000029DE /* ScreenServiceAction.cpp */, + AAFBEEEA094D807E000029DE /* ScreenServiceAction.h */, + AA0A3DE6060513A00044E6B1 /* ScreenSetTime.cpp */, + AA0A3DE7060513A00044E6B1 /* ScreenSetTime.h */, + AA07A55B0843E72B00E33D21 /* ScreenSMOnlineLogin.cpp */, + AA07A55C0843E72B00E33D21 /* ScreenSMOnlineLogin.h */, + AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */, + AA6E0070047711F3005F316C /* ScreenSongOptions.h */, + AAB6B475085761B700CEE7BA /* ScreenSplash.cpp */, + AAB6B476085761B700CEE7BA /* ScreenSplash.h */, + AAF34AEB0900B00C0006EDB7 /* ScreenStatsOverlay.cpp */, + AAF34AEC0900B00C0006EDB7 /* ScreenStatsOverlay.h */, + AA07A55D0843E72B00E33D21 /* ScreenSyncOverlay.cpp */, + AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */, + AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */, + AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */, + AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */, + AA6E007A047711F3005F316C /* ScreenTestFonts.h */, + AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */, + AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */, + AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */, + AAF7435A06110E8D00B19AD1 /* ScreenTestLights.h */, + AA6E007B047711F3005F316C /* ScreenTestSound.cpp */, + AA6E007C047711F3005F316C /* ScreenTestSound.h */, + AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */, + AA6E007E047711F3005F316C /* ScreenTextEntry.h */, + AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */, + AA6E0080047711F3005F316C /* ScreenTitleMenu.h */, + AAB55EB709A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp */, + AAB55EB809A7E3D3008FDC69 /* ScreenUnlockBrowse.h */, + AAB55EB909A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp */, + AAB55EBA09A7E3D3008FDC69 /* ScreenUnlockCelebrate.h */, + AA658779098C322800CE55CC /* ScreenUnlockStatus.cpp */, + AA65877A098C322800CE55CC /* ScreenUnlockStatus.h */, + AAA6BFEA0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp */, + AAA6BFEB0644AB3700AFBBC8 /* ScreenWithMenuElements.h */, + ); + name = Screens; + sourceTree = ""; + }; + AA6E00FE047711FF005F316C /* GlobalSingletons */ = { + isa = PBXGroup; + children = ( + AA6E00FF0477128A005F316C /* AnnouncerManager.cpp */, + AA6E01000477128A005F316C /* AnnouncerManager.h */, + AADBE368053DA38C00D02EE9 /* Bookkeeper.cpp */, + AADBE369053DA38C00D02EE9 /* Bookkeeper.h */, + AA77E74508B64B1400FA24CA /* CharacterManager.cpp */, + AA77E74608B64B1400FA24CA /* CharacterManager.h */, + AAC0BFDF0E2951EC00F56EEB /* CryptHelpers.cpp */, + AAC0BFE00E2951EC00F56EEB /* CryptHelpers.h */, + AABD0B3605DF3F22004F7929 /* CryptManager.cpp */, + AABD0B3705DF3F22004F7929 /* CryptManager.h */, + AA6E01010477128A005F316C /* GameManager.cpp */, + AA6E01020477128A005F316C /* GameManager.h */, + AAC9F32E069E22BB00D53E2C /* GameSoundManager.cpp */, + AAC9F32F069E22BB00D53E2C /* GameSoundManager.h */, + AA6E01030477128A005F316C /* GameState.cpp */, + AA6E01040477128A005F316C /* GameState.h */, + AA6E01050477128A005F316C /* InputFilter.cpp */, + AA6E01060477128A005F316C /* InputFilter.h */, + AA6E01070477128A005F316C /* InputMapper.cpp */, + AA6E01080477128A005F316C /* InputMapper.h */, + AA6E01090477128A005F316C /* InputQueue.cpp */, + AA6E010A0477128A005F316C /* InputQueue.h */, + AAC6DCE30567660A00B5D56F /* LightsManager.cpp */, + AAC6DCE40567660A00B5D56F /* LightsManager.h */, + AA8EE0750866E266002C51A7 /* LuaBinding.cpp */, + AAEBC78C07A4FF5600793F0E /* LuaBinding.h */, + AAEBC78D07A4FF5600793F0E /* LuaManager.cpp */, + AAEBC78E07A4FF5600793F0E /* LuaManager.h */, + AA8BD2A107C9391B00EA04E1 /* LuaReference.cpp */, + AA8BD2A207C9391B00EA04E1 /* LuaReference.h */, + AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */, + AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */, + AA8BD2A307C9391B00EA04E1 /* MessageManager.cpp */, + AA8BD2A407C9391B00EA04E1 /* MessageManager.h */, + AAF4206505D63FA700056441 /* ModelManager.cpp */, + AAF4206605D63FA700056441 /* ModelManager.h */, + AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */, + AAE7804A060814AC0034E65F /* NetworkSyncManager.h */, + AA6E010B0477128A005F316C /* NoteSkinManager.cpp */, + AA6E010C0477128A005F316C /* NoteSkinManager.h */, + AA6E010D0477128A005F316C /* PrefsManager.cpp */, + AA6E010E0477128A005F316C /* PrefsManager.h */, + AA1C6556050D234B0073A143 /* ProfileManager.cpp */, + AA1C6557050D234B0073A143 /* ProfileManager.h */, + AAB0085F057F4F7A000BBA58 /* RageFileManager.cpp */, + AAB00860057F4F7A000BBA58 /* RageFileManager.h */, + AA6EFD7404770A7C005F316C /* RageInput.cpp */, + AA6EFD7504770A7C005F316C /* RageInput.h */, + AA6EFD7804770A7C005F316C /* RageLog.cpp */, + AA6EFD7904770A7C005F316C /* RageLog.h */, + AA6EFD7E04770A7C005F316C /* RageSoundManager.cpp */, + AA6EFD7F04770A7C005F316C /* RageSoundManager.h */, + AA6EFD8B04770A7C005F316C /* RageTextureManager.cpp */, + AA6EFD8C04770A7C005F316C /* RageTextureManager.h */, + AA6E003F047711F3005F316C /* ScreenManager.cpp */, + AA6E0040047711F3005F316C /* ScreenManager.h */, + AA6E01DE04772005005F316C /* SongCacheIndex.cpp */, + AA6E01DF04772005005F316C /* SongCacheIndex.h */, + AA6E010F0477128A005F316C /* SongManager.cpp */, + AA6E01100477128A005F316C /* SongManager.h */, + AA8BD2A507C9391B00EA04E1 /* StatsManager.cpp */, + AA8BD2A607C9391B00EA04E1 /* StatsManager.h */, + AA8BD2A707C9391B00EA04E1 /* SubscriptionManager.h */, + AA6E01120477128A005F316C /* ThemeManager.cpp */, + AA6E01130477128A005F316C /* ThemeManager.h */, + AA80C75207F20D0D00C99272 /* UnlockManager.cpp */, + AA80C75307F20D0D00C99272 /* UnlockManager.h */, + ); + name = GlobalSingletons; + sourceTree = ""; + }; + AA6E012D04771299005F316C /* Sound */ = { + isa = PBXGroup; + children = ( + AA608FAC0B0F9A4E00B39AC4 /* RageSoundDriver.cpp */, + AABE37030497CF85005F316C /* RageSoundDriver.h */, + AA8CF5160A4518BE0005F1B4 /* RageSoundDriver_AU.cpp */, + AA8CF5150A4518BE0005F1B4 /* RageSoundDriver_AU.h */, + AA1CD941060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp */, + AA6E012E047712BE005F316C /* RageSoundDriver_Null.cpp */, + AA6E012F047712BE005F316C /* RageSoundDriver_Null.h */, + ); + path = Sound; + sourceTree = ""; + }; + AA6E01400477136A005F316C /* arch */ = { + isa = PBXGroup; + children = ( + AABE36F60497CE16005F316C /* arch_default.h */, + AABE36FE0497CE67005F316C /* ArchHooks */, + AAD675EE06795175006002B0 /* Dialog */, + AA6E01540477136A005F316C /* InputHandler */, + AAC6DCED0567663800B5D56F /* Lights */, + AA6E015A0477136A005F316C /* LoadingWindow */, + AA6E01620477136A005F316C /* LowLevelWindow */, + AABE78720591287100E8BF50 /* MemoryCard */, + AA6E01DD04771F19005F316C /* MovieTexture */, + AA909E1D0B45B676002852D3 /* RageDriver.cpp */, + AA909E1E0B45B676002852D3 /* RageDriver.h */, + AA6E012D04771299005F316C /* Sound */, + AA60E0BB067992D7008ADC41 /* Threads */, + ); + name = arch; + path = ../src/arch; + sourceTree = ""; + }; + AA6E01540477136A005F316C /* InputHandler */ = { + isa = PBXGroup; + children = ( + AAB3B36B04C38B4600D02EE9 /* InputHandler.cpp */, + AAB3B36C04C38B4600D02EE9 /* InputHandler.h */, + AA6C6B0C0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp */, + AA6C6B0D0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h */, + AAFC6CEF072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp */, + AAFC6CF0072A30440053AAD3 /* InputHandler_MonkeyKeyboard.h */, + ); + path = InputHandler; + sourceTree = ""; + }; + AA6E015A0477136A005F316C /* LoadingWindow */ = { + isa = PBXGroup; + children = ( + AA909E260B45B6AB002852D3 /* LoadingWindow.cpp */, + AAEF3D1004B53E2900D02EE9 /* LoadingWindow.h */, + AA6C6AE20DC6B22800E7A13E /* LoadingWindow_MacOSX.h */, + AA6C6AE30DC6B22800E7A13E /* LoadingWindow_MacOSX.mm */, + AA339A7D0BF0FA6300E1475F /* LoadingWindow_Null.h */, + ); + path = LoadingWindow; + sourceTree = ""; + }; + AA6E01620477136A005F316C /* LowLevelWindow */ = { + isa = PBXGroup; + children = ( + AA909E230B45B696002852D3 /* LowLevelWindow.cpp */, + AA6E01630477136A005F316C /* LowLevelWindow.h */, + AA6C6B000DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h */, + AA6C6B010DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm */, + ); + path = LowLevelWindow; + sourceTree = ""; + }; + AA6E017E0477136A005F316C /* archutils */ = { + isa = PBXGroup; + children = ( + AADB4E8E04D5263200D02EE9 /* Darwin */, + AADB4E8604D50FB900D02EE9 /* Unix */, + ); + name = archutils; + path = ../src/archutils; + sourceTree = ""; + }; + AA6E01DD04771F19005F316C /* MovieTexture */ = { + isa = PBXGroup; + children = ( + AA6E01DB04771F11005F316C /* MovieTexture.cpp */, + AAB3B37704C38BF600D02EE9 /* MovieTexture.h */, + AA14ED0F0509F40000E3FAD7 /* MovieTexture_FFMpeg.cpp */, + AA14ED100509F40000E3FAD7 /* MovieTexture_FFMpeg.h */, + AAA372D00909934500141131 /* MovieTexture_Generic.cpp */, + AAA372D10909934500141131 /* MovieTexture_Generic.h */, + AAB3B39004C5921800D02EE9 /* MovieTexture_Null.cpp */, + AAB3B39104C5921800D02EE9 /* MovieTexture_Null.h */, + AAA372D20909934500141131 /* MovieTexture_Theora.cpp */, + AAA372D30909934500141131 /* MovieTexture_Theora.h */, + ); + name = MovieTexture; + sourceTree = ""; + }; + AA6EFDBB04770A83005F316C /* Rage */ = { + isa = PBXGroup; + children = ( + AA6EFD6D04770A7C005F316C /* RageBitmapTexture.cpp */, + AA6EFD6E04770A7C005F316C /* RageBitmapTexture.h */, + AA6EFD6F04770A7C005F316C /* RageDisplay.cpp */, + AA6EFD7004770A7C005F316C /* RageDisplay.h */, + EE879B5E132DEE720078FDDC /* RageDisplay_Legacy.cpp */, + EE879B5F132DEE720078FDDC /* RageDisplay_Legacy.h */, + EE879B5C132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp */, + EE879B5D132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h */, + AAF7458E061181F700B19AD1 /* RageDisplay_Null.cpp */, + AAF7458F061181F700B19AD1 /* RageDisplay_Null.h */, + AA6EFD7204770A7C005F316C /* RageException.cpp */, + AA6EFD7304770A7C005F316C /* RageException.h */, + AA272C3004CD757100D02EE9 /* RageFile.cpp */, + AA272C3104CD757100D02EE9 /* RageFile.h */, + AA0E04CE076C4CD500716D81 /* RageFileBasic.cpp */, + AA0E04CF076C4CD500716D81 /* RageFileBasic.h */, + AAB0085B057F4F7A000BBA58 /* RageFileDriver.cpp */, + AAB0085C057F4F7A000BBA58 /* RageFileDriver.h */, + AA0E04D0076C4CD500716D81 /* RageFileDriverDeflate.cpp */, + AA0E04D1076C4CD500716D81 /* RageFileDriverDeflate.h */, + AAB0085D057F4F7A000BBA58 /* RageFileDriverDirect.cpp */, + AAB0085E057F4F7A000BBA58 /* RageFileDriverDirect.h */, + AABE322205ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp */, + AABE322305ACDA52001A0E84 /* RageFileDriverDirectHelpers.h */, + AA64218606EC606F00C21584 /* RageFileDriverMemory.cpp */, + AA64218706EC606F00C21584 /* RageFileDriverMemory.h */, + 36C6887F11297FFE00453295 /* RageFileDriverReadAhead.cpp */, + 36C6888011297FFE00453295 /* RageFileDriverReadAhead.h */, + AA0E04D2076C4CD500716D81 /* RageFileDriverSlice.cpp */, + AA0E04D3076C4CD500716D81 /* RageFileDriverSlice.h */, + AACA592A07B5E23400763545 /* RageFileDriverTimeout.cpp */, + AACA592B07B5E23400763545 /* RageFileDriverTimeout.h */, + AA251B7505841FCE00027ACB /* RageFileDriverZip.cpp */, + AA251B7605841FCE00027ACB /* RageFileDriverZip.h */, + 36C6888111297FFE00453295 /* RageFileManager_ReadAhead.cpp */, + 36C6888211297FFE00453295 /* RageFileManager_ReadAhead.h */, + AA6EFD7604770A7C005F316C /* RageInputDevice.cpp */, + AA6EFD7704770A7C005F316C /* RageInputDevice.h */, + AA6EFD7A04770A7C005F316C /* RageMath.cpp */, + AA6EFD7B04770A7C005F316C /* RageMath.h */, + AAF4206905D6400800056441 /* RageModelGeometry.cpp */, + AAF4206A05D6400800056441 /* RageModelGeometry.h */, + AA6EFD7C04770A7C005F316C /* RageSound.cpp */, + AA6EFD7D04770A7C005F316C /* RageSound.h */, + AAAB2CE1072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp */, + AAAB2CE2072BD2FA00CD9FC9 /* RageSoundMixBuffer.h */, + AAD36082062BB8AE00D0CED8 /* RageSoundPosMap.cpp */, + AAD36083062BB8AE00D0CED8 /* RageSoundPosMap.h */, + AAFB549D0B1BC32700FC3A81 /* RageSoundReader.cpp */, + AA6EFD8604770A7C005F316C /* RageSoundReader.h */, + AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */, + AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */, + AA4F27AE0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp */, + AA4F27AF0B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h */, + AA909E390B45B8FA002852D3 /* RageSoundReader_Extend.cpp */, + AA909E3A0B45B8FA002852D3 /* RageSoundReader_Extend.h */, + AAFC7FF00513A67700D02EE9 /* RageSoundReader_FileReader.cpp */, + AADB4E7A04D4FE5D00D02EE9 /* RageSoundReader_FileReader.h */, + AA31D51B0B1EC6540016AB6B /* RageSoundReader_Filter.h */, + AA3396B60BDE195E00E1475F /* RageSoundReader_Merge.cpp */, + AA3396B70BDE195E00E1475F /* RageSoundReader_Merge.h */, + AAFC7FF10513A67700D02EE9 /* RageSoundReader_MP3.cpp */, + AAFC7FF20513A67700D02EE9 /* RageSoundReader_MP3.h */, + AA4F27B00B2C01B400ADEA79 /* RageSoundReader_Pan.cpp */, + AA4F27B10B2C01B400ADEA79 /* RageSoundReader_Pan.h */, + AA31D51C0B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp */, + AA31D51D0B1EC6540016AB6B /* RageSoundReader_PitchChange.h */, + AA0700880B61F177003B85BB /* RageSoundReader_PostBuffering.cpp */, + AA0700890B61F177003B85BB /* RageSoundReader_PostBuffering.h */, + AA6EFD8004770A7C005F316C /* RageSoundReader_Preload.cpp */, + AA6EFD8104770A7C005F316C /* RageSoundReader_Preload.h */, + AAAE28F4052254A900D02EE9 /* RageSoundReader_Resample_Good.cpp */, + AAAE28F5052254A900D02EE9 /* RageSoundReader_Resample_Good.h */, + AA31D51E0B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp */, + AA31D51F0B1EC6540016AB6B /* RageSoundReader_SpeedChange.h */, + AA909E3B0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.cpp */, + AA909E3C0B45B8FA002852D3 /* RageSoundReader_ThreadedBuffer.h */, + AA1C65A4050FD21F0073A143 /* RageSoundReader_Vorbisfile.cpp */, + AA1C65A5050FD21F0073A143 /* RageSoundReader_Vorbisfile.h */, + AA1C65A6050FD21F0073A143 /* RageSoundReader_WAV.cpp */, + AA1C65A7050FD21F0073A143 /* RageSoundReader_WAV.h */, + AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */, + AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */, + AA915879067D2C2C00078E36 /* RageSurface.cpp */, + AA91587A067D2C2C00078E36 /* RageSurface.h */, + AABBF6740659E78D00738526 /* RageSurface_Load.cpp */, + AABBF6750659E78D00738526 /* RageSurface_Load.h */, + AA90919F067ED43000C1FCFF /* RageSurface_Load_BMP.cpp */, + AA9091A0067ED43000C1FCFF /* RageSurface_Load_BMP.h */, + AABBF66C0659E78D00738526 /* RageSurface_Load_GIF.cpp */, + AABBF66D0659E78D00738526 /* RageSurface_Load_GIF.h */, + AABBF66E0659E78D00738526 /* RageSurface_Load_JPEG.cpp */, + AABBF66F0659E78D00738526 /* RageSurface_Load_JPEG.h */, + AABBF6700659E78D00738526 /* RageSurface_Load_PNG.cpp */, + AABBF6710659E78D00738526 /* RageSurface_Load_PNG.h */, + AABBF6720659E78D00738526 /* RageSurface_Load_XPM.cpp */, + AABBF6730659E78D00738526 /* RageSurface_Load_XPM.h */, + AA9091A3067ED46400C1FCFF /* RageSurface_Save_BMP.cpp */, + AA9091A4067ED46400C1FCFF /* RageSurface_Save_BMP.h */, + AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */, + AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */, + AAFE711C0A91B551005F2290 /* RageSurface_Save_PNG.cpp */, + AAFE71280A91B58F005F2290 /* RageSurface_Save_PNG.h */, + AAB9C8AD06EAF64400AD97CD /* RageSurfaceUtils.cpp */, + AAB9C8AE06EAF64400AD97CD /* RageSurfaceUtils.h */, + AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */, + AAEBC6C907A20AFE00793F0E /* RageSurfaceUtils_Dither.h */, + AAB9C8AB06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp */, + AAB9C8AC06EAF64400AD97CD /* RageSurfaceUtils_Palettize.h */, + AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */, + AAEBC6CB07A20AFE00793F0E /* RageSurfaceUtils_Zoom.h */, + AA6EFD8904770A7C005F316C /* RageTexture.cpp */, + AA6EFD8A04770A7C005F316C /* RageTexture.h */, + AA9EC2F0055F5126007E5098 /* RageTextureID.cpp */, + AA9EC2F1055F5126007E5098 /* RageTextureID.h */, + AA91ACAF0878BB2C00FB2F8F /* RageTexturePreloader.cpp */, + AA91ACB00878BB2C00FB2F8F /* RageTexturePreloader.h */, + AA5D16550A79805C00F17E86 /* RageTextureRenderTarget.cpp */, + AA5D16560A79805C00F17E86 /* RageTextureRenderTarget.h */, + AA6EFD8D04770A7C005F316C /* RageThreads.cpp */, + AA6EFD8E04770A7C005F316C /* RageThreads.h */, + AA6EFD8F04770A7C005F316C /* RageTimer.cpp */, + AA6EFD9004770A7C005F316C /* RageTimer.h */, + AAE77F570AC3B52500AEFC64 /* RageTypes.cpp */, + AA6EFD9104770A7C005F316C /* RageTypes.h */, + AA6EFD9204770A7C005F316C /* RageUtil.cpp */, + AA6EFD9304770A7C005F316C /* RageUtil.h */, + AACA592C07B5E23400763545 /* RageUtil_AutoPtr.h */, + AA8A404F06EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp */, + AA8A405006EEFF72002F25AB /* RageUtil_BackgroundLoader.h */, + AAB3BB570C718F2C001BF487 /* RageUtil_CachedObject.cpp */, + AAB3BB580C718F2C001BF487 /* RageUtil_CachedObject.h */, + AAC23F7E0485E68D005F316C /* RageUtil_CharConversions.cpp */, + AAC23F7F0485E68D005F316C /* RageUtil_CharConversions.h */, + AAD3D5AB05B5AB4E00014FAC /* RageUtil_CircularBuffer.h */, + AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */, + AAF580A804B3E2DC00D02EE9 /* RageUtil_FileDB.h */, + AACA592D07B5E23400763545 /* RageUtil_WorkerThread.cpp */, + AACA592E07B5E23400763545 /* RageUtil_WorkerThread.h */, + ); + name = Rage; + sourceTree = ""; + }; + AA6EFDC804770AF1005F316C /* DataStructures */ = { + isa = PBXGroup; + children = ( + AA84B7050996F8370085EECB /* AdjustSync.cpp */, + AA84B7060996F8370085EECB /* AdjustSync.h */, + AAFF5541054E736D00D02EE9 /* Attack.cpp */, + AAFF5542054E736D00D02EE9 /* Attack.h */, + AAAB2CDD072BD2EC00CD9FC9 /* AutoKeysounds.cpp */, + AAAB2CDE072BD2EC00CD9FC9 /* AutoKeysounds.h */, + AA7DA2EF085760E90057F1EA /* BackgroundUtil.cpp */, + AA7DA2F0085760E90057F1EA /* BackgroundUtil.h */, + AABE35EB04967E25005F316C /* BannerCache.cpp */, + AABE35EC04967E26005F316C /* BannerCache.h */, + AA6EFDCB04770C79005F316C /* Character.cpp */, + AA6EFDCC04770C79005F316C /* Character.h */, + AA6EFDCD04770C79005F316C /* CodeDetector.cpp */, + AA6EFDCE04770C79005F316C /* CodeDetector.h */, + AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */, + AA2C9CA00BAD6F54002441E9 /* CodeSet.h */, + AA1B08370762532800835464 /* Command.cpp */, + AA1B08380762532800835464 /* Command.h */, + AA8BD2C607C93A1E00EA04E1 /* CommonMetrics.cpp */, + AA3A705E06AA144C006F755E /* CommonMetrics.h */, + AA6EFDCF04770C79005F316C /* Course.cpp */, + AA6EFDD004770C79005F316C /* Course.h */, + AA77E74B08B64B5600FA24CA /* CourseLoaderCRS.cpp */, + AA77E74C08B64B5600FA24CA /* CourseLoaderCRS.h */, + AA5C73F70637A5F000AFB891 /* CourseUtil.cpp */, + AA5C73F80637A5F000AFB891 /* CourseUtil.h */, + AA77E74D08B64B5600FA24CA /* CourseWriterCRS.cpp */, + AA77E74E08B64B5600FA24CA /* CourseWriterCRS.h */, + AA3D793106A279530064B980 /* DateTime.cpp */, + AA3D793206A279530064B980 /* DateTime.h */, + AAD6A712065E0FDF0042165A /* Difficulty.cpp */, + AAD6A713065E0FDF0042165A /* Difficulty.h */, + AA07328B0954381800F396C5 /* DisplayResolutions.h */, + AAFAFC8E0AC8DB9F00427A6E /* EnumHelper.cpp */, + AA8F136F0624BAB200C6A467 /* EnumHelper.h */, + AAE7808506081A000034E65F /* ezsockets.cpp */, + AAE7808606081A000034E65F /* ezsockets.h */, + EE906F8812BF3C7C00146C96 /* FileDownload.cpp */, + EE906F8912BF3C7C00146C96 /* FileDownload.h */, + AA6EFDD104770C79005F316C /* Font.cpp */, + AA6EFDD204770C79005F316C /* Font.h */, + AA6EFDD304770C79005F316C /* FontCharAliases.cpp */, + AA6EFDD404770C79005F316C /* FontCharAliases.h */, + AA6EFDD504770C79005F316C /* FontCharmaps.cpp */, + AA6EFDD604770C79005F316C /* FontCharmaps.h */, + AA6EFDD704770C79005F316C /* FontManager.cpp */, + AA6EFDD804770C79005F316C /* FontManager.h */, + AA9A78A906B5C72200B03E97 /* Game.cpp */, + AA9A78AA06B5C72200B03E97 /* Game.h */, + AA1B08390762532800835464 /* GameCommand.cpp */, + AA1B083A0762532800835464 /* GameCommand.h */, + AA6EFDD904770C79005F316C /* GameConstantsAndTypes.cpp */, + AA6EFDDA04770C79005F316C /* GameConstantsAndTypes.h */, + AA6EFDDD04770C79005F316C /* GameInput.cpp */, + AA6EFDDE04770C79005F316C /* GameInput.h */, + AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */, + AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */, + AA6090E40B141D1C00B39AC4 /* GamePreferences.cpp */, + AA6090E50B141D1C00B39AC4 /* GamePreferences.h */, + AA6EFDDF04770C79005F316C /* Grade.cpp */, + AA6EFDE004770C79005F316C /* Grade.h */, + AABBD80605D8E9FC00B44FC2 /* HighScore.cpp */, + AABBD80705D8E9FC00B44FC2 /* HighScore.h */, + AACFBE3908E7D832005087FC /* InputEventPlus.h */, + EE906F8012BF3AF800146C96 /* JsonUtil.cpp */, + EE906F8112BF3AF800146C96 /* JsonUtil.h */, + AADD1CC2095C233E0088C9DF /* LocalizedString.cpp */, + AADD1CC3095C233F0088C9DF /* LocalizedString.h */, + AACFBE6108E7DBA8005087FC /* LuaExpressionTransform.cpp */, + AACFBE6208E7DBA8005087FC /* LuaExpressionTransform.h */, + AA6EFDE304770C79005F316C /* LyricsLoader.cpp */, + AA6EFDE404770C79005F316C /* LyricsLoader.h */, + AABE830D0A9524D400001678 /* ModsGroup.cpp */, + AA5A51F20A8441AA006DBB92 /* ModsGroup.h */, + AA6EFDE504770C79005F316C /* NoteData.cpp */, + AA6EFDE604770C79005F316C /* NoteData.h */, + AA4F38C004E2D0B700D02EE9 /* NoteDataUtil.cpp */, + AA4F38C104E2D0B700D02EE9 /* NoteDataUtil.h */, + AA6EFDE704770C79005F316C /* NoteDataWithScoring.cpp */, + AA6EFDE804770C79005F316C /* NoteDataWithScoring.h */, + AA6EFDFB04770C79005F316C /* NoteTypes.cpp */, + AA6EFDFC04770C79005F316C /* NoteTypes.h */, + AA80C75707F20D6600C99272 /* OptionRowHandler.cpp */, + AA80C75807F20D6600C99272 /* OptionRowHandler.h */, + AA6EFDFF04770C79005F316C /* PlayerAI.cpp */, + AA6EFE0004770C79005F316C /* PlayerAI.h */, + AA6EFE0104770C79005F316C /* PlayerNumber.cpp */, + AA6EFE0204770C79005F316C /* PlayerNumber.h */, + AA6EFE0304770C79005F316C /* PlayerOptions.cpp */, + AA6EFE0404770C79005F316C /* PlayerOptions.h */, + AA8BD2B807C939F800EA04E1 /* PlayerStageStats.cpp */, + AA8BD2B907C939F800EA04E1 /* PlayerStageStats.h */, + AA8BD2BA07C939F800EA04E1 /* PlayerState.cpp */, + AAEBC78F07A4FF5600793F0E /* PlayerState.h */, + AA1B083B0762532800835464 /* Preference.cpp */, + AA54709106F559DF008EB9B2 /* Preference.h */, + AA50201D05D6D7B200ACEFD0 /* Profile.cpp */, + AA50201E05D6D7B200ACEFD0 /* Profile.h */, + AA3D78FF06A275E90064B980 /* RadarValues.cpp */, + AA3D790006A275E90064B980 /* RadarValues.h */, + AA6E01E6047720A3005F316C /* RandomSample.cpp */, + AA6E01E7047720A3005F316C /* RandomSample.h */, + AAEBF55E0B5C517E005F3C7C /* SampleHistory.cpp */, + AAEBF55F0B5C517E005F3C7C /* SampleHistory.h */, + AAE2D6D30A67481E00071546 /* ScoreKeeper.cpp */, + AA6EFF3004770F63005F316C /* ScoreKeeper.h */, + AAB779F90B0D9CB200B74314 /* ScoreKeeperGuitar.cpp */, + AAB779FA0B0D9CB200B74314 /* ScoreKeeperGuitar.h */, + AAF34ADC0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp */, + AAF34ADD0900AEBD0006EDB7 /* ScoreKeeperNormal.h */, + AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */, + AAE443F404B0FEB700D02EE9 /* ScoreKeeperRave.h */, + AAAA11C50A662F9C00B2BD88 /* ScoreKeeperShared.cpp */, + AAAA11C40A662F9C00B2BD88 /* ScoreKeeperShared.h */, + AA6E01E20477205A005F316C /* Song.cpp */, + AA7CDD930D8395F90001DAFC /* Song.h */, + AA6EFE0704770C79005F316C /* SongOptions.cpp */, + AA6EFE0804770C79005F316C /* SongOptions.h */, + AA5C73F90637A5F000AFB891 /* SongUtil.cpp */, + AA5C73FA0637A5F000AFB891 /* SongUtil.h */, + AAEBF57C0B5C83F4005F3C7C /* SoundEffectControl.cpp */, + AAEBF57D0B5C83F4005F3C7C /* SoundEffectControl.h */, + AA6EFE0904770C79005F316C /* StageStats.cpp */, + AA6EFE0A04770C79005F316C /* StageStats.h */, + AAF430FD04DC98BC00D02EE9 /* Steps.cpp */, + AAF430FE04DC98BC00D02EE9 /* Steps.h */, + AA5C73FB0637A5F000AFB891 /* StepsUtil.cpp */, + AA5C73FC0637A5F000AFB891 /* StepsUtil.h */, + AA139C4606923EBE00C1F6ED /* Style.cpp */, + AA25200D0587225500027ACB /* Style.h */, + AA3A706006AA1645006F755E /* StyleUtil.cpp */, + AA3A706106AA1645006F755E /* StyleUtil.h */, + AA21D5A10712AE16008B825F /* ThemeMetric.h */, + AA729C420599B50D00779F33 /* TimingData.cpp */, + AA729C430599B50D00779F33 /* TimingData.h */, + AA6EFE0E04770C79005F316C /* TitleSubstitution.cpp */, + AA6EFE0F04770C79005F316C /* TitleSubstitution.h */, + AA70E3650663112800DAE1FD /* Trail.cpp */, + AA70E3660663112800DAE1FD /* Trail.h */, + AA70E3670663112800DAE1FD /* TrailUtil.cpp */, + AA70E3680663112800DAE1FD /* TrailUtil.h */, + AA07328C0954381800F396C5 /* XmlFileUtil.cpp */, + AA07328D0954381800F396C5 /* XmlFileUtil.h */, + ); + name = DataStructures; + sourceTree = ""; + }; + AA6EFE5704770C7E005F316C /* FileTypes */ = { + isa = PBXGroup; + children = ( + AA6EFE5804770CAA005F316C /* IniFile.cpp */, + AA6EFE5904770CAA005F316C /* IniFile.h */, + AA6EFE5A04770CAA005F316C /* MsdFile.cpp */, + AA6EFE5B04770CAA005F316C /* MsdFile.h */, + AAC6889905D7F3C800964E6D /* XmlFile.cpp */, + AAC6889A05D7F3C800964E6D /* XmlFile.h */, + ); + name = FileTypes; + sourceTree = ""; + }; + AA6EFE6A04770D01005F316C /* StepMania */ = { + isa = PBXGroup; + children = ( + AAFAB5CB08890B5200767BF7 /* GameLoop.cpp */, + AAFAB5CC08890B5200767BF7 /* GameLoop.h */, + AAA71EA005EE154E00D2E8FF /* global.cpp */, + AA6EFE6004770CF7005F316C /* global.h */, + AAADA4AE04E5F3DE00D02EE9 /* ProductInfo.h */, + AAFBEECF094D7FCB000029DE /* SpecialFiles.cpp */, + AAFBEED0094D7FCB000029DE /* SpecialFiles.h */, + AA6EFE6204770CF7005F316C /* StdString.h */, + AA6EFE6304770CF7005F316C /* StepMania.cpp */, + AA6EFE6404770CF7005F316C /* StepMania.h */, + ); + name = StepMania; + path = ../src; + sourceTree = ""; + }; + AA6EFE6D04770D3E005F316C /* ActorsInMenus */ = { + isa = PBXGroup; + children = ( + AA6EFE6E04770D61005F316C /* Banner.cpp */, + AA6EFE6F04770D61005F316C /* Banner.h */, + AA6EFE7604770E7C005F316C /* BPMDisplay.cpp */, + AA6EFE7704770E7C005F316C /* BPMDisplay.h */, + AAFF55210549F43A00D02EE9 /* ComboGraph.cpp */, + AAFF55220549F43A00D02EE9 /* ComboGraph.h */, + AA69995F0ACE1CBB000237F9 /* ControllerStateDisplay.cpp */, + AA6999600ACE1CBB000237F9 /* ControllerStateDisplay.h */, + AA6EFE7804770E7C005F316C /* CourseContentsList.cpp */, + AA6EFE7904770E7C005F316C /* CourseContentsList.h */, + AA6EFE7E04770E7C005F316C /* DifficultyIcon.cpp */, + AA6EFE7F04770E7C005F316C /* DifficultyIcon.h */, + AAC6DDE60569C80900B5D56F /* DifficultyList.cpp */, + AAC6DDE70569C80900B5D56F /* DifficultyList.h */, + AABE788C05912B0600E8BF50 /* DualScrollBar.cpp */, + AABE788B05912B0600E8BF50 /* DualScrollBar.h */, + AA6EFE8404770E7C005F316C /* EditMenu.cpp */, + AA6EFE8504770E7C005F316C /* EditMenu.h */, + AA6EFE8A04770E7C005F316C /* FadingBanner.cpp */, + AA6EFE8B04770E7C005F316C /* FadingBanner.h */, + AA6EFE8C04770E7C005F316C /* GradeDisplay.cpp */, + AA6EFE8D04770E7C005F316C /* GradeDisplay.h */, + AAFF551D0549F39700D02EE9 /* GraphDisplay.cpp */, + AAFF551E0549F39700D02EE9 /* GraphDisplay.h */, + AA6EFE9004770E7C005F316C /* GrooveRadar.cpp */, + AA6EFE9104770E7C005F316C /* GrooveRadar.h */, + AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */, + AA6EFE9504770E7C005F316C /* HelpDisplay.h */, + AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */, + AA729C470599B54D00779F33 /* MemoryCardDisplay.h */, + AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */, + AA6EFE9B04770E7C005F316C /* MenuTimer.h */, + AA6EFE9C04770E7C005F316C /* MeterDisplay.cpp */, + AA6EFE9D04770E7C005F316C /* MeterDisplay.h */, + AA11A20B0DC5A1B0006BD8AC /* ModIcon.cpp */, + AA11A20C0DC5A1B0006BD8AC /* ModIcon.h */, + AA11A20D0DC5A1B0006BD8AC /* ModIconRow.cpp */, + AA11A20E0DC5A1B0006BD8AC /* ModIconRow.h */, + AA6EFEA404770E7C005F316C /* MusicWheel.cpp */, + AA6EFEA504770E7C005F316C /* MusicWheel.h */, + AA6EFEA604770E7C005F316C /* MusicWheelItem.cpp */, + AA6EFEA704770E7C005F316C /* MusicWheelItem.h */, + AA8BD2B407C939A200EA04E1 /* OptionRow.cpp */, + AA8BD2B507C939A200EA04E1 /* OptionRow.h */, + AA6EFEAC04770E7C005F316C /* OptionsCursor.cpp */, + AA6EFEAD04770E7C005F316C /* OptionsCursor.h */, + AA05A0AE0BA2EFF3006F8139 /* OptionsList.cpp */, + AA05A0AF0BA2EFF3006F8139 /* OptionsList.h */, + AAC6DDDE0569C71000B5D56F /* PaneDisplay.cpp */, + AAC6DDDF0569C71000B5D56F /* PaneDisplay.h */, + AAFE711D0A91B551005F2290 /* RoomInfoDisplay.cpp */, + AAFE711E0A91B551005F2290 /* RoomInfoDisplay.h */, + AAAFE82E0835E8B100FC43E0 /* RoomWheel.cpp */, + AAAFE82F0835E8B100FC43E0 /* RoomWheel.h */, + AA6EFEAE04770E7C005F316C /* ScrollBar.cpp */, + AA6EFEAF04770E7C005F316C /* ScrollBar.h */, + AA6EFEB204770E7C005F316C /* SnapDisplay.cpp */, + AA6EFEB304770E7C005F316C /* SnapDisplay.h */, + EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */, + EEC7863E0E58208B00F559BC /* StepsDisplay.h */, + AA6EFEB404770E7C005F316C /* TextBanner.cpp */, + AA6EFEB504770E7C005F316C /* TextBanner.h */, + AA6EFF7004770F86005F316C /* Transition.cpp */, + AA6EFF7104770F86005F316C /* Transition.h */, + AAAFE81C0835E7FF00FC43E0 /* WheelBase.cpp */, + AAAFE81D0835E7FF00FC43E0 /* WheelBase.h */, + AAAFE81E0835E7FF00FC43E0 /* WheelItemBase.cpp */, + AAAFE81F0835E7FF00FC43E0 /* WheelItemBase.h */, + AA6EFEB604770E7C005F316C /* WheelNotifyIcon.cpp */, + AA6EFEB704770E7C005F316C /* WheelNotifyIcon.h */, + ); + name = ActorsInMenus; + sourceTree = ""; + }; + AA6EFEFA04770E84005F316C /* ActorsInGameplay */ = { + isa = PBXGroup; + children = ( + AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */, + AAE7812C0608249E0034E65F /* ActiveAttackList.h */, + AA6EFEFD04770F63005F316C /* ArrowEffects.cpp */, + AA6EFEFE04770F63005F316C /* ArrowEffects.h */, + AAB005F00579B8CB000BBA58 /* AttackDisplay.cpp */, + AAB005F10579B8CB000BBA58 /* AttackDisplay.h */, + AA6EFEFF04770F63005F316C /* Background.cpp */, + AA6EFF0004770F63005F316C /* Background.h */, + AAC28BB904F758E500D02EE9 /* BeginnerHelper.cpp */, + AAC28BBA04F758E500D02EE9 /* BeginnerHelper.h */, + AA9D236C0561B6CE00FC7F14 /* CombinedLifeMeter.h */, + AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */, + AAE443EC04B0F9F600D02EE9 /* CombinedLifeMeterTug.h */, + AA6EFF0704770F63005F316C /* DancingCharacters.cpp */, + AA6EFF0804770F63005F316C /* DancingCharacters.h */, + AABE321E05ACD931001A0E84 /* Foreground.cpp */, + AABE321F05ACD931001A0E84 /* Foreground.h */, + AA6EFF0D04770F63005F316C /* GhostArrowRow.cpp */, + AA6EFF0E04770F63005F316C /* GhostArrowRow.h */, + AA6EFF1504770F63005F316C /* HoldJudgment.cpp */, + AA6EFF1604770F63005F316C /* HoldJudgment.h */, + AA6EFDE104770C79005F316C /* Inventory.cpp */, + AA6EFDE204770C79005F316C /* Inventory.h */, + AA2FB638091212AF000FD574 /* LifeMeter.cpp */, + AA6EFF1A04770F63005F316C /* LifeMeter.h */, + AA6EFF1B04770F63005F316C /* LifeMeterBar.cpp */, + AA6EFF1C04770F63005F316C /* LifeMeterBar.h */, + AA6EFF1D04770F63005F316C /* LifeMeterBattery.cpp */, + AA6EFF1E04770F63005F316C /* LifeMeterBattery.h */, + AA3D5E5A08214C77002AA665 /* LifeMeterTime.cpp */, + AA3D5E5B08214C77002AA665 /* LifeMeterTime.h */, + AA6EFF1F04770F63005F316C /* LyricDisplay.cpp */, + AA6EFF2004770F63005F316C /* LyricDisplay.h */, + AA6EFF2104770F63005F316C /* NoteDisplay.cpp */, + AA6EFF2204770F63005F316C /* NoteDisplay.h */, + AA6EFF2304770F63005F316C /* NoteField.cpp */, + AA6EFF2404770F63005F316C /* NoteField.h */, + AAD620A5052EC78B00D02EE9 /* PercentageDisplay.cpp */, + AAD620A6052EC78B00D02EE9 /* PercentageDisplay.h */, + AA6EFDFD04770C79005F316C /* Player.cpp */, + AA6EFDFE04770C79005F316C /* Player.h */, + AA729C4E0599B58D00779F33 /* ReceptorArrow.cpp */, + AA729C4F0599B58D00779F33 /* ReceptorArrow.h */, + AA729C500599B58D00779F33 /* ReceptorArrowRow.cpp */, + AA729C510599B58D00779F33 /* ReceptorArrowRow.h */, + AA6EFF2504770F63005F316C /* ScoreDisplay.cpp */, + AA6EFF2604770F63005F316C /* ScoreDisplay.h */, + AA7144AF0809EEEC00545684 /* ScoreDisplayAliveTime.cpp */, + AA7144B00809EEEC00545684 /* ScoreDisplayAliveTime.h */, + AA6EFF2704770F63005F316C /* ScoreDisplayBattle.cpp */, + AA6EFF2804770F63005F316C /* ScoreDisplayBattle.h */, + AA8BD2BD07C939F800EA04E1 /* ScoreDisplayCalories.cpp */, + AA8BD2BE07C939F800EA04E1 /* ScoreDisplayCalories.h */, + AA3D5E5C08214C77002AA665 /* ScoreDisplayLifeTime.cpp */, + AA3D5E5D08214C77002AA665 /* ScoreDisplayLifeTime.h */, + AA6EFF2904770F63005F316C /* ScoreDisplayNormal.cpp */, + AA6EFF2A04770F63005F316C /* ScoreDisplayNormal.h */, + AA6EFF2B04770F63005F316C /* ScoreDisplayOni.cpp */, + AA6EFF2C04770F63005F316C /* ScoreDisplayOni.h */, + AA6DAF0805300B3D00D02EE9 /* ScoreDisplayPercentage.cpp */, + AA6DAF0905300B3D00D02EE9 /* ScoreDisplayPercentage.h */, + AA6EFF2D04770F63005F316C /* ScoreDisplayRave.cpp */, + AA6EFF2E04770F63005F316C /* ScoreDisplayRave.h */, + AA3D5E8F082152B6002AA665 /* StreamDisplay.cpp */, + AA3D5E90082152B6002AA665 /* StreamDisplay.h */, + AAE7803C0AC76A1200AEFC64 /* WorkoutGraph.cpp */, + AAE7803D0AC76A1200AEFC64 /* WorkoutGraph.h */, + ); + name = ActorsInGameplay; + sourceTree = ""; + }; + AA6EFF7404770F8B005F316C /* Actors */ = { + isa = PBXGroup; + children = ( + AA6EFF7504770FFD005F316C /* Actor.cpp */, + AA6EFF7604770FFD005F316C /* Actor.h */, + AA6EFF7704770FFD005F316C /* ActorFrame.cpp */, + AA6EFF7804770FFD005F316C /* ActorFrame.h */, + AA5D166A0A798C0E00F17E86 /* ActorFrameTexture.cpp */, + AA5D166B0A798C0E00F17E86 /* ActorFrameTexture.h */, + AA059ABA0B8CCFB5006F8139 /* ActorMultiTexture.cpp */, + AA059ABB0B8CCFB5006F8139 /* ActorMultiTexture.h */, + AAFE71090A91ADE6005F2290 /* ActorProxy.cpp */, + AAFE710A0A91ADE6005F2290 /* ActorProxy.h */, + AA6EFF7904770FFD005F316C /* ActorScroller.cpp */, + AA6EFF7A04770FFD005F316C /* ActorScroller.h */, + AACFBE2608E7D793005087FC /* ActorSound.cpp */, + AACFBE2708E7D793005087FC /* ActorSound.h */, + AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */, + AA1DC47204A485E900D02EE9 /* ActorUtil.h */, + AA8BD2AF07C9395400EA04E1 /* AutoActor.cpp */, + AA8BD2B007C9395400EA04E1 /* AutoActor.h */, + AA6EFF0104770F63005F316C /* BGAnimation.cpp */, + AA6EFF0204770F63005F316C /* BGAnimation.h */, + AA6EFF0304770F63005F316C /* BGAnimationLayer.cpp */, + AA6EFF0404770F63005F316C /* BGAnimationLayer.h */, + AA6EFFB904770FFD005F316C /* BitmapText.cpp */, + AA6EFFBA04770FFD005F316C /* BitmapText.h */, + AAF3442908F1C36A0006EDB7 /* DynamicActorScroller.cpp */, + AAF3442A08F1C36A0006EDB7 /* DynamicActorScroller.h */, + AA6EFFBD04770FFD005F316C /* Model.cpp */, + AA6EFFBE04770FFD005F316C /* Model.h */, + AA6EFFBF04770FFD005F316C /* ModelTypes.cpp */, + AA6EFFC004770FFD005F316C /* ModelTypes.h */, + AA6E6E0907F518E800C3EBB4 /* Quad.cpp */, + AA6EFFC104770FFD005F316C /* Quad.h */, + AA8BD2BB07C939F800EA04E1 /* RollingNumbers.cpp */, + AA8BD2BC07C939F800EA04E1 /* RollingNumbers.h */, + AA6EFFC204770FFD005F316C /* Sprite.cpp */, + AA6EFFC304770FFD005F316C /* Sprite.h */, + AAC0C8C00984AE3B0075FC53 /* Tween.cpp */, + AAC0C8C10984AE3B0075FC53 /* Tween.h */, + ); + name = Actors; + sourceTree = ""; + }; + AA7C8A7F0B6744F600FD9940 /* libtommath */ = { + isa = PBXGroup; + children = ( + AA7C8A800B6744F600FD9940 /* bn_error.c */, + AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */, + AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */, + AA7C8A830B6744F600FD9940 /* bn_fast_s_mp_mul_digs.c */, + AA7C8A840B6744F600FD9940 /* bn_fast_s_mp_mul_high_digs.c */, + AA7C8A850B6744F600FD9940 /* bn_fast_s_mp_sqr.c */, + AA7C8A860B6744F600FD9940 /* bn_mp_2expt.c */, + AA7C8A870B6744F600FD9940 /* bn_mp_abs.c */, + AA7C8A880B6744F600FD9940 /* bn_mp_add.c */, + AA7C8A890B6744F600FD9940 /* bn_mp_add_d.c */, + AA7C8A8A0B6744F600FD9940 /* bn_mp_addmod.c */, + AA7C8A8B0B6744F600FD9940 /* bn_mp_and.c */, + AA7C8A8C0B6744F600FD9940 /* bn_mp_clamp.c */, + AA7C8A8D0B6744F600FD9940 /* bn_mp_clear.c */, + AA7C8A8E0B6744F600FD9940 /* bn_mp_clear_multi.c */, + AA7C8A8F0B6744F600FD9940 /* bn_mp_cmp.c */, + AA7C8A900B6744F600FD9940 /* bn_mp_cmp_d.c */, + AA7C8A910B6744F600FD9940 /* bn_mp_cmp_mag.c */, + AA7C8A920B6744F600FD9940 /* bn_mp_cnt_lsb.c */, + AA7C8A930B6744F600FD9940 /* bn_mp_copy.c */, + AA7C8A940B6744F600FD9940 /* bn_mp_count_bits.c */, + AA7C8A950B6744F600FD9940 /* bn_mp_div.c */, + AA7C8A960B6744F600FD9940 /* bn_mp_div_2.c */, + AA7C8A970B6744F600FD9940 /* bn_mp_div_2d.c */, + AA7C8A980B6744F600FD9940 /* bn_mp_div_3.c */, + AA7C8A990B6744F600FD9940 /* bn_mp_div_d.c */, + AA7C8A9A0B6744F600FD9940 /* bn_mp_dr_is_modulus.c */, + AA7C8A9B0B6744F600FD9940 /* bn_mp_dr_reduce.c */, + AA7C8A9C0B6744F600FD9940 /* bn_mp_dr_setup.c */, + AA7C8A9D0B6744F600FD9940 /* bn_mp_exch.c */, + AA7C8A9E0B6744F600FD9940 /* bn_mp_expt_d.c */, + AA7C8A9F0B6744F600FD9940 /* bn_mp_exptmod.c */, + AA7C8AA00B6744F600FD9940 /* bn_mp_exptmod_fast.c */, + AA7C8AA10B6744F600FD9940 /* bn_mp_exteuclid.c */, + AA7C8AA20B6744F600FD9940 /* bn_mp_fread.c */, + AA7C8AA30B6744F600FD9940 /* bn_mp_fwrite.c */, + AA7C8AA40B6744F600FD9940 /* bn_mp_gcd.c */, + AA7C8AA50B6744F600FD9940 /* bn_mp_get_int.c */, + AA7C8AA60B6744F600FD9940 /* bn_mp_grow.c */, + AA7C8AA70B6744F600FD9940 /* bn_mp_init.c */, + AA7C8AA80B6744F600FD9940 /* bn_mp_init_copy.c */, + AA7C8AA90B6744F600FD9940 /* bn_mp_init_multi.c */, + AA7C8AAA0B6744F600FD9940 /* bn_mp_init_set.c */, + AA7C8AAB0B6744F600FD9940 /* bn_mp_init_set_int.c */, + AA7C8AAC0B6744F600FD9940 /* bn_mp_init_size.c */, + AA7C8AAD0B6744F600FD9940 /* bn_mp_invmod.c */, + AA7C8AAE0B6744F600FD9940 /* bn_mp_invmod_slow.c */, + AA7C8AAF0B6744F600FD9940 /* bn_mp_is_square.c */, + AA7C8AB00B6744F600FD9940 /* bn_mp_jacobi.c */, + AA7C8AB10B6744F600FD9940 /* bn_mp_karatsuba_mul.c */, + AA7C8AB20B6744F600FD9940 /* bn_mp_karatsuba_sqr.c */, + AA7C8AB30B6744F600FD9940 /* bn_mp_lcm.c */, + AA7C8AB40B6744F700FD9940 /* bn_mp_lshd.c */, + AA7C8AB50B6744F700FD9940 /* bn_mp_mod.c */, + AA7C8AB60B6744F700FD9940 /* bn_mp_mod_2d.c */, + AA7C8AB70B6744F700FD9940 /* bn_mp_mod_d.c */, + AA7C8AB80B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c */, + AA7C8AB90B6744F700FD9940 /* bn_mp_montgomery_reduce.c */, + AA7C8ABA0B6744F700FD9940 /* bn_mp_montgomery_setup.c */, + AA7C8ABB0B6744F700FD9940 /* bn_mp_mul.c */, + AA7C8ABC0B6744F700FD9940 /* bn_mp_mul_2.c */, + AA7C8ABD0B6744F700FD9940 /* bn_mp_mul_2d.c */, + AA7C8ABE0B6744F700FD9940 /* bn_mp_mul_d.c */, + AA7C8ABF0B6744F700FD9940 /* bn_mp_mulmod.c */, + AA7C8AC00B6744F700FD9940 /* bn_mp_n_root.c */, + AA7C8AC10B6744F700FD9940 /* bn_mp_neg.c */, + AA7C8AC20B6744F700FD9940 /* bn_mp_or.c */, + AA7C8AC30B6744F700FD9940 /* bn_mp_prime_fermat.c */, + AA7C8AC40B6744F700FD9940 /* bn_mp_prime_is_divisible.c */, + AA7C8AC50B6744F700FD9940 /* bn_mp_prime_is_prime.c */, + AA7C8AC60B6744F700FD9940 /* bn_mp_prime_miller_rabin.c */, + AA7C8AC70B6744F700FD9940 /* bn_mp_prime_next_prime.c */, + AA7C8AC80B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c */, + AA7C8AC90B6744F700FD9940 /* bn_mp_prime_random_ex.c */, + AA7C8ACA0B6744F700FD9940 /* bn_mp_radix_size.c */, + AA7C8ACB0B6744F700FD9940 /* bn_mp_radix_smap.c */, + AA7C8ACC0B6744F700FD9940 /* bn_mp_rand.c */, + AA7C8ACD0B6744F700FD9940 /* bn_mp_read_radix.c */, + AA7C8ACE0B6744F700FD9940 /* bn_mp_read_signed_bin.c */, + AA7C8ACF0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c */, + AA7C8AD00B6744F700FD9940 /* bn_mp_reduce.c */, + AA7C8AD10B6744F700FD9940 /* bn_mp_reduce_2k.c */, + AA7C8AD20B6744F700FD9940 /* bn_mp_reduce_2k_l.c */, + AA7C8AD30B6744F700FD9940 /* bn_mp_reduce_2k_setup.c */, + AA7C8AD40B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c */, + AA7C8AD50B6744F700FD9940 /* bn_mp_reduce_is_2k.c */, + AA7C8AD60B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c */, + AA7C8AD70B6744F700FD9940 /* bn_mp_reduce_setup.c */, + AA7C8AD80B6744F700FD9940 /* bn_mp_rshd.c */, + AA7C8AD90B6744F700FD9940 /* bn_mp_set.c */, + AA7C8ADA0B6744F700FD9940 /* bn_mp_set_int.c */, + AA7C8ADB0B6744F700FD9940 /* bn_mp_shrink.c */, + AA7C8ADC0B6744F700FD9940 /* bn_mp_signed_bin_size.c */, + AA7C8ADD0B6744F700FD9940 /* bn_mp_sqr.c */, + AA7C8ADE0B6744F700FD9940 /* bn_mp_sqrmod.c */, + AA7C8ADF0B6744F700FD9940 /* bn_mp_sqrt.c */, + AA7C8AE00B6744F700FD9940 /* bn_mp_sub.c */, + AA7C8AE10B6744F700FD9940 /* bn_mp_sub_d.c */, + AA7C8AE20B6744F700FD9940 /* bn_mp_submod.c */, + AA7C8AE30B6744F700FD9940 /* bn_mp_to_signed_bin.c */, + AA7C8AE40B6744F700FD9940 /* bn_mp_to_signed_bin_n.c */, + AA7C8AE50B6744F700FD9940 /* bn_mp_to_unsigned_bin.c */, + AA7C8AE60B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c */, + AA7C8AE70B6744F700FD9940 /* bn_mp_toom_mul.c */, + AA7C8AE80B6744F700FD9940 /* bn_mp_toom_sqr.c */, + AA7C8AE90B6744F700FD9940 /* bn_mp_toradix.c */, + AA7C8AEA0B6744F700FD9940 /* bn_mp_toradix_n.c */, + AA7C8AEB0B6744F700FD9940 /* bn_mp_unsigned_bin_size.c */, + AA7C8AEC0B6744F700FD9940 /* bn_mp_xor.c */, + AA7C8AED0B6744F700FD9940 /* bn_mp_zero.c */, + AA7C8AEE0B6744F700FD9940 /* bn_prime_tab.c */, + AA7C8AEF0B6744F700FD9940 /* bn_reverse.c */, + AA7C8AF00B6744F700FD9940 /* bn_s_mp_add.c */, + AA7C8AF10B6744F700FD9940 /* bn_s_mp_exptmod.c */, + AA7C8AF20B6744F700FD9940 /* bn_s_mp_mul_digs.c */, + AA7C8AF30B6744F700FD9940 /* bn_s_mp_mul_high_digs.c */, + AA7C8AF40B6744F700FD9940 /* bn_s_mp_sqr.c */, + AA7C8AF50B6744F700FD9940 /* bn_s_mp_sub.c */, + AA7C8AF60B6744F700FD9940 /* bncore.c */, + AA7C8AF90B6744F700FD9940 /* tommath.h */, + AA7C8AFA0B6744F700FD9940 /* tommath_class.h */, + AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */, + ); + name = libtommath; + path = ../src/libtommath; + sourceTree = ""; + }; + AA7C8B920B67467C00FD9940 /* libtomcrypt */ = { + isa = PBXGroup; + children = ( + AA7C8B930B67467C00FD9940 /* ciphers */, + AA7C8B970B67467C00FD9940 /* hashes */, + AA7C8B9C0B67467C00FD9940 /* headers */, + AA7C8BAA0B67467C00FD9940 /* math */, + AA7C8BB00B67467C00FD9940 /* misc */, + AA7C8BD30B67467C00FD9940 /* modes */, + AA7C8BF60B67467C00FD9940 /* pk */, + AA7C8C4D0B67467D00FD9940 /* prngs */, + ); + name = libtomcrypt; + path = ../src/libtomcrypt/src; + sourceTree = ""; + }; + AA7C8B930B67467C00FD9940 /* ciphers */ = { + isa = PBXGroup; + children = ( + AA7C8B940B67467C00FD9940 /* aes */, + ); + path = ciphers; + sourceTree = ""; + }; + AA7C8B940B67467C00FD9940 /* aes */ = { + isa = PBXGroup; + children = ( + AA7C8B950B67467C00FD9940 /* aes.c */, + AA7C8B960B67467C00FD9940 /* aes_tab.c */, + ); + path = aes; + sourceTree = ""; + }; + AA7C8B970B67467C00FD9940 /* hashes */ = { + isa = PBXGroup; + children = ( + AA7C8B980B67467C00FD9940 /* helper */, + AA7C8B9A0B67467C00FD9940 /* md5.c */, + AA7C8B9B0B67467C00FD9940 /* sha1.c */, + ); + path = hashes; + sourceTree = ""; + }; + AA7C8B980B67467C00FD9940 /* helper */ = { + isa = PBXGroup; + children = ( + AA7C8B990B67467C00FD9940 /* hash_memory.c */, + ); + path = helper; + sourceTree = ""; + }; + AA7C8B9C0B67467C00FD9940 /* headers */ = { + isa = PBXGroup; + children = ( + AA7C8B9D0B67467C00FD9940 /* tomcrypt.h */, + AA7C8B9E0B67467C00FD9940 /* tomcrypt_argchk.h */, + AA7C8B9F0B67467C00FD9940 /* tomcrypt_cfg.h */, + AA7C8BA00B67467C00FD9940 /* tomcrypt_cipher.h */, + AA7C8BA10B67467C00FD9940 /* tomcrypt_custom.h */, + AA7C8BA20B67467C00FD9940 /* tomcrypt_hash.h */, + AA7C8BA30B67467C00FD9940 /* tomcrypt_mac.h */, + AA7C8BA40B67467C00FD9940 /* tomcrypt_macros.h */, + AA7C8BA50B67467C00FD9940 /* tomcrypt_math.h */, + AA7C8BA60B67467C00FD9940 /* tomcrypt_misc.h */, + AA7C8BA70B67467C00FD9940 /* tomcrypt_pk.h */, + AA7C8BA80B67467C00FD9940 /* tomcrypt_pkcs.h */, + AA7C8BA90B67467C00FD9940 /* tomcrypt_prng.h */, + ); + path = headers; + sourceTree = ""; + }; + AA7C8BAA0B67467C00FD9940 /* math */ = { + isa = PBXGroup; + children = ( + AA7C8BAB0B67467C00FD9940 /* fp */, + AA7C8BAD0B67467C00FD9940 /* ltm_desc.c */, + AA7C8BAE0B67467C00FD9940 /* multi.c */, + AA7C8BAF0B67467C00FD9940 /* rand_prime.c */, + ); + path = math; + sourceTree = ""; + }; + AA7C8BAB0B67467C00FD9940 /* fp */ = { + isa = PBXGroup; + children = ( + AA7C8BAC0B67467C00FD9940 /* ltc_ecc_fp_mulmod.c */, + ); + path = fp; + sourceTree = ""; + }; + AA7C8BB00B67467C00FD9940 /* misc */ = { + isa = PBXGroup; + children = ( + AA7C8BB10B67467C00FD9940 /* base64 */, + AA7C8BB40B67467C00FD9940 /* burn_stack.c */, + AA7C8BB50B67467C00FD9940 /* crypt */, + AA7C8BCE0B67467C00FD9940 /* error_to_string.c */, + AA7C8BCF0B67467C00FD9940 /* pkcs5 */, + AA7C8BD20B67467C00FD9940 /* zeromem.c */, + ); + path = misc; + sourceTree = ""; + }; + AA7C8BB10B67467C00FD9940 /* base64 */ = { + isa = PBXGroup; + children = ( + AA7C8BB20B67467C00FD9940 /* base64_decode.c */, + AA7C8BB30B67467C00FD9940 /* base64_encode.c */, + ); + path = base64; + sourceTree = ""; + }; + AA7C8BB50B67467C00FD9940 /* crypt */ = { + isa = PBXGroup; + children = ( + AA7C8BB60B67467C00FD9940 /* crypt.c */, + AA7C8BB70B67467C00FD9940 /* crypt_argchk.c */, + AA7C8BB80B67467C00FD9940 /* crypt_cipher_descriptor.c */, + AA7C8BB90B67467C00FD9940 /* crypt_cipher_is_valid.c */, + AA7C8BBA0B67467C00FD9940 /* crypt_find_cipher.c */, + AA7C8BBB0B67467C00FD9940 /* crypt_find_cipher_any.c */, + AA7C8BBC0B67467C00FD9940 /* crypt_find_cipher_id.c */, + AA7C8BBD0B67467C00FD9940 /* crypt_find_hash.c */, + AA7C8BBE0B67467C00FD9940 /* crypt_find_hash_any.c */, + AA7C8BBF0B67467C00FD9940 /* crypt_find_hash_id.c */, + AA7C8BC00B67467C00FD9940 /* crypt_find_hash_oid.c */, + AA7C8BC10B67467C00FD9940 /* crypt_find_prng.c */, + AA7C8BC20B67467C00FD9940 /* crypt_fsa.c */, + AA7C8BC30B67467C00FD9940 /* crypt_hash_descriptor.c */, + AA7C8BC40B67467C00FD9940 /* crypt_hash_is_valid.c */, + AA7C8BC50B67467C00FD9940 /* crypt_ltc_mp_descriptor.c */, + AA7C8BC60B67467C00FD9940 /* crypt_prng_descriptor.c */, + AA7C8BC70B67467C00FD9940 /* crypt_prng_is_valid.c */, + AA7C8BC80B67467C00FD9940 /* crypt_register_cipher.c */, + AA7C8BC90B67467C00FD9940 /* crypt_register_hash.c */, + AA7C8BCA0B67467C00FD9940 /* crypt_register_prng.c */, + AA7C8BCB0B67467C00FD9940 /* crypt_unregister_cipher.c */, + AA7C8BCC0B67467C00FD9940 /* crypt_unregister_hash.c */, + AA7C8BCD0B67467C00FD9940 /* crypt_unregister_prng.c */, + ); + path = crypt; + sourceTree = ""; + }; + AA7C8BCF0B67467C00FD9940 /* pkcs5 */ = { + isa = PBXGroup; + children = ( + AA7C8BD00B67467C00FD9940 /* pkcs_5_1.c */, + AA7C8BD10B67467C00FD9940 /* pkcs_5_2.c */, + ); + path = pkcs5; + sourceTree = ""; + }; + AA7C8BD30B67467C00FD9940 /* modes */ = { + isa = PBXGroup; + children = ( + AA7C8BD40B67467C00FD9940 /* cbc */, + AA7C8BDB0B67467C00FD9940 /* cfb */, + AA7C8BE20B67467C00FD9940 /* ctr */, + AA7C8BEA0B67467C00FD9940 /* ecb */, + AA7C8BEF0B67467C00FD9940 /* ofb */, + ); + path = modes; + sourceTree = ""; + }; + AA7C8BD40B67467C00FD9940 /* cbc */ = { + isa = PBXGroup; + children = ( + AA7C8BD50B67467C00FD9940 /* cbc_decrypt.c */, + AA7C8BD60B67467C00FD9940 /* cbc_done.c */, + AA7C8BD70B67467C00FD9940 /* cbc_encrypt.c */, + AA7C8BD80B67467C00FD9940 /* cbc_getiv.c */, + AA7C8BD90B67467C00FD9940 /* cbc_setiv.c */, + AA7C8BDA0B67467C00FD9940 /* cbc_start.c */, + ); + path = cbc; + sourceTree = ""; + }; + AA7C8BDB0B67467C00FD9940 /* cfb */ = { + isa = PBXGroup; + children = ( + AA7C8BDC0B67467C00FD9940 /* cfb_decrypt.c */, + AA7C8BDD0B67467C00FD9940 /* cfb_done.c */, + AA7C8BDE0B67467C00FD9940 /* cfb_encrypt.c */, + AA7C8BDF0B67467C00FD9940 /* cfb_getiv.c */, + AA7C8BE00B67467C00FD9940 /* cfb_setiv.c */, + AA7C8BE10B67467C00FD9940 /* cfb_start.c */, + ); + path = cfb; + sourceTree = ""; + }; + AA7C8BE20B67467C00FD9940 /* ctr */ = { + isa = PBXGroup; + children = ( + AA7C8BE30B67467C00FD9940 /* ctr_decrypt.c */, + AA7C8BE40B67467C00FD9940 /* ctr_done.c */, + AA7C8BE50B67467C00FD9940 /* ctr_encrypt.c */, + AA7C8BE60B67467C00FD9940 /* ctr_getiv.c */, + AA7C8BE70B67467C00FD9940 /* ctr_setiv.c */, + AA7C8BE80B67467C00FD9940 /* ctr_start.c */, + AA7C8BE90B67467C00FD9940 /* ctr_test.c */, + ); + path = ctr; + sourceTree = ""; + }; + AA7C8BEA0B67467C00FD9940 /* ecb */ = { + isa = PBXGroup; + children = ( + AA7C8BEB0B67467C00FD9940 /* ecb_decrypt.c */, + AA7C8BEC0B67467C00FD9940 /* ecb_done.c */, + AA7C8BED0B67467C00FD9940 /* ecb_encrypt.c */, + AA7C8BEE0B67467C00FD9940 /* ecb_start.c */, + ); + path = ecb; + sourceTree = ""; + }; + AA7C8BEF0B67467C00FD9940 /* ofb */ = { + isa = PBXGroup; + children = ( + AA7C8BF00B67467C00FD9940 /* ofb_decrypt.c */, + AA7C8BF10B67467C00FD9940 /* ofb_done.c */, + AA7C8BF20B67467C00FD9940 /* ofb_encrypt.c */, + AA7C8BF30B67467C00FD9940 /* ofb_getiv.c */, + AA7C8BF40B67467C00FD9940 /* ofb_setiv.c */, + AA7C8BF50B67467C00FD9940 /* ofb_start.c */, + ); + path = ofb; + sourceTree = ""; + }; + AA7C8BF60B67467C00FD9940 /* pk */ = { + isa = PBXGroup; + children = ( + AA7C8BF70B67467C00FD9940 /* asn1 */, + AA7C8C2E0B67467D00FD9940 /* dsa */, + AA7C8C390B67467D00FD9940 /* pkcs1 */, + AA7C8C430B67467D00FD9940 /* rsa */, + ); + path = pk; + sourceTree = ""; + }; + AA7C8BF70B67467C00FD9940 /* asn1 */ = { + isa = PBXGroup; + children = ( + AA7C8BF80B67467C00FD9940 /* der */, + ); + path = asn1; + sourceTree = ""; + }; + AA7C8BF80B67467C00FD9940 /* der */ = { + isa = PBXGroup; + children = ( + AA7C8BF90B67467C00FD9940 /* bit */, + AA7C8BFD0B67467C00FD9940 /* boolean */, + AA7C8C010B67467C00FD9940 /* choice */, + AA7C8C030B67467C00FD9940 /* ia5 */, + AA7C8C070B67467D00FD9940 /* integer */, + AA7C8C0B0B67467D00FD9940 /* object_identifier */, + AA7C8C0F0B67467D00FD9940 /* octet */, + AA7C8C130B67467D00FD9940 /* printable_string */, + AA7C8C170B67467D00FD9940 /* sequence */, + AA7C8C1F0B67467D00FD9940 /* set */, + AA7C8C220B67467D00FD9940 /* short_integer */, + AA7C8C260B67467D00FD9940 /* utctime */, + AA7C8C2A0B67467D00FD9940 /* utf8 */, + ); + path = der; + sourceTree = ""; + }; + AA7C8BF90B67467C00FD9940 /* bit */ = { + isa = PBXGroup; + children = ( + AA7C8BFA0B67467C00FD9940 /* der_decode_bit_string.c */, + AA7C8BFB0B67467C00FD9940 /* der_encode_bit_string.c */, + AA7C8BFC0B67467C00FD9940 /* der_length_bit_string.c */, + ); + path = bit; + sourceTree = ""; + }; + AA7C8BFD0B67467C00FD9940 /* boolean */ = { + isa = PBXGroup; + children = ( + AA7C8BFE0B67467C00FD9940 /* der_decode_boolean.c */, + AA7C8BFF0B67467C00FD9940 /* der_encode_boolean.c */, + AA7C8C000B67467C00FD9940 /* der_length_boolean.c */, + ); + path = boolean; + sourceTree = ""; + }; + AA7C8C010B67467C00FD9940 /* choice */ = { + isa = PBXGroup; + children = ( + AA7C8C020B67467C00FD9940 /* der_decode_choice.c */, + ); + path = choice; + sourceTree = ""; + }; + AA7C8C030B67467C00FD9940 /* ia5 */ = { + isa = PBXGroup; + children = ( + AA7C8C040B67467C00FD9940 /* der_decode_ia5_string.c */, + AA7C8C050B67467D00FD9940 /* der_encode_ia5_string.c */, + AA7C8C060B67467D00FD9940 /* der_length_ia5_string.c */, + ); + path = ia5; + sourceTree = ""; + }; + AA7C8C070B67467D00FD9940 /* integer */ = { + isa = PBXGroup; + children = ( + AA7C8C080B67467D00FD9940 /* der_decode_integer.c */, + AA7C8C090B67467D00FD9940 /* der_encode_integer.c */, + AA7C8C0A0B67467D00FD9940 /* der_length_integer.c */, + ); + path = integer; + sourceTree = ""; + }; + AA7C8C0B0B67467D00FD9940 /* object_identifier */ = { + isa = PBXGroup; + children = ( + AA7C8C0C0B67467D00FD9940 /* der_decode_object_identifier.c */, + AA7C8C0D0B67467D00FD9940 /* der_encode_object_identifier.c */, + AA7C8C0E0B67467D00FD9940 /* der_length_object_identifier.c */, + ); + path = object_identifier; + sourceTree = ""; + }; + AA7C8C0F0B67467D00FD9940 /* octet */ = { + isa = PBXGroup; + children = ( + AA7C8C100B67467D00FD9940 /* der_decode_octet_string.c */, + AA7C8C110B67467D00FD9940 /* der_encode_octet_string.c */, + AA7C8C120B67467D00FD9940 /* der_length_octet_string.c */, + ); + path = octet; + sourceTree = ""; + }; + AA7C8C130B67467D00FD9940 /* printable_string */ = { + isa = PBXGroup; + children = ( + AA7C8C140B67467D00FD9940 /* der_decode_printable_string.c */, + AA7C8C150B67467D00FD9940 /* der_encode_printable_string.c */, + AA7C8C160B67467D00FD9940 /* der_length_printable_string.c */, + ); + path = printable_string; + sourceTree = ""; + }; + AA7C8C170B67467D00FD9940 /* sequence */ = { + isa = PBXGroup; + children = ( + AA7C8C180B67467D00FD9940 /* der_decode_sequence_ex.c */, + AA7C8C190B67467D00FD9940 /* der_decode_sequence_flexi.c */, + AA7C8C1A0B67467D00FD9940 /* der_decode_sequence_multi.c */, + AA7C8C1B0B67467D00FD9940 /* der_encode_sequence_ex.c */, + AA7C8C1C0B67467D00FD9940 /* der_encode_sequence_multi.c */, + AA7C8C1D0B67467D00FD9940 /* der_length_sequence.c */, + AA7C8C1E0B67467D00FD9940 /* der_sequence_free.c */, + ); + path = sequence; + sourceTree = ""; + }; + AA7C8C1F0B67467D00FD9940 /* set */ = { + isa = PBXGroup; + children = ( + AA7C8C200B67467D00FD9940 /* der_encode_set.c */, + AA7C8C210B67467D00FD9940 /* der_encode_setof.c */, + ); + path = set; + sourceTree = ""; + }; + AA7C8C220B67467D00FD9940 /* short_integer */ = { + isa = PBXGroup; + children = ( + AA7C8C230B67467D00FD9940 /* der_decode_short_integer.c */, + AA7C8C240B67467D00FD9940 /* der_encode_short_integer.c */, + AA7C8C250B67467D00FD9940 /* der_length_short_integer.c */, + ); + path = short_integer; + sourceTree = ""; + }; + AA7C8C260B67467D00FD9940 /* utctime */ = { + isa = PBXGroup; + children = ( + AA7C8C270B67467D00FD9940 /* der_decode_utctime.c */, + AA7C8C280B67467D00FD9940 /* der_encode_utctime.c */, + AA7C8C290B67467D00FD9940 /* der_length_utctime.c */, + ); + path = utctime; + sourceTree = ""; + }; + AA7C8C2A0B67467D00FD9940 /* utf8 */ = { + isa = PBXGroup; + children = ( + AA7C8C2B0B67467D00FD9940 /* der_decode_utf8_string.c */, + AA7C8C2C0B67467D00FD9940 /* der_encode_utf8_string.c */, + AA7C8C2D0B67467D00FD9940 /* der_length_utf8_string.c */, + ); + path = utf8; + sourceTree = ""; + }; + AA7C8C2E0B67467D00FD9940 /* dsa */ = { + isa = PBXGroup; + children = ( + AA7C8C2F0B67467D00FD9940 /* dsa_decrypt_key.c */, + AA7C8C300B67467D00FD9940 /* dsa_encrypt_key.c */, + AA7C8C310B67467D00FD9940 /* dsa_export.c */, + AA7C8C320B67467D00FD9940 /* dsa_free.c */, + AA7C8C330B67467D00FD9940 /* dsa_import.c */, + AA7C8C340B67467D00FD9940 /* dsa_make_key.c */, + AA7C8C350B67467D00FD9940 /* dsa_shared_secret.c */, + AA7C8C360B67467D00FD9940 /* dsa_sign_hash.c */, + AA7C8C370B67467D00FD9940 /* dsa_verify_hash.c */, + AA7C8C380B67467D00FD9940 /* dsa_verify_key.c */, + ); + path = dsa; + sourceTree = ""; + }; + AA7C8C390B67467D00FD9940 /* pkcs1 */ = { + isa = PBXGroup; + children = ( + AA7C8C3A0B67467D00FD9940 /* pkcs_1_i2osp.c */, + AA7C8C3B0B67467D00FD9940 /* pkcs_1_mgf1.c */, + AA7C8C3C0B67467D00FD9940 /* pkcs_1_oaep_decode.c */, + AA7C8C3D0B67467D00FD9940 /* pkcs_1_oaep_encode.c */, + AA7C8C3E0B67467D00FD9940 /* pkcs_1_os2ip.c */, + AA7C8C3F0B67467D00FD9940 /* pkcs_1_pss_decode.c */, + AA7C8C400B67467D00FD9940 /* pkcs_1_pss_encode.c */, + AA7C8C410B67467D00FD9940 /* pkcs_1_v1_5_decode.c */, + AA7C8C420B67467D00FD9940 /* pkcs_1_v1_5_encode.c */, + ); + path = pkcs1; + sourceTree = ""; + }; + AA7C8C430B67467D00FD9940 /* rsa */ = { + isa = PBXGroup; + children = ( + AA7C8C440B67467D00FD9940 /* rsa_decrypt_key.c */, + AA7C8C450B67467D00FD9940 /* rsa_encrypt_key.c */, + AA7C8C460B67467D00FD9940 /* rsa_export.c */, + AA7C8C470B67467D00FD9940 /* rsa_exptmod.c */, + AA7C8C480B67467D00FD9940 /* rsa_free.c */, + AA7C8C490B67467D00FD9940 /* rsa_import.c */, + AA7C8C4A0B67467D00FD9940 /* rsa_make_key.c */, + AA7C8C4B0B67467D00FD9940 /* rsa_sign_hash.c */, + AA7C8C4C0B67467D00FD9940 /* rsa_verify_hash.c */, + ); + path = rsa; + sourceTree = ""; + }; + AA7C8C4D0B67467D00FD9940 /* prngs */ = { + isa = PBXGroup; + children = ( + AA7C8C4E0B67467D00FD9940 /* fortuna.c */, + AA7C8C4F0B67467D00FD9940 /* rc4.c */, + AA7C8C500B67467D00FD9940 /* rng_get_bytes.c */, + AA7C8C510B67467D00FD9940 /* rng_make_prng.c */, + AA7C8C520B67467D00FD9940 /* sober128.c */, + AA7C8C530B67467D00FD9940 /* sober128tab.c */, + AA7C8C540B67467D00FD9940 /* sprng.c */, + AA7C8C550B67467D00FD9940 /* yarrow.c */, + ); + path = prngs; + sourceTree = ""; + }; + AA8B6C7804AFD82B00D02EE9 /* pcre */ = { + isa = PBXGroup; + children = ( + AA8B6C7904AFD87300D02EE9 /* chartables.c */, + AA8B6C7A04AFD87300D02EE9 /* get.c */, + AA8B6C7B04AFD87300D02EE9 /* internal.h */, + AA8B6C7C04AFD87300D02EE9 /* maketables.c */, + AA8B6C7D04AFD87300D02EE9 /* pcre.c */, + AA8B6C7E04AFD87300D02EE9 /* pcre.h */, + AA8B6C7F04AFD87300D02EE9 /* study.c */, + ); + name = pcre; + path = ../extern/pcre; + sourceTree = ""; + }; + AAA070B20CE7B3AD005A3060 /* mad-0.15.1b */ = { + isa = PBXGroup; + children = ( + AAA070B40CE7B3AD005A3060 /* bit.c */, + AAA070B50CE7B3AD005A3060 /* bit.h */, + AAA070C00CE7B3AD005A3060 /* decoder.c */, + AAA070C10CE7B3AD005A3060 /* decoder.h */, + AAA070C30CE7B3AD005A3060 /* fixed.c */, + AAA070C40CE7B3AD005A3060 /* fixed.h */, + AAA070C50CE7B3AD005A3060 /* frame.c */, + AAA070C60CE7B3AD005A3060 /* frame.h */, + AAA070C70CE7B3AD005A3060 /* global.h */, + AAA070C80CE7B3AD005A3060 /* huffman.c */, + AAA070C90CE7B3AD005A3060 /* huffman.h */, + AAA070CE0CE7B3AD005A3060 /* layer12.c */, + AAA070CF0CE7B3AD005A3060 /* layer12.h */, + AAA070D00CE7B3AD005A3060 /* layer3.c */, + AAA070D10CE7B3AD005A3060 /* layer3.h */, + AAA070D40CE7B3AD005A3060 /* mad.h */, + AAA070E80CE7B3AD005A3060 /* stream.c */, + AAA070E90CE7B3AD005A3060 /* stream.h */, + AAA070EA0CE7B3AD005A3060 /* synth.c */, + AAA070EB0CE7B3AD005A3060 /* synth.h */, + AAA070EC0CE7B3AD005A3060 /* timer.c */, + AAA070ED0CE7B3AD005A3060 /* timer.h */, + AAA070F00CE7B3AE005A3060 /* version.c */, + AAA070F10CE7B3AE005A3060 /* version.h */, + ); + name = "mad-0.15.1b"; + path = "../extern/mad-0.15.1b"; + sourceTree = ""; + }; + AAA3741C09099ADA00141131 /* Libraries */ = { + isa = PBXGroup; + children = ( + AAA0704D0CE5082D005A3060 /* libffmpeg_link.a */, + AA21E4730A9826CD00684CEA /* libjpeg_link.a */, + AA21E4750A9826CD00684CEA /* libogg_link.a */, + AA21E4760A9826CD00684CEA /* libpng_link.a */, + AA21E4770A9826CD00684CEA /* libtheora_link.a */, + AA21E4780A9826CD00684CEA /* libvorbis_link.a */, + AA059E2A0B8F0C66006F8139 /* libz_link.a */, + ); + path = Libraries; + sourceTree = ""; + }; + AABE36FE0497CE67005F316C /* ArchHooks */ = { + isa = PBXGroup; + children = ( + AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */, + AABE36FC0497CE44005F316C /* ArchHooks.h */, + AA6C6AD60DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp */, + AA6C6AD70DC6B17B00E7A13E /* ArchHooks_MacOSX.h */, + ); + name = ArchHooks; + sourceTree = ""; + }; + AABE78720591287100E8BF50 /* MemoryCard */ = { + isa = PBXGroup; + children = ( + AAC9F332069E22CF00D53E2C /* MemoryCardDriver.cpp */, + AAC9F333069E22CF00D53E2C /* MemoryCardDriver.h */, + AABE78760591287100E8BF50 /* MemoryCardDriver_Null.h */, + AA6C6B060DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp */, + AA6C6B070DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h */, + ); + path = MemoryCard; + sourceTree = ""; + }; + AAC6DCED0567663800B5D56F /* Lights */ = { + isa = PBXGroup; + children = ( + AA909E480B45B93E002852D3 /* LightsDriver.cpp */, + AAC6DCEE0567663800B5D56F /* LightsDriver.h */, + AAB691F205704FA50078BED4 /* LightsDriver_SystemMessage.cpp */, + AAB691F305704FA50078BED4 /* LightsDriver_SystemMessage.h */, + ); + path = Lights; + sourceTree = ""; + }; + AAD675EE06795175006002B0 /* Dialog */ = { + isa = PBXGroup; + children = ( + AAD675EF06795175006002B0 /* Dialog.cpp */, + AAD675F006795175006002B0 /* Dialog.h */, + AA608EBF0B0F85E400B39AC4 /* DialogDriver.cpp */, + AAD675F106795175006002B0 /* DialogDriver.h */, + AA6C6ADC0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp */, + AA6C6ADD0DC6B1DC00E7A13E /* DialogDriver_MacOSX.h */, + ); + path = Dialog; + sourceTree = ""; + }; + AADB4E8604D50FB900D02EE9 /* Unix */ = { + isa = PBXGroup; + children = ( + AAED6F280601C528002D2DEE /* Backtrace.cpp */, + AAED6F290601C528002D2DEE /* Backtrace.h */, + AAED6F2A0601C528002D2DEE /* BacktraceNames.cpp */, + AAED6F2B0601C528002D2DEE /* BacktraceNames.h */, + AA76D15404D9D2D200D02EE9 /* CrashHandler.cpp */, + AADB4E8804D50FB900D02EE9 /* CrashHandler.h */, + AA76D15504D9D2D200D02EE9 /* CrashHandlerChild.cpp */, + AADB4E8A04D50FB900D02EE9 /* CrashHandlerInternal.h */, + AADB4E8B04D50FB900D02EE9 /* SignalHandler.cpp */, + AADB4E8C04D50FB900D02EE9 /* SignalHandler.h */, + AA3E3DF009D96A1400A259C7 /* CrashHandlerInternal.cpp */, + ); + path = Unix; + sourceTree = ""; + }; + AADB4E8E04D5263200D02EE9 /* Darwin */ = { + isa = PBXGroup; + children = ( + AADB4E8F04D5263200D02EE9 /* arch_setup.h */, + AAEDFD680A03762B00590617 /* Crash.cpp */, + AADB4F5904D9220700D02EE9 /* Crash.h */, + AA8A3E6306EDCD11002F25AB /* DarwinThreadHelpers.cpp */, + AA8A3EC806EDDAE4002F25AB /* DarwinThreadHelpers.h */, + AA44705309846B0800983E82 /* HIDDevice.cpp */, + AA44705209846B0800983E82 /* HIDDevice.h */, + AA44708D0984720900983E82 /* JoystickDevice.cpp */, + AA44708C0984720900983E82 /* JoystickDevice.h */, + AA4470BB098476F600983E82 /* KeyboardDevice.cpp */, + AA4470BA098476F600983E82 /* KeyboardDevice.h */, + 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */, + 2B30D6811315EA7E00044B68 /* MouseDevice.h */, + AA1F9C4609AF1BF5002C15A8 /* PumpDevice.cpp */, + AA1F9C4509AF1BF5002C15A8 /* PumpDevice.h */, + AABBFCD209838C3A00F077E2 /* SMMain.mm */, + AAD64AA10603FE7300EF8CDE /* StepMania.pch */, + AA147F190A0F78D8006EADF6 /* VectorHelper.cpp */, + AA147F180A0F78D8006EADF6 /* VectorHelper.h */, + ); + path = Darwin; + sourceTree = ""; + }; + AAE781870AC7E46E00AEFC64 /* lua-5.1 */ = { + isa = PBXGroup; + children = ( + 2BDB88B2137201F700E6FD3A /* lapi.c */, + 2BDB88B3137201F700E6FD3A /* lapi.h */, + 2BDB88B4137201F700E6FD3A /* lauxlib.c */, + 2BDB88B5137201F700E6FD3A /* lauxlib.h */, + 2BDB88B6137201F700E6FD3A /* lbaselib.c */, + 2BDB88B7137201F700E6FD3A /* lcode.c */, + 2BDB88B8137201F700E6FD3A /* lcode.h */, + 2BDB88B9137201F700E6FD3A /* ldblib.c */, + 2BDB88BA137201F700E6FD3A /* ldebug.c */, + 2BDB88BB137201F700E6FD3A /* ldebug.h */, + 2BDB88BC137201F700E6FD3A /* ldo.c */, + 2BDB88BD137201F700E6FD3A /* ldo.h */, + 2BDB88BE137201F700E6FD3A /* ldump.c */, + 2BDB88BF137201F700E6FD3A /* lfunc.c */, + 2BDB88C0137201F700E6FD3A /* lfunc.h */, + 2BDB88C1137201F700E6FD3A /* lgc.c */, + 2BDB88C2137201F700E6FD3A /* lgc.h */, + 2BDB88C3137201F700E6FD3A /* linit.c */, + 2BDB88C4137201F700E6FD3A /* liolib.c */, + 2BDB88C5137201F700E6FD3A /* llex.c */, + 2BDB88C6137201F700E6FD3A /* llex.h */, + 2BDB88C7137201F700E6FD3A /* llimits.h */, + 2BDB88C8137201F700E6FD3A /* lmathlib.c */, + 2BDB88C9137201F700E6FD3A /* lmem.c */, + 2BDB88CA137201F700E6FD3A /* lmem.h */, + 2BDB88CB137201F700E6FD3A /* loadlib.c */, + 2BDB88CC137201F700E6FD3A /* lobject.c */, + 2BDB88CD137201F700E6FD3A /* lobject.h */, + 2BDB88CE137201F700E6FD3A /* lopcodes.c */, + 2BDB88CF137201F700E6FD3A /* lopcodes.h */, + 2BDB88D0137201F700E6FD3A /* loslib.c */, + 2BDB88D1137201F700E6FD3A /* lparser.c */, + 2BDB88D2137201F700E6FD3A /* lparser.h */, + 2BDB88D3137201F700E6FD3A /* lstate.c */, + 2BDB88D4137201F700E6FD3A /* lstate.h */, + 2BDB88D5137201F700E6FD3A /* lstring.c */, + 2BDB88D6137201F700E6FD3A /* lstring.h */, + 2BDB88D7137201F700E6FD3A /* lstrlib.c */, + 2BDB88D8137201F700E6FD3A /* ltable.c */, + 2BDB88D9137201F700E6FD3A /* ltable.h */, + 2BDB88DA137201F700E6FD3A /* ltablib.c */, + 2BDB88DB137201F700E6FD3A /* ltm.c */, + 2BDB88DC137201F700E6FD3A /* ltm.h */, + 2BDB88DD137201F700E6FD3A /* lua.c */, + 2BDB88DE137201F700E6FD3A /* lua.h */, + 2BDB88DF137201F700E6FD3A /* luac.c */, + 2BDB88E0137201F700E6FD3A /* luaconf.h */, + 2BDB88E1137201F700E6FD3A /* lualib.h */, + 2BDB88E2137201F700E6FD3A /* lundump.c */, + 2BDB88E3137201F700E6FD3A /* lundump.h */, + 2BDB88E4137201F700E6FD3A /* lvm.c */, + 2BDB88E5137201F700E6FD3A /* lvm.h */, + 2BDB88E6137201F700E6FD3A /* lzio.c */, + 2BDB88E7137201F700E6FD3A /* lzio.h */, + 2BDB88E8137201F700E6FD3A /* print.c */, + ); + name = "lua-5.1"; + path = "../extern/lua-5.1"; + sourceTree = ""; + }; + EE879B8E132E06C50078FDDC /* glew-1.5.8 */ = { + isa = PBXGroup; + children = ( + EE879BAA132E06C50078FDDC /* glew.c */, + ); + name = "glew-1.5.8"; + path = "../extern/glew-1.5.8"; + sourceTree = SOURCE_ROOT; + }; + EE906F6F12BF3A5B00146C96 /* json */ = { + isa = PBXGroup; + children = ( + 2BD06FDD137240CF0018CB9F /* json_batchallocator.h */, + 2BD06FDE137240CF0018CB9F /* json_internalarray.inl */, + 2BD06FDF137240CF0018CB9F /* json_internalmap.inl */, + 2BD06FE0137240CF0018CB9F /* json_reader.cpp */, + 2BD06FE1137240CF0018CB9F /* json_value.cpp */, + 2BD06FE2137240CF0018CB9F /* json_valueiterator.inl */, + 2BD06FE3137240CF0018CB9F /* json_writer.cpp */, + ); + name = json; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + AA29CC270558741A00961A51 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */, + 3659B5700F902143002B6B68 /* CommandLineActions.h in Headers */, + 36CA531D0F91564A0063D59D /* ScreenOptionsCourseOverview.h in Headers */, + 36CA53210F9156860063D59D /* ScreenOptionsEditCourse.h in Headers */, + EE2153AA10A75BEE0074B01B /* NotesLoaderPMS.h in Headers */, + EEA7C84410A805A300082E7B /* ScreenPackagesSSC.h in Headers */, + 36C6888411297FFE00453295 /* RageFileDriverReadAhead.h in Headers */, + 36C6888611297FFE00453295 /* RageFileManager_ReadAhead.h in Headers */, + EE906F6712BF3A1B00146C96 /* ScreenInstallOverlay.h in Headers */, + EE906F8312BF3AF800146C96 /* JsonUtil.h in Headers */, + EE906F8B12BF3C7C00146C96 /* FileDownload.h in Headers */, + 2BA7925F1304F20D002BD8E1 /* NotesLoaderSSC.h in Headers */, + 2BA792611304F20D002BD8E1 /* NotesWriterSSC.h in Headers */, + 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */, + EE879B61132DEE720078FDDC /* RageDisplay_Legacy_Helpers.h in Headers */, + EE879B63132DEE720078FDDC /* RageDisplay_Legacy.h in Headers */, + 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */, + 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D1B809A08D650068C0D5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D1B909A08D650068C0D5 /* StepMania.pch in Headers */, + AA40D1BA09A08D650068C0D5 /* RageBitmapTexture.h in Headers */, + AA40D1BB09A08D650068C0D5 /* RageDisplay.h in Headers */, + AA40D1BC09A08D650068C0D5 /* RageException.h in Headers */, + AA40D1BD09A08D650068C0D5 /* RageInput.h in Headers */, + AA40D1BE09A08D650068C0D5 /* RageLog.h in Headers */, + AA40D1BF09A08D650068C0D5 /* RageMath.h in Headers */, + AA40D1C009A08D650068C0D5 /* RageSound.h in Headers */, + AA40D1C109A08D650068C0D5 /* RageSoundManager.h in Headers */, + AA40D1C209A08D650068C0D5 /* RageSoundReader_Preload.h in Headers */, + AA40D1C409A08D650068C0D5 /* RageSoundReader.h in Headers */, + AA40D1C509A08D650068C0D5 /* RageTexture.h in Headers */, + AA40D1C609A08D650068C0D5 /* RageTextureManager.h in Headers */, + AA40D1C709A08D650068C0D5 /* RageThreads.h in Headers */, + AA40D1C809A08D650068C0D5 /* RageTimer.h in Headers */, + AA40D1C909A08D650068C0D5 /* RageTypes.h in Headers */, + AA40D1CA09A08D650068C0D5 /* RageUtil.h in Headers */, + AA40D1CB09A08D650068C0D5 /* Character.h in Headers */, + AA40D1CC09A08D650068C0D5 /* CodeDetector.h in Headers */, + AA40D1CD09A08D650068C0D5 /* Course.h in Headers */, + AA40D1CE09A08D650068C0D5 /* Font.h in Headers */, + AA40D1CF09A08D650068C0D5 /* FontCharAliases.h in Headers */, + AA40D1D009A08D650068C0D5 /* FontCharmaps.h in Headers */, + AA40D1D109A08D650068C0D5 /* FontManager.h in Headers */, + AA40D1D209A08D650068C0D5 /* GameConstantsAndTypes.h in Headers */, + AA40D1D309A08D650068C0D5 /* GameInput.h in Headers */, + AA40D1D409A08D650068C0D5 /* Grade.h in Headers */, + AA40D1D509A08D650068C0D5 /* Inventory.h in Headers */, + AA40D1D609A08D650068C0D5 /* LyricsLoader.h in Headers */, + AA40D1D709A08D650068C0D5 /* NoteData.h in Headers */, + AA40D1D809A08D650068C0D5 /* NoteDataWithScoring.h in Headers */, + AA40D1DA09A08D650068C0D5 /* NotesLoader.h in Headers */, + AA40D1DB09A08D650068C0D5 /* NotesLoaderBMS.h in Headers */, + AA40D1DC09A08D650068C0D5 /* NotesLoaderDWI.h in Headers */, + AA40D1DD09A08D650068C0D5 /* NotesLoaderKSF.h in Headers */, + AA40D1DE09A08D650068C0D5 /* NotesLoaderSM.h in Headers */, + AA40D1DF09A08D650068C0D5 /* NotesWriterDWI.h in Headers */, + AA40D1E009A08D650068C0D5 /* NotesWriterSM.h in Headers */, + AA40D1E109A08D650068C0D5 /* NoteTypes.h in Headers */, + AA40D1E209A08D650068C0D5 /* Player.h in Headers */, + AA40D1E309A08D650068C0D5 /* PlayerAI.h in Headers */, + AA40D1E409A08D650068C0D5 /* PlayerNumber.h in Headers */, + AA40D1E509A08D650068C0D5 /* PlayerOptions.h in Headers */, + AA40D1E609A08D650068C0D5 /* SongOptions.h in Headers */, + AA40D1E709A08D650068C0D5 /* StageStats.h in Headers */, + AA40D1E909A08D650068C0D5 /* TitleSubstitution.h in Headers */, + AA40D1EA09A08D650068C0D5 /* IniFile.h in Headers */, + AA40D1EB09A08D650068C0D5 /* MsdFile.h in Headers */, + AA40D1EC09A08D650068C0D5 /* global.h in Headers */, + AA40D1ED09A08D650068C0D5 /* ScreenDimensions.h in Headers */, + AA40D1EE09A08D650068C0D5 /* StdString.h in Headers */, + AA40D1EF09A08D650068C0D5 /* StepMania.h in Headers */, + AA40D1F009A08D650068C0D5 /* Banner.h in Headers */, + AA40D1F109A08D650068C0D5 /* BPMDisplay.h in Headers */, + AA40D1F209A08D650068C0D5 /* CourseContentsList.h in Headers */, + AA40D1F409A08D650068C0D5 /* DifficultyIcon.h in Headers */, + AA40D1F709A08D650068C0D5 /* EditMenu.h in Headers */, + AA40D1F809A08D650068C0D5 /* FadingBanner.h in Headers */, + AA40D1F909A08D650068C0D5 /* GradeDisplay.h in Headers */, + AA40D1FA09A08D650068C0D5 /* GrooveRadar.h in Headers */, + AA40D1FC09A08D650068C0D5 /* HelpDisplay.h in Headers */, + AA40D1FD09A08D650068C0D5 /* MenuTimer.h in Headers */, + AA40D1FE09A08D650068C0D5 /* MeterDisplay.h in Headers */, + AA40D20209A08D650068C0D5 /* MusicWheel.h in Headers */, + AA40D20309A08D650068C0D5 /* MusicWheelItem.h in Headers */, + AA40D20609A08D650068C0D5 /* OptionsCursor.h in Headers */, + AA40D20709A08D650068C0D5 /* ScrollBar.h in Headers */, + AA40D20909A08D650068C0D5 /* SnapDisplay.h in Headers */, + AA40D20A09A08D650068C0D5 /* TextBanner.h in Headers */, + AA40D20B09A08D650068C0D5 /* WheelNotifyIcon.h in Headers */, + AA40D20C09A08D650068C0D5 /* ArrowEffects.h in Headers */, + AA40D20D09A08D650068C0D5 /* Background.h in Headers */, + AA40D20E09A08D650068C0D5 /* BGAnimation.h in Headers */, + AA40D20F09A08D650068C0D5 /* BGAnimationLayer.h in Headers */, + AA40D21109A08D650068C0D5 /* DancingCharacters.h in Headers */, + AA40D21209A08D650068C0D5 /* GhostArrowRow.h in Headers */, + AA40D21309A08D650068C0D5 /* HoldJudgment.h in Headers */, + AA40D21509A08D650068C0D5 /* LifeMeter.h in Headers */, + AA40D21609A08D650068C0D5 /* LifeMeterBar.h in Headers */, + AA40D21709A08D650068C0D5 /* LifeMeterBattery.h in Headers */, + AA40D21809A08D650068C0D5 /* LyricDisplay.h in Headers */, + AA40D21909A08D650068C0D5 /* NoteDisplay.h in Headers */, + AA40D21A09A08D650068C0D5 /* NoteField.h in Headers */, + AA40D21B09A08D650068C0D5 /* ScoreDisplay.h in Headers */, + AA40D21C09A08D650068C0D5 /* ScoreDisplayBattle.h in Headers */, + AA40D21D09A08D650068C0D5 /* ScoreDisplayNormal.h in Headers */, + AA40D21E09A08D650068C0D5 /* ScoreDisplayOni.h in Headers */, + AA40D21F09A08D650068C0D5 /* ScoreDisplayRave.h in Headers */, + AA40D22009A08D650068C0D5 /* ScoreKeeper.h in Headers */, + AA40D22109A08D650068C0D5 /* Transition.h in Headers */, + AA40D22209A08D650068C0D5 /* Actor.h in Headers */, + AA40D22309A08D650068C0D5 /* ActorFrame.h in Headers */, + AA40D22409A08D650068C0D5 /* ActorScroller.h in Headers */, + AA40D22509A08D650068C0D5 /* BitmapText.h in Headers */, + AA40D22609A08D650068C0D5 /* Model.h in Headers */, + AA40D22709A08D650068C0D5 /* ModelTypes.h in Headers */, + AA40D22809A08D650068C0D5 /* Quad.h in Headers */, + AA40D22909A08D650068C0D5 /* Sprite.h in Headers */, + AA40D22A09A08D650068C0D5 /* Screen.h in Headers */, + AA40D22B09A08D650068C0D5 /* ScreenAttract.h in Headers */, + AA40D22D09A08D650068C0D5 /* ScreenDemonstration.h in Headers */, + AA40D22E09A08D650068C0D5 /* ScreenEdit.h in Headers */, + AA40D22F09A08D650068C0D5 /* ScreenEditMenu.h in Headers */, + AA40D23009A08D650068C0D5 /* ScreenEvaluation.h in Headers */, + AA40D23309A08D650068C0D5 /* ScreenGameplay.h in Headers */, + AA40D23409A08D650068C0D5 /* ScreenInstructions.h in Headers */, + AA40D23509A08D650068C0D5 /* ScreenJukebox.h in Headers */, + AA40D23609A08D650068C0D5 /* ScreenManager.h in Headers */, + AA40D23709A08D650068C0D5 /* ScreenMapControllers.h in Headers */, + AA40D23809A08D650068C0D5 /* ScreenMessage.h in Headers */, + AA40D23909A08D650068C0D5 /* ScreenMiniMenu.h in Headers */, + AA40D23B09A08D650068C0D5 /* ScreenNameEntry.h in Headers */, + AA40D23C09A08D650068C0D5 /* ScreenOptions.h in Headers */, + AA40D23D09A08D650068C0D5 /* ScreenPlayerOptions.h in Headers */, + AA40D23E09A08D650068C0D5 /* ScreenPrompt.h in Headers */, + AA40D23F09A08D650068C0D5 /* ScreenRanking.h in Headers */, + AA40D24009A08D650068C0D5 /* ScreenSandbox.h in Headers */, + AA40D24109A08D650068C0D5 /* ScreenSelect.h in Headers */, + AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */, + AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */, + AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */, + AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */, + AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */, + AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */, + AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */, + AA40D24E09A08D650068C0D5 /* AnnouncerManager.h in Headers */, + AA40D24F09A08D650068C0D5 /* GameManager.h in Headers */, + AA40D25009A08D650068C0D5 /* GameState.h in Headers */, + AA40D25109A08D650068C0D5 /* InputFilter.h in Headers */, + AA40D25209A08D650068C0D5 /* InputMapper.h in Headers */, + AA40D25309A08D650068C0D5 /* InputQueue.h in Headers */, + AA40D25409A08D650068C0D5 /* NoteSkinManager.h in Headers */, + AA40D25509A08D650068C0D5 /* PrefsManager.h in Headers */, + AA40D25609A08D650068C0D5 /* SongManager.h in Headers */, + AA40D25709A08D650068C0D5 /* ThemeManager.h in Headers */, + AA40D25809A08D650068C0D5 /* RageSoundDriver_Null.h in Headers */, + AA40D25909A08D650068C0D5 /* LowLevelWindow.h in Headers */, + AA40D25A09A08D650068C0D5 /* SongCacheIndex.h in Headers */, + AA40D25C09A08D650068C0D5 /* RandomSample.h in Headers */, + AA40D25E09A08D650068C0D5 /* RageUtil_CharConversions.h in Headers */, + AA40D25F09A08D650068C0D5 /* BannerCache.h in Headers */, + AA40D26109A08D650068C0D5 /* arch_default.h in Headers */, + AA40D26309A08D650068C0D5 /* ArchHooks.h in Headers */, + AA40D26409A08D650068C0D5 /* RageSoundDriver.h in Headers */, + AA40D26609A08D650068C0D5 /* ActorUtil.h in Headers */, + AA40D26709A08D650068C0D5 /* ScreenSelectMaster.h in Headers */, + AA40D26B09A08D650068C0D5 /* CombinedLifeMeterTug.h in Headers */, + AA40D26C09A08D650068C0D5 /* ScoreKeeperRave.h in Headers */, + AA40D26D09A08D650068C0D5 /* internal.h in Headers */, + AA40D26E09A08D650068C0D5 /* pcre.h in Headers */, + AA40D26F09A08D650068C0D5 /* RageUtil_FileDB.h in Headers */, + AA40D27109A08D650068C0D5 /* LoadingWindow.h in Headers */, + AA40D27209A08D650068C0D5 /* InputHandler.h in Headers */, + AA40D27309A08D650068C0D5 /* MovieTexture.h in Headers */, + AA40D27509A08D650068C0D5 /* MovieTexture_Null.h in Headers */, + AA40D27609A08D650068C0D5 /* RageFile.h in Headers */, + AA40D27709A08D650068C0D5 /* RageInputDevice.h in Headers */, + AA40D27809A08D650068C0D5 /* RageSoundReader_FileReader.h in Headers */, + AA40D27909A08D650068C0D5 /* arch_setup.h in Headers */, + AA40D27A09A08D650068C0D5 /* CrashHandler.h in Headers */, + AA40D27B09A08D650068C0D5 /* CrashHandlerInternal.h in Headers */, + AA40D27C09A08D650068C0D5 /* Crash.h in Headers */, + AA40D27D09A08D650068C0D5 /* Steps.h in Headers */, + AA40D27E09A08D650068C0D5 /* NoteDataUtil.h in Headers */, + AA40D27F09A08D650068C0D5 /* ProductInfo.h in Headers */, + AA40D28009A08D650068C0D5 /* BeginnerHelper.h in Headers */, + AA40D28209A08D650068C0D5 /* MovieTexture_FFMpeg.h in Headers */, + AA40D28309A08D650068C0D5 /* ProfileManager.h in Headers */, + AA40D28409A08D650068C0D5 /* RageSoundReader_WAV.h in Headers */, + AA40D28609A08D650068C0D5 /* RageSoundReader_Vorbisfile.h in Headers */, + AA40D28809A08D650068C0D5 /* RageSoundReader_Resample_Good.h in Headers */, + AA40D28909A08D650068C0D5 /* ScreenExit.h in Headers */, + AA40D28A09A08D650068C0D5 /* ScreenOptionsMaster.h in Headers */, + AA40D28B09A08D650068C0D5 /* ScreenOptionsMasterPrefs.h in Headers */, + AA40D28C09A08D650068C0D5 /* ScreenReloadSongs.h in Headers */, + AA40D28D09A08D650068C0D5 /* ScreenHowToPlay.h in Headers */, + AA40D28E09A08D650068C0D5 /* PercentageDisplay.h in Headers */, + AA40D28F09A08D650068C0D5 /* ScoreDisplayPercentage.h in Headers */, + AA40D29109A08D650068C0D5 /* ScreenTestInput.h in Headers */, + AA40D29209A08D650068C0D5 /* ScreenBookkeeping.h in Headers */, + AA40D29309A08D650068C0D5 /* ScreenNameEntryTraditional.h in Headers */, + AA40D29409A08D650068C0D5 /* Bookkeeper.h in Headers */, + AA40D29509A08D650068C0D5 /* GraphDisplay.h in Headers */, + AA40D29609A08D650068C0D5 /* ComboGraph.h in Headers */, + AA40D29709A08D650068C0D5 /* Attack.h in Headers */, + AA40D29809A08D650068C0D5 /* RageTextureID.h in Headers */, + AA40D29909A08D650068C0D5 /* CombinedLifeMeter.h in Headers */, + AA40D29A09A08D650068C0D5 /* LightsManager.h in Headers */, + AA40D29B09A08D650068C0D5 /* LightsDriver.h in Headers */, + AA40D29D09A08D650068C0D5 /* PaneDisplay.h in Headers */, + AA40D29E09A08D650068C0D5 /* DifficultyList.h in Headers */, + AA40D29F09A08D650068C0D5 /* LightsDriver_SystemMessage.h in Headers */, + AA40D2A009A08D650068C0D5 /* AttackDisplay.h in Headers */, + AA40D2A109A08D650068C0D5 /* RageFileDriver.h in Headers */, + AA40D2A209A08D650068C0D5 /* RageFileDriverDirect.h in Headers */, + AA40D2A309A08D650068C0D5 /* RageFileManager.h in Headers */, + AA40D2A409A08D650068C0D5 /* RageFileDriverZip.h in Headers */, + AA40D2A509A08D650068C0D5 /* Style.h in Headers */, + AA40D2A609A08D650068C0D5 /* MemoryCardManager.h in Headers */, + AA40D2A709A08D650068C0D5 /* MemoryCardDriver_Null.h in Headers */, + AA40D2A809A08D650068C0D5 /* DualScrollBar.h in Headers */, + AA40D2A909A08D650068C0D5 /* TimingData.h in Headers */, + AA40D2AA09A08D650068C0D5 /* MemoryCardDisplay.h in Headers */, + AA40D2AB09A08D650068C0D5 /* ReceptorArrow.h in Headers */, + AA40D2AC09A08D650068C0D5 /* ReceptorArrowRow.h in Headers */, + AA40D2AD09A08D650068C0D5 /* ScreenEnding.h in Headers */, + AA40D2AE09A08D650068C0D5 /* Foreground.h in Headers */, + AA40D2AF09A08D650068C0D5 /* RageFileDriverDirectHelpers.h in Headers */, + AA40D2B009A08D650068C0D5 /* RageUtil_CircularBuffer.h in Headers */, + AA40D2B109A08D650068C0D5 /* ModelManager.h in Headers */, + AA40D2B209A08D650068C0D5 /* RageModelGeometry.h in Headers */, + AA40D2B309A08D650068C0D5 /* Profile.h in Headers */, + AA40D2B409A08D650068C0D5 /* XmlFile.h in Headers */, + AA40D2B509A08D650068C0D5 /* HighScore.h in Headers */, + AA40D2B609A08D650068C0D5 /* CryptManager.h in Headers */, + AA40D2B809A08D650068C0D5 /* Backtrace.h in Headers */, + AA40D2B909A08D650068C0D5 /* BacktraceNames.h in Headers */, + AA40D2BA09A08D650068C0D5 /* ScreenSetTime.h in Headers */, + AA40D2BB09A08D650068C0D5 /* NetworkSyncManager.h in Headers */, + AA40D2BD09A08D650068C0D5 /* ActiveAttackList.h in Headers */, + AA40D2BF09A08D650068C0D5 /* ScreenTestLights.h in Headers */, + AA40D2C009A08D650068C0D5 /* RageDisplay_Null.h in Headers */, + AA40D2CB09A08D650068C0D5 /* EnumHelper.h in Headers */, + AA40D2CC09A08D650068C0D5 /* RageSoundPosMap.h in Headers */, + AA40D2CD09A08D650068C0D5 /* SignalHandler.h in Headers */, + AA40D2CE09A08D650068C0D5 /* CourseUtil.h in Headers */, + AA40D2CF09A08D650068C0D5 /* SongUtil.h in Headers */, + AA40D2D009A08D650068C0D5 /* StepsUtil.h in Headers */, + AA40D2D109A08D650068C0D5 /* ScreenWithMenuElements.h in Headers */, + AA40D2F209A08D650068C0D5 /* RageSurface_Load_GIF.h in Headers */, + AA40D2F309A08D650068C0D5 /* RageSurface_Load_JPEG.h in Headers */, + AA40D2F409A08D650068C0D5 /* RageSurface_Load_PNG.h in Headers */, + AA40D2F509A08D650068C0D5 /* RageSurface_Load_XPM.h in Headers */, + AA40D2F609A08D650068C0D5 /* RageSurface_Load.h in Headers */, + AA40D2F809A08D650068C0D5 /* Difficulty.h in Headers */, + AA40D2F909A08D650068C0D5 /* Foreach.h in Headers */, + AA40D2FA09A08D650068C0D5 /* Trail.h in Headers */, + AA40D2FB09A08D650068C0D5 /* TrailUtil.h in Headers */, + AA40D2FC09A08D650068C0D5 /* ScreenNetworkOptions.h in Headers */, + AA40D2FD09A08D650068C0D5 /* Dialog.h in Headers */, + AA40D2FE09A08D650068C0D5 /* DialogDriver.h in Headers */, + AA40D30009A08D650068C0D5 /* Threads.h in Headers */, + AA40D30109A08D650068C0D5 /* Threads_Pthreads.h in Headers */, + AA40D30209A08D650068C0D5 /* RageSurface.h in Headers */, + AA40D30309A08D650068C0D5 /* RageSurface_Load_BMP.h in Headers */, + AA40D30409A08D650068C0D5 /* RageSurface_Save_BMP.h in Headers */, + AA40D30509A08D650068C0D5 /* GameSoundManager.h in Headers */, + AA40D30609A08D650068C0D5 /* MemoryCardDriver.h in Headers */, + AA40D30709A08D650068C0D5 /* RadarValues.h in Headers */, + AA40D30809A08D650068C0D5 /* DateTime.h in Headers */, + AA40D30909A08D650068C0D5 /* CommonMetrics.h in Headers */, + AA40D30A09A08D650068C0D5 /* StyleUtil.h in Headers */, + AA40D30B09A08D650068C0D5 /* Game.h in Headers */, + AA40D30C09A08D650068C0D5 /* ScreenNetSelectMusic.h in Headers */, + AA40D30E09A08D650068C0D5 /* RageSurfaceUtils_Palettize.h in Headers */, + AA40D30F09A08D650068C0D5 /* RageSurfaceUtils.h in Headers */, + AA40D31009A08D650068C0D5 /* ScreenNetEvaluation.h in Headers */, + AA40D31109A08D650068C0D5 /* RageFileDriverMemory.h in Headers */, + AA40D31209A08D650068C0D5 /* DarwinThreadHelpers.h in Headers */, + AA40D31309A08D650068C0D5 /* RageUtil_BackgroundLoader.h in Headers */, + AA40D31409A08D650068C0D5 /* Preference.h in Headers */, + AA40D31509A08D650068C0D5 /* ThemeMetric.h in Headers */, + AA40D31609A08D650068C0D5 /* InputHandler_MonkeyKeyboard.h in Headers */, + AA40D31709A08D650068C0D5 /* AutoKeysounds.h in Headers */, + AA40D31809A08D650068C0D5 /* RageSoundMixBuffer.h in Headers */, + AA40D31909A08D650068C0D5 /* RageSoundReader_Chain.h in Headers */, + AA40D31A09A08D650068C0D5 /* RageSoundUtil.h in Headers */, + AA40D31B09A08D650068C0D5 /* ScreenNetRoom.h in Headers */, + AA40D31C09A08D650068C0D5 /* ScreenNetSelectBase.h in Headers */, + AA40D31D09A08D650068C0D5 /* ScreenPackages.h in Headers */, + AA40D31E09A08D650068C0D5 /* ScreenSystemLayer.h in Headers */, + AA40D31F09A08D650068C0D5 /* Command.h in Headers */, + AA40D32009A08D650068C0D5 /* GameCommand.h in Headers */, + AA40D32109A08D650068C0D5 /* RageFileBasic.h in Headers */, + AA40D32209A08D650068C0D5 /* RageFileDriverDeflate.h in Headers */, + AA40D32309A08D650068C0D5 /* RageFileDriverSlice.h in Headers */, + AA40D32409A08D650068C0D5 /* RageSurface_Save_JPEG.h in Headers */, + AA40D32509A08D650068C0D5 /* RageSurfaceUtils_Dither.h in Headers */, + AA40D32609A08D650068C0D5 /* RageSurfaceUtils_Zoom.h in Headers */, + AA40D32709A08D650068C0D5 /* LuaBinding.h in Headers */, + AA40D32809A08D650068C0D5 /* LuaManager.h in Headers */, + AA40D32909A08D650068C0D5 /* PlayerState.h in Headers */, + AA40D32C09A08D650068C0D5 /* RageFileDriverTimeout.h in Headers */, + AA40D32D09A08D650068C0D5 /* RageUtil_AutoPtr.h in Headers */, + AA40D32E09A08D650068C0D5 /* RageUtil_WorkerThread.h in Headers */, + AA40D32F09A08D650068C0D5 /* LuaReference.h in Headers */, + AA40D33009A08D650068C0D5 /* MessageManager.h in Headers */, + AA40D33109A08D650068C0D5 /* StatsManager.h in Headers */, + AA40D33209A08D650068C0D5 /* SubscriptionManager.h in Headers */, + AA40D33309A08D650068C0D5 /* AutoActor.h in Headers */, + AA40D33409A08D650068C0D5 /* OptionRow.h in Headers */, + AA40D33509A08D650068C0D5 /* PlayerStageStats.h in Headers */, + AA40D33609A08D650068C0D5 /* RollingNumbers.h in Headers */, + AA40D33709A08D650068C0D5 /* ScoreDisplayCalories.h in Headers */, + AA40D34009A08D650068C0D5 /* UnlockManager.h in Headers */, + AA40D34109A08D650068C0D5 /* OptionRowHandler.h in Headers */, + AA40D34209A08D650068C0D5 /* ScoreDisplayAliveTime.h in Headers */, + AA40D34309A08D650068C0D5 /* ScoreDisplayLifeTime.h in Headers */, + AA40D34409A08D650068C0D5 /* StreamDisplay.h in Headers */, + AA40D34509A08D650068C0D5 /* LifeMeterTime.h in Headers */, + AA40D34609A08D650068C0D5 /* WheelBase.h in Headers */, + AA40D34709A08D650068C0D5 /* WheelItemBase.h in Headers */, + AA40D34909A08D650068C0D5 /* ScreenDebugOverlay.h in Headers */, + AA40D34B09A08D650068C0D5 /* ScreenSaveSync.h in Headers */, + AA40D34D09A08D650068C0D5 /* ScreenSyncOverlay.h in Headers */, + AA40D34E09A08D650068C0D5 /* BackgroundUtil.h in Headers */, + AA40D34F09A08D650068C0D5 /* ScreenSplash.h in Headers */, + AA40D35009A08D650068C0D5 /* RageTexturePreloader.h in Headers */, + AA40D35109A08D650068C0D5 /* ScreenOptionsEditProfile.h in Headers */, + AA40D35209A08D650068C0D5 /* GameLoop.h in Headers */, + AA40D35309A08D650068C0D5 /* CharacterManager.h in Headers */, + AA40D35409A08D650068C0D5 /* CourseLoaderCRS.h in Headers */, + AA40D35509A08D650068C0D5 /* CourseWriterCRS.h in Headers */, + AA40D35909A08D650068C0D5 /* ScreenOptionsManageCourses.h in Headers */, + AA40D35A09A08D650068C0D5 /* ScreenOptionsManageProfiles.h in Headers */, + AA40D35B09A08D650068C0D5 /* ScreenGameplayNormal.h in Headers */, + AA40D35C09A08D650068C0D5 /* ActorSound.h in Headers */, + AA40D35D09A08D650068C0D5 /* InputEventPlus.h in Headers */, + AA40D35F09A08D650068C0D5 /* ScreenGameplayLesson.h in Headers */, + AA40D36209A08D650068C0D5 /* LuaExpressionTransform.h in Headers */, + AA40D36309A08D650068C0D5 /* DynamicActorScroller.h in Headers */, + AA40D36409A08D650068C0D5 /* ScoreKeeperNormal.h in Headers */, + AA40D36509A08D650068C0D5 /* ScreenStatsOverlay.h in Headers */, + AA40D36709A08D650068C0D5 /* MovieTexture_Generic.h in Headers */, + AA40D36809A08D650068C0D5 /* MovieTexture_Theora.h in Headers */, + AA40D36B09A08D650068C0D5 /* SpecialFiles.h in Headers */, + AA40D36C09A08D650068C0D5 /* ScreenOptionsManageEditSteps.h in Headers */, + AA40D36D09A08D650068C0D5 /* ScreenOptionsMemoryCard.h in Headers */, + AA40D36E09A08D650068C0D5 /* ScreenServiceAction.h in Headers */, + AA40D36F09A08D650068C0D5 /* DisplayResolutions.h in Headers */, + AA40D37009A08D650068C0D5 /* XmlFileUtil.h in Headers */, + AA40D37109A08D650068C0D5 /* LocalizedString.h in Headers */, + AA40D37509A08D650068C0D5 /* HIDDevice.h in Headers */, + AA40D37609A08D650068C0D5 /* JoystickDevice.h in Headers */, + AA40D37709A08D650068C0D5 /* KeyboardDevice.h in Headers */, + AA40D37809A08D650068C0D5 /* Tween.h in Headers */, + AA40D37909A08D650068C0D5 /* ScreenUnlockStatus.h in Headers */, + AA40D37A09A08D650068C0D5 /* AdjustSync.h in Headers */, + AAB55FFF09A84E62008FDC69 /* ScreenUnlockCelebrate.h in Headers */, + AAB5600109A84E64008FDC69 /* ScreenUnlockBrowse.h in Headers */, + AA1F9C4909AF1BF5002C15A8 /* PumpDevice.h in Headers */, + F4BC045509E6B582003F770B /* ScreenGameplaySyncMachine.h in Headers */, + AA147F1C0A0F78D8006EADF6 /* VectorHelper.h in Headers */, + AA8CF5190A4518BE0005F1B4 /* RageSoundDriver_AU.h in Headers */, + AAD8F9340A4B97DF000311CF /* ScreenGameplayShared.h in Headers */, + AAAA11C80A662F9D00B2BD88 /* ScoreKeeperShared.h in Headers */, + AA2EA0040A770208003A0C11 /* ScreenSelectLanguage.h in Headers */, + AA5D165A0A79805C00F17E86 /* RageTextureRenderTarget.h in Headers */, + AA5D166F0A798C0E00F17E86 /* ActorFrameTexture.h in Headers */, + AA5A51F40A8441AA006DBB92 /* ModsGroup.h in Headers */, + AAFE710E0A91ADE6005F2290 /* ActorProxy.h in Headers */, + AAFE712A0A91B58F005F2290 /* RageSurface_Save_PNG.h in Headers */, + AAE780450AC76A1200AEFC64 /* WorkoutGraph.h in Headers */, + AA6999620ACE1CBB000237F9 /* ControllerStateDisplay.h in Headers */, + AAB779FE0B0D9CB200B74314 /* ScoreKeeperGuitar.h in Headers */, + AA6090E90B141D1C00B39AC4 /* GamePreferences.h in Headers */, + AA31D5250B1EC6550016AB6B /* RageSoundReader_Filter.h in Headers */, + AA31D5270B1EC6550016AB6B /* RageSoundReader_PitchChange.h in Headers */, + AA31D5290B1EC6550016AB6B /* RageSoundReader_SpeedChange.h in Headers */, + AA4F27B70B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.h in Headers */, + AA4F27B90B2C01B400ADEA79 /* RageSoundReader_Pan.h in Headers */, + AA909E220B45B676002852D3 /* RageDriver.h in Headers */, + AA909E420B45B8FB002852D3 /* RageSoundReader_Extend.h in Headers */, + AA909E440B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.h in Headers */, + AAEBF5630B5C517E005F3C7C /* SampleHistory.h in Headers */, + AAEBF5810B5C83F4005F3C7C /* SoundEffectControl.h in Headers */, + AA07008D0B61F177003B85BB /* RageSoundReader_PostBuffering.h in Headers */, + AA7C8DAF0B68CB2200FD9940 /* GameplayAssist.h in Headers */, + AA059ABD0B8CCFB5006F8139 /* ActorMultiTexture.h in Headers */, + AA05A0B10BA2EFF3006F8139 /* OptionsList.h in Headers */, + AA2C9CA20BAD6F55002441E9 /* CodeSet.h in Headers */, + AA2CA8A00BB745BD002441E9 /* ScreenContinue.h in Headers */, + AA1893610BD777C500AEC0BF /* ScreenProfileLoad.h in Headers */, + AA1893630BD777C500AEC0BF /* ScreenProfileSave.h in Headers */, + AA18937D0BD77ECE00AEC0BF /* NotesLoaderMidi.h in Headers */, + AA3396B90BDE195E00E1475F /* RageSoundReader_Merge.h in Headers */, + AA339A7E0BF0FA6400E1475F /* LoadingWindow_Null.h in Headers */, + AAB3B7DF0C6C582E001BF487 /* ScreenSelectProfile.h in Headers */, + AAB3BB5C0C718F2D001BF487 /* RageUtil_CachedObject.h in Headers */, + AAA7D4CC0C7E872600FB8F78 /* ScreenOptionsToggleSongs.h in Headers */, + AAA0713E0CE7B3BB005A3060 /* bit.h in Headers */, + AAA0714A0CE7B3BB005A3060 /* decoder.h in Headers */, + AAA0714D0CE7B3BB005A3060 /* fixed.h in Headers */, + AAA0714F0CE7B3BB005A3060 /* frame.h in Headers */, + AAA071500CE7B3BB005A3060 /* global.h in Headers */, + AAA071520CE7B3BB005A3060 /* huffman.h in Headers */, + AAA071580CE7B3BB005A3060 /* layer12.h in Headers */, + AAA0715A0CE7B3BB005A3060 /* layer3.h in Headers */, + AAA0715D0CE7B3BB005A3060 /* mad.h in Headers */, + AAA071700CE7B3BB005A3060 /* stream.h in Headers */, + AAA071720CE7B3BB005A3060 /* synth.h in Headers */, + AAA071740CE7B3BB005A3060 /* timer.h in Headers */, + AAA071780CE7B3BB005A3060 /* version.h in Headers */, + AA7CDD950D8395F90001DAFC /* Song.h in Headers */, + AA11A2140DC5A1B0006BD8AC /* ModIcon.h in Headers */, + AA11A2160DC5A1B0006BD8AC /* ModIconRow.h in Headers */, + AA6C6ADB0DC6B17B00E7A13E /* ArchHooks_MacOSX.h in Headers */, + AA6C6AE10DC6B1DC00E7A13E /* DialogDriver_MacOSX.h in Headers */, + AA6C6AE60DC6B22800E7A13E /* LoadingWindow_MacOSX.h in Headers */, + AA6C6B040DC6B2B400E7A13E /* LowLevelWindow_MacOSX.h in Headers */, + AA6C6B0B0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.h in Headers */, + AA6C6B110DC6B48C00E7A13E /* InputHandler_MacOSX_HID.h in Headers */, + AAC0BFE40E2951EC00F56EEB /* CryptHelpers.h in Headers */, + AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C895B0B67444700FD9940 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8B730B6744F700FD9940 /* tommath.h in Headers */, + AA7C8B740B6744F700FD9940 /* tommath_class.h in Headers */, + AA7C8B750B6744F700FD9940 /* tommath_superclass.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C8B870B67460600FD9940 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8C5B0B67467D00FD9940 /* tomcrypt.h in Headers */, + AA7C8C5C0B67467D00FD9940 /* tomcrypt_argchk.h in Headers */, + AA7C8C5D0B67467D00FD9940 /* tomcrypt_cfg.h in Headers */, + AA7C8C5E0B67467D00FD9940 /* tomcrypt_cipher.h in Headers */, + AA7C8C5F0B67467D00FD9940 /* tomcrypt_custom.h in Headers */, + AA7C8C600B67467D00FD9940 /* tomcrypt_hash.h in Headers */, + AA7C8C610B67467D00FD9940 /* tomcrypt_mac.h in Headers */, + AA7C8C620B67467D00FD9940 /* tomcrypt_macros.h in Headers */, + AA7C8C630B67467D00FD9940 /* tomcrypt_math.h in Headers */, + AA7C8C640B67467D00FD9940 /* tomcrypt_misc.h in Headers */, + AA7C8C650B67467D00FD9940 /* tomcrypt_pk.h in Headers */, + AA7C8C660B67467D00FD9940 /* tomcrypt_pkcs.h in Headers */, + AA7C8C670B67467D00FD9940 /* tomcrypt_prng.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAA070A50CE7B0DF005A3060 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AAA0717F0CE7B4FB005A3060 /* version.h in Headers */, + AAA071810CE7B4FC005A3060 /* timer.h in Headers */, + AAA071830CE7B4FE005A3060 /* synth.h in Headers */, + AAA071850CE7B4FF005A3060 /* stream.h in Headers */, + AAA071870CE7B502005A3060 /* mad.h in Headers */, + AAA071880CE7B502005A3060 /* layer3.h in Headers */, + AAA0718A0CE7B503005A3060 /* layer12.h in Headers */, + AAA0718C0CE7B505005A3060 /* huffman.h in Headers */, + AAA0718E0CE7B508005A3060 /* global.h in Headers */, + AAA0718F0CE7B508005A3060 /* frame.h in Headers */, + AAA071910CE7B509005A3060 /* fixed.h in Headers */, + AAA071930CE7B50B005A3060 /* decoder.h in Headers */, + AAA071950CE7B50C005A3060 /* bit.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAE7817A0AC7E37B00AEFC64 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2BDB88EA137201F700E6FD3A /* lapi.h in Headers */, + 2BDB88EC137201F700E6FD3A /* lauxlib.h in Headers */, + 2BDB88EF137201F700E6FD3A /* lcode.h in Headers */, + 2BDB88F2137201F700E6FD3A /* ldebug.h in Headers */, + 2BDB88F4137201F700E6FD3A /* ldo.h in Headers */, + 2BDB88F7137201F700E6FD3A /* lfunc.h in Headers */, + 2BDB88F9137201F700E6FD3A /* lgc.h in Headers */, + 2BDB88FD137201F700E6FD3A /* llex.h in Headers */, + 2BDB88FE137201F700E6FD3A /* llimits.h in Headers */, + 2BDB8901137201F700E6FD3A /* lmem.h in Headers */, + 2BDB8904137201F700E6FD3A /* lobject.h in Headers */, + 2BDB8906137201F700E6FD3A /* lopcodes.h in Headers */, + 2BDB8909137201F700E6FD3A /* lparser.h in Headers */, + 2BDB890B137201F700E6FD3A /* lstate.h in Headers */, + 2BDB890D137201F700E6FD3A /* lstring.h in Headers */, + 2BDB8910137201F700E6FD3A /* ltable.h in Headers */, + 2BDB8913137201F700E6FD3A /* ltm.h in Headers */, + 2BDB8915137201F700E6FD3A /* lua.h in Headers */, + 2BDB8917137201F700E6FD3A /* luaconf.h in Headers */, + 2BDB8918137201F700E6FD3A /* lualib.h in Headers */, + 2BDB891A137201F700E6FD3A /* lundump.h in Headers */, + 2BDB891C137201F700E6FD3A /* lvm.h in Headers */, + 2BDB891E137201F700E6FD3A /* lzio.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXLegacyTarget section */ + AA30C60F07F5E24A0066F398 /* version */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-w scripts/increment_version.pl"; + buildConfigurationList = AAC8450B0856A19700A9FEAB /* Build configuration list for PBXLegacyTarget "version" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/perl; + dependencies = ( + ); + name = version; + passBuildSettingsInEnvironment = 1; + productName = version; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + AA29CC240558741A00961A51 /* stepmania */ = { + isa = PBXNativeTarget; + buildConfigurationList = AAC8450F0856A19700A9FEAB /* Build configuration list for PBXNativeTarget "stepmania" */; + buildPhases = ( + AAA74CCF090CE268003F9A36 /* ShellScript */, + AA1DE8F30C54668900D59F20 /* ShellScript */, + AA29CC270558741A00961A51 /* Headers */, + AA29CD3C0558741A00961A51 /* Resources */, + AA4B428C05733DF2005FB5DB /* CopyFiles */, + AA29CD410558741A00961A51 /* Sources */, + AA29CE3B0558741A00961A51 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AAE781FE0AC7E61900AEFC64 /* PBXTargetDependency */, + AA7C8D180B6748B800FD9940 /* PBXTargetDependency */, + AA7C8D160B6748B800FD9940 /* PBXTargetDependency */, + AAA071AA0CE7B879005A3060 /* PBXTargetDependency */, + AA30C61A07F5E2EF0066F398 /* PBXTargetDependency */, + ); + name = stepmania; + productInstallPath = "$(HOME)/Applications"; + productName = "SDL App"; + productReference = AA29CE580558741A00961A51 /* sm-ssc.app */; + productType = "com.apple.product-type.application"; + }; + AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA40D52709A08D650068C0D5 /* Build configuration list for PBXNativeTarget "stepmania-bare" */; + buildPhases = ( + AA40D1B709A08D650068C0D5 /* ShellScript */, + AA21E4880A98289F00684CEA /* ShellScript */, + AA1DE95A0C54693D00D59F20 /* ShellScript */, + AA40D1B809A08D650068C0D5 /* Headers */, + AA40D37B09A08D650068C0D5 /* Resources */, + AA40D37D09A08D650068C0D5 /* CopyFiles */, + AA40D38009A08D650068C0D5 /* Sources */, + AA40D51409A08D650068C0D5 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AAE782020AC7E63100AEFC64 /* PBXTargetDependency */, + AA7C8D1E0B6748CD00FD9940 /* PBXTargetDependency */, + AA7C8D1C0B6748CD00FD9940 /* PBXTargetDependency */, + AA40D1B509A08D650068C0D5 /* PBXTargetDependency */, + ); + name = "stepmania-bare"; + productInstallPath = "$(HOME)/Applications"; + productName = "SDL App"; + productReference = AA40D52B09A08D660068C0D5 /* sm-ssc.app */; + productType = "com.apple.product-type.application"; + }; + AA7A2B930AE09B520054C5BA /* lua */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7A2B990AE09BA50054C5BA /* Build configuration list for PBXNativeTarget "lua" */; + buildPhases = ( + AA7A2B910AE09B520054C5BA /* Sources */, + AA7A2B920AE09B520054C5BA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AA7A2BA60AE09C9B0054C5BA /* PBXTargetDependency */, + ); + name = lua; + productName = lua; + productReference = AA7A2B940AE09B520054C5BA /* lua */; + productType = "com.apple.product-type.tool"; + }; + AA7A2BAA0AE09CD50054C5BA /* luac */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7A2BB90AE09D4E0054C5BA /* Build configuration list for PBXNativeTarget "luac" */; + buildPhases = ( + AA7A2BA80AE09CD50054C5BA /* Sources */, + AA7A2BA90AE09CD50054C5BA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AA7A2BAE0AE09CDB0054C5BA /* PBXTargetDependency */, + ); + name = luac; + productName = luac; + productReference = AA7A2BAB0AE09CD50054C5BA /* luac */; + productType = "com.apple.product-type.tool"; + }; + AA7C895E0B67444700FD9940 /* tommath */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7C89810B67447E00FD9940 /* Build configuration list for PBXNativeTarget "tommath" */; + buildPhases = ( + AA7C895B0B67444700FD9940 /* Headers */, + AA7C895C0B67444700FD9940 /* Sources */, + AA7C895D0B67444700FD9940 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tommath; + productName = tommath; + productReference = AA7C895F0B67444700FD9940 /* libtommath.a */; + productType = "com.apple.product-type.library.static"; + }; + AA7C8B8A0B67460600FD9940 /* tomcrypt */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA7C8B8E0B67464300FD9940 /* Build configuration list for PBXNativeTarget "tomcrypt" */; + buildPhases = ( + AA7C8B870B67460600FD9940 /* Headers */, + AA7C8B880B67460600FD9940 /* Sources */, + AA7C8B890B67460600FD9940 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tomcrypt; + productName = tomcrypt; + productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; + productType = "com.apple.product-type.library.static"; + }; + AAA070A80CE7B0DF005A3060 /* mad */ = { + isa = PBXNativeTarget; + buildConfigurationList = AAA070AE0CE7B138005A3060 /* Build configuration list for PBXNativeTarget "mad" */; + buildPhases = ( + AAA070A50CE7B0DF005A3060 /* Headers */, + AAA070A60CE7B0DF005A3060 /* Sources */, + AAA070A70CE7B0DF005A3060 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = mad; + productName = mad; + productReference = AAA070A90CE7B0DF005A3060 /* libmad.a */; + productType = "com.apple.product-type.library.static"; + }; + AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */ = { + isa = PBXNativeTarget; + buildConfigurationList = AAE7817F0AC7E3BF00AEFC64 /* Build configuration list for PBXNativeTarget "lua-5.1" */; + buildPhases = ( + AAE7817A0AC7E37B00AEFC64 /* Headers */, + AAE7817B0AC7E37B00AEFC64 /* Sources */, + AAE7817C0AC7E37B00AEFC64 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "lua-5.1"; + productName = "lua-5.1"; + productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; + compatibilityVersion = "Xcode 3.0"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + it, + es, + de, + en, + ja, + fr, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* SDL App */; + projectDirPath = ""; + projectRoot = ..; + targets = ( + AA29CC240558741A00961A51 /* stepmania */, + AA30C60F07F5E24A0066F398 /* version */, + AA40D1B409A08D650068C0D5 /* stepmania-bare */, + AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */, + AA7A2B930AE09B520054C5BA /* lua */, + AA7A2BAA0AE09CD50054C5BA /* luac */, + AA7A2BB30AE09D0F0054C5BA /* all lua */, + AA7C895E0B67444700FD9940 /* tommath */, + AA7C8B8A0B67460600FD9940 /* tomcrypt */, + AAA070A80CE7B0DF005A3060 /* mad */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AA29CD3C0558741A00961A51 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA29CD3E0558741A00961A51 /* smicon.icns in Resources */, + AAF6A2F909B695BA00D5C614 /* Localizable.strings in Resources */, + AA1DE9580C5468CE00D59F20 /* Hardware.plist in Resources */, + 2BD06FEF137242680018CB9F /* json_internalarray.inl in Resources */, + 2BD06FF0137242680018CB9F /* json_internalmap.inl in Resources */, + 2BD06FF3137242680018CB9F /* json_valueiterator.inl in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D37B09A08D650068C0D5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D37C09A08D650068C0D5 /* smicon.icns in Resources */, + AAF6A2FA09B695BA00D5C614 /* Localizable.strings in Resources */, + AA1DE9570C5468CE00D59F20 /* Hardware.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + AA1DE8F30C54668900D59F20 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Hardware.in.plist", + ); + outputPaths = ( + "$(SRCROOT)/Hardware.plist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "plutil -convert binary1 -o \"$SRCROOT/Hardware.plist\" \"$SRCROOT/Hardware.in.plist\""; + }; + AA1DE95A0C54693D00D59F20 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Hardware.in.plist", + ); + outputPaths = ( + "$(SRCROOT)/Hardware.plist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "plutil -convert binary1 -o \"$SRCROOT/Hardware.plist\" \"$SRCROOT/Hardware.in.plist\""; + }; + AA21E4880A98289F00684CEA /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Libraries/libpng.a", + "$(SRCROOT)/Libraries/libogg.a", + "$(SRCROOT)/Libraries/libjpeg.a", + "$(SRCROOT)/Libraries/libvorbis.a", + "$(SRCROOT)/Libraries/libtheora.a", + "$(SRCROOT)/Libraries/libffmpeg.a", + ); + outputPaths = ( + "$(SRCROOT)/Libraries/libpng_link.a", + "$(SRCROOT)/Libraries/libogg_link.a", + "$(SRCROOT)/Libraries/libjpeg_link.a", + "$(SRCROOT)/Libraries/libvorbis_link.a", + "$(SRCROOT)/Libraries/libtheora_link.a", + "$(SRCROOT)/Libraries/libffmpeg_link.a", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "for i in ffmpeg theora vorbis jpeg ogg png z; do\n\tcp \"$SRCROOT\"/Libraries/lib${i}.a \"$SRCROOT\"/Libraries/lib${i}_link.a\n\tranlib \"$SRCROOT\"/Libraries/lib${i}_link.a\ndone"; + }; + AA40D1B709A08D650068C0D5 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + comments = "Work around stupid linker thinking archives are out of date if they've been moved."; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "rm -rf \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/mad.framework\"\n"; + }; + AAA74CCF090CE268003F9A36 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + comments = "Work around stupid linker thinking archives are out of date if they've been moved."; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Libraries/libvorbis.a", + "$(SRCROOT)/Libraries/libtheora.a", + "$(SRCROOT)/Libraries/libpng.a", + "$(SRCROOT)/Libraries/libogg.a", + "$(SRCROOT)/Libraries/libjpeg.a", + "$(SRCROOT)/Libraries/libffmpeg.a", + ); + outputPaths = ( + "$(SRCROOT)/Libraries/libvorbis_link.a", + "$(SRCROOT)/Libraries/libtheora_link.a", + "$(SRCROOT)/Libraries/libpng_link.a", + "$(SRCROOT)/Libraries/libogg_link.a", + "$(SRCROOT)/Libraries/libjpeg_link.a", + "$(SRCROOT)/Libraries/libffmpeg_link.a", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "for i in ffmpeg theora vorbis jpeg ogg png z; do\n\tcp \"$SRCROOT\"/Libraries/lib${i}.a \"$SRCROOT\"/Libraries/lib${i}_link.a\n\tranlib \"$SRCROOT\"/Libraries/lib${i}_link.a\ndone"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AA29CD410558741A00961A51 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA29CD520558741A00961A51 /* RageUtil.cpp in Sources */, + AA29CD420558741A00961A51 /* RageBitmapTexture.cpp in Sources */, + AA29CD430558741A00961A51 /* RageDisplay.cpp in Sources */, + AA29CD440558741A00961A51 /* RageException.cpp in Sources */, + AA29CD450558741A00961A51 /* RageInput.cpp in Sources */, + AA29CD460558741A00961A51 /* RageInputDevice.cpp in Sources */, + AA29CD470558741A00961A51 /* RageLog.cpp in Sources */, + AA29CD480558741A00961A51 /* RageMath.cpp in Sources */, + AA29CD490558741A00961A51 /* RageSound.cpp in Sources */, + AA29CD4A0558741A00961A51 /* RageSoundManager.cpp in Sources */, + AA29CD4B0558741A00961A51 /* RageSoundReader_Preload.cpp in Sources */, + AA29CD4E0558741A00961A51 /* RageTexture.cpp in Sources */, + AA29CD4F0558741A00961A51 /* RageTextureManager.cpp in Sources */, + AA29CD500558741A00961A51 /* RageThreads.cpp in Sources */, + AA29CD510558741A00961A51 /* RageTimer.cpp in Sources */, + AA29CD560558741A00961A51 /* Character.cpp in Sources */, + AA29CD570558741A00961A51 /* CodeDetector.cpp in Sources */, + AA29CD580558741A00961A51 /* Course.cpp in Sources */, + AA29CD590558741A00961A51 /* Font.cpp in Sources */, + AA29CD5A0558741A00961A51 /* FontCharAliases.cpp in Sources */, + AA29CD5B0558741A00961A51 /* FontCharmaps.cpp in Sources */, + AA29CD5C0558741A00961A51 /* FontManager.cpp in Sources */, + AA29CD5D0558741A00961A51 /* GameConstantsAndTypes.cpp in Sources */, + AA29CD5F0558741A00961A51 /* GameInput.cpp in Sources */, + AA29CD600558741A00961A51 /* Grade.cpp in Sources */, + AA29CD610558741A00961A51 /* Inventory.cpp in Sources */, + AA29CD620558741A00961A51 /* LyricsLoader.cpp in Sources */, + AA29CD630558741A00961A51 /* NoteData.cpp in Sources */, + AA29CD640558741A00961A51 /* NoteDataWithScoring.cpp in Sources */, + AA29CD660558741A00961A51 /* NotesLoader.cpp in Sources */, + AA29CD670558741A00961A51 /* NotesLoaderBMS.cpp in Sources */, + AA29CD680558741A00961A51 /* NotesLoaderDWI.cpp in Sources */, + AA29CD690558741A00961A51 /* NotesLoaderKSF.cpp in Sources */, + AA29CD6A0558741A00961A51 /* NotesLoaderSM.cpp in Sources */, + AA29CD6B0558741A00961A51 /* NotesWriterDWI.cpp in Sources */, + AA29CD6C0558741A00961A51 /* NotesWriterSM.cpp in Sources */, + AA29CD6D0558741A00961A51 /* NoteTypes.cpp in Sources */, + AA29CD6E0558741A00961A51 /* Player.cpp in Sources */, + AA29CD6F0558741A00961A51 /* PlayerAI.cpp in Sources */, + AA29CD700558741A00961A51 /* PlayerNumber.cpp in Sources */, + AA29CD710558741A00961A51 /* PlayerOptions.cpp in Sources */, + AA29CD720558741A00961A51 /* SongOptions.cpp in Sources */, + AA29CD730558741A00961A51 /* StageStats.cpp in Sources */, + AA29CD750558741A00961A51 /* TitleSubstitution.cpp in Sources */, + AA29CD760558741A00961A51 /* IniFile.cpp in Sources */, + AA29CD770558741A00961A51 /* MsdFile.cpp in Sources */, + AA29CD780558741A00961A51 /* StepMania.cpp in Sources */, + AA29CD790558741A00961A51 /* Banner.cpp in Sources */, + AA29CD7A0558741A00961A51 /* BPMDisplay.cpp in Sources */, + AA29CD7B0558741A00961A51 /* CourseContentsList.cpp in Sources */, + AA29CD7D0558741A00961A51 /* DifficultyIcon.cpp in Sources */, + AA29CD800558741A00961A51 /* EditMenu.cpp in Sources */, + AA29CD810558741A00961A51 /* FadingBanner.cpp in Sources */, + AA29CD820558741A00961A51 /* GradeDisplay.cpp in Sources */, + AA29CD840558741A00961A51 /* GrooveRadar.cpp in Sources */, + AA29CD860558741A00961A51 /* HelpDisplay.cpp in Sources */, + AA29CD890558741A00961A51 /* MenuTimer.cpp in Sources */, + AA29CD8A0558741A00961A51 /* MeterDisplay.cpp in Sources */, + AA29CD8E0558741A00961A51 /* MusicWheel.cpp in Sources */, + AA29CD8F0558741A00961A51 /* MusicWheelItem.cpp in Sources */, + AA29CD920558741A00961A51 /* OptionsCursor.cpp in Sources */, + AA29CD930558741A00961A51 /* ScrollBar.cpp in Sources */, + AA29CD950558741A00961A51 /* SnapDisplay.cpp in Sources */, + AA29CD960558741A00961A51 /* TextBanner.cpp in Sources */, + AA29CD970558741A00961A51 /* WheelNotifyIcon.cpp in Sources */, + AA29CD980558741A00961A51 /* ArrowEffects.cpp in Sources */, + AA29CD990558741A00961A51 /* Background.cpp in Sources */, + AA29CD9A0558741A00961A51 /* BGAnimation.cpp in Sources */, + AA29CD9B0558741A00961A51 /* BGAnimationLayer.cpp in Sources */, + AA29CD9D0558741A00961A51 /* DancingCharacters.cpp in Sources */, + AA29CD9F0558741A00961A51 /* GhostArrowRow.cpp in Sources */, + AA29CDA30558741A00961A51 /* HoldJudgment.cpp in Sources */, + AA29CDA50558741A00961A51 /* LifeMeterBar.cpp in Sources */, + AA29CDA60558741A00961A51 /* LifeMeterBattery.cpp in Sources */, + AA29CDA70558741A00961A51 /* LyricDisplay.cpp in Sources */, + AA29CDA80558741A00961A51 /* NoteDisplay.cpp in Sources */, + AA29CDA90558741A00961A51 /* NoteField.cpp in Sources */, + AA29CDAA0558741A00961A51 /* ScoreDisplay.cpp in Sources */, + AA29CDAB0558741A00961A51 /* ScoreDisplayBattle.cpp in Sources */, + AA29CDAC0558741A00961A51 /* ScoreDisplayNormal.cpp in Sources */, + AA29CDAD0558741A00961A51 /* ScoreDisplayOni.cpp in Sources */, + AA29CDAE0558741A00961A51 /* ScoreDisplayRave.cpp in Sources */, + AA29CDB10558741A00961A51 /* Transition.cpp in Sources */, + AA29CDB20558741A00961A51 /* Actor.cpp in Sources */, + AA29CDB30558741A00961A51 /* ActorFrame.cpp in Sources */, + AA29CDB40558741A00961A51 /* ActorScroller.cpp in Sources */, + AA29CDB50558741A00961A51 /* BitmapText.cpp in Sources */, + AA29CDB70558741A00961A51 /* Model.cpp in Sources */, + AA29CDB80558741A00961A51 /* ModelTypes.cpp in Sources */, + AA29CDB90558741A00961A51 /* Sprite.cpp in Sources */, + AA29CDBA0558741A00961A51 /* Screen.cpp in Sources */, + AA29CDBB0558741A00961A51 /* ScreenAttract.cpp in Sources */, + AA29CDBE0558741A00961A51 /* ScreenDemonstration.cpp in Sources */, + AA29CDBF0558741A00961A51 /* ScreenEdit.cpp in Sources */, + AA29CDC00558741A00961A51 /* ScreenEditMenu.cpp in Sources */, + AA29CDC10558741A00961A51 /* ScreenEvaluation.cpp in Sources */, + AA29CDC50558741A00961A51 /* ScreenGameplay.cpp in Sources */, + AA29CDC60558741A00961A51 /* ScreenJukebox.cpp in Sources */, + AA29CDC90558741A00961A51 /* ScreenManager.cpp in Sources */, + AA29CDCA0558741A00961A51 /* ScreenMapControllers.cpp in Sources */, + AA29CDCB0558741A00961A51 /* ScreenMiniMenu.cpp in Sources */, + AA29CDCD0558741A00961A51 /* ScreenNameEntry.cpp in Sources */, + AA29CDCE0558741A00961A51 /* ScreenOptions.cpp in Sources */, + AA29CDCF0558741A00961A51 /* ScreenPlayerOptions.cpp in Sources */, + AA29CDD00558741A00961A51 /* ScreenPrompt.cpp in Sources */, + AA29CDD10558741A00961A51 /* ScreenRanking.cpp in Sources */, + AA29CDD30558741A00961A51 /* ScreenSandbox.cpp in Sources */, + AA29CDD40558741A00961A51 /* ScreenSelect.cpp in Sources */, + AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */, + AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */, + AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */, + AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */, + AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */, + AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */, + AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */, + AA29CDE60558741A00961A51 /* AnnouncerManager.cpp in Sources */, + AA29CDE70558741A00961A51 /* GameManager.cpp in Sources */, + AA29CDE80558741A00961A51 /* GameState.cpp in Sources */, + AA29CDE90558741A00961A51 /* InputFilter.cpp in Sources */, + AA29CDEA0558741A00961A51 /* InputMapper.cpp in Sources */, + AA29CDEB0558741A00961A51 /* InputQueue.cpp in Sources */, + AA29CDEC0558741A00961A51 /* NoteSkinManager.cpp in Sources */, + AA29CDED0558741A00961A51 /* PrefsManager.cpp in Sources */, + AA29CDEE0558741A00961A51 /* SongManager.cpp in Sources */, + AA29CDEF0558741A00961A51 /* ThemeManager.cpp in Sources */, + AA29CDF10558741A00961A51 /* RageSoundDriver_Null.cpp in Sources */, + AA29CDF50558741A00961A51 /* MovieTexture.cpp in Sources */, + AA29CDF60558741A00961A51 /* SongCacheIndex.cpp in Sources */, + AA29CDF70558741A00961A51 /* Song.cpp in Sources */, + AA29CDF80558741A00961A51 /* RandomSample.cpp in Sources */, + AA29CDFA0558741A00961A51 /* RageUtil_CharConversions.cpp in Sources */, + AA29CDFB0558741A00961A51 /* BannerCache.cpp in Sources */, + AA29CDFE0558741A00961A51 /* ScreenSelectMaster.cpp in Sources */, + AA29CE000558741A00961A51 /* CombinedLifeMeterTug.cpp in Sources */, + AA29CE010558741A00961A51 /* ScoreKeeperRave.cpp in Sources */, + AA29CE030558741A00961A51 /* get.c in Sources */, + AA29CE040558741A00961A51 /* maketables.c in Sources */, + AA29CE050558741A00961A51 /* pcre.c in Sources */, + AA29CE060558741A00961A51 /* study.c in Sources */, + AA29CE070558741A00961A51 /* RageUtil_FileDB.cpp in Sources */, + AA29CE090558741A00961A51 /* ActorUtil.cpp in Sources */, + AA29CE0B0558741A00961A51 /* ArchHooks.cpp in Sources */, + AA29CE0C0558741A00961A51 /* InputHandler.cpp in Sources */, + AA29CE0E0558741A00961A51 /* MovieTexture_Null.cpp in Sources */, + AA29CE100558741A00961A51 /* RageFile.cpp in Sources */, + AA29CE140558741A00961A51 /* CrashHandler.cpp in Sources */, + AA29CE150558741A00961A51 /* CrashHandlerChild.cpp in Sources */, + AA29CE170558741A00961A51 /* ver.cpp in Sources */, + AA29CE180558741A00961A51 /* Steps.cpp in Sources */, + AA29CE190558741A00961A51 /* NoteDataUtil.cpp in Sources */, + AA29CE1E0558741A00961A51 /* BeginnerHelper.cpp in Sources */, + AA29CE200558741A00961A51 /* MovieTexture_FFMpeg.cpp in Sources */, + AA29CE220558741A00961A51 /* ProfileManager.cpp in Sources */, + AA29CE230558741A00961A51 /* RageSoundReader_WAV.cpp in Sources */, + AA29CE240558741A00961A51 /* RageSoundReader_FileReader.cpp in Sources */, + AA29CE250558741A00961A51 /* RageSoundReader_MP3.cpp in Sources */, + AA29CE260558741A00961A51 /* RageSoundReader_Vorbisfile.cpp in Sources */, + AA29CE280558741A00961A51 /* RageSoundReader_Resample_Good.cpp in Sources */, + AA29CE290558741A00961A51 /* ScreenExit.cpp in Sources */, + AA29CE2B0558741A00961A51 /* ScreenOptionsMaster.cpp in Sources */, + AA29CE2C0558741A00961A51 /* ScreenOptionsMasterPrefs.cpp in Sources */, + AA29CE2D0558741A00961A51 /* ScreenReloadSongs.cpp in Sources */, + AA29CE2F0558741A00961A51 /* ScreenInstructions.cpp in Sources */, + AA29CE300558741A00961A51 /* ScreenHowToPlay.cpp in Sources */, + AA29CE310558741A00961A51 /* PercentageDisplay.cpp in Sources */, + AA29CE320558741A00961A51 /* ScoreDisplayPercentage.cpp in Sources */, + AA29CE340558741A00961A51 /* ScreenTestInput.cpp in Sources */, + AA29CE350558741A00961A51 /* ScreenBookkeeping.cpp in Sources */, + AA29CE360558741A00961A51 /* ScreenNameEntryTraditional.cpp in Sources */, + AA29CE370558741A00961A51 /* Bookkeeper.cpp in Sources */, + AA29CE380558741A00961A51 /* GraphDisplay.cpp in Sources */, + AA29CE390558741A00961A51 /* ComboGraph.cpp in Sources */, + AA29CE3A0558741A00961A51 /* Attack.cpp in Sources */, + AA9EC2F2055F5126007E5098 /* RageTextureID.cpp in Sources */, + AAC6DCE50567660A00B5D56F /* LightsManager.cpp in Sources */, + AAC6DDE00569C71000B5D56F /* PaneDisplay.cpp in Sources */, + AAC6DDE80569C80900B5D56F /* DifficultyList.cpp in Sources */, + AAB691F405704FA50078BED4 /* LightsDriver_SystemMessage.cpp in Sources */, + AAB005F20579B8CB000BBA58 /* AttackDisplay.cpp in Sources */, + AAB00861057F4F7A000BBA58 /* RageFileDriver.cpp in Sources */, + AAB00863057F4F7A000BBA58 /* RageFileDriverDirect.cpp in Sources */, + AAB00865057F4F7A000BBA58 /* RageFileManager.cpp in Sources */, + AA251B7705841FCE00027ACB /* RageFileDriverZip.cpp in Sources */, + AA28B47C058F2F5E0097C109 /* MemoryCardManager.cpp in Sources */, + AABE788E05912B0600E8BF50 /* DualScrollBar.cpp in Sources */, + AA729C440599B50D00779F33 /* TimingData.cpp in Sources */, + AA729C480599B54D00779F33 /* MemoryCardDisplay.cpp in Sources */, + AA729C520599B58D00779F33 /* ReceptorArrow.cpp in Sources */, + AA729C540599B58D00779F33 /* ReceptorArrowRow.cpp in Sources */, + AABE321C05ACD8ED001A0E84 /* ScreenEnding.cpp in Sources */, + AABE322005ACD931001A0E84 /* Foreground.cpp in Sources */, + AABE322405ACDA52001A0E84 /* RageFileDriverDirectHelpers.cpp in Sources */, + AAF4206705D63FA700056441 /* ModelManager.cpp in Sources */, + AAF4206B05D6400800056441 /* RageModelGeometry.cpp in Sources */, + AA50201F05D6D7B200ACEFD0 /* Profile.cpp in Sources */, + AABBD80805D8E9FC00B44FC2 /* HighScore.cpp in Sources */, + AABD0B3A05DF3F22004F7929 /* CryptManager.cpp in Sources */, + AAA71EA105EE154E00D2E8FF /* global.cpp in Sources */, + AAED6F2C0601C528002D2DEE /* Backtrace.cpp in Sources */, + AAED6F2E0601C528002D2DEE /* BacktraceNames.cpp in Sources */, + AA0A3DE8060513A00044E6B1 /* ScreenSetTime.cpp in Sources */, + AAE7804B060814AC0034E65F /* NetworkSyncManager.cpp in Sources */, + AAE7808706081A000034E65F /* ezsockets.cpp in Sources */, + AAE7812D0608249E0034E65F /* ActiveAttackList.cpp in Sources */, + AA1CD943060AE571003702C4 /* RageSoundDriver_Generic_Software.cpp in Sources */, + AAF7435B06110E8D00B19AD1 /* ScreenTestLights.cpp in Sources */, + AAF74590061181F700B19AD1 /* RageDisplay_Null.cpp in Sources */, + AAD36084062BB8AE00D0CED8 /* RageSoundPosMap.cpp in Sources */, + AA2828B3062FC0B8006F61EC /* SignalHandler.cpp in Sources */, + AA5C73FD0637A5F100AFB891 /* CourseUtil.cpp in Sources */, + AA5C73FF0637A5F100AFB891 /* SongUtil.cpp in Sources */, + AA5C74010637A5F100AFB891 /* StepsUtil.cpp in Sources */, + AAA6BFEC0644AB3700AFBBC8 /* ScreenWithMenuElements.cpp in Sources */, + AABBF6760659E78D00738526 /* RageSurface_Load_GIF.cpp in Sources */, + AABBF6780659E78D00738526 /* RageSurface_Load_JPEG.cpp in Sources */, + AABBF67A0659E78D00738526 /* RageSurface_Load_PNG.cpp in Sources */, + AABBF67C0659E78D00738526 /* RageSurface_Load_XPM.cpp in Sources */, + AABBF67E0659E78D00738526 /* RageSurface_Load.cpp in Sources */, + AAD6A714065E0FDF0042165A /* Difficulty.cpp in Sources */, + AA70E36A0663112800DAE1FD /* Trail.cpp in Sources */, + AA70E36C0663112800DAE1FD /* TrailUtil.cpp in Sources */, + AA42F5E8067068D30013509E /* ScreenNetworkOptions.cpp in Sources */, + AAD675F606795175006002B0 /* Dialog.cpp in Sources */, + AA60E0C2067992D7008ADC41 /* Threads_Pthreads.cpp in Sources */, + AA91587D067D2C2C00078E36 /* RageSurface.cpp in Sources */, + AA9091A1067ED43000C1FCFF /* RageSurface_Load_BMP.cpp in Sources */, + AA9091A5067ED46400C1FCFF /* RageSurface_Save_BMP.cpp in Sources */, + AA139C4706923EBE00C1F6ED /* Style.cpp in Sources */, + AAC9F330069E22BB00D53E2C /* GameSoundManager.cpp in Sources */, + AAC9F334069E22CF00D53E2C /* MemoryCardDriver.cpp in Sources */, + AA3D790106A275E90064B980 /* RadarValues.cpp in Sources */, + AA3D793306A279530064B980 /* DateTime.cpp in Sources */, + AA3A706206AA1645006F755E /* StyleUtil.cpp in Sources */, + AA9A78AB06B5C72200B03E97 /* Game.cpp in Sources */, + AA22CBA506DE909C0083BA97 /* ScreenNetSelectMusic.cpp in Sources */, + AAB9C8AF06EAF64400AD97CD /* RageSurfaceUtils_Palettize.cpp in Sources */, + AAB9C8B106EAF64400AD97CD /* RageSurfaceUtils.cpp in Sources */, + AAB9C8B506EAF66C00AD97CD /* ScreenNetEvaluation.cpp in Sources */, + AA64218806EC606F00C21584 /* RageFileDriverMemory.cpp in Sources */, + AA8A3E6406EDCD11002F25AB /* DarwinThreadHelpers.cpp in Sources */, + AA8A405106EEFF72002F25AB /* RageUtil_BackgroundLoader.cpp in Sources */, + AA21D59D0712ADE4008B825F /* ScreenDimensions.cpp in Sources */, + AAFC6CF1072A30440053AAD3 /* InputHandler_MonkeyKeyboard.cpp in Sources */, + AAAB2CDF072BD2EC00CD9FC9 /* AutoKeysounds.cpp in Sources */, + AAAB2CE3072BD2FA00CD9FC9 /* RageSoundMixBuffer.cpp in Sources */, + AA7ADC27072CAB7F00C50A7F /* RageSoundReader_Chain.cpp in Sources */, + AA7ADC29072CAB7F00C50A7F /* RageSoundUtil.cpp in Sources */, + AAF793F5074FE69E00D74516 /* ScreenNetRoom.cpp in Sources */, + AAF793F7074FE69E00D74516 /* ScreenNetSelectBase.cpp in Sources */, + AA1145DD075DFADF0050A3D1 /* ScreenPackages.cpp in Sources */, + AA1145DF075DFADF0050A3D1 /* ScreenSystemLayer.cpp in Sources */, + AA1B083C0762532800835464 /* Command.cpp in Sources */, + AA1B083E0762532800835464 /* GameCommand.cpp in Sources */, + AA1B08400762532800835464 /* Preference.cpp in Sources */, + AA0E04D4076C4CD500716D81 /* RageFileBasic.cpp in Sources */, + AA0E04D6076C4CD500716D81 /* RageFileDriverDeflate.cpp in Sources */, + AA0E04D8076C4CD500716D81 /* RageFileDriverSlice.cpp in Sources */, + AAEBC6CC07A20AFE00793F0E /* RageSurface_Save_JPEG.cpp in Sources */, + AAEBC6CE07A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp in Sources */, + AAEBC6D007A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp in Sources */, + AAEBC79107A4FF5600793F0E /* LuaManager.cpp in Sources */, + AACA593107B5E23400763545 /* RageFileDriverTimeout.cpp in Sources */, + AACA593407B5E23400763545 /* RageUtil_WorkerThread.cpp in Sources */, + AA8BD2A807C9391B00EA04E1 /* LuaReference.cpp in Sources */, + AA8BD2AA07C9391B00EA04E1 /* MessageManager.cpp in Sources */, + AA8BD2AC07C9391B00EA04E1 /* StatsManager.cpp in Sources */, + AA8BD2B107C9395400EA04E1 /* AutoActor.cpp in Sources */, + AA8BD2B607C939A200EA04E1 /* OptionRow.cpp in Sources */, + AA8BD2BF07C939F800EA04E1 /* PlayerStageStats.cpp in Sources */, + AA8BD2C107C939F800EA04E1 /* PlayerState.cpp in Sources */, + AA8BD2C207C939F800EA04E1 /* RollingNumbers.cpp in Sources */, + AA8BD2C407C939F800EA04E1 /* ScoreDisplayCalories.cpp in Sources */, + AA8BD2C707C93A1E00EA04E1 /* CommonMetrics.cpp in Sources */, + AA80C75407F20D0D00C99272 /* UnlockManager.cpp in Sources */, + AA80C75907F20D6600C99272 /* OptionRowHandler.cpp in Sources */, + AA80C75C07F20D8000C99272 /* ScreenMessage.cpp in Sources */, + AA6E6E0A07F518E800C3EBB4 /* Quad.cpp in Sources */, + AA7144B10809EEEC00545684 /* ScoreDisplayAliveTime.cpp in Sources */, + AA3D5E6008214C77002AA665 /* ScoreDisplayLifeTime.cpp in Sources */, + AA3D5E91082152B6002AA665 /* StreamDisplay.cpp in Sources */, + AA3D5E95082152E5002AA665 /* LifeMeterTime.cpp in Sources */, + AAAFE8200835E7FF00FC43E0 /* WheelBase.cpp in Sources */, + AAAFE8220835E7FF00FC43E0 /* WheelItemBase.cpp in Sources */, + AAAFE8300835E8B100FC43E0 /* RoomWheel.cpp in Sources */, + AA07A55F0843E72B00E33D21 /* ScreenDebugOverlay.cpp in Sources */, + AA07A5630843E72B00E33D21 /* ScreenSaveSync.cpp in Sources */, + AA07A5650843E72B00E33D21 /* ScreenSMOnlineLogin.cpp in Sources */, + AA07A5670843E72B00E33D21 /* ScreenSyncOverlay.cpp in Sources */, + AA7DA2F1085760E90057F1EA /* BackgroundUtil.cpp in Sources */, + AAB6B477085761B700CEE7BA /* ScreenSplash.cpp in Sources */, + AA8EE0760866E266002C51A7 /* LuaBinding.cpp in Sources */, + AA91ACB10878BB2C00FB2F8F /* RageTexturePreloader.cpp in Sources */, + AAFAB5C10889098600767BF7 /* ScreenOptionsEditProfile.cpp in Sources */, + AAFAB5CD08890B5200767BF7 /* GameLoop.cpp in Sources */, + AA77E74708B64B1400FA24CA /* CharacterManager.cpp in Sources */, + AA77E74F08B64B5600FA24CA /* CourseLoaderCRS.cpp in Sources */, + AA77E75108B64B5600FA24CA /* CourseWriterCRS.cpp in Sources */, + AA77E76508B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp in Sources */, + AA77E76708B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp in Sources */, + 1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */, + AACFBE2808E7D793005087FC /* ActorSound.cpp in Sources */, + AACFBE4F08E7D893005087FC /* ScreenGameplayLesson.cpp in Sources */, + AACFBE6308E7DBA8005087FC /* LuaExpressionTransform.cpp in Sources */, + AAF3442B08F1C36A0006EDB7 /* DynamicActorScroller.cpp in Sources */, + AAF34ADE0900AEBD0006EDB7 /* ScoreKeeperNormal.cpp in Sources */, + AAF34AED0900B00C0006EDB7 /* ScreenStatsOverlay.cpp in Sources */, + AAA372D40909934500141131 /* MovieTexture_Generic.cpp in Sources */, + AAA372D60909934500141131 /* MovieTexture_Theora.cpp in Sources */, + AA2FB639091212B0000FD574 /* LifeMeter.cpp in Sources */, + AAFBEED1094D7FCB000029DE /* SpecialFiles.cpp in Sources */, + AAFBEEEB094D807E000029DE /* ScreenOptionsManageEditSteps.cpp in Sources */, + AAFBEEED094D807E000029DE /* ScreenOptionsMemoryCard.cpp in Sources */, + AAFBEEEF094D807E000029DE /* ScreenServiceAction.cpp in Sources */, + AA0732900954381800F396C5 /* XmlFileUtil.cpp in Sources */, + AAD5219C095513DA00073D86 /* XmlFile.cpp in Sources */, + AADD1CC5095C233F0088C9DF /* LocalizedString.cpp in Sources */, + AABBFCD309838C3A00F077E2 /* SMMain.mm in Sources */, + AA44705509846B0800983E82 /* HIDDevice.cpp in Sources */, + AA44708F0984720900983E82 /* JoystickDevice.cpp in Sources */, + AA4470BD098476F600983E82 /* KeyboardDevice.cpp in Sources */, + AAC0C8C20984AE3B0075FC53 /* Tween.cpp in Sources */, + AA65877B098C322800CE55CC /* ScreenUnlockStatus.cpp in Sources */, + AA84B7070996F8370085EECB /* AdjustSync.cpp in Sources */, + AAB55EBB09A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp in Sources */, + AAB55EBD09A7E3D3008FDC69 /* ScreenUnlockBrowse.cpp in Sources */, + AAB55EBF09A7E3D3008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */, + AA1F9C4809AF1BF5002C15A8 /* PumpDevice.cpp in Sources */, + AA3E3DF109D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */, + AAEDFD690A03762B00590617 /* Crash.cpp in Sources */, + AA147F1B0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */, + AA8CF5180A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */, + AAD8F9370A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */, + AAAA11C70A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */, + AAE2D6D40A67481E00071546 /* ScoreKeeper.cpp in Sources */, + AA2EA0010A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */, + AA5D16570A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */, + AA5D166C0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */, + AAFE710B0A91ADE6005F2290 /* ActorProxy.cpp in Sources */, + AAFE711F0A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */, + AAFE71200A91B551005F2290 /* RoomInfoDisplay.cpp in Sources */, + AABE830E0A9524D400001678 /* ModsGroup.cpp in Sources */, + AAE77F580AC3B52500AEFC64 /* RageTypes.cpp in Sources */, + AAE780400AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */, + AAFAFC900AC8DB9F00427A6E /* EnumHelper.cpp in Sources */, + AA6999630ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */, + AAB779FB0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */, + AA608EC00B0F85E400B39AC4 /* DialogDriver.cpp in Sources */, + AA608FAD0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */, + AA6090E60B141D1C00B39AC4 /* GamePreferences.cpp in Sources */, + AAFB549E0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */, + AA31D5210B1EC6540016AB6B /* RageSoundReader_PitchChange.cpp in Sources */, + AA31D5230B1EC6540016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */, + AA4F27B20B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */, + AA4F27B40B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */, + AA909E1F0B45B676002852D3 /* RageDriver.cpp in Sources */, + AA909E240B45B696002852D3 /* LowLevelWindow.cpp in Sources */, + AA909E270B45B6AC002852D3 /* LoadingWindow.cpp in Sources */, + AA909E3D0B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */, + AA909E3F0B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */, + AA909E490B45B93E002852D3 /* LightsDriver.cpp in Sources */, + AAEBF5600B5C517E005F3C7C /* SampleHistory.cpp in Sources */, + AAEBF57E0B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */, + AA07008A0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */, + AA7C8DB00B68CB2200FD9940 /* GameplayAssist.cpp in Sources */, + AA059ABE0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */, + AA05A0B20BA2EFF3006F8139 /* OptionsList.cpp in Sources */, + AA2C9CA30BAD6F55002441E9 /* CodeSet.cpp in Sources */, + AA2CA8A10BB745BD002441E9 /* ScreenContinue.cpp in Sources */, + 3688B8530BD42DAA004186AD /* NotesLoaderMidi.cpp in Sources */, + AA1893640BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */, + AA1893660BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */, + AA3396BA0BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */, + AAB3B7DC0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */, + AAB3BB590C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */, + AAA7D4C90C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */, + AA11A20F0DC5A1B0006BD8AC /* ModIcon.cpp in Sources */, + AA11A2110DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */, + AA6C6AD80DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */, + AA6C6ADE0DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */, + AA6C6AE50DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */, + AA6C6B030DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */, + AA6C6B080DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */, + AA6C6B0E0DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */, + AAC0BFE10E2951EC00F56EEB /* CryptHelpers.cpp in Sources */, + EEC7863F0E58208B00F559BC /* StepsDisplay.cpp in Sources */, + 367D575B0EDE56F200B46814 /* ScreenHighScores.cpp in Sources */, + AAFF41A30F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */, + 3659B56F0F902143002B6B68 /* CommandLineActions.cpp in Sources */, + 36CA531C0F91564A0063D59D /* ScreenOptionsCourseOverview.cpp in Sources */, + 36CA53200F9156860063D59D /* ScreenOptionsEditCourse.cpp in Sources */, + EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */, + EEA7C84310A805A300082E7B /* ScreenPackagesSSC.cpp in Sources */, + 36C6888311297FFE00453295 /* RageFileDriverReadAhead.cpp in Sources */, + 36C6888511297FFE00453295 /* RageFileManager_ReadAhead.cpp in Sources */, + EE906F6612BF3A1B00146C96 /* ScreenInstallOverlay.cpp in Sources */, + EE906F8212BF3AF800146C96 /* JsonUtil.cpp in Sources */, + EE906F8A12BF3C7C00146C96 /* FileDownload.cpp in Sources */, + 2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */, + 2BA792601304F20D002BD8E1 /* NotesWriterSSC.cpp in Sources */, + 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */, + EE879B60132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp in Sources */, + EE879B62132DEE720078FDDC /* RageDisplay_Legacy.cpp in Sources */, + EE879BC3132E06C50078FDDC /* glew.c in Sources */, + 2B76698C132FF71500586512 /* NotesLoaderSMA.cpp in Sources */, + 2BD06FF1137242680018CB9F /* json_reader.cpp in Sources */, + 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */, + 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA40D38009A08D650068C0D5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA40D38109A08D650068C0D5 /* RageUtil.cpp in Sources */, + AA40D38209A08D650068C0D5 /* RageBitmapTexture.cpp in Sources */, + AA40D38309A08D650068C0D5 /* RageDisplay.cpp in Sources */, + AA40D38409A08D650068C0D5 /* RageException.cpp in Sources */, + AA40D38509A08D650068C0D5 /* RageInput.cpp in Sources */, + AA40D38609A08D650068C0D5 /* RageInputDevice.cpp in Sources */, + AA40D38709A08D650068C0D5 /* RageLog.cpp in Sources */, + AA40D38809A08D650068C0D5 /* RageMath.cpp in Sources */, + AA40D38909A08D650068C0D5 /* RageSound.cpp in Sources */, + AA40D38A09A08D650068C0D5 /* RageSoundManager.cpp in Sources */, + AA40D38B09A08D650068C0D5 /* RageSoundReader_Preload.cpp in Sources */, + AA40D38D09A08D650068C0D5 /* RageTexture.cpp in Sources */, + AA40D38E09A08D650068C0D5 /* RageTextureManager.cpp in Sources */, + AA40D38F09A08D650068C0D5 /* RageThreads.cpp in Sources */, + AA40D39009A08D650068C0D5 /* RageTimer.cpp in Sources */, + AA40D39109A08D650068C0D5 /* Character.cpp in Sources */, + AA40D39209A08D650068C0D5 /* CodeDetector.cpp in Sources */, + AA40D39309A08D650068C0D5 /* Course.cpp in Sources */, + AA40D39409A08D650068C0D5 /* Font.cpp in Sources */, + AA40D39509A08D650068C0D5 /* FontCharAliases.cpp in Sources */, + AA40D39609A08D650068C0D5 /* FontCharmaps.cpp in Sources */, + AA40D39709A08D650068C0D5 /* FontManager.cpp in Sources */, + AA40D39809A08D650068C0D5 /* GameConstantsAndTypes.cpp in Sources */, + AA40D39909A08D650068C0D5 /* GameInput.cpp in Sources */, + AA40D39A09A08D650068C0D5 /* Grade.cpp in Sources */, + AA40D39B09A08D650068C0D5 /* Inventory.cpp in Sources */, + AA40D39C09A08D650068C0D5 /* LyricsLoader.cpp in Sources */, + AA40D39D09A08D650068C0D5 /* NoteData.cpp in Sources */, + AA40D39E09A08D650068C0D5 /* NoteDataWithScoring.cpp in Sources */, + AA40D3A009A08D650068C0D5 /* NotesLoader.cpp in Sources */, + AA40D3A109A08D650068C0D5 /* NotesLoaderBMS.cpp in Sources */, + AA40D3A209A08D650068C0D5 /* NotesLoaderDWI.cpp in Sources */, + AA40D3A309A08D650068C0D5 /* NotesLoaderKSF.cpp in Sources */, + AA40D3A409A08D650068C0D5 /* NotesLoaderSM.cpp in Sources */, + AA40D3A509A08D650068C0D5 /* NotesWriterDWI.cpp in Sources */, + AA40D3A609A08D650068C0D5 /* NotesWriterSM.cpp in Sources */, + AA40D3A709A08D650068C0D5 /* NoteTypes.cpp in Sources */, + AA40D3A809A08D650068C0D5 /* Player.cpp in Sources */, + AA40D3A909A08D650068C0D5 /* PlayerAI.cpp in Sources */, + AA40D3AA09A08D650068C0D5 /* PlayerNumber.cpp in Sources */, + AA40D3AB09A08D650068C0D5 /* PlayerOptions.cpp in Sources */, + AA40D3AC09A08D650068C0D5 /* SongOptions.cpp in Sources */, + AA40D3AD09A08D650068C0D5 /* StageStats.cpp in Sources */, + AA40D3AE09A08D650068C0D5 /* TitleSubstitution.cpp in Sources */, + AA40D3AF09A08D650068C0D5 /* IniFile.cpp in Sources */, + AA40D3B009A08D650068C0D5 /* MsdFile.cpp in Sources */, + AA40D3B109A08D650068C0D5 /* StepMania.cpp in Sources */, + AA40D3B209A08D650068C0D5 /* Banner.cpp in Sources */, + AA40D3B309A08D650068C0D5 /* BPMDisplay.cpp in Sources */, + AA40D3B409A08D650068C0D5 /* CourseContentsList.cpp in Sources */, + AA40D3B609A08D650068C0D5 /* DifficultyIcon.cpp in Sources */, + AA40D3B909A08D650068C0D5 /* EditMenu.cpp in Sources */, + AA40D3BA09A08D650068C0D5 /* FadingBanner.cpp in Sources */, + AA40D3BB09A08D650068C0D5 /* GradeDisplay.cpp in Sources */, + AA40D3BC09A08D650068C0D5 /* GrooveRadar.cpp in Sources */, + AA40D3BE09A08D650068C0D5 /* HelpDisplay.cpp in Sources */, + AA40D3BF09A08D650068C0D5 /* MenuTimer.cpp in Sources */, + AA40D3C009A08D650068C0D5 /* MeterDisplay.cpp in Sources */, + AA40D3C409A08D650068C0D5 /* MusicWheel.cpp in Sources */, + AA40D3C509A08D650068C0D5 /* MusicWheelItem.cpp in Sources */, + AA40D3C809A08D650068C0D5 /* OptionsCursor.cpp in Sources */, + AA40D3C909A08D650068C0D5 /* ScrollBar.cpp in Sources */, + AA40D3CB09A08D650068C0D5 /* SnapDisplay.cpp in Sources */, + AA40D3CC09A08D650068C0D5 /* TextBanner.cpp in Sources */, + AA40D3CD09A08D650068C0D5 /* WheelNotifyIcon.cpp in Sources */, + AA40D3CE09A08D650068C0D5 /* ArrowEffects.cpp in Sources */, + AA40D3CF09A08D650068C0D5 /* Background.cpp in Sources */, + AA40D3D009A08D650068C0D5 /* BGAnimation.cpp in Sources */, + AA40D3D109A08D650068C0D5 /* BGAnimationLayer.cpp in Sources */, + AA40D3D309A08D650068C0D5 /* DancingCharacters.cpp in Sources */, + AA40D3D409A08D650068C0D5 /* GhostArrowRow.cpp in Sources */, + AA40D3D509A08D650068C0D5 /* HoldJudgment.cpp in Sources */, + AA40D3D709A08D650068C0D5 /* LifeMeterBar.cpp in Sources */, + AA40D3D809A08D650068C0D5 /* LifeMeterBattery.cpp in Sources */, + AA40D3D909A08D650068C0D5 /* LyricDisplay.cpp in Sources */, + AA40D3DA09A08D650068C0D5 /* NoteDisplay.cpp in Sources */, + AA40D3DB09A08D650068C0D5 /* NoteField.cpp in Sources */, + AA40D3DC09A08D650068C0D5 /* ScoreDisplay.cpp in Sources */, + AA40D3DD09A08D650068C0D5 /* ScoreDisplayBattle.cpp in Sources */, + AA40D3DE09A08D650068C0D5 /* ScoreDisplayNormal.cpp in Sources */, + AA40D3DF09A08D650068C0D5 /* ScoreDisplayOni.cpp in Sources */, + AA40D3E009A08D650068C0D5 /* ScoreDisplayRave.cpp in Sources */, + AA40D3E109A08D650068C0D5 /* Transition.cpp in Sources */, + AA40D3E209A08D650068C0D5 /* Actor.cpp in Sources */, + AA40D3E309A08D650068C0D5 /* ActorFrame.cpp in Sources */, + AA40D3E409A08D650068C0D5 /* ActorScroller.cpp in Sources */, + AA40D3E509A08D650068C0D5 /* BitmapText.cpp in Sources */, + AA40D3E609A08D650068C0D5 /* Model.cpp in Sources */, + AA40D3E709A08D650068C0D5 /* ModelTypes.cpp in Sources */, + AA40D3E809A08D650068C0D5 /* Sprite.cpp in Sources */, + AA40D3E909A08D650068C0D5 /* Screen.cpp in Sources */, + AA40D3EA09A08D650068C0D5 /* ScreenAttract.cpp in Sources */, + AA40D3EC09A08D650068C0D5 /* ScreenDemonstration.cpp in Sources */, + AA40D3ED09A08D650068C0D5 /* ScreenEdit.cpp in Sources */, + AA40D3EE09A08D650068C0D5 /* ScreenEditMenu.cpp in Sources */, + AA40D3EF09A08D650068C0D5 /* ScreenEvaluation.cpp in Sources */, + AA40D3F209A08D650068C0D5 /* ScreenGameplay.cpp in Sources */, + AA40D3F309A08D650068C0D5 /* ScreenJukebox.cpp in Sources */, + AA40D3F409A08D650068C0D5 /* ScreenManager.cpp in Sources */, + AA40D3F509A08D650068C0D5 /* ScreenMapControllers.cpp in Sources */, + AA40D3F609A08D650068C0D5 /* ScreenMiniMenu.cpp in Sources */, + AA40D3F809A08D650068C0D5 /* ScreenNameEntry.cpp in Sources */, + AA40D3F909A08D650068C0D5 /* ScreenOptions.cpp in Sources */, + AA40D3FA09A08D650068C0D5 /* ScreenPlayerOptions.cpp in Sources */, + AA40D3FB09A08D650068C0D5 /* ScreenPrompt.cpp in Sources */, + AA40D3FC09A08D650068C0D5 /* ScreenRanking.cpp in Sources */, + AA40D3FD09A08D650068C0D5 /* ScreenSandbox.cpp in Sources */, + AA40D3FE09A08D650068C0D5 /* ScreenSelect.cpp in Sources */, + AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */, + AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */, + AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */, + AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */, + AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */, + AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */, + AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */, + AA40D40B09A08D650068C0D5 /* AnnouncerManager.cpp in Sources */, + AA40D40C09A08D650068C0D5 /* GameManager.cpp in Sources */, + AA40D40D09A08D650068C0D5 /* GameState.cpp in Sources */, + AA40D40E09A08D650068C0D5 /* InputFilter.cpp in Sources */, + AA40D40F09A08D650068C0D5 /* InputMapper.cpp in Sources */, + AA40D41009A08D650068C0D5 /* InputQueue.cpp in Sources */, + AA40D41109A08D650068C0D5 /* NoteSkinManager.cpp in Sources */, + AA40D41209A08D650068C0D5 /* PrefsManager.cpp in Sources */, + AA40D41309A08D650068C0D5 /* SongManager.cpp in Sources */, + AA40D41409A08D650068C0D5 /* ThemeManager.cpp in Sources */, + AA40D41509A08D650068C0D5 /* RageSoundDriver_Null.cpp in Sources */, + AA40D41709A08D650068C0D5 /* MovieTexture.cpp in Sources */, + AA40D41809A08D650068C0D5 /* SongCacheIndex.cpp in Sources */, + AA40D41909A08D650068C0D5 /* Song.cpp in Sources */, + AA40D41A09A08D650068C0D5 /* RandomSample.cpp in Sources */, + AA40D41C09A08D650068C0D5 /* RageUtil_CharConversions.cpp in Sources */, + AA40D41D09A08D650068C0D5 /* BannerCache.cpp in Sources */, + AA40D42009A08D650068C0D5 /* ScreenSelectMaster.cpp in Sources */, + AA40D42109A08D650068C0D5 /* CombinedLifeMeterTug.cpp in Sources */, + AA40D42209A08D650068C0D5 /* ScoreKeeperRave.cpp in Sources */, + AA40D42309A08D650068C0D5 /* get.c in Sources */, + AA40D42409A08D650068C0D5 /* maketables.c in Sources */, + AA40D42509A08D650068C0D5 /* pcre.c in Sources */, + AA40D42609A08D650068C0D5 /* study.c in Sources */, + AA40D42709A08D650068C0D5 /* RageUtil_FileDB.cpp in Sources */, + AA40D42909A08D650068C0D5 /* ActorUtil.cpp in Sources */, + AA40D42A09A08D650068C0D5 /* ArchHooks.cpp in Sources */, + AA40D42B09A08D650068C0D5 /* InputHandler.cpp in Sources */, + AA40D42D09A08D650068C0D5 /* MovieTexture_Null.cpp in Sources */, + AA40D42E09A08D650068C0D5 /* RageFile.cpp in Sources */, + AA40D42F09A08D650068C0D5 /* CrashHandler.cpp in Sources */, + AA40D43009A08D650068C0D5 /* CrashHandlerChild.cpp in Sources */, + AA40D43109A08D650068C0D5 /* ver.cpp in Sources */, + AA40D43209A08D650068C0D5 /* Steps.cpp in Sources */, + AA40D43309A08D650068C0D5 /* NoteDataUtil.cpp in Sources */, + AA40D43409A08D650068C0D5 /* BeginnerHelper.cpp in Sources */, + AA40D43609A08D650068C0D5 /* MovieTexture_FFMpeg.cpp in Sources */, + AA40D43709A08D650068C0D5 /* ProfileManager.cpp in Sources */, + AA40D43809A08D650068C0D5 /* RageSoundReader_WAV.cpp in Sources */, + AA40D43909A08D650068C0D5 /* RageSoundReader_FileReader.cpp in Sources */, + AA40D43B09A08D650068C0D5 /* RageSoundReader_Vorbisfile.cpp in Sources */, + AA40D43D09A08D650068C0D5 /* RageSoundReader_Resample_Good.cpp in Sources */, + AA40D43E09A08D650068C0D5 /* ScreenExit.cpp in Sources */, + AA40D43F09A08D650068C0D5 /* ScreenOptionsMaster.cpp in Sources */, + AA40D44009A08D650068C0D5 /* ScreenOptionsMasterPrefs.cpp in Sources */, + AA40D44109A08D650068C0D5 /* ScreenReloadSongs.cpp in Sources */, + AA40D44209A08D650068C0D5 /* ScreenInstructions.cpp in Sources */, + AA40D44309A08D650068C0D5 /* ScreenHowToPlay.cpp in Sources */, + AA40D44409A08D650068C0D5 /* PercentageDisplay.cpp in Sources */, + AA40D44509A08D650068C0D5 /* ScoreDisplayPercentage.cpp in Sources */, + AA40D44709A08D650068C0D5 /* ScreenTestInput.cpp in Sources */, + AA40D44809A08D650068C0D5 /* ScreenBookkeeping.cpp in Sources */, + AA40D44909A08D650068C0D5 /* ScreenNameEntryTraditional.cpp in Sources */, + AA40D44A09A08D650068C0D5 /* Bookkeeper.cpp in Sources */, + AA40D44B09A08D650068C0D5 /* GraphDisplay.cpp in Sources */, + AA40D44C09A08D650068C0D5 /* ComboGraph.cpp in Sources */, + AA40D44D09A08D650068C0D5 /* Attack.cpp in Sources */, + AA40D44E09A08D650068C0D5 /* RageTextureID.cpp in Sources */, + AA40D44F09A08D650068C0D5 /* LightsManager.cpp in Sources */, + AA40D45009A08D650068C0D5 /* PaneDisplay.cpp in Sources */, + AA40D45109A08D650068C0D5 /* DifficultyList.cpp in Sources */, + AA40D45209A08D650068C0D5 /* LightsDriver_SystemMessage.cpp in Sources */, + AA40D45309A08D650068C0D5 /* AttackDisplay.cpp in Sources */, + AA40D45409A08D650068C0D5 /* RageFileDriver.cpp in Sources */, + AA40D45509A08D650068C0D5 /* RageFileDriverDirect.cpp in Sources */, + AA40D45609A08D650068C0D5 /* RageFileManager.cpp in Sources */, + AA40D45709A08D650068C0D5 /* RageFileDriverZip.cpp in Sources */, + AA40D45809A08D650068C0D5 /* MemoryCardManager.cpp in Sources */, + AA40D45909A08D650068C0D5 /* DualScrollBar.cpp in Sources */, + AA40D45A09A08D650068C0D5 /* TimingData.cpp in Sources */, + AA40D45B09A08D650068C0D5 /* MemoryCardDisplay.cpp in Sources */, + AA40D45C09A08D650068C0D5 /* ReceptorArrow.cpp in Sources */, + AA40D45D09A08D650068C0D5 /* ReceptorArrowRow.cpp in Sources */, + AA40D45E09A08D650068C0D5 /* ScreenEnding.cpp in Sources */, + AA40D45F09A08D650068C0D5 /* Foreground.cpp in Sources */, + AA40D46009A08D650068C0D5 /* RageFileDriverDirectHelpers.cpp in Sources */, + AA40D46109A08D650068C0D5 /* ModelManager.cpp in Sources */, + AA40D46209A08D650068C0D5 /* RageModelGeometry.cpp in Sources */, + AA40D46309A08D650068C0D5 /* Profile.cpp in Sources */, + AA40D46409A08D650068C0D5 /* HighScore.cpp in Sources */, + AA40D46509A08D650068C0D5 /* CryptManager.cpp in Sources */, + AA40D46609A08D650068C0D5 /* global.cpp in Sources */, + AA40D46709A08D650068C0D5 /* Backtrace.cpp in Sources */, + AA40D46809A08D650068C0D5 /* BacktraceNames.cpp in Sources */, + AA40D46909A08D650068C0D5 /* ScreenSetTime.cpp in Sources */, + AA40D46A09A08D650068C0D5 /* NetworkSyncManager.cpp in Sources */, + AA40D46C09A08D650068C0D5 /* ActiveAttackList.cpp in Sources */, + AA40D46D09A08D650068C0D5 /* RageSoundDriver_Generic_Software.cpp in Sources */, + AA40D46E09A08D650068C0D5 /* ScreenTestLights.cpp in Sources */, + AA40D46F09A08D650068C0D5 /* RageDisplay_Null.cpp in Sources */, + AA40D47409A08D650068C0D5 /* RageSoundPosMap.cpp in Sources */, + AA40D47509A08D650068C0D5 /* SignalHandler.cpp in Sources */, + AA40D47609A08D650068C0D5 /* CourseUtil.cpp in Sources */, + AA40D47709A08D650068C0D5 /* SongUtil.cpp in Sources */, + AA40D47809A08D650068C0D5 /* StepsUtil.cpp in Sources */, + AA40D47909A08D650068C0D5 /* ScreenWithMenuElements.cpp in Sources */, + AA40D49009A08D650068C0D5 /* RageSurface_Load_GIF.cpp in Sources */, + AA40D49109A08D650068C0D5 /* RageSurface_Load_JPEG.cpp in Sources */, + AA40D49209A08D650068C0D5 /* RageSurface_Load_PNG.cpp in Sources */, + AA40D49309A08D650068C0D5 /* RageSurface_Load_XPM.cpp in Sources */, + AA40D49409A08D650068C0D5 /* RageSurface_Load.cpp in Sources */, + AA40D49609A08D650068C0D5 /* Difficulty.cpp in Sources */, + AA40D49709A08D650068C0D5 /* Trail.cpp in Sources */, + AA40D49809A08D650068C0D5 /* TrailUtil.cpp in Sources */, + AA40D49909A08D650068C0D5 /* ScreenNetworkOptions.cpp in Sources */, + AA40D49A09A08D650068C0D5 /* Dialog.cpp in Sources */, + AA40D49C09A08D650068C0D5 /* Threads_Pthreads.cpp in Sources */, + AA40D49D09A08D650068C0D5 /* RageSurface.cpp in Sources */, + AA40D49E09A08D650068C0D5 /* RageSurface_Load_BMP.cpp in Sources */, + AA40D49F09A08D650068C0D5 /* RageSurface_Save_BMP.cpp in Sources */, + AA40D4A009A08D650068C0D5 /* Style.cpp in Sources */, + AA40D4A109A08D650068C0D5 /* GameSoundManager.cpp in Sources */, + AA40D4A209A08D650068C0D5 /* MemoryCardDriver.cpp in Sources */, + AA40D4A309A08D650068C0D5 /* RadarValues.cpp in Sources */, + AA40D4A409A08D650068C0D5 /* DateTime.cpp in Sources */, + AA40D4A509A08D650068C0D5 /* StyleUtil.cpp in Sources */, + AA40D4A609A08D650068C0D5 /* Game.cpp in Sources */, + AA40D4A709A08D650068C0D5 /* ScreenNetSelectMusic.cpp in Sources */, + AA40D4A909A08D650068C0D5 /* RageSurfaceUtils_Palettize.cpp in Sources */, + AA40D4AA09A08D650068C0D5 /* RageSurfaceUtils.cpp in Sources */, + AA40D4AB09A08D650068C0D5 /* ScreenNetEvaluation.cpp in Sources */, + AA40D4AC09A08D650068C0D5 /* RageFileDriverMemory.cpp in Sources */, + AA40D4AD09A08D650068C0D5 /* DarwinThreadHelpers.cpp in Sources */, + AA40D4AE09A08D650068C0D5 /* RageUtil_BackgroundLoader.cpp in Sources */, + AA40D4AF09A08D650068C0D5 /* ScreenDimensions.cpp in Sources */, + AA40D4B009A08D650068C0D5 /* InputHandler_MonkeyKeyboard.cpp in Sources */, + AA40D4B109A08D650068C0D5 /* AutoKeysounds.cpp in Sources */, + AA40D4B209A08D650068C0D5 /* RageSoundMixBuffer.cpp in Sources */, + AA40D4B309A08D650068C0D5 /* RageSoundReader_Chain.cpp in Sources */, + AA40D4B409A08D650068C0D5 /* RageSoundUtil.cpp in Sources */, + AA40D4B509A08D650068C0D5 /* ScreenNetRoom.cpp in Sources */, + AA40D4B609A08D650068C0D5 /* ScreenNetSelectBase.cpp in Sources */, + AA40D4B709A08D650068C0D5 /* ScreenPackages.cpp in Sources */, + AA40D4B809A08D650068C0D5 /* ScreenSystemLayer.cpp in Sources */, + AA40D4B909A08D650068C0D5 /* Command.cpp in Sources */, + AA40D4BA09A08D650068C0D5 /* GameCommand.cpp in Sources */, + AA40D4BB09A08D650068C0D5 /* Preference.cpp in Sources */, + AA40D4BC09A08D650068C0D5 /* RageFileBasic.cpp in Sources */, + AA40D4BD09A08D650068C0D5 /* RageFileDriverDeflate.cpp in Sources */, + AA40D4BE09A08D650068C0D5 /* RageFileDriverSlice.cpp in Sources */, + AA40D4BF09A08D650068C0D5 /* RageSurface_Save_JPEG.cpp in Sources */, + AA40D4C009A08D650068C0D5 /* RageSurfaceUtils_Dither.cpp in Sources */, + AA40D4C109A08D650068C0D5 /* RageSurfaceUtils_Zoom.cpp in Sources */, + AA40D4C209A08D650068C0D5 /* LuaManager.cpp in Sources */, + AA40D4C609A08D650068C0D5 /* RageFileDriverTimeout.cpp in Sources */, + AA40D4C709A08D650068C0D5 /* RageUtil_WorkerThread.cpp in Sources */, + AA40D4C809A08D650068C0D5 /* LuaReference.cpp in Sources */, + AA40D4C909A08D650068C0D5 /* MessageManager.cpp in Sources */, + AA40D4CA09A08D650068C0D5 /* StatsManager.cpp in Sources */, + AA40D4CB09A08D650068C0D5 /* AutoActor.cpp in Sources */, + AA40D4CC09A08D650068C0D5 /* OptionRow.cpp in Sources */, + AA40D4CD09A08D650068C0D5 /* PlayerStageStats.cpp in Sources */, + AA40D4CE09A08D650068C0D5 /* PlayerState.cpp in Sources */, + AA40D4CF09A08D650068C0D5 /* RollingNumbers.cpp in Sources */, + AA40D4D009A08D650068C0D5 /* ScoreDisplayCalories.cpp in Sources */, + AA40D4D109A08D650068C0D5 /* CommonMetrics.cpp in Sources */, + AA40D4D209A08D650068C0D5 /* UnlockManager.cpp in Sources */, + AA40D4D309A08D650068C0D5 /* OptionRowHandler.cpp in Sources */, + AA40D4D409A08D650068C0D5 /* ScreenMessage.cpp in Sources */, + AA40D4D509A08D650068C0D5 /* Quad.cpp in Sources */, + AA40D4D609A08D650068C0D5 /* ScoreDisplayAliveTime.cpp in Sources */, + AA40D4D709A08D650068C0D5 /* ScoreDisplayLifeTime.cpp in Sources */, + AA40D4D809A08D650068C0D5 /* StreamDisplay.cpp in Sources */, + AA40D4D909A08D650068C0D5 /* LifeMeterTime.cpp in Sources */, + AA40D4DA09A08D650068C0D5 /* WheelBase.cpp in Sources */, + AA40D4DB09A08D650068C0D5 /* WheelItemBase.cpp in Sources */, + AA40D4DD09A08D650068C0D5 /* ScreenDebugOverlay.cpp in Sources */, + AA40D4DF09A08D650068C0D5 /* ScreenSaveSync.cpp in Sources */, + AA40D4E109A08D650068C0D5 /* ScreenSyncOverlay.cpp in Sources */, + AA40D4E209A08D650068C0D5 /* BackgroundUtil.cpp in Sources */, + AA40D4E309A08D650068C0D5 /* ScreenSplash.cpp in Sources */, + AA40D4E409A08D650068C0D5 /* LuaBinding.cpp in Sources */, + AA40D4E509A08D650068C0D5 /* RageTexturePreloader.cpp in Sources */, + AA40D4E609A08D650068C0D5 /* ScreenOptionsEditProfile.cpp in Sources */, + AA40D4E709A08D650068C0D5 /* GameLoop.cpp in Sources */, + AA40D4E809A08D650068C0D5 /* CharacterManager.cpp in Sources */, + AA40D4E909A08D650068C0D5 /* CourseLoaderCRS.cpp in Sources */, + AA40D4EA09A08D650068C0D5 /* CourseWriterCRS.cpp in Sources */, + AA40D4EE09A08D650068C0D5 /* ScreenOptionsManageCourses.cpp in Sources */, + AA40D4EF09A08D650068C0D5 /* ScreenOptionsManageProfiles.cpp in Sources */, + AA40D4F109A08D650068C0D5 /* ScreenGameplayNormal.cpp in Sources */, + AA40D4F209A08D650068C0D5 /* ActorSound.cpp in Sources */, + AA40D4F409A08D650068C0D5 /* ScreenGameplayLesson.cpp in Sources */, + AA40D4F709A08D650068C0D5 /* LuaExpressionTransform.cpp in Sources */, + AA40D4F809A08D650068C0D5 /* DynamicActorScroller.cpp in Sources */, + AA40D4F909A08D650068C0D5 /* ScoreKeeperNormal.cpp in Sources */, + AA40D4FA09A08D650068C0D5 /* ScreenStatsOverlay.cpp in Sources */, + AA40D4FC09A08D650068C0D5 /* MovieTexture_Generic.cpp in Sources */, + AA40D4FD09A08D650068C0D5 /* MovieTexture_Theora.cpp in Sources */, + AA40D4FF09A08D650068C0D5 /* LifeMeter.cpp in Sources */, + AA40D50109A08D650068C0D5 /* SpecialFiles.cpp in Sources */, + AA40D50209A08D650068C0D5 /* ScreenOptionsManageEditSteps.cpp in Sources */, + AA40D50309A08D650068C0D5 /* ScreenOptionsMemoryCard.cpp in Sources */, + AA40D50409A08D650068C0D5 /* ScreenServiceAction.cpp in Sources */, + AA40D50609A08D650068C0D5 /* XmlFileUtil.cpp in Sources */, + AA40D50709A08D650068C0D5 /* XmlFile.cpp in Sources */, + AA40D50809A08D650068C0D5 /* LocalizedString.cpp in Sources */, + AA40D50D09A08D650068C0D5 /* SMMain.mm in Sources */, + AA40D50E09A08D650068C0D5 /* HIDDevice.cpp in Sources */, + AA40D50F09A08D650068C0D5 /* JoystickDevice.cpp in Sources */, + AA40D51009A08D650068C0D5 /* KeyboardDevice.cpp in Sources */, + AA40D51109A08D650068C0D5 /* Tween.cpp in Sources */, + AA40D51209A08D650068C0D5 /* ScreenUnlockStatus.cpp in Sources */, + AA40D51309A08D650068C0D5 /* AdjustSync.cpp in Sources */, + AAB5600009A84E63008FDC69 /* ScreenUnlockCelebrate.cpp in Sources */, + AAB5600209A84E65008FDC69 /* ScreenUnlockBrowse.cpp in Sources */, + AA1F9C4A09AF1BF5002C15A8 /* PumpDevice.cpp in Sources */, + AA3E3DF209D96A1400A259C7 /* CrashHandlerInternal.cpp in Sources */, + F4BC045409E6B578003F770B /* ScreenGameplaySyncMachine.cpp in Sources */, + AAEDFD6A0A03762B00590617 /* Crash.cpp in Sources */, + AA147F1D0A0F78D8006EADF6 /* VectorHelper.cpp in Sources */, + AA8CF51A0A4518BE0005F1B4 /* RageSoundDriver_AU.cpp in Sources */, + AAD8F9350A4B97DF000311CF /* ScreenGameplayShared.cpp in Sources */, + AAAA11C90A662F9D00B2BD88 /* ScoreKeeperShared.cpp in Sources */, + AAE2D6D50A67481E00071546 /* ScoreKeeper.cpp in Sources */, + AA2EA0030A770208003A0C11 /* ScreenSelectLanguage.cpp in Sources */, + AA5D16590A79805C00F17E86 /* RageTextureRenderTarget.cpp in Sources */, + AA5D166E0A798C0E00F17E86 /* ActorFrameTexture.cpp in Sources */, + AAFE710D0A91ADE6005F2290 /* ActorProxy.cpp in Sources */, + AAFE71220A91B551005F2290 /* RageSurface_Save_PNG.cpp in Sources */, + AABE830F0A9524D400001678 /* ModsGroup.cpp in Sources */, + AAE77F590AC3B52500AEFC64 /* RageTypes.cpp in Sources */, + AAE780440AC76A1200AEFC64 /* WorkoutGraph.cpp in Sources */, + AAFAFC8F0AC8DB9F00427A6E /* EnumHelper.cpp in Sources */, + AA6999610ACE1CBB000237F9 /* ControllerStateDisplay.cpp in Sources */, + AAB779FD0B0D9CB200B74314 /* ScoreKeeperGuitar.cpp in Sources */, + AA608EC10B0F85E400B39AC4 /* DialogDriver.cpp in Sources */, + AA608FAE0B0F9A4E00B39AC4 /* RageSoundDriver.cpp in Sources */, + AA6090E80B141D1C00B39AC4 /* GamePreferences.cpp in Sources */, + AAFB549F0B1BC32700FC3A81 /* RageSoundReader.cpp in Sources */, + AA31D5260B1EC6550016AB6B /* RageSoundReader_PitchChange.cpp in Sources */, + AA31D5280B1EC6550016AB6B /* RageSoundReader_SpeedChange.cpp in Sources */, + AA4F27B60B2C01B400ADEA79 /* RageSoundReader_ChannelSplit.cpp in Sources */, + AA4F27B80B2C01B400ADEA79 /* RageSoundReader_Pan.cpp in Sources */, + AA909E210B45B676002852D3 /* RageDriver.cpp in Sources */, + AA909E250B45B696002852D3 /* LowLevelWindow.cpp in Sources */, + AA909E280B45B6AC002852D3 /* LoadingWindow.cpp in Sources */, + AA909E410B45B8FB002852D3 /* RageSoundReader_Extend.cpp in Sources */, + AA909E430B45B8FB002852D3 /* RageSoundReader_ThreadedBuffer.cpp in Sources */, + AA909E4A0B45B93E002852D3 /* LightsDriver.cpp in Sources */, + AAEBF5620B5C517E005F3C7C /* SampleHistory.cpp in Sources */, + AAEBF5800B5C83F4005F3C7C /* SoundEffectControl.cpp in Sources */, + AA07008C0B61F177003B85BB /* RageSoundReader_PostBuffering.cpp in Sources */, + AA7C8DAE0B68CB2200FD9940 /* GameplayAssist.cpp in Sources */, + AA059ABC0B8CCFB5006F8139 /* ActorMultiTexture.cpp in Sources */, + AA05A0B00BA2EFF3006F8139 /* OptionsList.cpp in Sources */, + AA2C9CA10BAD6F54002441E9 /* CodeSet.cpp in Sources */, + AA2CA89F0BB745BD002441E9 /* ScreenContinue.cpp in Sources */, + AA1893600BD777C500AEC0BF /* ScreenProfileLoad.cpp in Sources */, + AA1893620BD777C500AEC0BF /* ScreenProfileSave.cpp in Sources */, + AA18937E0BD77ECF00AEC0BF /* NotesLoaderMidi.cpp in Sources */, + AA3396B80BDE195E00E1475F /* RageSoundReader_Merge.cpp in Sources */, + AAB3B7DE0C6C582E001BF487 /* ScreenSelectProfile.cpp in Sources */, + AAB3BB5B0C718F2D001BF487 /* RageUtil_CachedObject.cpp in Sources */, + AAA7D4CB0C7E872600FB8F78 /* ScreenOptionsToggleSongs.cpp in Sources */, + AAA0713D0CE7B3BB005A3060 /* bit.c in Sources */, + AAA071490CE7B3BB005A3060 /* decoder.c in Sources */, + AAA0714C0CE7B3BB005A3060 /* fixed.c in Sources */, + AAA0714E0CE7B3BB005A3060 /* frame.c in Sources */, + AAA071510CE7B3BB005A3060 /* huffman.c in Sources */, + AAA071570CE7B3BB005A3060 /* layer12.c in Sources */, + AAA071590CE7B3BB005A3060 /* layer3.c in Sources */, + AAA0716F0CE7B3BB005A3060 /* stream.c in Sources */, + AAA071710CE7B3BB005A3060 /* synth.c in Sources */, + AAA071730CE7B3BB005A3060 /* timer.c in Sources */, + AAA071770CE7B3BB005A3060 /* version.c in Sources */, + AA11A2130DC5A1B0006BD8AC /* ModIcon.cpp in Sources */, + AA11A2150DC5A1B0006BD8AC /* ModIconRow.cpp in Sources */, + AA6C6ADA0DC6B17B00E7A13E /* ArchHooks_MacOSX.cpp in Sources */, + AA6C6AE00DC6B1DC00E7A13E /* DialogDriver_MacOSX.cpp in Sources */, + AA6C6AE70DC6B22800E7A13E /* LoadingWindow_MacOSX.mm in Sources */, + AA6C6B050DC6B2B400E7A13E /* LowLevelWindow_MacOSX.mm in Sources */, + AA6C6B0A0DC6B30E00E7A13E /* MemoryCardDriverThreaded_MacOSX.cpp in Sources */, + AA6C6B100DC6B48C00E7A13E /* InputHandler_MacOSX_HID.cpp in Sources */, + AAC0BFE30E2951EC00F56EEB /* CryptHelpers.cpp in Sources */, + AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2B910AE09B520054C5BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7A2BA80AE09CD50054C5BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C895C0B67444700FD9940 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8AFC0B6744F700FD9940 /* bn_error.c in Sources */, + AA7C8AFD0B6744F700FD9940 /* bn_fast_mp_invmod.c in Sources */, + AA7C8AFE0B6744F700FD9940 /* bn_fast_mp_montgomery_reduce.c in Sources */, + AA7C8AFF0B6744F700FD9940 /* bn_fast_s_mp_mul_digs.c in Sources */, + AA7C8B000B6744F700FD9940 /* bn_fast_s_mp_mul_high_digs.c in Sources */, + AA7C8B010B6744F700FD9940 /* bn_fast_s_mp_sqr.c in Sources */, + AA7C8B020B6744F700FD9940 /* bn_mp_2expt.c in Sources */, + AA7C8B030B6744F700FD9940 /* bn_mp_abs.c in Sources */, + AA7C8B040B6744F700FD9940 /* bn_mp_add.c in Sources */, + AA7C8B050B6744F700FD9940 /* bn_mp_add_d.c in Sources */, + AA7C8B060B6744F700FD9940 /* bn_mp_addmod.c in Sources */, + AA7C8B070B6744F700FD9940 /* bn_mp_and.c in Sources */, + AA7C8B080B6744F700FD9940 /* bn_mp_clamp.c in Sources */, + AA7C8B090B6744F700FD9940 /* bn_mp_clear.c in Sources */, + AA7C8B0A0B6744F700FD9940 /* bn_mp_clear_multi.c in Sources */, + AA7C8B0B0B6744F700FD9940 /* bn_mp_cmp.c in Sources */, + AA7C8B0C0B6744F700FD9940 /* bn_mp_cmp_d.c in Sources */, + AA7C8B0D0B6744F700FD9940 /* bn_mp_cmp_mag.c in Sources */, + AA7C8B0E0B6744F700FD9940 /* bn_mp_cnt_lsb.c in Sources */, + AA7C8B0F0B6744F700FD9940 /* bn_mp_copy.c in Sources */, + AA7C8B100B6744F700FD9940 /* bn_mp_count_bits.c in Sources */, + AA7C8B110B6744F700FD9940 /* bn_mp_div.c in Sources */, + AA7C8B120B6744F700FD9940 /* bn_mp_div_2.c in Sources */, + AA7C8B130B6744F700FD9940 /* bn_mp_div_2d.c in Sources */, + AA7C8B140B6744F700FD9940 /* bn_mp_div_3.c in Sources */, + AA7C8B150B6744F700FD9940 /* bn_mp_div_d.c in Sources */, + AA7C8B160B6744F700FD9940 /* bn_mp_dr_is_modulus.c in Sources */, + AA7C8B170B6744F700FD9940 /* bn_mp_dr_reduce.c in Sources */, + AA7C8B180B6744F700FD9940 /* bn_mp_dr_setup.c in Sources */, + AA7C8B190B6744F700FD9940 /* bn_mp_exch.c in Sources */, + AA7C8B1A0B6744F700FD9940 /* bn_mp_expt_d.c in Sources */, + AA7C8B1B0B6744F700FD9940 /* bn_mp_exptmod.c in Sources */, + AA7C8B1C0B6744F700FD9940 /* bn_mp_exptmod_fast.c in Sources */, + AA7C8B1D0B6744F700FD9940 /* bn_mp_exteuclid.c in Sources */, + AA7C8B1E0B6744F700FD9940 /* bn_mp_fread.c in Sources */, + AA7C8B1F0B6744F700FD9940 /* bn_mp_fwrite.c in Sources */, + AA7C8B200B6744F700FD9940 /* bn_mp_gcd.c in Sources */, + AA7C8B210B6744F700FD9940 /* bn_mp_get_int.c in Sources */, + AA7C8B220B6744F700FD9940 /* bn_mp_grow.c in Sources */, + AA7C8B230B6744F700FD9940 /* bn_mp_init.c in Sources */, + AA7C8B240B6744F700FD9940 /* bn_mp_init_copy.c in Sources */, + AA7C8B250B6744F700FD9940 /* bn_mp_init_multi.c in Sources */, + AA7C8B260B6744F700FD9940 /* bn_mp_init_set.c in Sources */, + AA7C8B270B6744F700FD9940 /* bn_mp_init_set_int.c in Sources */, + AA7C8B280B6744F700FD9940 /* bn_mp_init_size.c in Sources */, + AA7C8B290B6744F700FD9940 /* bn_mp_invmod.c in Sources */, + AA7C8B2A0B6744F700FD9940 /* bn_mp_invmod_slow.c in Sources */, + AA7C8B2B0B6744F700FD9940 /* bn_mp_is_square.c in Sources */, + AA7C8B2C0B6744F700FD9940 /* bn_mp_jacobi.c in Sources */, + AA7C8B2D0B6744F700FD9940 /* bn_mp_karatsuba_mul.c in Sources */, + AA7C8B2E0B6744F700FD9940 /* bn_mp_karatsuba_sqr.c in Sources */, + AA7C8B2F0B6744F700FD9940 /* bn_mp_lcm.c in Sources */, + AA7C8B300B6744F700FD9940 /* bn_mp_lshd.c in Sources */, + AA7C8B310B6744F700FD9940 /* bn_mp_mod.c in Sources */, + AA7C8B320B6744F700FD9940 /* bn_mp_mod_2d.c in Sources */, + AA7C8B330B6744F700FD9940 /* bn_mp_mod_d.c in Sources */, + AA7C8B340B6744F700FD9940 /* bn_mp_montgomery_calc_normalization.c in Sources */, + AA7C8B350B6744F700FD9940 /* bn_mp_montgomery_reduce.c in Sources */, + AA7C8B360B6744F700FD9940 /* bn_mp_montgomery_setup.c in Sources */, + AA7C8B370B6744F700FD9940 /* bn_mp_mul.c in Sources */, + AA7C8B380B6744F700FD9940 /* bn_mp_mul_2.c in Sources */, + AA7C8B390B6744F700FD9940 /* bn_mp_mul_2d.c in Sources */, + AA7C8B3A0B6744F700FD9940 /* bn_mp_mul_d.c in Sources */, + AA7C8B3B0B6744F700FD9940 /* bn_mp_mulmod.c in Sources */, + AA7C8B3C0B6744F700FD9940 /* bn_mp_n_root.c in Sources */, + AA7C8B3D0B6744F700FD9940 /* bn_mp_neg.c in Sources */, + AA7C8B3E0B6744F700FD9940 /* bn_mp_or.c in Sources */, + AA7C8B3F0B6744F700FD9940 /* bn_mp_prime_fermat.c in Sources */, + AA7C8B400B6744F700FD9940 /* bn_mp_prime_is_divisible.c in Sources */, + AA7C8B410B6744F700FD9940 /* bn_mp_prime_is_prime.c in Sources */, + AA7C8B420B6744F700FD9940 /* bn_mp_prime_miller_rabin.c in Sources */, + AA7C8B430B6744F700FD9940 /* bn_mp_prime_next_prime.c in Sources */, + AA7C8B440B6744F700FD9940 /* bn_mp_prime_rabin_miller_trials.c in Sources */, + AA7C8B450B6744F700FD9940 /* bn_mp_prime_random_ex.c in Sources */, + AA7C8B460B6744F700FD9940 /* bn_mp_radix_size.c in Sources */, + AA7C8B470B6744F700FD9940 /* bn_mp_radix_smap.c in Sources */, + AA7C8B480B6744F700FD9940 /* bn_mp_rand.c in Sources */, + AA7C8B490B6744F700FD9940 /* bn_mp_read_radix.c in Sources */, + AA7C8B4A0B6744F700FD9940 /* bn_mp_read_signed_bin.c in Sources */, + AA7C8B4B0B6744F700FD9940 /* bn_mp_read_unsigned_bin.c in Sources */, + AA7C8B4C0B6744F700FD9940 /* bn_mp_reduce.c in Sources */, + AA7C8B4D0B6744F700FD9940 /* bn_mp_reduce_2k.c in Sources */, + AA7C8B4E0B6744F700FD9940 /* bn_mp_reduce_2k_l.c in Sources */, + AA7C8B4F0B6744F700FD9940 /* bn_mp_reduce_2k_setup.c in Sources */, + AA7C8B500B6744F700FD9940 /* bn_mp_reduce_2k_setup_l.c in Sources */, + AA7C8B510B6744F700FD9940 /* bn_mp_reduce_is_2k.c in Sources */, + AA7C8B520B6744F700FD9940 /* bn_mp_reduce_is_2k_l.c in Sources */, + AA7C8B530B6744F700FD9940 /* bn_mp_reduce_setup.c in Sources */, + AA7C8B540B6744F700FD9940 /* bn_mp_rshd.c in Sources */, + AA7C8B550B6744F700FD9940 /* bn_mp_set.c in Sources */, + AA7C8B560B6744F700FD9940 /* bn_mp_set_int.c in Sources */, + AA7C8B570B6744F700FD9940 /* bn_mp_shrink.c in Sources */, + AA7C8B580B6744F700FD9940 /* bn_mp_signed_bin_size.c in Sources */, + AA7C8B590B6744F700FD9940 /* bn_mp_sqr.c in Sources */, + AA7C8B5A0B6744F700FD9940 /* bn_mp_sqrmod.c in Sources */, + AA7C8B5B0B6744F700FD9940 /* bn_mp_sqrt.c in Sources */, + AA7C8B5C0B6744F700FD9940 /* bn_mp_sub.c in Sources */, + AA7C8B5D0B6744F700FD9940 /* bn_mp_sub_d.c in Sources */, + AA7C8B5E0B6744F700FD9940 /* bn_mp_submod.c in Sources */, + AA7C8B5F0B6744F700FD9940 /* bn_mp_to_signed_bin.c in Sources */, + AA7C8B600B6744F700FD9940 /* bn_mp_to_signed_bin_n.c in Sources */, + AA7C8B610B6744F700FD9940 /* bn_mp_to_unsigned_bin.c in Sources */, + AA7C8B620B6744F700FD9940 /* bn_mp_to_unsigned_bin_n.c in Sources */, + AA7C8B630B6744F700FD9940 /* bn_mp_toom_mul.c in Sources */, + AA7C8B640B6744F700FD9940 /* bn_mp_toom_sqr.c in Sources */, + AA7C8B650B6744F700FD9940 /* bn_mp_toradix.c in Sources */, + AA7C8B660B6744F700FD9940 /* bn_mp_toradix_n.c in Sources */, + AA7C8B670B6744F700FD9940 /* bn_mp_unsigned_bin_size.c in Sources */, + AA7C8B680B6744F700FD9940 /* bn_mp_xor.c in Sources */, + AA7C8B690B6744F700FD9940 /* bn_mp_zero.c in Sources */, + AA7C8B6A0B6744F700FD9940 /* bn_prime_tab.c in Sources */, + AA7C8B6B0B6744F700FD9940 /* bn_reverse.c in Sources */, + AA7C8B6C0B6744F700FD9940 /* bn_s_mp_add.c in Sources */, + AA7C8B6D0B6744F700FD9940 /* bn_s_mp_exptmod.c in Sources */, + AA7C8B6E0B6744F700FD9940 /* bn_s_mp_mul_digs.c in Sources */, + AA7C8B6F0B6744F700FD9940 /* bn_s_mp_mul_high_digs.c in Sources */, + AA7C8B700B6744F700FD9940 /* bn_s_mp_sqr.c in Sources */, + AA7C8B710B6744F700FD9940 /* bn_s_mp_sub.c in Sources */, + AA7C8B720B6744F700FD9940 /* bncore.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7C8B880B67460600FD9940 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA7C8C560B67467D00FD9940 /* aes.c in Sources */, + AA7C8C580B67467D00FD9940 /* hash_memory.c in Sources */, + AA7C8C590B67467D00FD9940 /* md5.c in Sources */, + AA7C8C5A0B67467D00FD9940 /* sha1.c in Sources */, + AA7C8C680B67467D00FD9940 /* ltc_ecc_fp_mulmod.c in Sources */, + AA7C8C690B67467D00FD9940 /* ltm_desc.c in Sources */, + AA7C8C6A0B67467D00FD9940 /* multi.c in Sources */, + AA7C8C6B0B67467D00FD9940 /* rand_prime.c in Sources */, + AA7C8C6C0B67467D00FD9940 /* base64_decode.c in Sources */, + AA7C8C6D0B67467D00FD9940 /* base64_encode.c in Sources */, + AA7C8C6E0B67467D00FD9940 /* burn_stack.c in Sources */, + AA7C8C6F0B67467D00FD9940 /* crypt.c in Sources */, + AA7C8C700B67467D00FD9940 /* crypt_argchk.c in Sources */, + AA7C8C710B67467D00FD9940 /* crypt_cipher_descriptor.c in Sources */, + AA7C8C720B67467D00FD9940 /* crypt_cipher_is_valid.c in Sources */, + AA7C8C730B67467D00FD9940 /* crypt_find_cipher.c in Sources */, + AA7C8C740B67467D00FD9940 /* crypt_find_cipher_any.c in Sources */, + AA7C8C750B67467D00FD9940 /* crypt_find_cipher_id.c in Sources */, + AA7C8C760B67467D00FD9940 /* crypt_find_hash.c in Sources */, + AA7C8C770B67467D00FD9940 /* crypt_find_hash_any.c in Sources */, + AA7C8C780B67467D00FD9940 /* crypt_find_hash_id.c in Sources */, + AA7C8C790B67467D00FD9940 /* crypt_find_hash_oid.c in Sources */, + AA7C8C7A0B67467D00FD9940 /* crypt_find_prng.c in Sources */, + AA7C8C7B0B67467D00FD9940 /* crypt_fsa.c in Sources */, + AA7C8C7C0B67467D00FD9940 /* crypt_hash_descriptor.c in Sources */, + AA7C8C7D0B67467D00FD9940 /* crypt_hash_is_valid.c in Sources */, + AA7C8C7E0B67467D00FD9940 /* crypt_ltc_mp_descriptor.c in Sources */, + AA7C8C7F0B67467D00FD9940 /* crypt_prng_descriptor.c in Sources */, + AA7C8C800B67467D00FD9940 /* crypt_prng_is_valid.c in Sources */, + AA7C8C810B67467D00FD9940 /* crypt_register_cipher.c in Sources */, + AA7C8C820B67467D00FD9940 /* crypt_register_hash.c in Sources */, + AA7C8C830B67467D00FD9940 /* crypt_register_prng.c in Sources */, + AA7C8C840B67467D00FD9940 /* crypt_unregister_cipher.c in Sources */, + AA7C8C850B67467D00FD9940 /* crypt_unregister_hash.c in Sources */, + AA7C8C860B67467D00FD9940 /* crypt_unregister_prng.c in Sources */, + AA7C8C870B67467D00FD9940 /* error_to_string.c in Sources */, + AA7C8C880B67467D00FD9940 /* pkcs_5_1.c in Sources */, + AA7C8C890B67467D00FD9940 /* pkcs_5_2.c in Sources */, + AA7C8C8A0B67467D00FD9940 /* zeromem.c in Sources */, + AA7C8C8B0B67467D00FD9940 /* cbc_decrypt.c in Sources */, + AA7C8C8C0B67467D00FD9940 /* cbc_done.c in Sources */, + AA7C8C8D0B67467D00FD9940 /* cbc_encrypt.c in Sources */, + AA7C8C8E0B67467D00FD9940 /* cbc_getiv.c in Sources */, + AA7C8C8F0B67467D00FD9940 /* cbc_setiv.c in Sources */, + AA7C8C900B67467D00FD9940 /* cbc_start.c in Sources */, + AA7C8C910B67467D00FD9940 /* cfb_decrypt.c in Sources */, + AA7C8C920B67467D00FD9940 /* cfb_done.c in Sources */, + AA7C8C930B67467D00FD9940 /* cfb_encrypt.c in Sources */, + AA7C8C940B67467D00FD9940 /* cfb_getiv.c in Sources */, + AA7C8C950B67467D00FD9940 /* cfb_setiv.c in Sources */, + AA7C8C960B67467D00FD9940 /* cfb_start.c in Sources */, + AA7C8C970B67467D00FD9940 /* ctr_decrypt.c in Sources */, + AA7C8C980B67467D00FD9940 /* ctr_done.c in Sources */, + AA7C8C990B67467D00FD9940 /* ctr_encrypt.c in Sources */, + AA7C8C9A0B67467D00FD9940 /* ctr_getiv.c in Sources */, + AA7C8C9B0B67467D00FD9940 /* ctr_setiv.c in Sources */, + AA7C8C9C0B67467D00FD9940 /* ctr_start.c in Sources */, + AA7C8C9D0B67467D00FD9940 /* ctr_test.c in Sources */, + AA7C8C9E0B67467D00FD9940 /* ecb_decrypt.c in Sources */, + AA7C8C9F0B67467D00FD9940 /* ecb_done.c in Sources */, + AA7C8CA00B67467D00FD9940 /* ecb_encrypt.c in Sources */, + AA7C8CA10B67467D00FD9940 /* ecb_start.c in Sources */, + AA7C8CA20B67467D00FD9940 /* ofb_decrypt.c in Sources */, + AA7C8CA30B67467D00FD9940 /* ofb_done.c in Sources */, + AA7C8CA40B67467D00FD9940 /* ofb_encrypt.c in Sources */, + AA7C8CA50B67467D00FD9940 /* ofb_getiv.c in Sources */, + AA7C8CA60B67467D00FD9940 /* ofb_setiv.c in Sources */, + AA7C8CA70B67467D00FD9940 /* ofb_start.c in Sources */, + AA7C8CA80B67467D00FD9940 /* der_decode_bit_string.c in Sources */, + AA7C8CA90B67467D00FD9940 /* der_encode_bit_string.c in Sources */, + AA7C8CAA0B67467D00FD9940 /* der_length_bit_string.c in Sources */, + AA7C8CAB0B67467D00FD9940 /* der_decode_boolean.c in Sources */, + AA7C8CAC0B67467D00FD9940 /* der_encode_boolean.c in Sources */, + AA7C8CAD0B67467D00FD9940 /* der_length_boolean.c in Sources */, + AA7C8CAE0B67467D00FD9940 /* der_decode_choice.c in Sources */, + AA7C8CAF0B67467D00FD9940 /* der_decode_ia5_string.c in Sources */, + AA7C8CB00B67467D00FD9940 /* der_encode_ia5_string.c in Sources */, + AA7C8CB10B67467D00FD9940 /* der_length_ia5_string.c in Sources */, + AA7C8CB20B67467D00FD9940 /* der_decode_integer.c in Sources */, + AA7C8CB30B67467D00FD9940 /* der_encode_integer.c in Sources */, + AA7C8CB40B67467D00FD9940 /* der_length_integer.c in Sources */, + AA7C8CB50B67467D00FD9940 /* der_decode_object_identifier.c in Sources */, + AA7C8CB60B67467D00FD9940 /* der_encode_object_identifier.c in Sources */, + AA7C8CB70B67467D00FD9940 /* der_length_object_identifier.c in Sources */, + AA7C8CB80B67467D00FD9940 /* der_decode_octet_string.c in Sources */, + AA7C8CB90B67467D00FD9940 /* der_encode_octet_string.c in Sources */, + AA7C8CBA0B67467D00FD9940 /* der_length_octet_string.c in Sources */, + AA7C8CBB0B67467D00FD9940 /* der_decode_printable_string.c in Sources */, + AA7C8CBC0B67467D00FD9940 /* der_encode_printable_string.c in Sources */, + AA7C8CBD0B67467D00FD9940 /* der_length_printable_string.c in Sources */, + AA7C8CBE0B67467D00FD9940 /* der_decode_sequence_ex.c in Sources */, + AA7C8CBF0B67467D00FD9940 /* der_decode_sequence_flexi.c in Sources */, + AA7C8CC00B67467D00FD9940 /* der_decode_sequence_multi.c in Sources */, + AA7C8CC10B67467D00FD9940 /* der_encode_sequence_ex.c in Sources */, + AA7C8CC20B67467D00FD9940 /* der_encode_sequence_multi.c in Sources */, + AA7C8CC30B67467D00FD9940 /* der_length_sequence.c in Sources */, + AA7C8CC40B67467D00FD9940 /* der_sequence_free.c in Sources */, + AA7C8CC50B67467D00FD9940 /* der_encode_set.c in Sources */, + AA7C8CC60B67467D00FD9940 /* der_encode_setof.c in Sources */, + AA7C8CC70B67467D00FD9940 /* der_decode_short_integer.c in Sources */, + AA7C8CC80B67467D00FD9940 /* der_encode_short_integer.c in Sources */, + AA7C8CC90B67467D00FD9940 /* der_length_short_integer.c in Sources */, + AA7C8CCA0B67467D00FD9940 /* der_decode_utctime.c in Sources */, + AA7C8CCB0B67467D00FD9940 /* der_encode_utctime.c in Sources */, + AA7C8CCC0B67467D00FD9940 /* der_length_utctime.c in Sources */, + AA7C8CCD0B67467D00FD9940 /* der_decode_utf8_string.c in Sources */, + AA7C8CCE0B67467D00FD9940 /* der_encode_utf8_string.c in Sources */, + AA7C8CCF0B67467D00FD9940 /* der_length_utf8_string.c in Sources */, + AA7C8CD00B67467D00FD9940 /* dsa_decrypt_key.c in Sources */, + AA7C8CD10B67467D00FD9940 /* dsa_encrypt_key.c in Sources */, + AA7C8CD20B67467D00FD9940 /* dsa_export.c in Sources */, + AA7C8CD30B67467D00FD9940 /* dsa_free.c in Sources */, + AA7C8CD40B67467D00FD9940 /* dsa_import.c in Sources */, + AA7C8CD50B67467D00FD9940 /* dsa_make_key.c in Sources */, + AA7C8CD60B67467D00FD9940 /* dsa_shared_secret.c in Sources */, + AA7C8CD70B67467D00FD9940 /* dsa_sign_hash.c in Sources */, + AA7C8CD80B67467D00FD9940 /* dsa_verify_hash.c in Sources */, + AA7C8CD90B67467D00FD9940 /* dsa_verify_key.c in Sources */, + AA7C8CDA0B67467D00FD9940 /* pkcs_1_i2osp.c in Sources */, + AA7C8CDB0B67467D00FD9940 /* pkcs_1_mgf1.c in Sources */, + AA7C8CDC0B67467D00FD9940 /* pkcs_1_oaep_decode.c in Sources */, + AA7C8CDD0B67467D00FD9940 /* pkcs_1_oaep_encode.c in Sources */, + AA7C8CDE0B67467D00FD9940 /* pkcs_1_os2ip.c in Sources */, + AA7C8CDF0B67467D00FD9940 /* pkcs_1_pss_decode.c in Sources */, + AA7C8CE00B67467D00FD9940 /* pkcs_1_pss_encode.c in Sources */, + AA7C8CE10B67467D00FD9940 /* pkcs_1_v1_5_decode.c in Sources */, + AA7C8CE20B67467D00FD9940 /* pkcs_1_v1_5_encode.c in Sources */, + AA7C8CE30B67467D00FD9940 /* rsa_decrypt_key.c in Sources */, + AA7C8CE40B67467D00FD9940 /* rsa_encrypt_key.c in Sources */, + AA7C8CE50B67467D00FD9940 /* rsa_export.c in Sources */, + AA7C8CE60B67467D00FD9940 /* rsa_exptmod.c in Sources */, + AA7C8CE70B67467D00FD9940 /* rsa_free.c in Sources */, + AA7C8CE80B67467D00FD9940 /* rsa_import.c in Sources */, + AA7C8CE90B67467D00FD9940 /* rsa_make_key.c in Sources */, + AA7C8CEA0B67467D00FD9940 /* rsa_sign_hash.c in Sources */, + AA7C8CEB0B67467D00FD9940 /* rsa_verify_hash.c in Sources */, + AA7C8CEC0B67467D00FD9940 /* fortuna.c in Sources */, + AA7C8CED0B67467D00FD9940 /* rc4.c in Sources */, + AA7C8CEE0B67467D00FD9940 /* rng_get_bytes.c in Sources */, + AA7C8CEF0B67467D00FD9940 /* rng_make_prng.c in Sources */, + AA7C8CF00B67467D00FD9940 /* sober128.c in Sources */, + AA7C8CF20B67467D00FD9940 /* sprng.c in Sources */, + AA7C8CF30B67467D00FD9940 /* yarrow.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAA070A60CE7B0DF005A3060 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AAA071800CE7B4FB005A3060 /* version.c in Sources */, + AAA071820CE7B4FD005A3060 /* timer.c in Sources */, + AAA071840CE7B4FE005A3060 /* synth.c in Sources */, + AAA071860CE7B501005A3060 /* stream.c in Sources */, + AAA071890CE7B503005A3060 /* layer3.c in Sources */, + AAA0718B0CE7B505005A3060 /* layer12.c in Sources */, + AAA0718D0CE7B506005A3060 /* huffman.c in Sources */, + AAA071900CE7B509005A3060 /* frame.c in Sources */, + AAA071920CE7B50A005A3060 /* fixed.c in Sources */, + AAA071940CE7B50B005A3060 /* decoder.c in Sources */, + AAA071960CE7B50D005A3060 /* bit.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAE7817B0AC7E37B00AEFC64 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2BDB88E9137201F700E6FD3A /* lapi.c in Sources */, + 2BDB88EB137201F700E6FD3A /* lauxlib.c in Sources */, + 2BDB88ED137201F700E6FD3A /* lbaselib.c in Sources */, + 2BDB88EE137201F700E6FD3A /* lcode.c in Sources */, + 2BDB88F0137201F700E6FD3A /* ldblib.c in Sources */, + 2BDB88F1137201F700E6FD3A /* ldebug.c in Sources */, + 2BDB88F3137201F700E6FD3A /* ldo.c in Sources */, + 2BDB88F5137201F700E6FD3A /* ldump.c in Sources */, + 2BDB88F6137201F700E6FD3A /* lfunc.c in Sources */, + 2BDB88F8137201F700E6FD3A /* lgc.c in Sources */, + 2BDB88FA137201F700E6FD3A /* linit.c in Sources */, + 2BDB88FB137201F700E6FD3A /* liolib.c in Sources */, + 2BDB88FC137201F700E6FD3A /* llex.c in Sources */, + 2BDB88FF137201F700E6FD3A /* lmathlib.c in Sources */, + 2BDB8900137201F700E6FD3A /* lmem.c in Sources */, + 2BDB8902137201F700E6FD3A /* loadlib.c in Sources */, + 2BDB8903137201F700E6FD3A /* lobject.c in Sources */, + 2BDB8905137201F700E6FD3A /* lopcodes.c in Sources */, + 2BDB8907137201F700E6FD3A /* loslib.c in Sources */, + 2BDB8908137201F700E6FD3A /* lparser.c in Sources */, + 2BDB890A137201F700E6FD3A /* lstate.c in Sources */, + 2BDB890C137201F700E6FD3A /* lstring.c in Sources */, + 2BDB890E137201F700E6FD3A /* lstrlib.c in Sources */, + 2BDB890F137201F700E6FD3A /* ltable.c in Sources */, + 2BDB8911137201F700E6FD3A /* ltablib.c in Sources */, + 2BDB8912137201F700E6FD3A /* ltm.c in Sources */, + 2BDB8914137201F700E6FD3A /* lua.c in Sources */, + 2BDB8916137201F700E6FD3A /* luac.c in Sources */, + 2BDB8919137201F700E6FD3A /* lundump.c in Sources */, + 2BDB891B137201F700E6FD3A /* lvm.c in Sources */, + 2BDB891D137201F700E6FD3A /* lzio.c in Sources */, + 2BDB891F137201F700E6FD3A /* print.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AA30C61A07F5E2EF0066F398 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA30C60F07F5E24A0066F398 /* version */; + targetProxy = AA30C61907F5E2EF0066F398 /* PBXContainerItemProxy */; + }; + AA40D1B509A08D650068C0D5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA30C60F07F5E24A0066F398 /* version */; + targetProxy = AA40D1B609A08D650068C0D5 /* PBXContainerItemProxy */; + }; + AA7A2BA60AE09C9B0054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AA7A2BA50AE09C9B0054C5BA /* PBXContainerItemProxy */; + }; + AA7A2BAE0AE09CDB0054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AA7A2BAD0AE09CDB0054C5BA /* PBXContainerItemProxy */; + }; + AA7A2BB50AE09D160054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7A2B930AE09B520054C5BA /* lua */; + targetProxy = AA7A2BB40AE09D160054C5BA /* PBXContainerItemProxy */; + }; + AA7A2BB70AE09D160054C5BA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7A2BAA0AE09CD50054C5BA /* luac */; + targetProxy = AA7A2BB60AE09D160054C5BA /* PBXContainerItemProxy */; + }; + AA7C8D160B6748B800FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C895E0B67444700FD9940 /* tommath */; + targetProxy = AA7C8D150B6748B800FD9940 /* PBXContainerItemProxy */; + }; + AA7C8D180B6748B800FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C8B8A0B67460600FD9940 /* tomcrypt */; + targetProxy = AA7C8D170B6748B800FD9940 /* PBXContainerItemProxy */; + }; + AA7C8D1C0B6748CD00FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C895E0B67444700FD9940 /* tommath */; + targetProxy = AA7C8D1B0B6748CD00FD9940 /* PBXContainerItemProxy */; + }; + AA7C8D1E0B6748CD00FD9940 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA7C8B8A0B67460600FD9940 /* tomcrypt */; + targetProxy = AA7C8D1D0B6748CD00FD9940 /* PBXContainerItemProxy */; + }; + AAA071AA0CE7B879005A3060 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAA070A80CE7B0DF005A3060 /* mad */; + targetProxy = AAA071A90CE7B879005A3060 /* PBXContainerItemProxy */; + }; + AAE781FE0AC7E61900AEFC64 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AAE781FD0AC7E61900AEFC64 /* PBXContainerItemProxy */; + }; + AAE782020AC7E63100AEFC64 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAE7817D0AC7E37B00AEFC64 /* lua-5.1 */; + targetProxy = AAE782010AC7E63100AEFC64 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AAF6A2F709B695BA00D5C614 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + AAF6A33109B69C7700D5C614 /* it */, + AAF6A38F09B6A2A600D5C614 /* es */, + AAF6A3AE09B6A88800D5C614 /* de */, + AAF6A3B109B6A90C00D5C614 /* en */, + AAF6A3B209B6A91000D5C614 /* ja */, + AAF6A3B309B6A91600D5C614 /* fr */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AA0AA8FE0963CF7700427F4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Debug; + }; + AA0AA8FF0963CF7700427F4D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + AA0AA9000963CF7700427F4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.3; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = NO; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = Debug; + }; + AA40D52809A08D650068C0D5 /* Native */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Native; + }; + AA40D52909A08D650068C0D5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; + AA40D52A09A08D660068C0D5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + "$(value)", + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + AA7A2B9A0AE09BA50054C5BA /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7A2B9B0AE09BA50054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7A2B9C0AE09BA50054C5BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AA7A2BBA0AE09D4E0054C5BA /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AA7A2BBE0AE09D4E0054C5BA /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = Native; + }; + AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = Universal; + }; + AA7A2BC00AE09D4E0054C5BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "all lua"; + }; + name = Debug; + }; + AA7C89820B67447E00FD9940 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7C89830B67447E00FD9940 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7C89840B67447E00FD9940 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AA7C8B8F0B67464300FD9940 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AA7C8B900B67464300FD9940 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7C8B910B67464300FD9940 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; + AAA070AA0CE7B0E2005A3060 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = Native; + }; + AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = PerformanceDebug; + }; + AAA070AC0CE7B0E2005A3060 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = Universal; + }; + AAA070AD0CE7B0E2005A3060 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + COPY_PHASE_STRIP = NO; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = mad; + }; + name = Debug; + }; + AABF4DBA0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.3; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = PerformanceDebug; + }; + AABF4DBB0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = stabs; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = PerformanceDebug; + }; + AABF4DBC0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = PerformanceDebug; + }; + AABF4DBD0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = PerformanceDebug; + }; + AABF4DBE0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DBF0CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DC00CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DC10CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = PerformanceDebug; + }; + AABF4DC20CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = tommath; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AABF4DC30CD37960005A3060 /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = tomcrypt; + SYMROOT = "$(SRCROOT)/build"; + }; + name = PerformanceDebug; + }; + AAC8450D0856A19700A9FEAB /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Native; + }; + AAC845110856A19700A9FEAB /* Native */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Native; + }; + AAC845150856A19700A9FEAB /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.3; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = Native; + }; + AAE44A2B0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Universal; + }; + AAE44A2C0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_ENABLE_OBJC_EXCEPTIONS = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; + AAE44A2D0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_ppc = /Developer/SDKs/MacOSX10.4u.sdk; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; + }; + name = Universal; + }; + AAE781800AC7E3BF00AEFC64 /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Native; + }; + AAE781810AC7E3BF00AEFC64 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AAE781820AC7E3BF00AEFC64 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AA40D52709A08D650068C0D5 /* Build configuration list for PBXNativeTarget "stepmania-bare" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA40D52809A08D650068C0D5 /* Native */, + AABF4DBD0CD37960005A3060 /* PerformanceDebug */, + AA40D52909A08D650068C0D5 /* Universal */, + AA40D52A09A08D660068C0D5 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7A2B990AE09BA50054C5BA /* Build configuration list for PBXNativeTarget "lua" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7A2B9A0AE09BA50054C5BA /* Native */, + AABF4DBF0CD37960005A3060 /* PerformanceDebug */, + AA7A2B9B0AE09BA50054C5BA /* Universal */, + AA7A2B9C0AE09BA50054C5BA /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7A2BB90AE09D4E0054C5BA /* Build configuration list for PBXNativeTarget "luac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7A2BBA0AE09D4E0054C5BA /* Native */, + AABF4DC00CD37960005A3060 /* PerformanceDebug */, + AA7A2BBB0AE09D4E0054C5BA /* Universal */, + AA7A2BBC0AE09D4E0054C5BA /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7A2BBD0AE09D4E0054C5BA /* Build configuration list for PBXAggregateTarget "all lua" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7A2BBE0AE09D4E0054C5BA /* Native */, + AABF4DC10CD37960005A3060 /* PerformanceDebug */, + AA7A2BBF0AE09D4E0054C5BA /* Universal */, + AA7A2BC00AE09D4E0054C5BA /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7C89810B67447E00FD9940 /* Build configuration list for PBXNativeTarget "tommath" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7C89820B67447E00FD9940 /* Native */, + AABF4DC20CD37960005A3060 /* PerformanceDebug */, + AA7C89830B67447E00FD9940 /* Universal */, + AA7C89840B67447E00FD9940 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AA7C8B8E0B67464300FD9940 /* Build configuration list for PBXNativeTarget "tomcrypt" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA7C8B8F0B67464300FD9940 /* Native */, + AABF4DC30CD37960005A3060 /* PerformanceDebug */, + AA7C8B900B67464300FD9940 /* Universal */, + AA7C8B910B67464300FD9940 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAA070AE0CE7B138005A3060 /* Build configuration list for PBXNativeTarget "mad" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAA070AA0CE7B0E2005A3060 /* Native */, + AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, + AAA070AC0CE7B0E2005A3060 /* Universal */, + AAA070AD0CE7B0E2005A3060 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAC8450B0856A19700A9FEAB /* Build configuration list for PBXLegacyTarget "version" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAC8450D0856A19700A9FEAB /* Native */, + AABF4DBC0CD37960005A3060 /* PerformanceDebug */, + AAE44A2B0965707500B025E5 /* Universal */, + AA0AA8FE0963CF7700427F4D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAC8450F0856A19700A9FEAB /* Build configuration list for PBXNativeTarget "stepmania" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAC845110856A19700A9FEAB /* Native */, + AABF4DBB0CD37960005A3060 /* PerformanceDebug */, + AAE44A2C0965707500B025E5 /* Universal */, + AA0AA8FF0963CF7700427F4D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAC845150856A19700A9FEAB /* Native */, + AABF4DBA0CD37960005A3060 /* PerformanceDebug */, + AAE44A2D0965707500B025E5 /* Universal */, + AA0AA9000963CF7700427F4D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + AAE7817F0AC7E3BF00AEFC64 /* Build configuration list for PBXNativeTarget "lua-5.1" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAE781800AC7E3BF00AEFC64 /* Native */, + AABF4DBE0CD37960005A3060 /* PerformanceDebug */, + AAE781810AC7E3BF00AEFC64 /* Universal */, + AAE781820AC7E3BF00AEFC64 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} From dd1c713854beb4aecff1f9176e2d431c4b3e4b46 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 5 May 2011 23:35:33 -0400 Subject: [PATCH 02/94] [Xcode4] Intel only. The plist change is due to the Music Games category set. --- Xcode/Info-StepMania.plist | 2 + .../project.pbxproj | 334 +----------------- 2 files changed, 13 insertions(+), 323 deletions(-) diff --git a/Xcode/Info-StepMania.plist b/Xcode/Info-StepMania.plist index 580247540e..e95a68ff7a 100644 --- a/Xcode/Info-StepMania.plist +++ b/Xcode/Info-StepMania.plist @@ -47,6 +47,8 @@ Step CFBundleVersion PRODUCT_VER_BARE + LSApplicationCategoryType + public.app-category.music-games LSMinimumSystemVersion 10.4.10 NSHumanReadableCopyright diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 7f4bc6c9ad..644273d718 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -5641,7 +5641,7 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; - buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */; compatibilityVersion = "Xcode 3.0"; developmentRegion = English; hasScannedForEncodings = 1; @@ -7101,6 +7101,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.4; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7139,7 +7140,7 @@ GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -7162,14 +7163,11 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.3; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + MACOSX_DEPLOYMENT_TARGET = 10.4; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -7225,54 +7223,6 @@ }; name = Native; }; - AA40D52909A08D650068C0D5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", - ); - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - NO_MP3_SUPPORT, - WITHOUT_NETWORKING, - ); - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/Libraries", - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -7341,24 +7291,6 @@ }; name = Native; }; - AA7A2B9B0AE09BA50054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - LUA_USE_MACOSX, - "$(value)", - ); - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = lua; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7392,21 +7324,6 @@ }; name = Native; }; - AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = luac; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7429,13 +7346,6 @@ }; name = Native; }; - AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "all lua"; - }; - name = Universal; - }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7459,18 +7369,6 @@ }; name = Native; }; - AA7C89830B67447E00FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DYNAMIC_NO_PIC = YES; - GCC_MODEL_TUNING = G5; - INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7500,21 +7398,6 @@ }; name = Native; }; - AA7C8B900B67464300FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - DEAD_CODE_STRIPPING = NO; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - INSTALL_PATH = /usr/local/lib; - KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C8B910B67464300FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7590,36 +7473,6 @@ }; name = PerformanceDebug; }; - AAA070AC0CE7B0E2005A3060 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - FPM = ""; - "FPM[arch=i386]" = FPM_INTEL; - "FPM[arch=ppc]" = FPM_PPC; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ( - "HAVE_ASSERT_H=1", - "HAVE_DLFCN_H=1", - "HAVE_ERRNO_H=1", - "HAVE_FORK=1", - "HAVE_INTTYPES_H=1", - "HAVE_LIMITS_H=1", - "HAVE_MEMORY_H=1", - "HAVE_WAITPID=1", - "SIZEOF_LONG=4", - "$(FPM)", - ); - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_SIGN_COMPARE = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; - INSTALL_PATH = /usr/local/lib; - PREBINDING = NO; - PRODUCT_NAME = mad; - }; - name = Universal; - }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7675,7 +7528,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -7698,14 +7551,11 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.3; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; + MACOSX_DEPLOYMENT_TARGET = 10.4; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -7745,6 +7595,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.4; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7974,6 +7825,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; + MACOSX_DEPLOYMENT_TARGET = 10.4; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -8010,136 +7862,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PROTOTYPE_CONVERSION = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.3; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; - ONLY_LINK_ESSENTIAL_SYMBOLS = YES; - PREBINDING = NO; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk; - SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; - STRIP_INSTALLED_PRODUCT = YES; - STRIP_STYLE = "non-global"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; - }; - name = Native; - }; - AAE44A2B0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.2; - PRODUCT_NAME = version; - ZERO_LINK = NO; - }; - name = Universal; - }; - AAE44A2C0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - LINKER_DISPLAYS_MANGLED_NAMES = NO; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - "-falign-loops=16", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; - AAE44A2D0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; - BUILD_VARIANTS = normal; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_ALTIVEC_EXTENSIONS = YES; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_FAST_MATH = NO; - GCC_FAST_OBJC_DISPATCH = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_STRICT_ALIASING = YES; - GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8163,20 +7886,16 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.4; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.3; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk"; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; - SDKROOT_ppc = /Developer/SDKs/MacOSX10.4u.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../src/jsoncpp/include"; }; - name = Universal; + name = Native; }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; @@ -8198,26 +7917,6 @@ }; name = Native; }; - AAE781810AC7E3BF00AEFC64 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(value)", - LUA_USE_MACOSX, - ); - INSTALL_PATH = /usr/local/lib; - OBJROOT = "$(SRCROOT)/build"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8246,7 +7945,6 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, - AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8257,7 +7955,6 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, - AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8268,7 +7965,6 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, - AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8279,7 +7975,6 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, - AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8290,7 +7985,6 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, - AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8301,7 +7995,6 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, - AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8312,7 +8005,6 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, - AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8323,7 +8015,6 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, - AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8334,18 +8025,16 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, - AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Native; }; - AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */ = { isa = XCConfigurationList; buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, - AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8356,7 +8045,6 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, - AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From bd29092194df4898a4d7c3a0c3130c301cfcc42b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 00:09:16 -0400 Subject: [PATCH 03/94] [Xcode4] Force Leopard for now, comment fix. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 +++--- src/ScreenPrompt.cpp | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 644273d718..d33b392475 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7163,7 +7163,7 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; @@ -7551,7 +7551,7 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; @@ -7885,7 +7885,7 @@ GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; diff --git a/src/ScreenPrompt.cpp b/src/ScreenPrompt.cpp index 15f5455d3c..bc617679c1 100644 --- a/src/ScreenPrompt.cpp +++ b/src/ScreenPrompt.cpp @@ -251,8 +251,9 @@ void ScreenPrompt::TweenOffScreen() // lua start /* #include "LuaBinding.h" - -/** @brief Allow Lua to have access to the ScreenPrompt. + + // use proper doxygen when lua is enabled. + @brief Allow Lua to have access to the ScreenPrompt. class LunaScreenPrompt: public Luna { public: From cd9bf5383698de3b151e89c5db667e159b914dbd Mon Sep 17 00:00:00 2001 From: Thai Pangsakulyanont Date: Fri, 6 May 2011 13:57:21 +0700 Subject: [PATCH 04/94] [Xcode4] make tomcrypt build --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index d33b392475..93ea5f8550 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7391,6 +7391,7 @@ GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_CPP_RTTI = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = LTC_NO_ROLC; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; PRODUCT_NAME = tomcrypt; @@ -7406,6 +7407,10 @@ GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_CPP_RTTI = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + LTC_NO_ROLC, + ); INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; PRODUCT_NAME = tomcrypt; @@ -7765,6 +7770,7 @@ GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_CPP_RTTI = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = LTC_NO_ROLC; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; PRODUCT_NAME = tomcrypt; From ae9aa82d601a1d85e5c7b8dd7a2f360e1fae7644 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 13:51:45 -0400 Subject: [PATCH 05/94] [Xcode4] LowLevelWindow behaves. Well...with clang anyway. That's the compiler Apple wishes to go with, so may as well support it. Glew is the only thing left it looks like. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 +++--- src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 93ea5f8550..32448ba42b 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7167,7 +7167,7 @@ ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.5.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -7560,7 +7560,7 @@ ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.5.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -7895,7 +7895,7 @@ ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.5.sdk; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; diff --git a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h index 499fd4d295..dd57ad7199 100644 --- a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h +++ b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h @@ -8,7 +8,11 @@ typedef const struct __CFDictionary *CFDictionaryRef; /* XXX: This was changed to a uint32_t later and its header file cannot be included * since Style conflicts. Ugh. */ +#if __APPLE_CC__ < 5621 typedef struct _CGDirectDisplayID *CGDirectDisplayID; +#else +typedef uint32_t *CGDirectDisplayID; +#endif class LowLevelWindow_MacOSX : public LowLevelWindow { From 5b0532375c74d9f229c31f8ef7e317758217b2a4 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 17:33:06 -0400 Subject: [PATCH 06/94] [Xcode4] Extern header paths. --- .../project.pbxproj | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 32448ba42b..b99d7eb06a 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; }; 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; }; 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; }; + 2B69675513749F3C000A63A2 /* glew.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B69675413749F3C000A63A2 /* glew.h */; }; 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B766989132FF71500586512 /* NotesLoaderSMA.h */; }; 2B76698C132FF71500586512 /* NotesLoaderSMA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */; }; 2BA7925E1304F20D002BD8E1 /* NotesLoaderSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */; }; @@ -1776,6 +1777,7 @@ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; }; 2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; }; + 2B69675413749F3C000A63A2 /* glew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glew.h; path = include/GL/glew.h; sourceTree = ""; }; 2B766989132FF71500586512 /* NotesLoaderSMA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotesLoaderSMA.h; path = ../src/NotesLoaderSMA.h; sourceTree = SOURCE_ROOT; }; 2B76698A132FF71500586512 /* NotesLoaderSMA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSMA.cpp; path = ../src/NotesLoaderSMA.cpp; sourceTree = SOURCE_ROOT; }; 2BA7925A1304F20D002BD8E1 /* NotesLoaderSSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderSSC.cpp; path = ../src/NotesLoaderSSC.cpp; sourceTree = SOURCE_ROOT; }; @@ -4922,6 +4924,7 @@ EE879B8E132E06C50078FDDC /* glew-1.5.8 */ = { isa = PBXGroup; children = ( + 2B69675413749F3C000A63A2 /* glew.h */, EE879BAA132E06C50078FDDC /* glew.c */, ); name = "glew-1.5.8"; @@ -4967,6 +4970,7 @@ EE879B63132DEE720078FDDC /* RageDisplay_Legacy.h in Headers */, 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */, 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */, + 2B69675513749F3C000A63A2 /* glew.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7086,9 +7090,9 @@ HEADER_SEARCH_PATHS = ( "$(SRCROOT)/../src", "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", + "$(SRCROOT)/../extern/vorbis", + "$(SRCROOT)/../extern/libjpeg", + "$(SRCROOT)/../extern/libpng/include", ); INFOPLIST_FILE = "Info-StepMania.plist"; INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; @@ -7097,7 +7101,7 @@ LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/build/$(CONFIGURATION)", "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; @@ -7585,9 +7589,9 @@ HEADER_SEARCH_PATHS = ( "$(SRCROOT)/../src", "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", + "$(SRCROOT)/../extern/vorbis", + "$(SRCROOT)/../extern/libjpeg", + "$(SRCROOT)/../extern/libpng/include", ); INFOPLIST_FILE = "Info-StepMania.plist"; INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; @@ -7596,7 +7600,7 @@ LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/build/$(CONFIGURATION)", "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; @@ -7816,9 +7820,9 @@ HEADER_SEARCH_PATHS = ( "$(SRCROOT)/../src", "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", + "$(SRCROOT)/../extern/vorbis", + "$(SRCROOT)/../extern/libjpeg", + "$(SRCROOT)/../extern/libpng/include", ); INFOPLIST_FILE = "Info-StepMania.plist"; INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; @@ -7827,7 +7831,7 @@ LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/build/$(CONFIGURATION)", "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../src/mad-0.15.1b/msvc++/Release\"", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; From e57b81a19bf7e34ecd529dba6a35cc45c668b5e0 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 6 May 2011 17:35:43 -0400 Subject: [PATCH 07/94] [Xcode4] I thought I forced Leopard or higher. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index b99d7eb06a..40cd5a5449 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7105,7 +7105,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7604,7 +7604,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", @@ -7835,7 +7835,7 @@ ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; LINKER_DISPLAYS_MANGLED_NAMES = NO; - MACOSX_DEPLOYMENT_TARGET = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( "-finline-limit=300", From 88d5306794922a316b3f5d743f8f6977b2cf3e8b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 7 May 2011 01:15:57 -0400 Subject: [PATCH 08/94] [Xcode4] Forgot to remove *. --- src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h index dd57ad7199..cbd1896373 100644 --- a/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h +++ b/src/arch/LowLevelWindow/LowLevelWindow_MacOSX.h @@ -11,7 +11,7 @@ typedef const struct __CFDictionary *CFDictionaryRef; #if __APPLE_CC__ < 5621 typedef struct _CGDirectDisplayID *CGDirectDisplayID; #else -typedef uint32_t *CGDirectDisplayID; +typedef uint32_t CGDirectDisplayID; #endif class LowLevelWindow_MacOSX : public LowLevelWindow From bab996d18d9a8312b18fd9db906ebc32303d57ad Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 16:20:30 -0400 Subject: [PATCH 09/94] [Xcode4] Remove universal support. Again. --- .../project.pbxproj | 472 +----------------- 1 file changed, 6 insertions(+), 466 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index c7fd76247c..726a813101 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7423,50 +7423,6 @@ }; name = PerformanceDebug; }; - 2B17AB7513980FE0001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/libpng/**"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17AB7613980FE0001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7600,49 +7556,6 @@ }; name = PerformanceDebug; }; - 2B17ABC313981522001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = glew; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17ABC413981522001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7708,6 +7621,7 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7749,6 +7663,7 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7771,47 +7686,6 @@ }; name = PerformanceDebug; }; - 2B17ABE313981757001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = ""; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = pcre; - }; - name = Universal; - }; 2B17ABE413981757001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7834,6 +7708,7 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7952,7 +7827,7 @@ GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8040,55 +7915,6 @@ }; name = Native; }; - AA40D52909A08D650068C0D5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", - ); - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - NO_MP3_SUPPORT, - WITHOUT_NETWORKING, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/Libraries", - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -8159,25 +7985,6 @@ }; name = Native; }; - AA7A2B9B0AE09BA50054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - LUA_USE_MACOSX, - "$(value)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = lua; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8213,22 +8020,6 @@ }; name = Native; }; - AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = luac; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8253,14 +8044,6 @@ }; name = Native; }; - AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_VERSION = 4.2; - PRODUCT_NAME = "all lua"; - }; - name = Universal; - }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8289,22 +8072,6 @@ }; name = Native; }; - AA7C89830B67447E00FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DYNAMIC_NO_PIC = YES; - GCC_MODEL_TUNING = G5; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8341,24 +8108,6 @@ }; name = Native; }; - AA7C8B900B67464300FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - DEAD_CODE_STRIPPING = NO; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C8B910B67464300FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8451,43 +8200,6 @@ }; name = PerformanceDebug; }; - AAA070AC0CE7B0E2005A3060 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - FPM = ""; - "FPM[arch=i386]" = FPM_INTEL; - "FPM[arch=ppc]" = FPM_PPC; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ( - "HAVE_ASSERT_H=1", - "HAVE_DLFCN_H=1", - "HAVE_ERRNO_H=1", - "HAVE_FORK=1", - "HAVE_INTTYPES_H=1", - "HAVE_LIMITS_H=1", - "HAVE_MEMORY_H=1", - "HAVE_WAITPID=1", - "SIZEOF_LONG=4", - "$(FPM)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; - INSTALL_PATH = /usr/local/lib; - PREBINDING = NO; - PRODUCT_NAME = "mad-sm5"; - }; - name = Universal; - }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8551,7 +8263,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8909,7 +8621,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_STRICT_ALIASING = YES; GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; @@ -8948,138 +8660,6 @@ }; name = Native; }; - AAE44A2B0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.5; - PRODUCT_NAME = version; - ZERO_LINK = NO; - }; - name = Universal; - }; - AAE44A2C0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - LINKER_DISPLAYS_MANGLED_NAMES = NO; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - "-falign-loops=16", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; - AAE44A2D0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - BUILD_VARIANTS = normal; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.framework *.gch *.xcode* (*) CVS .svn .hg .git"; - GCC_ALTIVEC_EXTENSIONS = YES; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_FAST_MATH = NO; - GCC_FAST_OBJC_DISPATCH = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_STRICT_ALIASING = YES; - GCC_UNROLL_LOOPS = YES; - GCC_VERSION = 4.0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PROTOTYPE_CONVERSION = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; - ONLY_LINK_ESSENTIAL_SYMBOLS = YES; - PREBINDING = NO; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; - SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; - STRIP_INSTALLED_PRODUCT = YES; - STRIP_STYLE = "non-global"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include"; - }; - name = Universal; - }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9106,32 +8686,6 @@ }; name = Native; }; - AAE781810AC7E3BF00AEFC64 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(value)", - LUA_USE_MACOSX, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - INSTALL_PATH = /usr/local/lib; - OBJROOT = "$(SRCROOT)/build"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9166,7 +8720,6 @@ buildConfigurations = ( 2B17AB7313980FE0001AE57D /* Native */, 2B17AB7413980FE0001AE57D /* PerformanceDebug */, - 2B17AB7513980FE0001AE57D /* Universal */, 2B17AB7613980FE0001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9177,7 +8730,6 @@ buildConfigurations = ( 2B17ABC113981522001AE57D /* Native */, 2B17ABC213981522001AE57D /* PerformanceDebug */, - 2B17ABC313981522001AE57D /* Universal */, 2B17ABC413981522001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9188,7 +8740,6 @@ buildConfigurations = ( 2B17ABE113981757001AE57D /* Native */, 2B17ABE213981757001AE57D /* PerformanceDebug */, - 2B17ABE313981757001AE57D /* Universal */, 2B17ABE413981757001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9199,7 +8750,6 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, - AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9210,7 +8760,6 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, - AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9221,7 +8770,6 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, - AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9232,7 +8780,6 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, - AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9243,7 +8790,6 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, - AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9254,7 +8800,6 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, - AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9265,7 +8810,6 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, - AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9276,7 +8820,6 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, - AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9287,7 +8830,6 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, - AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9298,7 +8840,6 @@ buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, - AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9309,7 +8850,6 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, - AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From ad63c250a71445a932c07ed93a6d36faa3ee4be7 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 17:36:29 -0400 Subject: [PATCH 10/94] [Xcode4] LLVM Now if only we can stop this asm constraint thing... --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 726a813101..20ef00e57c 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7739,7 +7739,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8039,7 +8039,7 @@ AA7A2BBE0AE09D4E0054C5BA /* Native */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Native; @@ -8051,7 +8051,7 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Debug; @@ -8358,7 +8358,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8490,7 +8490,7 @@ AABF4DC10CD37960005A3060 /* PerformanceDebug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = PerformanceDebug; @@ -8537,7 +8537,7 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = 4.2; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; From a64569417e5110e55cc0b72daccfbf7ef5e6e770 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:08:51 -0400 Subject: [PATCH 11/94] [Xcode] Remove ancient options. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 20ef00e57c..900c5444ea 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7820,7 +7820,6 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -7851,14 +7850,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -8257,7 +8252,6 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8287,14 +8281,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8615,7 +8605,6 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8645,14 +8634,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; From 1d05ee6ad3ddac5d8f1f9b0833d1c5f9c58a19db Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:14:03 -0400 Subject: [PATCH 12/94] [Xcode4] Clang doesn't use these warnings. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 900c5444ea..0fae37cc54 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7790,11 +7790,8 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", "-fconstant-cfstrings", - "-fsingle-precision-constant", "-fno-exceptions", - "-falign-loops=16", ); PRODUCT_NAME = "$(value)"; SYMROOT = "$(SRCROOT)/.."; @@ -8327,11 +8324,8 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", "-fconstant-cfstrings", - "-fsingle-precision-constant", "-fno-exceptions", - "-falign-loops=16", ); PRODUCT_NAME = "$(value)"; STRIP_INSTALLED_PRODUCT = NO; @@ -8576,11 +8570,8 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", "-fconstant-cfstrings", - "-fsingle-precision-constant", "-fno-exceptions", - "-falign-loops=16", ); PRODUCT_NAME = "$(value)"; SYMROOT = "$(SRCROOT)/.."; From ec7e707d391ab7d964d281965c6c8f0bf0503b05 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:21:31 -0400 Subject: [PATCH 13/94] [XCode4] May as well handle some warnings. We still have to figure out libtomcrypt though. --- src/arch/InputHandler/InputHandler_MacOSX_HID.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp b/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp index c9e1b86243..ee7072e93e 100644 --- a/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp +++ b/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp @@ -347,6 +347,7 @@ RString InputHandler_MacOSX_HID::GetDeviceSpecificInputString( const DeviceInput case OTHER(48): return "non US backslash"; case OTHER(49): return "application"; case OTHER(50): return "prior"; + default: break; } #undef OTHER } @@ -365,6 +366,7 @@ RString InputHandler_MacOSX_HID::GetDeviceSpecificInputString( const DeviceInput case JOY_BUTTON_9: return "P2 MID"; case JOY_BUTTON_10: return "P2 DL"; case JOY_BUTTON_11: return "P2 DR"; + default: break; } } From 8ad3a9d4dd2dca5cd3c3df01cd7dada04860cc28 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Mon, 6 Jun 2011 18:27:52 -0400 Subject: [PATCH 14/94] [Xcode4] More warnings. --- src/ScreenEdit.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index c6905545f4..5928323256 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -241,6 +241,7 @@ void ScreenEdit::InitEditMappings() m_EditMappingsDeviceInput.hold[EDIT_BUTTON_DELETE_SHIFT_PAUSES][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL); m_EditMappingsDeviceInput.hold[EDIT_BUTTON_DELETE_SHIFT_PAUSES][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL); break; + default: break; } m_EditMappingsDeviceInput.button[EDIT_BUTTON_COLUMN_0][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C1); @@ -2114,6 +2115,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) GAMESTATE->m_bIsUsingStepTiming = !GAMESTATE->m_bIsUsingStepTiming; m_soundSwitchTiming.Play(); break; + default: break; } } @@ -2221,6 +2223,7 @@ void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton Edit case EDIT_BUTTON_RETURN_TO_EDIT: TransitionEditState( STATE_EDITING ); break; + default: break; } } @@ -2269,6 +2272,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) } } break; + default: break; } } @@ -2307,6 +2311,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) GetAppropriateTiming().m_fBeat0OffsetInSeconds += fOffsetDelta; } break; + default: break; } } } @@ -2373,6 +2378,7 @@ void ScreenEdit::TransitionEditState( EditState em ) CheckNumberOfNotesAndUndo(); break; + default: break; } } @@ -2473,6 +2479,7 @@ void ScreenEdit::TransitionEditState( EditState em ) m_NoteFieldRecord.m_iEndMarker = m_iStopPlayingAt; break; + default: break; } // Show/hide depending on edit state (em) @@ -2499,6 +2506,7 @@ void ScreenEdit::TransitionEditState( EditState em ) { case STATE_PLAYING: case STATE_RECORDING: + { const float fStartSeconds = GetAppropriateTiming().GetElapsedTimeFromBeat( GetBeat() ); LOG->Trace( "Starting playback at %f", fStartSeconds ); @@ -2509,6 +2517,8 @@ void ScreenEdit::TransitionEditState( EditState em ) m_pSoundMusic->SetProperty( "AccurateSync", true ); m_pSoundMusic->Play( &p ); break; + } + default: break; } m_EditState = em; @@ -3886,6 +3896,7 @@ void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vec ssprintf("%.5f", pSong->m_fSpecifiedBPMMax), 20, ScreenTextEntry::FloatValidate, ChangeMaxBPM, NULL ); break; + default: break; }; } From da291c20979e101f5f9dfe9da7002ff8303cc36b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 12:31:42 -0400 Subject: [PATCH 15/94] Temp branch [timing] for conversion process. May need some help with Notes*Json. --- src/NotesLoaderJson.cpp | 5 ++- src/NotesLoaderSM.cpp | 3 +- src/NotesWriterDWI.cpp | 31 +++++++++------- src/TimingData.cpp | 8 +--- src/TimingData.h | 81 ++++++----------------------------------- 5 files changed, 37 insertions(+), 91 deletions(-) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index dab70f29ee..b80ea41753 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -31,8 +31,9 @@ static void Deserialize(StopSegment &seg, const Json::Value &root) static void Deserialize(TimingData &td, const Json::Value &root) { - JsonUtil::DeserializeVectorObjects( td.m_BPMSegments, Deserialize, root["BpmSegments"] ); - JsonUtil::DeserializeVectorObjects( td.m_StopSegments, Deserialize, root["StopSegments"] ); + vector &bpms = td.allTimingSegments[SEGMENT_BPM]; +// JsonUtil::DeserializeVectorObjects( &bpms, Deserialize, root["BpmSegments"] ); +// JsonUtil::DeserializeVectorObjects( *(td).allTimingSegments[SEGMENT_STOP_DELAY], Deserialize, root["StopSegments"] ); } static void Deserialize(LyricSegment &o, const Json::Value &root) diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index ef764b97d0..8085594f81 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -932,7 +932,8 @@ bool SMLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCache } // Ensure all warps from negative time changes are in order. - sort(out.m_SongTiming.m_WarpSegments.begin(), out.m_SongTiming.m_WarpSegments.end()); + vector &warps = out.m_SongTiming.allTimingSegments[SEGMENT_WARP]; + sort(warps.begin(), warps.end()); TidyUpData( out, bFromCache ); return true; } diff --git a/src/NotesWriterDWI.cpp b/src/NotesWriterDWI.cpp index 4c451d836a..e64ecd17cd 100644 --- a/src/NotesWriterDWI.cpp +++ b/src/NotesWriterDWI.cpp @@ -352,9 +352,13 @@ bool NotesWriterDWI::Write( RString sPath, const Song &out ) /* Write transliterations, if we have them, since DWI doesn't support UTF-8. */ f.PutLine( ssprintf("#TITLE:%s;", DwiEscape(out.GetTranslitFullTitle()).c_str()) ); f.PutLine( ssprintf("#ARTIST:%s;", DwiEscape(out.GetTranslitArtist()).c_str()) ); - ASSERT( out.m_SongTiming.m_BPMSegments[0].GetRow() == 0 ); + + const vector &bpms = out.m_SongTiming.allTimingSegments[SEGMENT_BPM]; + + ASSERT_M(bpms[0]->GetRow() == 0, + ssprintf("The first BPM Segment must be defined at row 0, not %d!", bpms[0]->GetRow()) ); f.PutLine( ssprintf("#FILE:%s;", DwiEscape(out.m_sMusicFile).c_str()) ); - f.PutLine( ssprintf("#BPM:%.3f;", out.m_SongTiming.m_BPMSegments[0].GetBPM()) ); + f.PutLine( ssprintf("#BPM:%.3f;", static_cast(bpms[0])->GetBPM()) ); f.PutLine( ssprintf("#GAP:%ld;", -lrintf( out.m_SongTiming.m_fBeat0OffsetInSeconds*1000 )) ); f.PutLine( ssprintf("#SAMPLESTART:%.3f;", out.m_fMusicSampleStartSeconds) ); f.PutLine( ssprintf("#SAMPLELENGTH:%.3f;", out.m_fMusicSampleLengthSeconds) ); @@ -376,29 +380,30 @@ bool NotesWriterDWI::Write( RString sPath, const Song &out ) break; } - if( !out.m_SongTiming.m_StopSegments.empty() ) + const vector &stops = out.m_SongTiming.allTimingSegments[SEGMENT_STOP_DELAY]; + if( !stops.empty() ) { f.Write( "#FREEZE:" ); - for( unsigned i=0; i(stops[i]); + f.Write( ssprintf("%.3f=%.3f", fs->GetRow() * 4.0f / ROWS_PER_BEAT, + roundf(fs->GetPause()*1000)) ); + if( i != stops.size()-1 ) f.Write( "," ); } f.PutLine( ";" ); } - if( out.m_SongTiming.m_BPMSegments.size() > 1) + if( bpms.size() > 1) { f.Write( "#CHANGEBPM:" ); - for( unsigned i=1; i(bpms[i]); + f.Write( ssprintf("%.3f=%.3f", bs->GetRow() * 4.0f / ROWS_PER_BEAT, bs->GetBPM() ) ); + if( i != bpms.size()-1 ) f.Write( "," ); } f.PutLine( ";" ); diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 5ecfa97a96..8724632daa 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -8,14 +8,10 @@ #include -TimingData::TimingData() : - m_fBeat0OffsetInSeconds(0) -{ -} - TimingData::TimingData(float fOffset) : m_fBeat0OffsetInSeconds(fOffset) -{ +{ + // allTimingSegments[SEGMENT_BPM] = new vector(); } void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highest ) const diff --git a/src/TimingData.h b/src/TimingData.h index 27656363ed..27a3946ef4 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -16,14 +16,10 @@ struct lua_State; class TimingData { public: - /** - * @brief Sets up initial timing data. - */ - TimingData(); /** * @brief Sets up initial timing data with a defined offset. * @param fOffset the offset from the 0th beat. */ - TimingData(float fOffset); + TimingData(float fOffset = 0); /** * @brief Gets the actual BPM of the song, * while respecting a limit. @@ -1303,36 +1299,14 @@ public: */ bool operator==( const TimingData &other ) { - COMPARE( m_BPMSegments.size() ); - for( unsigned i=0; i m_BPMSegments; - /** - * @brief The collection of StopSegments & DelaySegments. - */ - vector m_StopSegments; - /** - * @brief The collection of TimeSignatureSegments. - */ - vector m_vTimeSignatureSegments; - /** - * @brief The collection of WarpSegments. - */ - vector m_WarpSegments; - /** - * @brief The collection of TickcountSegments. - */ - vector m_TickcountSegments; - /** - * @brief The collection of ComboSegments. - */ - vector m_ComboSegments; - /** - * @brief The collection of LabelSegments. - */ - vector m_LabelSegments; - /** @brief The collection of SpeedSegments. */ - vector m_SpeedSegments; - /** @brief The collection of ScrollSegments. */ - vector m_ScrollSegments; - /** @brief The collection of FakeSegments. */ - vector m_FakeSegments; + + + vector allTimingSegments[NUM_TimingSegmentTypes]; /** * @brief The initial offset of a song. From 26e311a49e90ae0a03d8736fe85e480947638dc8 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 13:00:03 -0400 Subject: [PATCH 16/94] [timing] More conversion. --- src/Background.cpp | 34 ++++++++++++++++++++-------------- src/NotesWriterSM.cpp | 37 ++++++++++++++++++++----------------- src/ScreenEdit.cpp | 15 ++++++++------- 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/src/Background.cpp b/src/Background.cpp index d5b14b308b..c987102faa 100644 --- a/src/Background.cpp +++ b/src/Background.cpp @@ -421,35 +421,41 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac const TimingData &timing = m_pSong->m_SongTiming; // change BG every time signature change or 4 measures - FOREACH_CONST( TimeSignatureSegment, timing.m_vTimeSignatureSegments, iter ) + const vector &tSigs = timing.allTimingSegments[SEGMENT_TIME_SIG]; + + for (unsigned i = 0; i < tSigs.size(); i++) { - vector::const_iterator next = iter; - next++; - int iSegmentEndRow = (next == timing.m_vTimeSignatureSegments.end()) ? iEndRow : next->GetRow(); + TimeSignatureSegment *ts = static_cast(tSigs[i]); + int iSegmentEndRow = (i + 1 == tSigs.size()) ? iEndRow : tSigs[i+1]->GetRow(); - for( int i=max(iter->GetRow(),iStartRow); iGetNoteRowsPerMeasure() ) + + for(int j=max(ts->GetRow(),iStartRow); + jGetNoteRowsPerMeasure()) { // Don't fade. It causes frame rate dip, especially on slower machines. - BackgroundDef bd = m_Layer[0].CreateRandomBGA( m_pSong, change.m_def.m_sEffect, m_RandomBGAnimations, this ); + BackgroundDef bd = m_Layer[0].CreateRandomBGA(m_pSong, + change.m_def.m_sEffect, + m_RandomBGAnimations, this); if( !bd.IsEmpty() ) { BackgroundChange c = change; c.m_def = bd; - c.m_fStartBeat = NoteRowToBeat(i); + c.m_fStartBeat = NoteRowToBeat(j); m_Layer[0].m_aBGChanges.push_back( c ); } } } // change BG every BPM change that is at the beginning of a measure - for( unsigned i=0; i &bpms = timing.allTimingSegments[SEGMENT_BPM]; + for( unsigned i=0; iGetRow()) % iter->GetNoteRowsPerMeasure() == 0 ) + TimeSignatureSegment *ts = static_cast(tSigs[j]); + if ((bpms[i]->GetRow() - ts->GetRow()) % ts->GetNoteRowsPerMeasure() == 0) { bAtBeginningOfMeasure = true; break; @@ -460,7 +466,7 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac continue; // skip // start so that we don't create a BGChange right on top of fEndBeat - bool bInRange = bpmseg.GetRow() >= iStartRow && bpmseg.GetRow() < iEndRow; + bool bInRange = bpms[i]->GetRow() >= iStartRow && bpms[i]->GetRow() < iEndRow; if( !bInRange ) continue; // skip @@ -470,7 +476,7 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac BackgroundChange c = change; c.m_def.m_sFile1 = bd.m_sFile1; c.m_def.m_sFile2 = bd.m_sFile2; - c.m_fStartBeat = bpmseg.GetBeat(); + c.m_fStartBeat = bpms[i]->GetBeat(); m_Layer[0].m_aBGChanges.push_back( c ); } } diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index cbcea62ef0..43b0279f90 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -50,6 +50,7 @@ static RString BackgroundChangeToString( const BackgroundChange &bgc ) * @param out the Song in question. */ static void WriteGlobalTags( RageFile &f, Song &out ) { + TimingData &timing = out.m_SongTiming; f.PutLine( ssprintf( "#TITLE:%s;", SmEscape(out.m_sMainTitle).c_str() ) ); f.PutLine( ssprintf( "#SUBTITLE:%s;", SmEscape(out.m_sSubTitle).c_str() ) ); f.PutLine( ssprintf( "#ARTIST:%s;", SmEscape(out.m_sArtist).c_str() ) ); @@ -99,44 +100,46 @@ static void WriteGlobalTags( RageFile &f, Song &out ) f.Write( "#BPMS:" ); - for( unsigned i=0; i &bpms = timing.allTimingSegments[SEGMENT_BPM]; + for( unsigned i=0; i(bpms[i]); - f.PutLine( ssprintf( "%.3f=%.3f", bs.GetBeat(), bs.GetBPM() ) ); - if( i != out.m_SongTiming.m_BPMSegments.size()-1 ) + f.PutLine( ssprintf( "%.3f=%.3f", bs->GetBeat(), bs->GetBPM() ) ); + if( i != bpms.size()-1 ) f.Write( "," ); } f.PutLine( ";" ); - unsigned wSize = out.m_SongTiming.m_WarpSegments.size(); + vector &warps = timing.allTimingSegments[SEGMENT_WARP]; + unsigned wSize = warps.size(); if( wSize > 0 ) { for( unsigned i=0; i < wSize; i++ ) { - int iRow = out.m_SongTiming.m_WarpSegments[i].GetRow(); + const WarpSegment *ws = static_cast(warps[i]); + int iRow = ws->GetRow(); float fBPS = 60 / out.m_SongTiming.GetBPMAtRow(iRow); - float fSkip = fBPS * out.m_SongTiming.m_WarpSegments[i].GetLength(); + float fSkip = fBPS * ws->GetLength(); StopSegment ss(iRow, -fSkip, false); out.m_SongTiming.AddStopSegment( ss ); } } f.Write( "#STOPS:" ); - for( unsigned i=0; i &stops = timing.allTimingSegments[SEGMENT_STOP_DELAY]; + for( unsigned i=0; i(stops[i]); + float fBeat = fs->GetBeat(); + if (fs->GetDelay()) fBeat--; - f.PutLine( ssprintf( "%.3f=%.3f", fBeat, fs.GetPause() ) ); - if( i != out.m_SongTiming.m_StopSegments.size()-1 ) + f.PutLine( ssprintf( "%.3f=%.3f", fBeat, fs->GetPause() ) ); + if( i != stops.size()-1 ) f.Write( "," ); - if( fs.GetPause() < 0 ) + if( fs->GetPause() < 0 ) { - out.m_SongTiming.m_StopSegments.erase( - out.m_SongTiming.m_StopSegments.begin()+i, - out.m_SongTiming.m_StopSegments.begin()+i+1 ); + stops.erase(stops.begin()+i,stops.begin()+i+1 ); i--; } } diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index f0dacde5c0..d4d84b4a69 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -1972,13 +1972,14 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) fDelta *= 40; } unsigned i; - for( i=0; i &stops = GetAppropriateTiming().allTimingSegments[SEGMENT_STOP_DELAY]; + for( i=0; iGetRow() == GetRow() ) break; } - if( i == GetAppropriateTiming().m_StopSegments.size() ) // there is no StopSegment at the current beat + if( i == stops.size() ) // there is no StopSegment at the current beat { // create a new StopSegment if( fDelta > 0 ) @@ -1986,10 +1987,10 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } else // StopSegment being modified is m_SongTiming.m_StopSegments[i] { - vector &s = GetAppropriateTiming().m_StopSegments; - s[i].SetPause(s[i].GetPause() + fDelta); - if( s[i].GetPause() <= 0 ) - s.erase( s.begin()+i, s.begin()+i+1); + StopSegment *s = static_cast(stops[i]); + s->SetPause(s->GetPause() + fDelta); + if( s->GetPause() <= 0 ) + stops.erase( stops.begin()+i, stops.begin()+i+1); } (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); SetDirty( true ); From 848d48d9ea6a8e5e9cefb0ba394d8ce4f213673b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 13:10:02 -0400 Subject: [PATCH 17/94] [timing] More progress. Need a lunch break. --- src/AdjustSync.cpp | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/AdjustSync.cpp b/src/AdjustSync.cpp index bc0425293d..7e7ec96247 100644 --- a/src/AdjustSync.cpp +++ b/src/AdjustSync.cpp @@ -266,14 +266,23 @@ void AdjustSync::AutosyncTempo() GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += fIntercept; const float fScaleBPM = 1.0f/(1.0f - fSlope); - FOREACH( BPMSegment, GAMESTATE->m_pCurSong->m_SongTiming.m_BPMSegments, i ) - i->SetBPM( i->GetBPM() * fScaleBPM ); + TimingData &timing = GAMESTATE->m_pCurSong->m_SongTiming; + vector &bpms = timing.allTimingSegments[SEGMENT_BPM]; + for (unsigned i = 0; i < bpms.size(); i++) + { + BPMSegment *b = static_cast(bpms[i]); + b->SetBPM(b->GetBPM() * fScaleBPM); + } /* We assume that the stops were measured as a number of beats. * Therefore, if we change the bpms, we need to make a similar * change to the stops. */ - FOREACH( StopSegment, GAMESTATE->m_pCurSong->m_SongTiming.m_StopSegments, i ) - i->SetPause(i->GetPause() * (1.0f - fSlope)); + vector &stops = timing.allTimingSegments[SEGMENT_STOP_DELAY]; + for (unsigned i = 0; i < stops.size(); i++) + { + StopSegment *s = static_cast(stops[i]); + s->SetPause(s->GetPause() * (1.0f - fSlope)); + } SCREENMAN->SystemMessage( AUTOSYNC_CORRECTION_APPLIED.GetValue() ); } @@ -343,10 +352,14 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo ) } } - for( unsigned i=0; i< testing.m_BPMSegments.size(); i++ ) + vector &bpmTest = testing.allTimingSegments[SEGMENT_BPM]; + vector &bpmOrig = original.allTimingSegments[SEGMENT_BPM]; + for( unsigned i=0; i< bpmTest.size(); i++ ) { - float fOld = Quantize( original.m_BPMSegments[i].GetBPM(), 0.001f ); - float fNew = Quantize( testing.m_BPMSegments[i].GetBPM(), 0.001f ); + BPMSegment *bT = static_cast(bpmTest[i]); + BPMSegment *bO = static_cast(bpmOrig[i]); + float fOld = Quantize( bO->GetBPM(), 0.001f ); + float fNew = Quantize( bT->GetBPM(), 0.001f ); float fDelta = fNew - fOld; if( fabsf(fDelta) > 0.0001f ) @@ -364,10 +377,14 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo ) } } - for( unsigned i=0; i< testing.m_StopSegments.size(); i++ ) + vector &stopTest = testing.allTimingSegments[SEGMENT_STOP_DELAY]; + vector &stopOrig = original.allTimingSegments[SEGMENT_STOP_DELAY]; + for( unsigned i=0; i< stopTest.size(); i++ ) { - float fOld = Quantize( original.m_StopSegments[i].GetPause(), 0.001f ); - float fNew = Quantize( testing.m_StopSegments[i].GetPause(), 0.001f ); + StopSegment *sT = static_cast(stopTest[i]); + StopSegment *sO = static_cast(stopOrig[i]); + float fOld = Quantize( sO->GetPause(), 0.001f ); + float fNew = Quantize( sT->GetPause(), 0.001f ); float fDelta = fNew - fOld; if( fabsf(fDelta) > 0.0001f ) From 759fc0fa6b7a035920ae949785f29ce66ccdcd8c Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 14:12:20 -0400 Subject: [PATCH 18/94] [timing] This one is converted. --- src/NotesWriterSSC.cpp | 72 +++++++++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index d9edfb1946..8d9434e10f 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -90,45 +90,71 @@ static void GetTimingTags( vector &lines, TimingData timing, bool bIsSo TimingTagWriter w ( &lines ); timing.TidyUpData(); + unsigned i = 0; w.Init( "BPMS" ); - FOREACH_CONST( BPMSegment, timing.m_BPMSegments, bs ) + vector &bpms = timing.allTimingSegments[SEGMENT_BPM]; + for (; i < bpms.size(); i++) + { + BPMSegment *bs = static_cast(bpms[i]); w.Write( bs->GetRow(), bs->GetBPM() ); + } w.Finish(); w.Init( "STOPS" ); - FOREACH_CONST( StopSegment, timing.m_StopSegments, ss ) + vector &stops = timing.allTimingSegments[SEGMENT_STOP_DELAY]; + for (i = 0; i < stops.size(); i++) + { + StopSegment *ss = static_cast(stops[i]); if( !ss->GetDelay() ) w.Write( ss->GetRow(), ss->GetPause() ); + } w.Finish(); w.Init( "DELAYS" ); - FOREACH_CONST( StopSegment, timing.m_StopSegments, ss ) + for (i = 0; i < stops.size(); i++) + { + StopSegment *ss = static_cast(stops[i]); if( ss->GetDelay() ) w.Write( ss->GetRow(), ss->GetPause() ); + } w.Finish(); w.Init( "WARPS" ); - FOREACH_CONST( WarpSegment, timing.m_WarpSegments, ws ) + vector &warps = timing.allTimingSegments[SEGMENT_WARP]; + for (i = 0; i < warps.size(); i++) + { + WarpSegment *ws = static_cast(warps[i]); w.Write( ws->GetRow(), ws->GetLength() ); + } w.Finish(); - ASSERT( !timing.m_vTimeSignatureSegments.empty() ); + vector &tSigs = timing.allTimingSegments[SEGMENT_TIME_SIG]; + ASSERT( !tSigs.empty() ); w.Init( "TIMESIGNATURES" ); - FOREACH_CONST( TimeSignatureSegment, timing.m_vTimeSignatureSegments, iter ) - w.Write( iter->GetRow(), iter->GetNum(), iter->GetDen() ); + for (i = 0; i < tSigs.size(); i++) + { + TimeSignatureSegment *ts = static_cast(tSigs[i]); + w.Write( ts->GetRow(), ts->GetNum(), ts->GetDen() ); + } w.Finish(); - ASSERT( !timing.m_TickcountSegments.empty() ); + vector &ticks = timing.allTimingSegments[SEGMENT_TICKCOUNT]; + ASSERT( !ticks.empty() ); w.Init( "TICKCOUNTS" ); - FOREACH_CONST( TickcountSegment, timing.m_TickcountSegments, ts ) + for (i = 0; i < ticks.size(); i++) + { + TickcountSegment *ts = static_cast(ticks[i]); w.Write( ts->GetRow(), ts->GetTicks() ); + } w.Finish(); - ASSERT( !timing.m_ComboSegments.empty() ); + vector &combos = timing.allTimingSegments[SEGMENT_COMBO]; + ASSERT( !combos.empty() ); w.Init( "COMBOS" ); - FOREACH_CONST( ComboSegment, timing.m_ComboSegments, cs ) + for (i = 0; i < combos.size(); i++) { + ComboSegment *cs = static_cast(combos[i]); if (cs->GetCombo() == cs->GetMissCombo()) w.Write( cs->GetRow(), cs->GetCombo() ); else @@ -137,27 +163,43 @@ static void GetTimingTags( vector &lines, TimingData timing, bool bIsSo w.Finish(); // Song Timing should only have the initial value. + vector &speeds = timing.allTimingSegments[SEGMENT_SPEED]; w.Init( "SPEEDS" ); - FOREACH_CONST( SpeedSegment, timing.m_SpeedSegments, ss ) + for (i = 0; i < speeds.size(); i++) + { + SpeedSegment *ss = static_cast(speeds[i]); w.Write( ss->GetRow(), ss->GetRatio(), ss->GetLength(), ss->GetUnit() ); + } w.Finish(); w.Init( "SCROLLS" ); - FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, ss ) + vector &scrolls = timing.allTimingSegments[SEGMENT_SCROLL]; + for (i = 0; i < scrolls.size(); i++) + { + ScrollSegment *ss = static_cast(scrolls[i]); w.Write( ss->GetRow(), ss->GetRatio() ); + } w.Finish(); if( !bIsSong ) { + vector &fakes = timing.allTimingSegments[SEGMENT_FAKE]; w.Init( "FAKES" ); - FOREACH_CONST( FakeSegment, timing.m_FakeSegments, fs ) + for (i = 0; i < fakes.size(); i++) + { + FakeSegment *fs = static_cast(fakes[i]); w.Write( fs->GetRow(), fs->GetLength() ); + } w.Finish(); } w.Init( "LABELS" ); - FOREACH_CONST( LabelSegment, timing.m_LabelSegments, ls ) + vector &labels = timing.allTimingSegments[SEGMENT_LABEL]; + for (i = 0; i < labels.size(); i++) + { + LabelSegment *ls = static_cast(labels[i]); w.Write( ls->GetRow(), ls->GetLabel().c_str() ); + } w.Finish(); } From 000421c18b51e359beb6f9281e4bca84bcaa747c Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 14:12:28 -0400 Subject: [PATCH 19/94] [timing] This one is not. Need assistance. --- src/NotesWriterJson.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NotesWriterJson.cpp b/src/NotesWriterJson.cpp index 8320c3d4b9..56b34efad7 100644 --- a/src/NotesWriterJson.cpp +++ b/src/NotesWriterJson.cpp @@ -23,8 +23,8 @@ static void Serialize(const StopSegment &seg, Json::Value &root) static void Serialize(const TimingData &td, Json::Value &root) { - JsonUtil::SerializeVectorObjects( td.m_BPMSegments, Serialize, root["BpmSegments"] ); - JsonUtil::SerializeVectorObjects( td.m_StopSegments, Serialize, root["StopSegments"] ); +// JsonUtil::SerializeVectorObjects( td.m_BPMSegments, Serialize, root["BpmSegments"] ); +// JsonUtil::SerializeVectorObjects( td.m_StopSegments, Serialize, root["StopSegments"] ); } static void Serialize(const LyricSegment &o, Json::Value &root) From 88fca505a8ddf762c65713fcdf7714e7126c1282 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 14:33:07 -0400 Subject: [PATCH 20/94] [timing] All that's left is the big one. Hopefully. ...right, the JSON stuff. GAH. --- src/NoteField.cpp | 94 ++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/src/NoteField.cpp b/src/NoteField.cpp index 952f6466c4..e45ab8325a 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -849,27 +849,26 @@ void NoteField::DrawPrimitives() } const TimingData *pTiming = GetDisplayedTiming(m_pPlayerState); - + const vector *segs = pTiming->allTimingSegments; + unsigned i = 0; // Draw beat bars if( ( GAMESTATE->IsEditing() || SHOW_BEAT_BARS ) && pTiming != NULL ) { - const TimingData &timing = *pTiming; - const vector &vTimeSignatureSegments = timing.m_vTimeSignatureSegments; + const vector &tSigs = segs[SEGMENT_TIME_SIG]; int iMeasureIndex = 0; - FOREACH_CONST( TimeSignatureSegment, vTimeSignatureSegments, iter ) + for (i = 0; i < tSigs.size(); i++) { - vector::const_iterator next = iter; - next++; - int iSegmentEndRow = (next == vTimeSignatureSegments.end()) ? iLastRowToDraw : next->GetRow(); - + TimeSignatureSegment *ts = static_cast(tSigs[i]); + int iSegmentEndRow = (i + 1 == tSigs.size()) ? iLastRowToDraw : tSigs[i+1]->GetRow(); + // beat bars every 16th note - int iDrawBeatBarsEveryRows = BeatToNoteRow( ((float)iter->GetDen()) / 4 ) / 4; + int iDrawBeatBarsEveryRows = BeatToNoteRow( ((float)ts->GetDen()) / 4 ) / 4; // In 4/4, every 16th beat bar is a measure - int iMeasureBarFrequency = iter->GetNum() * 4; + int iMeasureBarFrequency = ts->GetNum() * 4; int iBeatBarsDrawn = 0; - for( int i=iter->GetRow(); i < iSegmentEndRow; i += iDrawBeatBarsEveryRows ) + for( int j=ts->GetRow(); j < iSegmentEndRow; j += iDrawBeatBarsEveryRows ) { bool bMeasureBar = iBeatBarsDrawn % iMeasureBarFrequency == 0; BeatBarType type = quarter_beat; @@ -879,7 +878,7 @@ void NoteField::DrawPrimitives() type = beat; else if( iBeatBarsDrawn % 2 == 0 ) type = half_beat; - float fBeat = NoteRowToBeat(i); + float fBeat = NoteRowToBeat(j); if( IS_ON_SCREEN(fBeat) ) { @@ -902,8 +901,9 @@ void NoteField::DrawPrimitives() // Scroll text if( GAMESTATE->m_bIsUsingStepTiming ) { - FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, seg ) + for (i = 0; i < segs[SEGMENT_SCROLL].size(); i++) { + ScrollSegment *seg = static_cast(segs[SEGMENT_SCROLL][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -914,8 +914,9 @@ void NoteField::DrawPrimitives() } // BPM text - FOREACH_CONST( BPMSegment, timing.m_BPMSegments, seg ) + for (i = 0; i < segs[SEGMENT_BPM].size(); i++) { + BPMSegment *seg = static_cast(segs[SEGMENT_BPM][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -925,8 +926,9 @@ void NoteField::DrawPrimitives() } // Freeze text - FOREACH_CONST( StopSegment, timing.m_StopSegments, seg ) + for (i = 0; i < segs[SEGMENT_STOP_DELAY].size(); i++) { + StopSegment *seg = static_cast(segs[SEGMENT_STOP_DELAY][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -936,8 +938,9 @@ void NoteField::DrawPrimitives() } // Warp text - FOREACH_CONST( WarpSegment, timing.m_WarpSegments, seg ) + for (i = 0; i < segs[SEGMENT_WARP].size(); i++) { + WarpSegment *seg = static_cast(segs[SEGMENT_WARP][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -948,8 +951,9 @@ void NoteField::DrawPrimitives() // Time Signature text - FOREACH_CONST( TimeSignatureSegment, timing.m_vTimeSignatureSegments, seg ) + for (i = 0; i < segs[SEGMENT_TIME_SIG].size(); i++) { + TimeSignatureSegment *seg = static_cast(segs[SEGMENT_TIME_SIG][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -961,8 +965,9 @@ void NoteField::DrawPrimitives() if( GAMESTATE->m_bIsUsingStepTiming ) { // Tickcount text - FOREACH_CONST( TickcountSegment, timing.m_TickcountSegments, seg ) + for (i = 0; i < segs[SEGMENT_TICKCOUNT].size(); i++) { + TickcountSegment *seg = static_cast(segs[SEGMENT_TICKCOUNT][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -975,8 +980,9 @@ void NoteField::DrawPrimitives() if( GAMESTATE->m_bIsUsingStepTiming ) { // Combo text - FOREACH_CONST( ComboSegment, timing.m_ComboSegments, seg ) + for (i = 0; i < segs[SEGMENT_COMBO].size(); i++) { + ComboSegment *seg = static_cast(segs[SEGMENT_COMBO][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -987,8 +993,9 @@ void NoteField::DrawPrimitives() } // Label text - FOREACH_CONST( LabelSegment, timing.m_LabelSegments, seg ) + for (i = 0; i < segs[SEGMENT_LABEL].size(); i++) { + LabelSegment *seg = static_cast(segs[SEGMENT_LABEL][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -999,8 +1006,10 @@ void NoteField::DrawPrimitives() if( GAMESTATE->m_bIsUsingStepTiming ) { - FOREACH_CONST( SpeedSegment, timing.m_SpeedSegments, seg ) + // Speed text + for (i = 0; i < segs[SEGMENT_SPEED].size(); i++) { + SpeedSegment *seg = static_cast(segs[SEGMENT_SPEED][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -1011,11 +1020,12 @@ void NoteField::DrawPrimitives() } } - // Speed text + // Fake text if( GAMESTATE->m_bIsUsingStepTiming ) { - FOREACH_CONST( FakeSegment, timing.m_FakeSegments, seg ) + for (i = 0; i < segs[SEGMENT_FAKE].size(); i++) { + FakeSegment *seg = static_cast(segs[SEGMENT_FAKE][i]); if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { float fBeat = seg->GetBeat(); @@ -1074,55 +1084,55 @@ void NoteField::DrawPrimitives() case EditMode_Full: { vector::iterator iter[NUM_BackgroundLayer]; - FOREACH_BackgroundLayer( i ) - iter[i] = GAMESTATE->m_pCurSong->GetBackgroundChanges(i).begin(); + FOREACH_BackgroundLayer( j ) + iter[j] = GAMESTATE->m_pCurSong->GetBackgroundChanges(j).begin(); while( 1 ) { float fLowestBeat = FLT_MAX; vector viLowestIndex; - FOREACH_BackgroundLayer( i ) + FOREACH_BackgroundLayer( j ) { - if( iter[i] == GAMESTATE->m_pCurSong->GetBackgroundChanges(i).end() ) + if( iter[j] == GAMESTATE->m_pCurSong->GetBackgroundChanges(j).end() ) continue; - float fBeat = iter[i]->m_fStartBeat; + float fBeat = iter[j]->m_fStartBeat; if( fBeat < fLowestBeat ) { fLowestBeat = fBeat; viLowestIndex.clear(); - viLowestIndex.push_back( i ); + viLowestIndex.push_back( j ); } else if( fBeat == fLowestBeat ) { - viLowestIndex.push_back( i ); + viLowestIndex.push_back( j ); } } if( viLowestIndex.empty() ) { - FOREACH_BackgroundLayer( i ) - ASSERT( iter[i] == GAMESTATE->m_pCurSong->GetBackgroundChanges(i).end() ); + FOREACH_BackgroundLayer( j ) + ASSERT( iter[j] == GAMESTATE->m_pCurSong->GetBackgroundChanges(j).end() ); break; } if( IS_ON_SCREEN(fLowestBeat) ) { vector vsBGChanges; - FOREACH_CONST( BackgroundLayer, viLowestIndex, i ) + FOREACH_CONST( BackgroundLayer, viLowestIndex, bl ) { - ASSERT( iter[*i] != GAMESTATE->m_pCurSong->GetBackgroundChanges(*i).end() ); - const BackgroundChange& change = *iter[*i]; + ASSERT( iter[*bl] != GAMESTATE->m_pCurSong->GetBackgroundChanges(*bl).end() ); + const BackgroundChange& change = *iter[*bl]; RString s = change.GetTextDescription(); - if( *i!=0 ) - s = ssprintf("%d: ",*i) + s; + if( *bl!=0 ) + s = ssprintf("%d: ",*bl) + s; vsBGChanges.push_back( s ); } DrawBGChangeText( fLowestBeat, join("\n",vsBGChanges) ); } - FOREACH_CONST( BackgroundLayer, viLowestIndex, i ) - iter[*i]++; + FOREACH_CONST( BackgroundLayer, viLowestIndex, bl ) + iter[*bl]++; } } break; @@ -1166,9 +1176,9 @@ void NoteField::DrawPrimitives() ssprintf("NumTracks %d = ColsPerPlayer %d",m_pNoteData->GetNumTracks(), GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer)); - for( int i=0; iGetNumTracks(); i++ ) // for each arrow column + for( int j=0; jGetNumTracks(); j++ ) // for each arrow column { - const int c = pStyle->m_iColumnDrawOrder[i]; + const int c = pStyle->m_iColumnDrawOrder[j]; bool bAnyUpcomingInThisCol = false; @@ -1179,7 +1189,7 @@ void NoteField::DrawPrimitives() for( ; begin != end; ++begin ) { - const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, i); + const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, j); if( tn.type != TapNote::hold_head ) continue; // skip From 312498be94a51f0d950ba44f752caf2c2dd4de68 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 15:22:32 -0400 Subject: [PATCH 21/94] [timing] Down to about 130 errors. Need a break, maybe some help. --- src/TimingData.cpp | 364 ++++++++++----------------------------------- 1 file changed, 82 insertions(+), 282 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 8724632daa..6bc31eca46 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -18,8 +18,10 @@ void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highe { fMinBPMOut = FLT_MAX; fMaxBPMOut = 0; - FOREACH_CONST( BPMSegment, m_BPMSegments, seg ) + const vector &bpms = this->allTimingSegments[SEGMENT_BPM]; + for (unsigned i = 0; i < bpms.size(); i++) { + BPMSegment *seg = static_cast(bpms[i]); const float fBPM = seg->GetBPM(); fMaxBPMOut = clamp(max( fBPM, fMaxBPMOut ), 0, highest); fMinBPMOut = min( fBPM, fMinBPMOut ); @@ -29,7 +31,8 @@ void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highe void TimingData::AddBPMSegment( const BPMSegment &seg ) { - m_BPMSegments.insert( upper_bound(m_BPMSegments.begin(), m_BPMSegments.end(), seg), seg ); + const vector &segs = this->allTimingSegments[SEGMENT_BPM]; + segs.insert( upper_bound(segs.begin(), segs.end(), seg), seg ); } void TimingData::AddStopSegment( const StopSegment &seg ) @@ -81,11 +84,13 @@ void TimingData::AddFakeSegment( const FakeSegment &seg ) void TimingData::SetBPMAtRow( int iNoteRow, float fBPM ) { unsigned i; - for( i=0; i= iNoteRow ) + vector &bpms = this->allTimingSegments[SEGMENT_BPM]; + for( i=0; iGetRow() >= iNoteRow ) break; - if( i == m_BPMSegments.size() || m_BPMSegments[i].GetRow() != iNoteRow ) + BPMSegment *bs = static_cast(bpms[i]); + if( i == bpms.size() || bs->GetRow() != iNoteRow ) { // There is no BPMSegment at the specified beat. If the BPM being set differs // from the last BPMSegment's BPM, create a new BPMSegment. @@ -1389,91 +1394,25 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool void TimingData::InsertRows( int iStartRow, int iRowsToAdd ) { - for( unsigned i = 0; i < m_BPMSegments.size(); i++ ) + for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) { - BPMSegment &bpm = m_BPMSegments[i]; - if( bpm.GetRow() < iStartRow ) - continue; - bpm.SetRow( bpm.GetRow() + iRowsToAdd ); - } - - for( unsigned i = 0; i < m_StopSegments.size(); i++ ) - { - StopSegment &stop = m_StopSegments[i]; - if( stop.GetRow() < iStartRow ) - continue; - stop.SetRow(stop.GetRow() + iRowsToAdd); - } - - for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) - { - WarpSegment &warp = m_WarpSegments[i]; - if( warp.GetRow() < iStartRow ) - continue; - warp.SetRow(warp.GetRow() + iRowsToAdd); - } - - for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) - { - TimeSignatureSegment &time = m_vTimeSignatureSegments[i]; - if( time.GetRow() < iStartRow ) - continue; - time.SetRow(time.GetRow() + iRowsToAdd); - } - - for( unsigned i = 0; i < m_TickcountSegments.size(); i++ ) - { - TickcountSegment &tick = m_TickcountSegments[i]; - if( tick.GetRow() < iStartRow ) - continue; - tick.SetRow(tick.GetRow() + iRowsToAdd); - } - - for( unsigned i = 0; i < m_ComboSegments.size(); i++ ) - { - ComboSegment &comb = m_ComboSegments[i]; - if( comb.GetRow() < iStartRow ) - continue; - comb.SetRow(comb.GetRow() + iRowsToAdd); - } - for( unsigned i = 0; i < m_LabelSegments.size(); i++ ) - { - LabelSegment &labl = m_LabelSegments[i]; - if( labl.GetRow() < iStartRow ) - continue; - labl.SetRow(labl.GetRow() + iRowsToAdd); - } - - for( unsigned i = 0; i < m_SpeedSegments.size(); i++ ) - { - SpeedSegment &sped = m_SpeedSegments[i]; - if( sped.GetRow() < iStartRow ) - continue; - sped.SetRow(sped.GetRow() + iRowsToAdd); - } - - for( unsigned i = 0; i < m_FakeSegments.size(); i++ ) - { - FakeSegment &fake = m_FakeSegments[i]; - if( fake.GetRow() < iStartRow ) - continue; - fake.SetRow(fake.GetRow() + iRowsToAdd); - } - - for( unsigned i = 0; i < m_ScrollSegments.size(); i++ ) - { - ScrollSegment &scrl = m_ScrollSegments[i]; - if( scrl.GetRow() < iStartRow ) - continue; - scrl.SetRow(scrl.GetRow() + iRowsToAdd); + vector &segs = this->allTimingSegments[i]; + for (unsigned j = 0; j < segs.size(); j++) + { + TimingSegment *seg = segs[j]; + if (seg->GetRow() < iStartRow) + continue; + seg->SetRow(seg->GetRow() + iRowsToAdd); + } } if( iStartRow == 0 ) { /* If we're shifting up at the beginning, we just shifted up the first * BPMSegment. That segment must always begin at 0. */ - ASSERT( m_BPMSegments.size() > 0 ); - m_BPMSegments[0].SetRow(0); + vector &bpms = this->allTimingSegments[SEGMENT_BPM]; + ASSERT_M( bpms.size() > 0, "There must be at least one BPM Segment in the chart!" ); + bpms[0]->SetRow(0); } } @@ -1485,192 +1424,29 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete ) /* We're moving rows up. Delete any BPM changes and stops in the region * being deleted. */ - for( unsigned i = 0; i < m_BPMSegments.size(); i++ ) + for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) { - BPMSegment &bpm = m_BPMSegments[i]; - - // Before deleted region: - if( bpm.GetRow() < iStartRow ) - continue; - - // Inside deleted region: - if( bpm.GetRow() < iStartRow+iRowsToDelete ) + vector &segs = this->allTimingSegments[i]; + for (unsigned j = 0; j < segs.size(); j++) { - m_BPMSegments.erase( m_BPMSegments.begin()+i, m_BPMSegments.begin()+i+1 ); - --i; - continue; + TimingSegment *seg = segs[j]; + // Before deleted region: + if (seg->GetRow() < iStartRow) + continue; + + // Inside deleted region: + if (seg->GetRow() < iStartRow + iRowsToDelete) + { + segs.erase(segs.begin()+j, segs.begin()+j+1); + --j; + continue; + } + + // After deleted regions: + seg->SetRow(seg->GetRow() - iRowsToDelete); } - - // After deleted region: - bpm.SetRow( bpm.GetRow() - iRowsToDelete ); - } - - for( unsigned i = 0; i < m_StopSegments.size(); i++ ) - { - StopSegment &stop = m_StopSegments[i]; - int keyRow = stop.GetRow(); - // Before deleted region: - if( keyRow < iStartRow ) - continue; - - // Inside deleted region: - if( keyRow < iStartRow+iRowsToDelete ) - { - m_StopSegments.erase( m_StopSegments.begin()+i, m_StopSegments.begin()+i+1 ); - --i; - continue; - } - - // After deleted region: - stop.SetRow(keyRow - iRowsToDelete); } - for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) - { - WarpSegment &warp = m_WarpSegments[i]; - int keyRow = warp.GetRow(); - if( keyRow < iStartRow ) - continue; - - if( keyRow < iStartRow+iRowsToDelete ) - { - m_WarpSegments.erase( m_WarpSegments.begin()+i, m_WarpSegments.begin()+i+1 ); - --i; - continue; - } - - warp.SetRow(keyRow - iRowsToDelete); - } - - for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) - { - TimeSignatureSegment &time = m_vTimeSignatureSegments[i]; - int keyRow = time.GetRow(); - // Before deleted region: - if( keyRow < iStartRow ) - continue; - - // Inside deleted region: - if( keyRow < iStartRow+iRowsToDelete ) - { - m_vTimeSignatureSegments.erase( - m_vTimeSignatureSegments.begin()+i, - m_vTimeSignatureSegments.begin()+i+1 ); - --i; - continue; - } - - // After deleted region: - - - time.SetRow(keyRow - iRowsToDelete); - } - - for( unsigned i = 0; i < m_TickcountSegments.size(); i++ ) - { - TickcountSegment &tick = m_TickcountSegments[i]; - int keyRow = tick.GetRow(); - // Before deleted region: - if( keyRow < iStartRow ) - continue; - - // Inside deleted region: - if( keyRow < iStartRow+iRowsToDelete ) - { - m_TickcountSegments.erase( m_TickcountSegments.begin()+i, m_TickcountSegments.begin()+i+1 ); - --i; - continue; - } - - // After deleted region: - tick.SetRow(keyRow - iRowsToDelete); - } - - for( unsigned i = 0; i < m_ComboSegments.size(); i++ ) - { - ComboSegment &comb = m_ComboSegments[i]; - int keyRow = comb.GetRow(); - // Before deleted region: - if( keyRow < iStartRow ) - continue; - - // Inside deleted region: - if( keyRow < iStartRow+iRowsToDelete ) - { - m_ComboSegments.erase( m_ComboSegments.begin()+i, m_ComboSegments.begin()+i+1 ); - --i; - continue; - } - - // After deleted region: - comb.SetRow(keyRow - iRowsToDelete); - } - - for( unsigned i = 0; i < m_LabelSegments.size(); i++ ) - { - LabelSegment &labl = m_LabelSegments[i]; - int keyRow = labl.GetRow(); - if( keyRow < iStartRow ) - continue; - - if( keyRow < iStartRow+iRowsToDelete ) - { - m_LabelSegments.erase( m_LabelSegments.begin()+i, m_LabelSegments.begin()+i+1 ); - --i; - continue; - } - labl.SetRow(keyRow - iRowsToDelete); - } - - for( unsigned i = 0; i < m_SpeedSegments.size(); i++ ) - { - SpeedSegment &sped = m_SpeedSegments[i]; - int keyRow = sped.GetRow(); - if( keyRow < iStartRow ) - continue; - - if( keyRow < iStartRow+iRowsToDelete ) - { - m_SpeedSegments.erase( m_SpeedSegments.begin()+i, m_SpeedSegments.begin()+i+1 ); - --i; - continue; - } - sped.SetRow(keyRow - iRowsToDelete); - } - - for( unsigned i = 0; i < m_FakeSegments.size(); i++ ) - { - FakeSegment &fake = m_FakeSegments[i]; - int keyRow = fake.GetRow(); - if( keyRow < iStartRow ) - continue; - - if( keyRow < iStartRow+iRowsToDelete ) - { - m_FakeSegments.erase( m_FakeSegments.begin()+i, m_FakeSegments.begin()+i+1 ); - --i; - continue; - } - - fake.SetRow(keyRow - iRowsToDelete); - } - - for( unsigned i = 0; i < m_ScrollSegments.size(); i++ ) - { - ScrollSegment &scrl = m_ScrollSegments[i]; - int keyRow = scrl.GetRow(); - if( keyRow < iStartRow ) - continue; - - if( keyRow < iStartRow+iRowsToDelete ) - { - m_ScrollSegments.erase( m_ScrollSegments.begin()+i, m_ScrollSegments.begin()+i+1 ); - --i; - continue; - } - scrl.SetRow(keyRow - iRowsToDelete); - } - this->SetBPMAtRow( iStartRow, fNewBPM ); } @@ -1789,22 +1565,22 @@ void TimingData::TidyUpData() bool TimingData::HasBpmChanges() const { - return m_BPMSegments.size()>1; + return this->allTimingSegments[SEGMENT_BPM].size()>1; } bool TimingData::HasStops() const { - return m_StopSegments.size()>0; + return this->allTimingSegments[SEGMENT_STOP_DELAY].size()>0; } bool TimingData::HasWarps() const { - return m_WarpSegments.size()>0; + return this->allTimingSegments[SEGMENT_WARP].size()>0; } bool TimingData::HasFakes() const { - return m_FakeSegments.size()>0; + return this->allTimingSegments[SEGMENT_FAKE].size()>0; } bool TimingData::HasSpeedChanges() const @@ -1869,8 +1645,10 @@ public: static int GetWarps( T* p, lua_State *L ) { vector vWarps; - FOREACH_CONST( WarpSegment, p->m_WarpSegments, seg ) + vector &warps = p->allTimingSegments[SEGMENT_WARP]; + for (unsigned i = 0; i < warps.size(); i++) { + WarpSegment *seg = static_cast(warps[i]); const float length = seg->GetLength(); const float beat = seg->GetBeat(); vWarps.push_back( ssprintf("%f=%f", beat, length) ); @@ -1881,8 +1659,10 @@ public: static int GetFakes( T* p, lua_State *L ) { vector vFakes; - FOREACH_CONST( FakeSegment, p->m_FakeSegments, seg ) + vector &fakes = p->allTimingSegments[SEGMENT_FAKE]; + for (unsigned i = 0; i < fakes.size(); i++) { + FakeSegment *seg = static_cast(fakes[i]); const float length = seg->GetLength(); const float beat = seg->GetBeat(); vFakes.push_back( ssprintf("%f=%f", beat, length) ); @@ -1893,8 +1673,10 @@ public: static int GetScrolls( T* p, lua_State *L ) { vector vScrolls; - FOREACH_CONST( ScrollSegment, p->m_ScrollSegments, seg ) + vector &scrolls = p->allTimingSegments[SEGMENT_SCROLL]; + for (unsigned i = 0; i < scrolls.size(); i++) { + ScrollSegment *seg = static_cast(scrolls[i]); const float ratio = seg->GetRatio(); const float beat = seg->GetBeat(); vScrolls.push_back( ssprintf("%f=%f", beat, ratio) ); @@ -1905,8 +1687,10 @@ public: static int GetSpeeds( T* p, lua_State *L ) { vector vSpeeds; - FOREACH_CONST( SpeedSegment, p->m_SpeedSegments, seg ) + vector &speeds = p->allTimingSegments[SEGMENT_SPEED]; + for (unsigned i = 0; i < speeds.size(); i++) { + SpeedSegment *seg = static_cast(speeds[i]); const float length = seg->GetLength(); const float ratio = seg->GetRatio(); const unsigned short unit = seg->GetUnit(); @@ -1919,8 +1703,10 @@ public: static int GetTimeSignatures( T* p, lua_State *L ) { vector vTimes; - FOREACH_CONST( TimeSignatureSegment, p->m_vTimeSignatureSegments, seg ) + vector &tSigs = p->allTimingSegments[SEGMENT_TIME_SIG]; + for (unsigned i = 0; i < tSigs.size(); i++) { + TimeSignatureSegment *seg = static_cast(tSigs[i]); const int numerator = seg->GetNum(); const int denominator = seg->GetDen(); const float beat = seg->GetBeat(); @@ -1932,8 +1718,10 @@ public: static int GetCombos( T* p, lua_State *L ) { vector vCombos; - FOREACH_CONST( ComboSegment, p->m_ComboSegments, seg ) + vector &combos = p->allTimingSegments[SEGMENT_COMBO]; + for (unsigned i = 0; i < combos.size(); i++) { + ComboSegment *seg = static_cast(combos[i]); const int combo = seg->GetCombo(); const int miss = seg->GetMissCombo(); const float beat = seg->GetBeat(); @@ -1945,11 +1733,13 @@ public: static int GetTickcounts( T* p, lua_State *L ) { vector vTicks; - FOREACH_CONST( TickcountSegment, p->m_TickcountSegments, seg ) + vector &ticks = p->allTimingSegments[SEGMENT_TICKCOUNT]; + for (unsigned i = 0; i < ticks.size(); i++) { - const int ticks = seg->GetTicks(); + TickcountSegment *seg = static_cast(ticks[i]); + const int tick = seg->GetTicks(); const float beat = seg->GetBeat(); - vTicks.push_back( ssprintf("%f=%d", beat, ticks) ); + vTicks.push_back( ssprintf("%f=%d", beat, tick) ); } LuaHelpers::CreateTableFromArray(vTicks, L); return 1; @@ -1957,8 +1747,10 @@ public: static int GetStops( T* p, lua_State *L ) { vector vStops; - FOREACH_CONST( StopSegment, p->m_StopSegments, seg ) + vector &stops = p->allTimingSegments[SEGMENT_STOP_DELAY]; + for (unsigned i = 0; i < stops.size(); i++) { + StopSegment *seg = static_cast(stops[i]); const float fStartBeat = seg->GetBeat(); const float fStopLength = seg->GetPause(); if(!seg->GetDelay()) @@ -1971,8 +1763,10 @@ public: static int GetDelays( T* p, lua_State *L ) { vector vDelays; - FOREACH_CONST( StopSegment, p->m_StopSegments, seg ) + vector &stops = p->allTimingSegments[SEGMENT_STOP_DELAY]; + for (unsigned i = 0; i < stops.size(); i++) { + StopSegment *seg = static_cast(stops[i]); const float fStartBeat = seg->GetBeat(); const float fStopLength = seg->GetPause(); if(seg->GetDelay()) @@ -1985,8 +1779,10 @@ public: static int GetBPMs( T* p, lua_State *L ) { vector vBPMs; - FOREACH_CONST( BPMSegment, p->m_BPMSegments, seg ) + vector &bpms = p->allTimingSegments[SEGMENT_BPM]; + for (unsigned i = 0; i < bpms.size(); i++) { + BPMSegment *seg = static_cast(bpms[i]); const float fBPM = seg->GetBPM(); vBPMs.push_back( fBPM ); } @@ -1997,8 +1793,10 @@ public: static int GetLabels( T* p, lua_State *L ) { vector vLabels; - FOREACH_CONST( LabelSegment, p->m_LabelSegments, seg ) + vector &labels = p->allTimingSegments[SEGMENT_LABEL]; + for (unsigned i = 0; i < labels.size(); i++) { + LabelSegment *seg = static_cast(labels[i]); const float fStartRow = seg->GetBeat(); const RString sLabel = seg->GetLabel(); vLabels.push_back( ssprintf("%f=%s", fStartRow, sLabel.c_str()) ); @@ -2009,8 +1807,10 @@ public: static int GetBPMsAndTimes( T* p, lua_State *L ) { vector vBPMs; - FOREACH_CONST( BPMSegment, p->m_BPMSegments, seg ) + vector &bpms = p->allTimingSegments[SEGMENT_BPM]; + for (unsigned i = 0; i < bpms.size(); i++) { + BPMSegment *seg = static_cast(bpms[i]); const float fStartRow = seg->GetBeat(); const float fBPM = seg->GetBPM(); vBPMs.push_back( ssprintf("%f=%f", fStartRow, fBPM) ); From 199af25f313eaa37d7cff87e4bc2e42a5716dafc Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 19:01:12 -0400 Subject: [PATCH 22/94] Get inserts working via passing TimingSegments. Unsure if this is the right way: code review may be needed. --- src/NotesLoaderBMS.cpp | 10 +++--- src/NotesLoaderDWI.cpp | 16 +++++----- src/NotesLoaderKSF.cpp | 14 ++++----- src/NotesLoaderMidi.cpp | 17 ++++++----- src/TimingData.cpp | 53 +++----------------------------- src/TimingData.h | 67 ++++++----------------------------------- 6 files changed, 43 insertions(+), 134 deletions(-) diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp index c6bab7c292..b8edfde57e 100644 --- a/src/NotesLoaderBMS.cpp +++ b/src/NotesLoaderBMS.cpp @@ -573,8 +573,8 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo if( fBPM > 0.0f ) { - BPMSegment newSeg( 0, fBPM ); - out.m_Timing.AddBPMSegment( newSeg ); + BPMSegment * newSeg = new BPMSegment( 0, fBPM ); + out.m_Timing.AddSegment(SEGMENT_BPM, newSeg ); LOG->Trace( "Inserting new BPM change at beat %f, BPM %f", NoteRowToBeat(0), fBPM ); } else @@ -663,9 +663,9 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo float fBeats = StringToFloat( sBeats ) / 48.0f; float fFreezeSecs = fBeats / fBPS; - StopSegment newSeg( BeatToNoteRow(fBeat), fFreezeSecs ); - out.m_Timing.AddStopSegment( newSeg ); - LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg.GetPause() ); + StopSegment * newSeg = new StopSegment( fBeat, fFreezeSecs ); + out.m_Timing.AddSegment( SEGMENT_STOP_DELAY, newSeg ); + LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg->GetPause() ); } else { diff --git a/src/NotesLoaderDWI.cpp b/src/NotesLoaderDWI.cpp index e7483e6fb6..9d1f2fc9b6 100644 --- a/src/NotesLoaderDWI.cpp +++ b/src/NotesLoaderDWI.cpp @@ -515,14 +515,16 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla if( PREFSMAN->m_bQuirksMode ) { - out.m_SongTiming.AddBPMSegment( BPMSegment(0, fBPM) ); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, fBPM) ); } else{ if( fBPM > 0.0f ) - out.m_SongTiming.AddBPMSegment( BPMSegment(0, fBPM) ); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, fBPM) ); else - LOG->UserLog( "Song file", sPath, "has an invalid BPM change at beat %f, BPM %f.", - NoteRowToBeat(0), fBPM ); + LOG->UserLog("Song file", + sPath, + "has an invalid BPM change at beat %f, BPM %f.", + 0.0f, fBPM ); } } else if( sValueName.EqualsNoCase("DISPLAYBPM") ) @@ -576,7 +578,7 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla int iFreezeRow = BeatToNoteRow( StringToFloat(arrayFreezeValues[0]) / 4.0f ); float fFreezeSeconds = StringToFloat( arrayFreezeValues[1] ) / 1000.0f; - out.m_SongTiming.AddStopSegment( StopSegment(iFreezeRow, fFreezeSeconds) ); + out.m_SongTiming.AddSegment( SEGMENT_STOP_DELAY, new StopSegment(iFreezeRow, fFreezeSeconds) ); // LOG->Trace( "Adding a freeze segment: beat: %f, seconds = %f", fFreezeBeat, fFreezeSeconds ); } } @@ -600,8 +602,8 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla float fBPM = StringToFloat( arrayBPMChangeValues[1] ); if( fBPM > 0.0f ) { - BPMSegment bs( iStartIndex, fBPM ); - out.m_SongTiming.AddBPMSegment( bs ); + BPMSegment * bs = new BPMSegment( iStartIndex, fBPM ); + out.m_SongTiming.AddSegment( SEGMENT_BPM, bs ); } else { diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index 133096ce5d..0e078bb7ad 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -17,7 +17,7 @@ static void HandleBunki( TimingData &timing, const float fEarlyBPM, const float beat = (fPos + fGap) * BeatsPerSecond; LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", fEarlyBPM, BeatsPerSecond, fPos, beat ); - timing.AddBPMSegment( BPMSegment(BeatToNoteRow(beat), fCurBPM) ); + timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); } static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) @@ -60,7 +60,7 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, else if( sValueName=="BPM" ) { BPM1 = StringToFloat(sParams[1]); - stepsTiming.AddBPMSegment( BPMSegment(0, BPM1) ); + stepsTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); } else if( sValueName=="BPM2" ) { @@ -137,7 +137,7 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, LOG->UserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); return false; } - stepsTiming.AddTickcountSegment(TickcountSegment(0, iTickCount)); + stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); } else if( sValueName=="DIFFICULTY" ) @@ -554,7 +554,7 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant else if( sValueName=="BPM" ) { BPM1 = StringToFloat(sParams[1]); - out.m_SongTiming.AddBPMSegment( BPMSegment(0, BPM1) ); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); } else if( sValueName=="BPM2" ) { @@ -602,9 +602,9 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant // add a tickcount for those using the [Player] // CheckpointsUseTimeSignatures metric. -aj // It's not with timesigs now -DaisuMaster - TickcountSegment tcs(0); - tcs.SetTicks(iTickCount > ROWS_PER_BEAT ? ROWS_PER_BEAT : iTickCount); - out.m_SongTiming.AddTickcountSegment( tcs ); + TickcountSegment * tcs = new TickcountSegment(0); + tcs->SetTicks(iTickCount > ROWS_PER_BEAT ? ROWS_PER_BEAT : iTickCount); + out.m_SongTiming.AddSegment( SEGMENT_TICKCOUNT, tcs ); } else if ( sValueName=="STEP" ) { diff --git a/src/NotesLoaderMidi.cpp b/src/NotesLoaderMidi.cpp index 8a3377b527..d34e5434a6 100644 --- a/src/NotesLoaderMidi.cpp +++ b/src/NotesLoaderMidi.cpp @@ -677,21 +677,22 @@ static bool LoadFromMidi( const RString &sPath, Song &songOut ) FOREACH_CONST( MidiFileIn::TempoChange, midi.tempoEvents_, iter ) { - BPMSegment bpmSeg; - bpmSeg.SetRow( MidiCountToNoteRow( iter->count ) ); + BPMSegment * bpmSeg; + bpmSeg->SetRow( MidiCountToNoteRow( iter->count ) ); double fSecondsPerBeat = (iter->tickSeconds * GUITAR_MIDI_COUNTS_PER_BEAT); - bpmSeg.SetBPS( float( 1. / fSecondsPerBeat ) ); + bpmSeg->SetBPS( float( 1. / fSecondsPerBeat ) ); - songOut.m_SongTiming.AddBPMSegment( bpmSeg ); + songOut.m_SongTiming.AddSegment( SEGMENT_BPM, bpmSeg ); } FOREACH_CONST( MidiFileIn::TimeSignatureChange, midi.timeSignatureEvents_, iter ) { - TimeSignatureSegment seg(MidiCountToNoteRow( iter->count ), - iter->numerator, - iter->denominator); + TimeSignatureSegment * seg = + new TimeSignatureSegment(MidiCountToNoteRow( iter->count ), + iter->numerator, + iter->denominator); - songOut.m_SongTiming.AddTimeSignatureSegment( seg ); + songOut.m_SongTiming.AddSegment( SEGMENT_TIME_SIG, seg ); } diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 6bc31eca46..1988a0c677 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -28,56 +28,11 @@ void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highe } } - -void TimingData::AddBPMSegment( const BPMSegment &seg ) +void TimingData::AddSegment(TimingSegmentType tst, TimingSegment * seg) { - const vector &segs = this->allTimingSegments[SEGMENT_BPM]; - segs.insert( upper_bound(segs.begin(), segs.end(), seg), seg ); -} - -void TimingData::AddStopSegment( const StopSegment &seg ) -{ - m_StopSegments.insert( upper_bound(m_StopSegments.begin(), m_StopSegments.end(), seg), seg ); -} - -void TimingData::AddTimeSignatureSegment( const TimeSignatureSegment &seg ) -{ - m_vTimeSignatureSegments.insert( upper_bound(m_vTimeSignatureSegments.begin(), m_vTimeSignatureSegments.end(), seg), seg ); -} - -void TimingData::AddWarpSegment( const WarpSegment &seg ) -{ - m_WarpSegments.insert( upper_bound(m_WarpSegments.begin(), m_WarpSegments.end(), seg), seg ); -} - -void TimingData::AddTickcountSegment( const TickcountSegment &seg ) -{ - m_TickcountSegments.insert( upper_bound(m_TickcountSegments.begin(), m_TickcountSegments.end(), seg), seg ); -} - -void TimingData::AddComboSegment( const ComboSegment &seg ) -{ - m_ComboSegments.insert( upper_bound(m_ComboSegments.begin(), m_ComboSegments.end(), seg), seg ); -} - -void TimingData::AddLabelSegment( const LabelSegment &seg ) -{ - m_LabelSegments.insert( upper_bound(m_LabelSegments.begin(), m_LabelSegments.end(), seg), seg ); -} - -void TimingData::AddSpeedSegment( const SpeedSegment &seg ) -{ - m_SpeedSegments.insert( upper_bound(m_SpeedSegments.begin(), m_SpeedSegments.end(), seg), seg ); -} - -void TimingData::AddScrollSegment( const ScrollSegment &seg ) -{ - m_ScrollSegments.insert( upper_bound(m_ScrollSegments.begin(), m_ScrollSegments.end(), seg), seg ); -} - -void TimingData::AddFakeSegment( const FakeSegment &seg ) -{ - m_FakeSegments.insert( upper_bound(m_FakeSegments.begin(), m_FakeSegments.end(), seg), seg ); + vector &segs = this->allTimingSegments[tst]; + // Unsure if this uses the proper comparison. + segs.insert(upper_bound(segs.begin(), segs.end(), seg), seg); } /* Change an existing BPM segment, merge identical segments together or insert a new one. */ diff --git a/src/TimingData.h b/src/TimingData.h index 27a3946ef4..8eb08cacc3 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -16,6 +16,8 @@ struct lua_State; class TimingData { public: + void AddSegment(TimingSegmentType tst, TimingSegment * seg); + /** * @brief Sets up initial timing data with a defined offset. * @param fOffset the offset from the 0th beat. */ @@ -78,12 +80,7 @@ public: * @return the BPMSegment's index in question. */ int GetBPMSegmentIndexAtBeat( float fBeat ) const { return GetBPMSegmentIndexAtRow( BeatToNoteRow(fBeat)); } - /** - * @brief Add the BPMSegment to the TimingData. - * @param seg the new BPMSegment. - */ - void AddBPMSegment( const BPMSegment &seg ); - + /** * @brief Retrieve the next beat that contains a BPMSegment. * @param iRow the present row. @@ -276,11 +273,6 @@ public: * @return the StopSegment's index in question. */ int GetDelaySegmentIndexAtBeat( float fBeat ) const { return GetStopSegmentIndexAtRow( BeatToNoteRow(fBeat), true ); } - /** - * @brief Add the StopSegment to the TimingData. - * @param seg the new StopSegment. - */ - void AddStopSegment( const StopSegment &seg ); /** * @brief Retrieve the next beat that contains a StopSegment. @@ -430,16 +422,7 @@ public: * @return the TimeSignatureSegment's index in question. */ int GetTimeSignatureSegmentIndexAtBeat( float fBeat ) const { return GetTimeSignatureSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Add the TimeSignatureSegment to the TimingData. - * @param seg the new TimeSignatureSegment. - */ - void AddTimeSignatureSegment( const TimeSignatureSegment &seg ); - /** - * @brief Determine the beat to warp to. - * @param iRow The row you start on. - * @return the beat you warp to. - */ + /** * @brief Retrieve the next beat that contains a TimeSignatureSegment. @@ -472,7 +455,11 @@ public: return this->GetPreviousTimeSignatureSegmentBeatAtRow( BeatToNoteRow(fBeat) ); } - + /** + * @brief Determine the beat to warp to. + * @param iRow The row you start on. + * @return the beat you warp to. + */ float GetWarpAtRow( int iRow ) const; /** * @brief Determine the beat to warp to. @@ -528,11 +515,6 @@ public: * @return true if the row is inside a warp, false otherwise. */ bool IsWarpAtBeat( float fBeat ) const { return IsWarpAtRow( BeatToNoteRow( fBeat ) ); } - /** - * @brief Add the WarpSegment to the TimingData. - * @param seg the new WarpSegment. - */ - void AddWarpSegment( const WarpSegment &seg ); /** @@ -614,11 +596,6 @@ public: * @return the TickcountSegment's index in question. */ int GetTickcountSegmentIndexAtBeat( float fBeat ) const { return GetTickcountSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Add the TickcountSegment to the TimingData. - * @param seg the new TickcountSegment. - */ - void AddTickcountSegment( const TickcountSegment &seg ); /** * @brief Retrieve the next beat that contains a TickcountSegment. @@ -750,11 +727,6 @@ public: * @return the ComboSegment's index in question. */ int GetComboSegmentIndexAtBeat( float fBeat ) const { return GetComboSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Add the ComboSegment to the TimingData. - * @param seg the new ComboSegment. - */ - void AddComboSegment( const ComboSegment &seg ); /** * @brief Retrieve the next beat that contains a ComboSegment. @@ -836,11 +808,6 @@ public: * @return the LabelSegment's index in question. */ int GetLabelSegmentIndexAtBeat( float fBeat ) const { return GetLabelSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Add the LabelSegment to the TimingData. - * @param seg the new LabelSegment. - */ - void AddLabelSegment( const LabelSegment &seg ); /** * @brief Retrieve the previous beat that contains a LabelSegment. @@ -993,11 +960,6 @@ public: * @return the SpeedSegment's index in question. */ int GetSpeedSegmentIndexAtBeat( float fBeat ) const { return GetSpeedSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Add the SpeedSegment to the TimingData. - * @param seg the new SpeedSegment. - */ - void AddSpeedSegment( const SpeedSegment &seg ); float GetDisplayedSpeedPercent( float fBeat, float fMusicSeconds ) const; @@ -1085,12 +1047,6 @@ public: */ int GetScrollSegmentIndexAtBeat( float fBeat ) const { return GetScrollSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Add the ScrollSegment to the TimingData. - * @param seg the new ScrollSegment. - */ - void AddScrollSegment( const ScrollSegment &seg ); - /** * @brief Retrieve the next beat that contains a ScrollSegment. * @param iRow the present row. @@ -1183,11 +1139,6 @@ public: * @return true if the row is inside a fake, false otherwise. */ bool IsFakeAtBeat( float fBeat ) const { return IsFakeAtRow( BeatToNoteRow( fBeat ) ); } - /** - * @brief Add the FakeSegment to the TimingData. - * @param seg the new FakeSegment. - */ - void AddFakeSegment( const FakeSegment &seg ); /** * @brief Retrieve the next beat that contains a FakeSegment. From 7399f1986534f377ec2b97aa72679559b4f0199f Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 19:23:29 -0400 Subject: [PATCH 23/94] [timing] Convert the others to use AddSegment. I was given enough confirmation to continue on. --- src/GameSoundManager.cpp | 4 +-- src/NotesLoaderPMS.cpp | 23 +++++++------- src/NotesLoaderSM.cpp | 66 +++++++++++++++++++++------------------- src/NotesLoaderSMA.cpp | 26 +++++++++------- src/NotesLoaderSSC.cpp | 13 ++++---- src/NotesWriterSM.cpp | 4 +-- src/ScreenEdit.cpp | 3 +- 7 files changed, 73 insertions(+), 66 deletions(-) diff --git a/src/GameSoundManager.cpp b/src/GameSoundManager.cpp index 27933d5d82..183b3ccf48 100644 --- a/src/GameSoundManager.cpp +++ b/src/GameSoundManager.cpp @@ -60,8 +60,8 @@ struct MusicPlaying RageSound *m_Music; MusicPlaying( RageSound *Music ) { - m_Timing.AddBPMSegment( BPMSegment(0,120) ); - m_NewTiming.AddBPMSegment( BPMSegment(0,120) ); + m_Timing.AddSegment( SEGMENT_BPM, new BPMSegment(0,120) ); + m_NewTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0,120) ); m_bHasTiming = false; m_bTimingDelayed = false; m_bApplyMusicRate = false; diff --git a/src/NotesLoaderPMS.cpp b/src/NotesLoaderPMS.cpp index f0d742973c..301b843379 100644 --- a/src/NotesLoaderPMS.cpp +++ b/src/NotesLoaderPMS.cpp @@ -590,8 +590,7 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur if( fBPM > 0.0f ) { - BPMSegment newSeg( 0, fBPM ); - out.m_SongTiming.AddBPMSegment( newSeg ); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, fBPM) ); LOG->Trace( "Inserting new BPM change at beat %f, BPM %f", NoteRowToBeat(0), fBPM ); } else @@ -693,9 +692,9 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur if( fBPM > 0.0f ) { - BPMSegment newSeg( BeatToNoteRow(fBeat), fBPM ); - out.m_SongTiming.AddBPMSegment( newSeg ); - LOG->Trace( "Inserting new BPM change at beat %f, BPM %f", fBeat, newSeg.GetBPM() ); + BPMSegment * newSeg = new BPMSegment( fBeat, fBPM ); + out.m_SongTiming.AddSegment( SEGMENT_BPM, newSeg ); + LOG->Trace( "Inserting new BPM change at beat %f, BPM %f", fBeat, newSeg->GetBPM() ); } else { @@ -720,9 +719,9 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur float fBeats = StringToFloat( sBeats ) / 48.0f; float fFreezeSecs = fBeats / fBPS; - StopSegment newSeg( BeatToNoteRow(fBeat), fFreezeSecs ); - out.m_SongTiming.AddStopSegment( newSeg ); - LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg.GetPause() ); + StopSegment * newSeg = new StopSegment( fBeat, fFreezeSecs ); + out.m_SongTiming.AddSegment( SEGMENT_STOP_DELAY, newSeg ); + LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg->GetPause() ); } else { @@ -749,9 +748,11 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur if( fBPM > 0.0f ) { - BPMSegment newSeg( iStepIndex, fBPM ); - out.m_SongTiming.AddBPMSegment( newSeg ); - LOG->Trace( "Inserting new BPM change at beat %f, BPM %f", newSeg.GetBeat(), newSeg.GetBPM() ); + BPMSegment * newSeg = new BPMSegment( iStepIndex, fBPM ); + out.m_SongTiming.AddSegment( SEGMENT_BPM, newSeg ); + LOG->Trace("Inserting new BPM change at beat %f, BPM %f", + newSeg->GetBeat(), + newSeg->GetBPM() ); } else diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index 8085594f81..33a1791033 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -251,8 +251,8 @@ bool SMLoader::ProcessBPMs( TimingData &out, const RString line, const int rowsP if( negBPM < 0 ) { float endBeat = fBeat + (fNewBPM / -negBPM) * (fBeat - negBeat); - WarpSegment new_seg(negBeat, endBeat - negBeat); - out.AddWarpSegment( new_seg ); + out.AddSegment(SEGMENT_WARP, + new WarpSegment(negBeat, endBeat - negBeat)); negBeat = -1; negBPM = 1; @@ -267,13 +267,13 @@ bool SMLoader::ProcessBPMs( TimingData &out, const RString line, const int rowsP // add in a warp. if( highspeedBeat > 0 ) { - WarpSegment new_seg(highspeedBeat, fBeat - highspeedBeat); - out.AddWarpSegment( new_seg ); + out.AddSegment(SEGMENT_WARP, + new WarpSegment(highspeedBeat, fBeat - highspeedBeat) ); highspeedBeat = -1; } { - BPMSegment new_seg( BeatToNoteRow( fBeat ), fNewBPM ); - out.AddBPMSegment( new_seg ); + out.AddSegment(SEGMENT_BPM, + new BPMSegment(fBeat, fNewBPM)); } } } @@ -317,8 +317,7 @@ void SMLoader::ProcessStops( TimingData &out, const RString line, const int rows if( negBeat + fSkipBeats > fFreezeBeat ) fSkipBeats = fFreezeBeat - negBeat; - WarpSegment ws( negBeat, fSkipBeats); - out.AddWarpSegment( ws ); + out.AddSegment(SEGMENT_WARP, new WarpSegment(negBeat, fSkipBeats)); negBeat = -1; negPause = 0; @@ -331,8 +330,8 @@ void SMLoader::ProcessStops( TimingData &out, const RString line, const int rows } else if( fFreezeSeconds > 0.0f ) { - StopSegment ss( BeatToNoteRow(fFreezeBeat), fFreezeSeconds ); - out.AddStopSegment( ss ); + out.AddSegment(SEGMENT_STOP_DELAY, + new StopSegment(fFreezeBeat, fFreezeSeconds)); } } @@ -340,12 +339,11 @@ void SMLoader::ProcessStops( TimingData &out, const RString line, const int rows // Process the prior stop if there was one. if( negPause > 0 ) { - BPMSegment oldBPM = out.GetBPMSegmentAtRow(BeatToNoteRow(negBeat)); + BPMSegment oldBPM = out.GetBPMSegmentAtBeat(negBeat); float fSecondsPerBeat = 60 / oldBPM.GetBPM(); float fSkipBeats = negPause / fSecondsPerBeat; - WarpSegment ws( negBeat, fSkipBeats); - out.AddWarpSegment( ws ); + out.AddSegment(SEGMENT_WARP, new WarpSegment(negBeat, fSkipBeats)); } } @@ -370,15 +368,14 @@ void SMLoader::ProcessDelays( TimingData &out, const RString line, const int row const float fFreezeBeat = RowToBeat( arrayDelayValues[0], rowsPerBeat ); const float fFreezeSeconds = StringToFloat( arrayDelayValues[1] ); - StopSegment new_seg( fFreezeBeat, fFreezeSeconds, true ); - // XXX: Remove Negatives Bug? - new_seg.SetBeat(fFreezeBeat); - new_seg.SetPause(fFreezeSeconds); + StopSegment * new_seg = new StopSegment(fFreezeBeat, + fFreezeSeconds, + true); // LOG->Trace( "Adding a delay segment: beat: %f, seconds = %f", new_seg.m_fStartBeat, new_seg.m_fStopSeconds ); if(fFreezeSeconds > 0.0f) - out.AddStopSegment( new_seg ); + out.AddSegment( SEGMENT_STOP_DELAY, new_seg ); else LOG->UserLog( "Song file", @@ -409,7 +406,10 @@ void SMLoader::ProcessTimeSignatures( TimingData &out, const RString line, const const float fBeat = RowToBeat( vs2[0], rowsPerBeat ); - TimeSignatureSegment seg( fBeat, StringToInt( vs2[1] ), StringToInt( vs2[2] )); + TimeSignatureSegment * seg = + new TimeSignatureSegment(fBeat, + StringToInt( vs2[1] ), + StringToInt( vs2[2] )); if( fBeat < 0 ) { @@ -420,25 +420,25 @@ void SMLoader::ProcessTimeSignatures( TimingData &out, const RString line, const continue; } - if( seg.GetNum() < 1 ) + if( seg->GetNum() < 1 ) { LOG->UserLog("Song file", this->GetSongTitle(), "has an invalid time signature change with beat %f, iNumerator %i.", - fBeat, seg.GetNum() ); + fBeat, seg->GetNum() ); continue; } - if( seg.GetDen() < 1 ) + if( seg->GetDen() < 1 ) { LOG->UserLog("Song file", this->GetSongTitle(), "has an invalid time signature change with beat %f, iDenominator %i.", - fBeat, seg.GetDen() ); + fBeat, seg->GetDen() ); continue; } - out.AddTimeSignatureSegment( seg ); + out.AddSegment( SEGMENT_TIME_SIG, seg ); } } @@ -463,8 +463,8 @@ void SMLoader::ProcessTickcounts( TimingData &out, const RString line, const int const float fTickcountBeat = RowToBeat( arrayTickcountValues[0], rowsPerBeat ); int iTicks = clamp(atoi( arrayTickcountValues[1] ), 0, ROWS_PER_BEAT); - TickcountSegment new_seg( fTickcountBeat, iTicks ); - out.AddTickcountSegment( new_seg ); + out.AddSegment( SEGMENT_TICKCOUNT, + new TickcountSegment(fTickcountBeat, iTicks) ); } } @@ -499,8 +499,10 @@ void SMLoader::ProcessSpeeds( TimingData &out, const RString line, const int row const float fBeat = RowToBeat( vs2[0], rowsPerBeat ); - SpeedSegment seg( fBeat, StringToFloat( vs2[1] ), StringToFloat( vs2[2] )); - seg.SetUnit(StringToInt(vs2[3])); + SpeedSegment * seg = new SpeedSegment(fBeat, + StringToFloat( vs2[1] ), + StringToFloat( vs2[2] )); + seg->SetUnit(StringToInt(vs2[3])); if( fBeat < 0 ) { @@ -511,16 +513,16 @@ void SMLoader::ProcessSpeeds( TimingData &out, const RString line, const int row continue; } - if( seg.GetLength() < 0 ) + if( seg->GetLength() < 0 ) { LOG->UserLog("Song file", this->GetSongTitle(), "has an speed change with beat %f, length %f.", - fBeat, seg.GetLength() ); + fBeat, seg->GetLength() ); continue; } - out.AddSpeedSegment( seg ); + out.AddSegment( SEGMENT_SPEED, seg ); } } @@ -546,7 +548,7 @@ void SMLoader::ProcessFakes( TimingData &out, const RString line, const int rows const float fNewBeat = StringToFloat( arrayFakeValues[1] ); if(fNewBeat > 0) - out.AddFakeSegment( FakeSegment(fBeat, fNewBeat) ); + out.AddSegment( SEGMENT_FAKE, new FakeSegment(fBeat, fNewBeat) ); else { LOG->UserLog("Song file", diff --git a/src/NotesLoaderSMA.cpp b/src/NotesLoaderSMA.cpp index a47b639350..2a6198e1ff 100644 --- a/src/NotesLoaderSMA.cpp +++ b/src/NotesLoaderSMA.cpp @@ -38,8 +38,8 @@ void SMALoader::ProcessMultipliers( TimingData &out, const int iRowsPerBeat, con const int iMisses = (size == 2 || size == 4 ? iCombos : StringToInt(arrayMultiplierValues[2])); - ComboSegment new_seg( fComboBeat, iCombos, iMisses ); - out.AddComboSegment( new_seg ); + out.AddSegment(SEGMENT_COMBO, + new ComboSegment( fComboBeat, iCombos, iMisses )); } } @@ -64,7 +64,9 @@ void SMALoader::ProcessBeatsPerMeasure( TimingData &out, const RString sParam ) const float fBeat = StringToFloat( vs2[0] ); - TimeSignatureSegment seg( fBeat, StringToInt( vs2[1] ), 4 ); + TimeSignatureSegment * seg = new TimeSignatureSegment(fBeat, + StringToInt(vs2[1]), + 4 ); if( fBeat < 0 ) { @@ -75,16 +77,16 @@ void SMALoader::ProcessBeatsPerMeasure( TimingData &out, const RString sParam ) continue; } - if( seg.GetNum() < 1 ) + if( seg->GetNum() < 1 ) { LOG->UserLog("Song file", this->GetSongTitle(), "has an invalid time signature change with beat %f, iNumerator %i.", - fBeat, seg.GetNum() ); + fBeat, seg->GetNum() ); continue; } - out.AddTimeSignatureSegment( seg ); + out.AddSegment( SEGMENT_TIME_SIG, seg ); } } @@ -123,8 +125,10 @@ void SMALoader::ProcessSpeeds( TimingData &out, const RString line, const int ro unsigned short tmp = ((backup != vs2[2]) ? 1 : 0); - SpeedSegment seg(fBeat, StringToFloat( vs2[1] ), StringToFloat(vs2[2]), tmp); - //seg.SetUnit(tmp); + SpeedSegment * seg = new SpeedSegment(fBeat, + StringToFloat( vs2[1] ), + StringToFloat(vs2[2]), + tmp); if( fBeat < 0 ) { @@ -135,16 +139,16 @@ void SMALoader::ProcessSpeeds( TimingData &out, const RString line, const int ro continue; } - if( seg.GetLength() < 0 ) + if( seg->GetLength() < 0 ) { LOG->UserLog("Song file", this->GetSongTitle(), "has an speed change with beat %f, length %f.", - fBeat, seg.GetLength() ); + fBeat, seg->GetLength() ); continue; } - out.AddSpeedSegment( seg ); + out.AddSegment( SEGMENT_SPEED, seg ); } } diff --git a/src/NotesLoaderSSC.cpp b/src/NotesLoaderSSC.cpp index 83c249d579..2e5fc1cabf 100644 --- a/src/NotesLoaderSSC.cpp +++ b/src/NotesLoaderSSC.cpp @@ -37,10 +37,10 @@ void SSCLoader::ProcessWarps( TimingData &out, const RString sParam, const float // Early versions were absolute in beats. They should be relative. if( ( fVersion < VERSION_SPLIT_TIMING && fNewBeat > fBeat ) ) { - out.AddWarpSegment( WarpSegment(fBeat, fNewBeat - fBeat) ); + out.AddSegment( SEGMENT_WARP, new WarpSegment(fBeat, fNewBeat - fBeat) ); } else if( fNewBeat > 0 ) - out.AddWarpSegment( WarpSegment(fBeat, fNewBeat) ); + out.AddSegment( SEGMENT_WARP, new WarpSegment(fBeat, fNewBeat) ); else { LOG->UserLog("Song file", @@ -73,7 +73,7 @@ void SSCLoader::ProcessLabels( TimingData &out, const RString sParam ) RString sLabel = arrayLabelValues[1]; TrimRight(sLabel); if( fBeat >= 0.0f ) - out.AddLabelSegment( LabelSegment(fBeat, sLabel) ); + out.AddSegment( SEGMENT_LABEL, new LabelSegment(fBeat, sLabel) ); else { LOG->UserLog("Song file", @@ -106,8 +106,7 @@ void SSCLoader::ProcessCombos( TimingData &out, const RString line, const int ro const float fComboBeat = StringToFloat( arrayComboValues[0] ); const int iCombos = StringToInt( arrayComboValues[1] ); const int iMisses = (size == 2 ? iCombos : StringToInt(arrayComboValues[2])); - ComboSegment new_seg( fComboBeat, iCombos, iMisses ); - out.AddComboSegment( new_seg ); + out.AddSegment( SEGMENT_COMBO, new ComboSegment( fComboBeat, iCombos, iMisses ) ); } } @@ -132,7 +131,7 @@ void SSCLoader::ProcessScrolls( TimingData &out, const RString sParam ) const float fBeat = StringToFloat( vs2[0] ); - ScrollSegment seg( fBeat, StringToFloat( vs2[1] ) ); + ScrollSegment * seg = new ScrollSegment(fBeat, StringToFloat( vs2[1] ) ); if( fBeat < 0 ) { @@ -143,7 +142,7 @@ void SSCLoader::ProcessScrolls( TimingData &out, const RString sParam ) continue; } - out.AddScrollSegment( seg ); + out.AddSegment( SEGMENT_SCROLL, seg ); } } diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index 43b0279f90..05863f9af0 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -121,8 +121,8 @@ static void WriteGlobalTags( RageFile &f, Song &out ) int iRow = ws->GetRow(); float fBPS = 60 / out.m_SongTiming.GetBPMAtRow(iRow); float fSkip = fBPS * ws->GetLength(); - StopSegment ss(iRow, -fSkip, false); - out.m_SongTiming.AddStopSegment( ss ); + out.m_SongTiming.AddSegment(SEGMENT_STOP_DELAY, + new StopSegment(iRow, -fSkip, false) ); } } diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index d4d84b4a69..c7b7039ae8 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -1983,7 +1983,8 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) { // create a new StopSegment if( fDelta > 0 ) - GetAppropriateTiming().AddStopSegment( StopSegment( GetRow(), fDelta) ); + GetAppropriateTiming().AddSegment(SEGMENT_STOP_DELAY, + new StopSegment( GetRow(), fDelta) ); } else // StopSegment being modified is m_SongTiming.m_StopSegments[i] { From 2c85e902b433453130c943a71ffdf4cca915f948 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 19:29:52 -0400 Subject: [PATCH 24/94] [timing] Better be sure we clean up afterwards. If this is going a bit too far, feel free to leave a little bit more mess. --- src/TimingData.cpp | 9 +++++++++ src/TimingData.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 1988a0c677..86f5da6ed4 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -14,6 +14,15 @@ TimingData::TimingData(float fOffset) : // allTimingSegments[SEGMENT_BPM] = new vector(); } +TimingData::~TimingData() +{ + for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) + { + this->allTimingSegments[i].clear(); + } + delete [] this->allTimingSegments; +} + void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highest ) const { fMinBPMOut = FLT_MAX; diff --git a/src/TimingData.h b/src/TimingData.h index 8eb08cacc3..5080ddf2ce 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -22,6 +22,8 @@ public: * @brief Sets up initial timing data with a defined offset. * @param fOffset the offset from the 0th beat. */ TimingData(float fOffset = 0); + + ~TimingData(); /** * @brief Gets the actual BPM of the song, * while respecting a limit. From 4f490c3d3bb7061b3f720bf2122a250f9113332c Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 19:52:37 -0400 Subject: [PATCH 25/94] [timing] Some more stuff. Need dinner though. --- src/TimingData.cpp | 92 ++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 39 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 86f5da6ed4..13ec904037 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -44,6 +44,8 @@ void TimingData::AddSegment(TimingSegmentType tst, TimingSegment * seg) segs.insert(upper_bound(segs.begin(), segs.end(), seg), seg); } +// TODO: Find a way to combine all of these SetAtRows to one. + /* Change an existing BPM segment, merge identical segments together or insert a new one. */ void TimingData::SetBPMAtRow( int iNoteRow, float fBPM ) { @@ -58,71 +60,78 @@ void TimingData::SetBPMAtRow( int iNoteRow, float fBPM ) { // There is no BPMSegment at the specified beat. If the BPM being set differs // from the last BPMSegment's BPM, create a new BPMSegment. - if( i == 0 || fabsf(m_BPMSegments[i-1].GetBPM() - fBPM) > 1e-5f ) - AddBPMSegment( BPMSegment(iNoteRow, fBPM) ); + if (i == 0 || + fabsf(static_cast(bpms[i-1])->GetBPM() - fBPM) > 1e-5f ) + AddSegment( SEGMENT_BPM, new BPMSegment(iNoteRow, fBPM) ); } else // BPMSegment being modified is m_BPMSegments[i] { - if( i > 0 && fabsf(m_BPMSegments[i-1].GetBPM() - fBPM) < 1e-5f ) - m_BPMSegments.erase( m_BPMSegments.begin()+i, m_BPMSegments.begin()+i+1 ); + if (i > 0 && + fabsf(static_cast(bpms[i-1])->GetBPM() - fBPM) < 1e-5f ) + bpms.erase( bpms.begin()+i, bpms.begin()+i+1 ); else - m_BPMSegments[i].SetBPM(fBPM); + bs->SetBPM(fBPM); } } void TimingData::SetStopAtRow( int iRow, float fSeconds, bool bDelay ) { unsigned i; - for( i=0; i &stops = this->allTimingSegments[SEGMENT_STOP_DELAY]; + for( i=0; iGetRow() == iRow && + static_cast(stops[i])->GetDelay() == bDelay ) break; - if( i == m_StopSegments.size() ) // there is no Stop/Delay Segment at the current beat + StopSegment *ss = static_cast(stops[i]); + if( i == stops.size() ) // there is no Stop/Delay Segment at the current beat { // create a new StopSegment if( fSeconds > 0 ) { - AddStopSegment( StopSegment(iRow, fSeconds, bDelay) ); + AddSegment( SEGMENT_STOP_DELAY, new StopSegment(iRow, fSeconds, bDelay) ); } } else // StopSegment being modified is m_StopSegments[i] { if( fSeconds > 0 ) { - m_StopSegments[i].SetPause(fSeconds); + ss->SetPause(fSeconds); } else - m_StopSegments.erase( m_StopSegments.begin()+i, m_StopSegments.begin()+i+1 ); + stops.erase( stops.begin()+i, stops.begin()+i+1 ); } } void TimingData::SetTimeSignatureAtRow( int iRow, int iNumerator, int iDenominator ) { unsigned i; - for( i = 0; i < m_vTimeSignatureSegments.size(); i++ ) + vector &tSigs = this->allTimingSegments[SEGMENT_TIME_SIG]; + for( i = 0; i < tSigs.size(); i++ ) { - if( m_vTimeSignatureSegments[i].GetRow() >= iRow) + if( tSigs[i]->GetRow() >= iRow) break; // We found our segment. } - if ( i == m_vTimeSignatureSegments.size() || m_vTimeSignatureSegments[i].GetRow() != iRow ) + TimeSignatureSegment *ts = static_cast(tSigs[i]); + if ( i == tSigs.size() || ts->GetRow() != iRow ) { - // No specific segmeent here: place one if it differs. - if( i == 0 || - ( m_vTimeSignatureSegments[i-1].GetNum() != iNumerator - || m_vTimeSignatureSegments[i-1].GetDen() != iDenominator ) ) - AddTimeSignatureSegment( TimeSignatureSegment(iRow, iNumerator, iDenominator) ); + // No specific segment here: place one if it differs. + if (i == 0 || + (static_cast(tSigs[i-1])->GetNum() != iNumerator || + static_cast(tSigs[i-1])->GetDen() != iDenominator ) ) + AddSegment( SEGMENT_TIME_SIG, new TimeSignatureSegment(iRow, iNumerator, iDenominator) ); } else // TimeSignatureSegment being modified is m_vTimeSignatureSegments[i] { - if( i > 0 && m_vTimeSignatureSegments[i-1].GetNum() == iNumerator - && m_vTimeSignatureSegments[i-1].GetDen() == iDenominator ) - m_vTimeSignatureSegments.erase( m_vTimeSignatureSegments.begin()+i, - m_vTimeSignatureSegments.begin()+i+1 ); + if (i > 0 && + static_cast(tSigs[i-1])->GetNum() == iNumerator && + static_cast(tSigs[i-1])->GetDen() == iDenominator ) + tSigs.erase( tSigs.begin()+i, tSigs.begin()+i+1 ); else { - m_vTimeSignatureSegments[i].SetNum(iNumerator); - m_vTimeSignatureSegments[i].SetDen(iDenominator); + ts->SetNum(iNumerator); + ts->SetDen(iDenominator); } } } @@ -144,25 +153,26 @@ void TimingData::SetTimeSignatureDenominatorAtRow( int iRow, int iDenominator ) void TimingData::SetWarpAtRow( int iRow, float fNew ) { unsigned i; - for( i=0; i &warps = this->allTimingSegments[SEGMENT_WARP]; + for( i=0; iGetRow() == iRow ) break; bool valid = iRow > 0 && fNew > 0; - if( i == m_WarpSegments.size() ) + if( i == warps.size() ) { if( valid ) { - AddWarpSegment( WarpSegment(iRow, fNew) ); + AddSegment( SEGMENT_WARP, new WarpSegment(iRow, fNew) ); } } else { if( valid ) { - m_WarpSegments[i].SetLength(fNew); + static_cast(warps[i])->SetLength(fNew); } else - m_WarpSegments.erase( m_WarpSegments.begin()+i, m_WarpSegments.begin()+i+1 ); + warps.erase( warps.begin()+i, warps.begin()+i+1 ); } } @@ -170,22 +180,26 @@ void TimingData::SetWarpAtRow( int iRow, float fNew ) void TimingData::SetTickcountAtRow( int iRow, int iTicks ) { unsigned i; - for( i=0; i= iRow ) + vector &ticks = this->allTimingSegments[SEGMENT_TICKCOUNT]; + for( i=0; iGetRow() >= iRow ) break; - if( i == m_TickcountSegments.size() || m_TickcountSegments[i].GetRow() != iRow ) + TickcountSegment *ts = static_cast(ticks[i]); + if( i == ticks.size() || ts->GetRow() != iRow ) { // No TickcountSegment here. Make a new segment if required. - if( i == 0 || m_TickcountSegments[i-1].GetTicks() != iTicks ) - AddTickcountSegment( TickcountSegment(iRow, iTicks ) ); + if (i == 0 || + static_cast(ticks[i-1])->GetTicks() != iTicks ) + AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(iRow, iTicks ) ); } else // TickcountSegment being modified is m_TickcountSegments[i] { - if( i > 0 && m_TickcountSegments[i-1].GetTicks() == iTicks ) - m_TickcountSegments.erase( m_TickcountSegments.begin()+i, m_TickcountSegments.begin()+i+1 ); + if (i > 0 && + static_cast(ticks[i-1])->GetTicks() == iTicks ) + ticks.erase( ticks.begin()+i, ticks.begin()+i+1 ); else - m_TickcountSegments[i].SetTicks(iTicks); + ts->SetTicks(iTicks); } } From 48a8113336cc5806864d67ba2cb5c9fee4fbd12a Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 21:25:17 -0400 Subject: [PATCH 26/94] [timing] Set*AtRow error free. --- src/TimingData.cpp | 109 ++++++++++++++++++++++++++------------------- 1 file changed, 64 insertions(+), 45 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 13ec904037..4023a93bb1 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -206,25 +206,30 @@ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) void TimingData::SetComboAtRow( int iRow, int iCombo, int iMiss ) { unsigned i; - for( i=0; i= iRow ) + vector &combos = this->allTimingSegments[SEGMENT_COMBO]; + for( i=0; iGetRow() >= iRow ) break; - if( i == m_ComboSegments.size() || m_ComboSegments[i].GetRow() != iRow ) + ComboSegment *cs = static_cast(combos[i]); + + if( i == combos.size() || cs->GetRow() != iRow ) { - if(i == 0 || m_ComboSegments[i-1].GetCombo() != iCombo || - m_ComboSegments[i-1].GetMissCombo() != iMiss) - AddComboSegment( ComboSegment(iRow, iCombo ) ); + if (i == 0 || + static_cast(combos[i-1])->GetCombo() != iCombo || + static_cast(combos[i-1])->GetMissCombo() != iMiss) + AddSegment( SEGMENT_COMBO, new ComboSegment(iRow, iCombo, iMiss ) ); } else { - if(i > 0 && m_ComboSegments[i-1].GetCombo() == iCombo && - m_ComboSegments[i-1].GetMissCombo() == iMiss) - m_ComboSegments.erase( m_ComboSegments.begin()+i, m_ComboSegments.begin()+i+1 ); + if (i > 0 && + static_cast(combos[i-1])->GetCombo() == iCombo && + static_cast(combos[i-1])->GetMissCombo() == iMiss) + combos.erase( combos.begin()+i, combos.begin()+i+1 ); else { - m_ComboSegments[i].SetCombo(iCombo); - m_ComboSegments[i].SetMissCombo(iMiss); + cs->SetCombo(iCombo); + cs->SetMissCombo(iMiss); } } } @@ -246,50 +251,60 @@ void TimingData::SetMissComboAtRow(int iRow, int iMiss) void TimingData::SetLabelAtRow( int iRow, const RString sLabel ) { unsigned i; - for( i=0; i= iRow ) + vector &labels = this->allTimingSegments[SEGMENT_LABEL]; + for( i=0; iGetRow() >= iRow ) break; - if( i == m_LabelSegments.size() || m_LabelSegments[i].GetRow() != iRow ) + LabelSegment *ls = static_cast(labels[i]); + + if( i == labels.size() || ls->GetRow() != iRow ) { - if( i == 0 || m_LabelSegments[i-1].GetLabel() != sLabel ) - AddLabelSegment( LabelSegment(iRow, sLabel ) ); + if (i == 0 || + static_cast(labels[i-1])->GetLabel() != sLabel ) + AddSegment( SEGMENT_LABEL, new LabelSegment(iRow, sLabel ) ); } else { - if( i > 0 && ( m_LabelSegments[i-1].GetLabel() == sLabel || sLabel == "" ) ) - m_LabelSegments.erase( m_LabelSegments.begin()+i, m_LabelSegments.begin()+i+1 ); + if (i > 0 && + ( static_cast(labels[i-1])->GetLabel() == sLabel || + sLabel == "" ) ) + labels.erase( labels.begin()+i, labels.begin()+i+1 ); else - m_LabelSegments[i].SetLabel(sLabel); + ls->SetLabel(sLabel); } } void TimingData::SetSpeedAtRow( int iRow, float fPercent, float fWait, unsigned short usMode ) { unsigned i; - for( i = 0; i < m_SpeedSegments.size(); i++ ) + vector &speeds = this->allTimingSegments[SEGMENT_SPEED]; + for( i = 0; i < speeds.size(); i++ ) { - if( m_SpeedSegments[i].GetRow() >= iRow) + if( speeds[i]->GetRow() >= iRow) break; } - if ( i == m_SpeedSegments.size() || m_SpeedSegments[i].GetRow() != iRow ) + SpeedSegment *ss = static_cast(speeds[i]); + + if ( i == speeds.size() || ss->GetRow() != iRow ) { // the core mod itself matters the most for comparisons. - if( i == 0 || m_SpeedSegments[i-1].GetRatio() != fPercent ) - AddSpeedSegment( SpeedSegment(iRow, fPercent, fWait, usMode) ); + if (i == 0 || + static_cast(speeds[i-1])->GetRatio() != fPercent ) + AddSegment( SEGMENT_SPEED, new SpeedSegment(iRow, fPercent, fWait, usMode) ); } else { // The others aren't compared: only the mod itself matters. - if( i > 0 && m_SpeedSegments[i-1].GetRatio() == fPercent ) - m_SpeedSegments.erase( m_SpeedSegments.begin()+i, - m_SpeedSegments.begin()+i+1 ); + if (i > 0 && + static_cast(speeds[i-1])->GetRatio() == fPercent ) + speeds.erase( speeds.begin()+i, speeds.begin()+i+1 ); else { - m_SpeedSegments[i].SetRatio(fPercent); - m_SpeedSegments[i].SetLength(fWait); - m_SpeedSegments[i].SetUnit(usMode); + ss->SetRatio(fPercent); + ss->SetLength(fWait); + ss->SetUnit(usMode); } } } @@ -297,27 +312,30 @@ void TimingData::SetSpeedAtRow( int iRow, float fPercent, float fWait, unsigned void TimingData::SetScrollAtRow( int iRow, float fPercent ) { unsigned i; - for( i = 0; i < m_ScrollSegments.size(); i++ ) + vector &scrolls = this->allTimingSegments[SEGMENT_SCROLL]; + for( i = 0; i < scrolls.size(); i++ ) { - if( m_ScrollSegments[i].GetRow() >= iRow) + if( scrolls[i]->GetRow() >= iRow) break; } - if ( i == m_ScrollSegments.size() || m_ScrollSegments[i].GetRow() != iRow ) + ScrollSegment *ss = static_cast(scrolls[i]); + if ( i == scrolls.size() || ss->GetRow() != iRow ) { // the core mod itself matters the most for comparisons. - if( i == 0 || m_ScrollSegments[i-1].GetRatio() != fPercent ) - AddScrollSegment( ScrollSegment(iRow, fPercent) ); + if (i == 0 || + static_cast(scrolls[i-1])->GetRatio() != fPercent ) + AddSegment( SEGMENT_SCROLL, new ScrollSegment(iRow, fPercent) ); } else { // The others aren't compared: only the mod itself matters. - if( i > 0 && m_ScrollSegments[i-1].GetRatio() == fPercent ) - m_ScrollSegments.erase( m_ScrollSegments.begin()+i, - m_ScrollSegments.begin()+i+1 ); + if (i > 0 && + static_cast(scrolls[i-1])->GetRatio() == fPercent ) + scrolls.erase( scrolls.begin()+i, scrolls.begin()+i+1 ); else { - m_ScrollSegments[i].SetRatio(fPercent); + ss->SetRatio(fPercent); } } } @@ -325,25 +343,26 @@ void TimingData::SetScrollAtRow( int iRow, float fPercent ) void TimingData::SetFakeAtRow( int iRow, float fNew ) { unsigned i; - for( i=0; i &fakes = this->allTimingSegments[SEGMENT_FAKE]; + for( i=0; iGetRow() == iRow ) break; bool valid = iRow > 0 && fNew > 0; - if( i == m_FakeSegments.size() ) + if( i == fakes.size() ) { if( valid ) { - AddFakeSegment( FakeSegment(iRow, fNew) ); + AddSegment( SEGMENT_FAKE, new FakeSegment(iRow, fNew) ); } } else { if( valid ) { - m_FakeSegments[i].SetLength(fNew); + static_cast(fakes[i])->SetLength(fNew); } else - m_FakeSegments.erase( m_FakeSegments.begin()+i, m_FakeSegments.begin()+i+1 ); + fakes.erase( fakes.begin()+i, fakes.begin()+i+1 ); } } From 6255a84be40f3441bab8a88a67743c8e3c56e8db Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 21:51:09 -0400 Subject: [PATCH 27/94] [timing] More abstractions of common functions. --- src/TimingData.cpp | 149 +++++++++--------------------------------- src/TimingData.h | 157 +++------------------------------------------ 2 files changed, 41 insertions(+), 265 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 4023a93bb1..7c303886d9 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -44,6 +44,26 @@ void TimingData::AddSegment(TimingSegmentType tst, TimingSegment * seg) segs.insert(upper_bound(segs.begin(), segs.end(), seg), seg); } +int TimingData::GetSegmentIndexAtRow(TimingSegmentType tst, + int row, bool isDelay) const +{ + const vector &segs = this->allTimingSegments[tst]; + unsigned i = 0; + for (; i < segs.size() - 1; i++) + { + TimingSegment *seg = segs[i+1]; + if (seg->GetRow() > row) + { + // put conditions here for individual segments. + if (tst == SEGMENT_STOP_DELAY && + static_cast(seg)->GetDelay() != isDelay) + continue; + break; + } + } + return static_cast(i); +} + // TODO: Find a way to combine all of these SetAtRows to one. /* Change an existing BPM segment, merge identical segments together or insert a new one. */ @@ -417,17 +437,17 @@ float TimingData::GetDelayAtRow( int iRow ) const int TimingData::GetComboAtRow( int iNoteRow ) const { - return m_ComboSegments[this->GetComboSegmentIndexAtRow(iNoteRow)].GetCombo(); + return m_ComboSegments[this->GetSegmentIndexAtRow(SEGMENT_COMBO, iNoteRow)].GetCombo(); } int TimingData::GetMissComboAtRow(int iNoteRow) const { - return m_ComboSegments[this->GetComboSegmentIndexAtRow(iNoteRow)].GetMissCombo(); + return m_ComboSegments[this->GetSegmentIndexAtRow(SEGMENT_COMBO, iNoteRow)].GetMissCombo(); } RString TimingData::GetLabelAtRow( int iRow ) const { - return m_LabelSegments[GetLabelSegmentIndexAtRow( iRow )].GetLabel(); + return m_LabelSegments[GetSegmentIndexAtRow(SEGMENT_LABEL, iRow)].GetLabel(); } float TimingData::GetWarpAtRow( int iWarpRow ) const @@ -523,57 +543,12 @@ float TimingData::GetBPMAtRow( int iNoteRow ) const return m_BPMSegments[i].GetBPM(); } -int TimingData::GetBPMSegmentIndexAtRow( int iNoteRow ) const -{ - unsigned i; - for( i=0; i iNoteRow ) - break; - return static_cast(i); -} - -int TimingData::GetStopSegmentIndexAtRow( int iNoteRow, bool bDelay ) const -{ - unsigned i; - for( i=0; i iNoteRow && s.GetDelay() == bDelay ) - break; - } - return static_cast(i); -} - -int TimingData::GetWarpSegmentIndexAtRow( int iNoteRow ) const -{ - unsigned i; - for( i=0; i iNoteRow ) - break; - } - return static_cast(i); -} - -int TimingData::GetFakeSegmentIndexAtRow( int iNoteRow ) const -{ - unsigned i; - for( i=0; i iNoteRow ) - break; - } - return static_cast(i); -} - bool TimingData::IsWarpAtRow( int iNoteRow ) const { if( m_WarpSegments.empty() ) return false; - int i = GetWarpSegmentIndexAtRow( iNoteRow ); + int i = GetSegmentIndexAtRow( SEGMENT_WARP, iNoteRow ); const WarpSegment& s = m_WarpSegments[i]; float beatRow = NoteRowToBeat(iNoteRow); if( s.GetBeat() <= beatRow && beatRow < (s.GetBeat() + s.GetLength() ) ) @@ -597,7 +572,7 @@ bool TimingData::IsFakeAtRow( int iNoteRow ) const if( m_FakeSegments.empty() ) return false; - int i = GetFakeSegmentIndexAtRow( iNoteRow ); + int i = GetSegmentIndexAtRow( SEGMENT_FAKE, iNoteRow ); const FakeSegment& s = m_FakeSegments[i]; float beatRow = NoteRowToBeat(iNoteRow); if( s.GetBeat() <= beatRow && beatRow < ( s.GetBeat() + s.GetLength() ) ) @@ -607,64 +582,13 @@ bool TimingData::IsFakeAtRow( int iNoteRow ) const return false; } -int TimingData::GetTimeSignatureSegmentIndexAtRow( int iRow ) const -{ - unsigned i; - for (i=0; i < m_vTimeSignatureSegments.size() - 1; i++ ) - if( m_vTimeSignatureSegments[i+1].GetRow() > iRow ) - break; - return static_cast(i); -} - -int TimingData::GetComboSegmentIndexAtRow( int iRow ) const -{ - unsigned i; - for( i=0; i iRow ) - break; - } - return static_cast(i); -} - -int TimingData::GetLabelSegmentIndexAtRow( int iRow ) const -{ - unsigned i; - for( i=0; i iRow ) - break; - } - return static_cast(i); -} - -int TimingData::GetSpeedSegmentIndexAtRow( int iRow ) const -{ - unsigned i; - for (i=0; i < m_SpeedSegments.size() - 1; i++ ) - if( m_SpeedSegments[i+1].GetRow() > iRow ) - break; - return static_cast(i); -} - -int TimingData::GetScrollSegmentIndexAtRow( int iRow ) const -{ - unsigned i; - for (i=0; i < m_ScrollSegments.size() - 1; i++ ) - if( m_ScrollSegments[i+1].GetRow() > iRow ) - break; - return static_cast(i); -} - BPMSegment& TimingData::GetBPMSegmentAtRow( int iNoteRow ) { static BPMSegment empty; if( m_BPMSegments.empty() ) return empty; - int i = GetBPMSegmentIndexAtRow( iNoteRow ); + int i = GetSegmentIndexAtRow( SEGMENT_BPM, iNoteRow ); return m_BPMSegments[i]; } @@ -729,7 +653,7 @@ StopSegment& TimingData::GetStopSegmentAtRow( int iNoteRow, bool bDelay ) if( m_StopSegments.empty() ) return empty; - int i = GetStopSegmentIndexAtRow( iNoteRow, bDelay ); + int i = GetSegmentIndexAtRow( SEGMENT_STOP_DELAY, iNoteRow, bDelay ); return m_StopSegments[i]; } @@ -739,7 +663,7 @@ WarpSegment& TimingData::GetWarpSegmentAtRow( int iRow ) if( m_WarpSegments.empty() ) return empty; - int i = GetWarpSegmentIndexAtRow( iRow ); + int i = GetSegmentIndexAtRow( SEGMENT_WARP, iRow ); return m_WarpSegments[i]; } @@ -749,32 +673,23 @@ FakeSegment& TimingData::GetFakeSegmentAtRow( int iRow ) if( m_FakeSegments.empty() ) return empty; - int i = GetFakeSegmentIndexAtRow( iRow ); + int i = GetSegmentIndexAtRow( SEGMENT_FAKE, iRow ); return m_FakeSegments[i]; } -int TimingData::GetTickcountSegmentIndexAtRow( int iRow ) const -{ - unsigned i; - for (i=0; i < m_TickcountSegments.size() - 1; i++ ) - if( m_TickcountSegments[i+1].GetRow() > iRow ) - break; - return static_cast(i); -} - TickcountSegment& TimingData::GetTickcountSegmentAtRow( int iRow ) { static TickcountSegment empty; if( m_TickcountSegments.empty() ) return empty; - int i = GetTickcountSegmentIndexAtBeat( iRow ); + int i = GetSegmentIndexAtRow( SEGMENT_TICKCOUNT, iRow ); return m_TickcountSegments[i]; } int TimingData::GetTickcountAtRow( int iRow ) const { - return m_TickcountSegments[GetTickcountSegmentIndexAtRow( iRow )].GetTicks(); + return m_TickcountSegments[GetSegmentIndexAtRow( SEGMENT_TICKCOUNT, iRow )].GetTicks(); } float TimingData::GetPreviousBPMSegmentBeatAtRow( int iRow ) const @@ -1457,7 +1372,7 @@ float TimingData::GetDisplayedSpeedPercent( float fSongBeat, float fMusicSeconds if( m_SpeedSegments.size() == 0 ) return 1.0f; - const int index = GetSpeedSegmentIndexAtBeat( fSongBeat ); + const int index = GetSegmentIndexAtBeat( SEGMENT_SPEED, fSongBeat ); const SpeedSegment &seg = m_SpeedSegments[index]; float fStartBeat = seg.GetBeat(); diff --git a/src/TimingData.h b/src/TimingData.h index 5080ddf2ce..795ab57d07 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -18,6 +18,15 @@ class TimingData public: void AddSegment(TimingSegmentType tst, TimingSegment * seg); + int GetSegmentIndexAtRow(TimingSegmentType tst, + int row, bool isDelay = false) const; + + int GetSegmentIndexAtBeat(TimingSegmentType tst, + float beat, bool isDelay = false) const + { + return this->GetSegmentIndexAtRow(tst, BeatToNoteRow(beat), isDelay); + } + /** * @brief Sets up initial timing data with a defined offset. * @param fOffset the offset from the 0th beat. */ @@ -70,18 +79,6 @@ public: * @return the BPMSegment in question. */ BPMSegment& GetBPMSegmentAtBeat( float fBeat ) { return GetBPMSegmentAtRow( (int)BeatToNoteRow(fBeat)); } - /** - * @brief Retrieve the index of the BPMSegments at the specified row. - * @param iNoteRow the row that has a BPMSegment. - * @return the BPMSegment's index in question. - */ - int GetBPMSegmentIndexAtRow( int iNoteRow ) const; - /** - * @brief Retrieve the index of the BPMSegments at the specified beat. - * @param fBeat the beat that has a BPMSegment. - * @return the BPMSegment's index in question. - */ - int GetBPMSegmentIndexAtBeat( float fBeat ) const { return GetBPMSegmentIndexAtRow( BeatToNoteRow(fBeat)); } /** * @brief Retrieve the next beat that contains a BPMSegment. @@ -242,45 +239,6 @@ public: * @param iNoteRow the row that has a StopSegment. * @return the StopSegment's index in question. */ - int GetStopSegmentIndexAtRow( int iNoteRow ) const { return GetStopSegmentIndexAtRow( iNoteRow, false ); } - /** - * @brief Retrieve the index of the StopSegments at the specified beat. - * @param fBeat the beat that has a StopSegment. - * @return the StopSegment's index in question. - */ - int GetStopSegmentIndexAtBeat( float fBeat ) const { return GetStopSegmentIndexAtRow( BeatToNoteRow(fBeat), false ); } - /** - * @brief Retrieve the index of the StopSegments at the specified row. - * @param iNoteRow the row that has a StopSegment. - * @param bDelay If true, it's a Delay Segment. Otherwise, it's a StopSegment. - * @return the StopSegment's index in question. - */ - int GetStopSegmentIndexAtRow( int iNoteRow, bool bDelay ) const; - /** - * @brief Retrieve the index of the StopSegments at the specified beat. - * @param fBeat the beat that has a StopSegment. - * @param bDelay If true, it's a Delay Segment. Otherwise, it's a StopSegment. - * @return the StopSegment's index in question. - */ - int GetStopSegmentIndexAtBeat( float fBeat, bool bDelay ) const { return GetStopSegmentIndexAtRow( BeatToNoteRow(fBeat), bDelay ); } - /** - * @brief Retrieve the index of the Delay Segments at the specified row. - * @param iNoteRow the row that has a Delay Segment. - * @return the StopSegment's index in question. - */ - int GetDelaySegmentIndexAtRow( int iNoteRow ) const { return GetStopSegmentIndexAtRow( iNoteRow, true ); } - /** - * @brief Retrieve the index of the Delay Segments at the specified beat. - * @param fBeat the beat that has a Delay Segment. - * @return the StopSegment's index in question. - */ - int GetDelaySegmentIndexAtBeat( float fBeat ) const { return GetStopSegmentIndexAtRow( BeatToNoteRow(fBeat), true ); } - - /** - * @brief Retrieve the next beat that contains a StopSegment. - * @param iRow the present row. - * @return the next beat with a StopSegment, or fBeat if there is none ahead. - */ float GetNextStopSegmentBeatAtRow( int iRow ) const; /** * @brief Retrieve the previous beat that contains a StopSegment. @@ -412,18 +370,6 @@ public: * @return the TimeSignatureSegment in question. */ TimeSignatureSegment& GetTimeSignatureSegmentAtBeat( float fBeat ) { return GetTimeSignatureSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the index of the TimeSignatureSegments at the specified row. - * @param iNoteRow the row that has a TimeSignatureSegment. - * @return the TimeSignatureSegment's index in question. - */ - int GetTimeSignatureSegmentIndexAtRow( int iNoteRow ) const; - /** - * @brief Retrieve the index of the TimeSignatureSegments at the specified beat. - * @param fBeat the beat that has a TimeSignatureSegment. - * @return the TimeSignatureSegment's index in question. - */ - int GetTimeSignatureSegmentIndexAtBeat( float fBeat ) const { return GetTimeSignatureSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } /** @@ -493,18 +439,6 @@ public: * @return the WarpSegment in question. */ WarpSegment& GetWarpSegmentAtBeat( float fBeat ) { return GetWarpSegmentAtRow( BeatToNoteRow( fBeat ) ); } - /** - * @brief Retrieve the index of the WarpSegment at the specified row. - * @param iRow the row to focus on. - * @return the index in question. - */ - int GetWarpSegmentIndexAtRow( int iRow ) const; - /** - * @brief Retrieve the index of the WarpSegment at the specified beat. - * @param fBeat the beat to focus on. - * @return the index in question. - */ - int GetWarpSegmentIndexAtBeat( float fBeat ) const { return GetWarpSegmentIndexAtRow( BeatToNoteRow( fBeat ) ); } /** * @brief Checks if the row is inside a warp. * @param iRow the row to focus on. @@ -586,18 +520,6 @@ public: * @return the TickcountSegment in question. */ TickcountSegment& GetTickcountSegmentAtBeat( float fBeat ) { return GetTickcountSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the index of the TickcountSegments at the specified row. - * @param iNoteRow the row that has a TickcountSegment. - * @return the TickcountSegment's index in question. - */ - int GetTickcountSegmentIndexAtRow( int iNoteRow ) const; - /** - * @brief Retrieve the index of the TickcountSegments at the specified beat. - * @param fBeat the beat that has a TickcountSegment. - * @return the TickcountSegment's index in question. - */ - int GetTickcountSegmentIndexAtBeat( float fBeat ) const { return GetTickcountSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } /** * @brief Retrieve the next beat that contains a TickcountSegment. @@ -717,18 +639,6 @@ public: * @return the ComboSegment in question. */ ComboSegment& GetComboSegmentAtBeat( float fBeat ) { return GetComboSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the index of the ComboSegments at the specified row. - * @param iNoteRow the row that has a ComboSegment. - * @return the ComboSegment's index in question. - */ - int GetComboSegmentIndexAtRow( int iNoteRow ) const; - /** - * @brief Retrieve the index of the ComboSegments at the specified beat. - * @param fBeat the beat that has a ComboSegment. - * @return the ComboSegment's index in question. - */ - int GetComboSegmentIndexAtBeat( float fBeat ) const { return GetComboSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } /** * @brief Retrieve the next beat that contains a ComboSegment. @@ -798,18 +708,6 @@ public: * @return the LabelSegment in question. */ LabelSegment& GetLabelSegmentAtBeat( float fBeat ) { return GetLabelSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the index of the LabelSegments at the specified row. - * @param iNoteRow the row that has a LabelSegment. - * @return the LabelSegment's index in question. - */ - int GetLabelSegmentIndexAtRow( int iNoteRow ) const; - /** - * @brief Retrieve the index of the LabelSegments at the specified beat. - * @param fBeat the beat that has a LabelSegment. - * @return the LabelSegment's index in question. - */ - int GetLabelSegmentIndexAtBeat( float fBeat ) const { return GetLabelSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } /** * @brief Retrieve the previous beat that contains a LabelSegment. @@ -950,18 +848,6 @@ public: * @return the SpeedSegment in question. */ SpeedSegment& GetSpeedSegmentAtBeat( float fBeat ) { return GetSpeedSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the index of the SpeedSegments at the specified row. - * @param iNoteRow the row that has a SpeedSegment. - * @return the SpeedSegment's index in question. - */ - int GetSpeedSegmentIndexAtRow( int iNoteRow ) const; - /** - * @brief Retrieve the index of the SpeedSegments at the specified beat. - * @param fBeat the beat that has a SpeedSegment. - * @return the SpeedSegment's index in question. - */ - int GetSpeedSegmentIndexAtBeat( float fBeat ) const { return GetSpeedSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } float GetDisplayedSpeedPercent( float fBeat, float fMusicSeconds ) const; @@ -1036,19 +922,6 @@ public: */ ScrollSegment& GetScrollSegmentAtBeat( float fBeat ) { return GetScrollSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the index of the ScrollSegment at the specified row. - * @param iNoteRow the row that has a ScrollSegment. - * @return the ScrollSegment's index in question. - */ - int GetScrollSegmentIndexAtRow( int iNoteRow ) const; - /** - * @brief Retrieve the index of the ScrollSegment at the specified beat. - * @param fBeat the beat that has a ScrollSegment. - * @return the ScrollSegment's index in question. - */ - int GetScrollSegmentIndexAtBeat( float fBeat ) const { return GetScrollSegmentIndexAtRow( BeatToNoteRow(fBeat) ); } - /** * @brief Retrieve the next beat that contains a ScrollSegment. * @param iRow the present row. @@ -1117,18 +990,6 @@ public: * @return the FakeSegment in question. */ FakeSegment& GetFakeSegmentAtBeat( float fBeat ) { return GetFakeSegmentAtRow( BeatToNoteRow( fBeat ) ); } - /** - * @brief Retrieve the index of the FakeSegment at the specified row. - * @param iRow the row to focus on. - * @return the index in question. - */ - int GetFakeSegmentIndexAtRow( int iRow ) const; - /** - * @brief Retrieve the index of the FakeSegment at the specified beat. - * @param fBeat the beat to focus on. - * @return the index in question. - */ - int GetFakeSegmentIndexAtBeat( float fBeat ) const { return GetFakeSegmentIndexAtRow( BeatToNoteRow( fBeat ) ); } /** * @brief Checks if the row is inside a fake. * @param iRow the row to focus on. From c9a6bbbafe4e0e205503a9aac4cb03b556be7edf Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 22:19:32 -0400 Subject: [PATCH 28/94] [timing] More progress. Soon going to enter the real big functions. --- src/TimingData.cpp | 83 +++++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 7c303886d9..7afa848e2d 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -413,12 +413,13 @@ void TimingData::SetSpeedModeAtRow( int iRow, unsigned short usMode ) float TimingData::GetStopAtRow( int iNoteRow, bool bDelay ) const { - for( unsigned i=0; i &stops = this->allTimingSegments[SEGMENT_STOP_DELAY]; + for( unsigned i=0; i(stops[i]); + if( s->GetDelay() == bDelay && s->GetRow() == iNoteRow ) { - return s.GetPause(); + return s->GetPause(); } } return 0; @@ -437,26 +438,33 @@ float TimingData::GetDelayAtRow( int iRow ) const int TimingData::GetComboAtRow( int iNoteRow ) const { - return m_ComboSegments[this->GetSegmentIndexAtRow(SEGMENT_COMBO, iNoteRow)].GetCombo(); + const vector &c = this->allTimingSegments[SEGMENT_COMBO]; + const int index = this->GetSegmentIndexAtRow(SEGMENT_COMBO, iNoteRow); + return static_cast(c[index])->GetCombo(); } int TimingData::GetMissComboAtRow(int iNoteRow) const { - return m_ComboSegments[this->GetSegmentIndexAtRow(SEGMENT_COMBO, iNoteRow)].GetMissCombo(); + const vector &c = this->allTimingSegments[SEGMENT_COMBO]; + const int index = this->GetSegmentIndexAtRow(SEGMENT_COMBO, iNoteRow); + return static_cast(c[index])->GetMissCombo(); } RString TimingData::GetLabelAtRow( int iRow ) const { - return m_LabelSegments[GetSegmentIndexAtRow(SEGMENT_LABEL, iRow)].GetLabel(); + const vector &l = this->allTimingSegments[SEGMENT_LABEL]; + const int index = this->GetSegmentIndexAtRow(SEGMENT_LABEL, iRow); + return static_cast(l[index])->GetLabel(); } float TimingData::GetWarpAtRow( int iWarpRow ) const { - for( unsigned i=0; i &warps = this->allTimingSegments[SEGMENT_WARP]; + for( unsigned i=0; iGetRow() == iWarpRow ) { - return m_WarpSegments[i].GetLength(); + return static_cast(warps[i])->GetLength(); } } return 0; @@ -484,11 +492,12 @@ float TimingData::GetScrollAtRow( int iRow ) float TimingData::GetFakeAtRow( int iFakeRow ) const { - for( unsigned i=0; i &fakes = this->allTimingSegments[SEGMENT_FAKE]; + for( unsigned i=0; iGetRow() == iFakeRow ) { - return m_FakeSegments[i].GetLength(); + return static_cast(fakes[i])->GetLength(); } } return 0; @@ -498,11 +507,13 @@ float TimingData::GetFakeAtRow( int iFakeRow ) const void TimingData::MultiplyBPMInBeatRange( int iStartIndex, int iEndIndex, float fFactor ) { // Change all other BPM segments in this range. - for( unsigned i=0; i &bpms = this->allTimingSegments[SEGMENT_BPM]; + for( unsigned i=0; i(bpms[i]); + const int iStartIndexThisSegment = bs->GetRow(); + const bool bIsLastBPMSegment = i == bpms.size()-1; + const int iStartIndexNextSegment = bIsLastBPMSegment ? INT_MAX : bpms[i+1]->GetRow(); if( iStartIndexThisSegment <= iStartIndex && iStartIndexNextSegment <= iStartIndex ) continue; @@ -511,9 +522,10 @@ void TimingData::MultiplyBPMInBeatRange( int iStartIndex, int iEndIndex, float f * split it into two. */ if( iStartIndexThisSegment < iStartIndex && iStartIndexNextSegment > iStartIndex ) { - BPMSegment b = m_BPMSegments[i]; - b.SetRow(iStartIndexNextSegment); - m_BPMSegments.insert( m_BPMSegments.begin()+i+1, b ); + + BPMSegment * b = new BPMSegment(iStartIndexNextSegment, + bs->GetBPS()); + bpms.insert(bpms.begin()+i+1, b); /* Don't apply the BPM change to the first half of the segment we * just split, since it lies outside the range. */ @@ -523,38 +535,40 @@ void TimingData::MultiplyBPMInBeatRange( int iStartIndex, int iEndIndex, float f // If this BPM segment crosses the end of the range, split it into two. if( iStartIndexThisSegment < iEndIndex && iStartIndexNextSegment > iEndIndex ) { - BPMSegment b = m_BPMSegments[i]; - b.SetRow(iEndIndex); - m_BPMSegments.insert( m_BPMSegments.begin()+i+1, b ); + BPMSegment * b = new BPMSegment(iEndIndex, + bs->GetBPS()); + bpms.insert(bpms.begin()+i+1, b); } else if( iStartIndexNextSegment > iEndIndex ) continue; - m_BPMSegments[i].SetBPM(m_BPMSegments[i].GetBPM() * fFactor); + bs->SetBPM(bs->GetBPM() * fFactor); } } float TimingData::GetBPMAtRow( int iNoteRow ) const { unsigned i; - for( i=0; i iNoteRow ) + const vector &bpms = this->allTimingSegments[SEGMENT_BPM]; + for( i=0; iGetRow() > iNoteRow ) break; - return m_BPMSegments[i].GetBPM(); + return static_cast(bpms[i])->GetBPM(); } bool TimingData::IsWarpAtRow( int iNoteRow ) const { - if( m_WarpSegments.empty() ) + const vector &warps = this->allTimingSegments[SEGMENT_WARP]; + if( warps.empty() ) return false; int i = GetSegmentIndexAtRow( SEGMENT_WARP, iNoteRow ); - const WarpSegment& s = m_WarpSegments[i]; + const WarpSegment *s = static_cast(warps[i]); float beatRow = NoteRowToBeat(iNoteRow); - if( s.GetBeat() <= beatRow && beatRow < (s.GetBeat() + s.GetLength() ) ) + if( s->GetBeat() <= beatRow && beatRow < (s->GetBeat() + s->GetLength() ) ) { // Allow stops inside warps to allow things like stop, warp, stop, warp, stop, and so on. - if( m_StopSegments.empty() ) + if( this->allTimingSegments[SEGMENT_STOP_DELAY].empty() ) { return true; } @@ -569,13 +583,14 @@ bool TimingData::IsWarpAtRow( int iNoteRow ) const bool TimingData::IsFakeAtRow( int iNoteRow ) const { - if( m_FakeSegments.empty() ) + const vector &fakes = this->allTimingSegments[SEGMENT_FAKE]; + if( fakes.empty() ) return false; int i = GetSegmentIndexAtRow( SEGMENT_FAKE, iNoteRow ); - const FakeSegment& s = m_FakeSegments[i]; + const FakeSegment *s = static_cast(fakes[i]); float beatRow = NoteRowToBeat(iNoteRow); - if( s.GetBeat() <= beatRow && beatRow < ( s.GetBeat() + s.GetLength() ) ) + if( s->GetBeat() <= beatRow && beatRow < ( s->GetBeat() + s->GetLength() ) ) { return true; } From 6f5ab98deced7fb3ab0088e67a551a8b4259675d Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 23:15:48 -0400 Subject: [PATCH 29/94] [timing] More respect of pointers. Again going to trust virtual functions to do the right thing. --- src/NotesLoaderSM.cpp | 8 +- src/Player.cpp | 4 +- src/ScoreKeeperNormal.cpp | 14 +-- src/ScreenEdit.cpp | 26 +++--- src/ScreenSyncOverlay.cpp | 4 +- src/TimingData.cpp | 181 ++++++++++++++++++-------------------- src/TimingData.h | 48 +++++----- 7 files changed, 139 insertions(+), 146 deletions(-) diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index 33a1791033..ba3ea24e50 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -310,8 +310,8 @@ void SMLoader::ProcessStops( TimingData &out, const RString line, const int rows // Process the prior stop. if( negPause > 0 ) { - BPMSegment oldBPM = out.GetBPMSegmentAtRow(BeatToNoteRow(negBeat)); - float fSecondsPerBeat = 60 / oldBPM.GetBPM(); + BPMSegment * oldBPM = out.GetBPMSegmentAtRow(BeatToNoteRow(negBeat)); + float fSecondsPerBeat = 60 / oldBPM->GetBPM(); float fSkipBeats = negPause / fSecondsPerBeat; if( negBeat + fSkipBeats > fFreezeBeat ) @@ -339,8 +339,8 @@ void SMLoader::ProcessStops( TimingData &out, const RString line, const int rows // Process the prior stop if there was one. if( negPause > 0 ) { - BPMSegment oldBPM = out.GetBPMSegmentAtBeat(negBeat); - float fSecondsPerBeat = 60 / oldBPM.GetBPM(); + BPMSegment * oldBPM = out.GetBPMSegmentAtBeat(negBeat); + float fSecondsPerBeat = 60 / oldBPM->GetBPM(); float fSkipBeats = negPause / fSecondsPerBeat; out.AddSegment(SEGMENT_WARP, new WarpSegment(negBeat, fSkipBeats)); diff --git a/src/Player.cpp b/src/Player.cpp index 8638d33cff..01220e9067 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -2956,10 +2956,10 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) } else if( CHECKPOINTS_USE_TIME_SIGNATURES ) { - TimeSignatureSegment & tSignature = m_Timing->GetTimeSignatureSegmentAtRow( iLastRowCrossed ); + TimeSignatureSegment * tSignature = m_Timing->GetTimeSignatureSegmentAtRow( iLastRowCrossed ); // Most songs are in 4/4 time. The frequency for checking tick counts should reflect that. - iCheckpointFrequencyRows = ROWS_PER_BEAT * tSignature.GetDen() / (tSignature.GetNum() * 4); + iCheckpointFrequencyRows = ROWS_PER_BEAT * tSignature->GetDen() / (tSignature->GetNum() * 4); } if( iCheckpointFrequencyRows > 0 ) diff --git a/src/ScoreKeeperNormal.cpp b/src/ScoreKeeperNormal.cpp index 07b2cbd213..695c640a28 100644 --- a/src/ScoreKeeperNormal.cpp +++ b/src/ScoreKeeperNormal.cpp @@ -429,14 +429,14 @@ void ScoreKeeperNormal::HandleTapNoteScoreInternal( TapNoteScore tns, TapNoteSco // update judged row totals. Respect Combo segments here. TimingData &td = GAMESTATE->m_pCurSteps[m_pPlayerState->m_PlayerNumber]->m_Timing; - ComboSegment &cs = td.GetComboSegmentAtRow(row); + ComboSegment *cs = td.GetComboSegmentAtRow(row); if (tns == TNS_CheckpointHit || tns >= m_MinScoreToContinueCombo) { - m_pPlayerStageStats->m_iTapNoteScores[tns] += cs.GetCombo(); + m_pPlayerStageStats->m_iTapNoteScores[tns] += cs->GetCombo(); } else if (tns == TNS_CheckpointMiss || tns < m_MinScoreToMaintainCombo) { - m_pPlayerStageStats->m_iTapNoteScores[tns] += cs.GetMissCombo(); + m_pPlayerStageStats->m_iTapNoteScores[tns] += cs->GetMissCombo(); } else { @@ -464,13 +464,13 @@ void ScoreKeeperNormal::HandleComboInternal( int iNumHitContinueCombo, int iNumH TimingData td = GAMESTATE->m_pCurSteps[m_pPlayerState->m_PlayerNumber]->m_Timing; if( iNumBreakCombo == 0 ) { - int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow( iRow ).GetCombo() ); + int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow( iRow )->GetCombo() ); m_pPlayerStageStats->m_iCurCombo += iNumHitContinueCombo * multiplier; } else { m_pPlayerStageStats->m_iCurCombo = 0; - int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow(iRow).GetMissCombo()); + int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow(iRow)->GetMissCombo()); m_pPlayerStageStats->m_iCurMissCombo += ( m_MissComboIsPerRow ? 1 : iNumBreakCombo ) * multiplier; } } @@ -485,7 +485,7 @@ void ScoreKeeperNormal::HandleRowComboInternal( TapNoteScore tns, int iNumTapsIn if ( tns >= m_MinScoreToContinueCombo ) { m_pPlayerStageStats->m_iCurMissCombo = 0; - int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow( iRow ).GetCombo() ); + int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow( iRow )->GetCombo() ); m_pPlayerStageStats->m_iCurCombo += iNumTapsInRow * multiplier; } else if ( tns < m_MinScoreToMaintainCombo ) @@ -494,7 +494,7 @@ void ScoreKeeperNormal::HandleRowComboInternal( TapNoteScore tns, int iNumTapsIn if( tns <= m_MaxScoreToIncrementMissCombo ) { - int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow(iRow).GetMissCombo()); + int multiplier = ( iRow == -1 ? 1 : td.GetComboSegmentAtRow(iRow)->GetMissCombo()); m_pPlayerStageStats->m_iCurMissCombo += ( m_MissComboIsPerRow ? 1 : iNumTapsInRow ) * multiplier; } } diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index c7b7039ae8..a7d5cec57d 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -1465,7 +1465,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } TimingData &sTiming = GetAppropriateTiming(); float playerBeat = GetAppropriatePosition().m_fSongBeat; - int beatsPerMeasure = sTiming.GetTimeSignatureSegmentAtBeat( playerBeat ).GetNum(); + int beatsPerMeasure = sTiming.GetTimeSignatureSegmentAtBeat( playerBeat )->GetNum(); switch( EditB ) { @@ -3648,7 +3648,7 @@ void ScreenEdit::DisplayTimingMenu() { float fBeat = GetBeat(); TimingData &pTime = GetAppropriateTiming(); - bool bHasSpeedOnThisRow = pTime.GetSpeedSegmentAtBeat( fBeat ).GetBeat() == fBeat; + bool bHasSpeedOnThisRow = pTime.GetSpeedSegmentAtBeat( fBeat )->GetBeat() == fBeat; g_TimingDataInformation.rows[beat_0_offset].SetOneUnthemedChoice( ssprintf("%.6f", pTime.m_fBeat0OffsetInSeconds) ); g_TimingDataInformation.rows[bpm].SetOneUnthemedChoice( ssprintf("%.6f", pTime.GetBPMAtBeat( fBeat ) ) ); @@ -4647,11 +4647,11 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice break; case time_signature: { - TimeSignatureSegment &ts = GetAppropriateTiming().GetTimeSignatureSegmentAtBeat( GetBeat() ); + TimeSignatureSegment * ts = GetAppropriateTiming().GetTimeSignatureSegmentAtBeat( GetBeat() ); ScreenTextEntry::TextEntry( SM_BackFromTimeSignatureChange, ENTER_TIME_SIGNATURE_VALUE, - ssprintf( "%d/%d", ts.GetNum(), ts.GetDen() ), + ssprintf( "%d/%d", ts->GetNum(), ts->GetDen() ), 8 ); break; @@ -4666,12 +4666,12 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice break; case combo: { - ComboSegment &cs = GetAppropriateTiming().GetComboSegmentAtBeat(GetBeat()); + ComboSegment *cs = GetAppropriateTiming().GetComboSegmentAtBeat(GetBeat()); ScreenTextEntry::TextEntry(SM_BackFromComboChange, ENTER_COMBO_VALUE, ssprintf( "%d/%d", - cs.GetCombo(), - cs.GetMissCombo()), + cs->GetCombo(), + cs->GetMissCombo()), 7); break; } @@ -4695,7 +4695,7 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice ScreenTextEntry::TextEntry( SM_BackFromSpeedPercentChange, ENTER_SPEED_PERCENT_VALUE, - ssprintf( "%.6f", GetAppropriateTiming().GetSpeedSegmentAtBeat( GetBeat() ).GetRatio() ), + ssprintf( "%.6f", GetAppropriateTiming().GetSpeedSegmentAtBeat( GetBeat() )->GetRatio() ), 10 ); break; @@ -4703,7 +4703,7 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice ScreenTextEntry::TextEntry( SM_BackFromScrollChange, ENTER_SCROLL_VALUE, - ssprintf( "%.6f", GetAppropriateTiming().GetScrollSegmentAtBeat( GetBeat() ).GetRatio() ), + ssprintf( "%.6f", GetAppropriateTiming().GetScrollSegmentAtBeat( GetBeat() )->GetRatio() ), 10 ); break; @@ -4711,7 +4711,7 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice ScreenTextEntry::TextEntry( SM_BackFromSpeedWaitChange, ENTER_SPEED_WAIT_VALUE, - ssprintf( "%.6f", GetAppropriateTiming().GetSpeedSegmentAtBeat( GetBeat() ).GetLength() ), + ssprintf( "%.6f", GetAppropriateTiming().GetSpeedSegmentAtBeat( GetBeat() )->GetLength() ), 10 ); break; @@ -4982,8 +4982,8 @@ void ScreenEdit::CheckNumberOfNotesAndUndo() if( EDIT_MODE.GetValue() != EditMode_Home ) return; - TimeSignatureSegment &curTime = GAMESTATE->m_pCurSong->m_SongTiming.GetTimeSignatureSegmentAtBeat( GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat ); - int rowsPerMeasure = curTime.GetDen() * curTime.GetNum(); + TimeSignatureSegment * curTime = GAMESTATE->m_pCurSong->m_SongTiming.GetTimeSignatureSegmentAtBeat( GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat ); + int rowsPerMeasure = curTime->GetDen() * curTime->GetNum(); for( int row=0; row<=m_NoteDataEdit.GetLastRow(); row+=rowsPerMeasure ) { @@ -5037,7 +5037,7 @@ float ScreenEdit::GetMaximumBeatForNewNote() const * beats. */ TimingData &timing = s.m_SongTiming; float playerBeat = GetAppropriatePosition().m_fSongBeat; - int beatsPerMeasure = timing.GetTimeSignatureSegmentAtBeat( playerBeat ).GetNum(); + int beatsPerMeasure = timing.GetTimeSignatureSegmentAtBeat( playerBeat )->GetNum(); fEndBeat += beatsPerMeasure; fEndBeat = ftruncf( fEndBeat, (float)beatsPerMeasure ); diff --git a/src/ScreenSyncOverlay.cpp b/src/ScreenSyncOverlay.cpp index e91cf6569d..a0d9f6c6a8 100644 --- a/src/ScreenSyncOverlay.cpp +++ b/src/ScreenSyncOverlay.cpp @@ -221,8 +221,8 @@ bool ScreenSyncOverlay::OverlayInput( const InputEventPlus &input ) } if( GAMESTATE->m_pCurSong != NULL ) { - BPMSegment& seg = GAMESTATE->m_pCurSong->m_SongTiming.GetBPMSegmentAtBeat( GAMESTATE->m_Position.m_fSongBeat ); - seg.SetBPS( seg.GetBPS() + fDelta ); + BPMSegment * seg = GAMESTATE->m_pCurSong->m_SongTiming.GetBPMSegmentAtBeat( GAMESTATE->m_Position.m_fSongBeat ); + seg->SetBPS( seg->GetBPS() + fDelta ); } } break; diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 7afa848e2d..2ee7737f92 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -160,13 +160,13 @@ void TimingData::SetTimeSignatureNumeratorAtRow( int iRow, int iNumerator ) { this->SetTimeSignatureAtRow(iRow, iNumerator, - GetTimeSignatureSegmentAtRow(iRow).GetDen()); + GetTimeSignatureSegmentAtRow(iRow)->GetDen()); } void TimingData::SetTimeSignatureDenominatorAtRow( int iRow, int iDenominator ) { this->SetTimeSignatureAtRow(iRow, - GetTimeSignatureSegmentAtRow(iRow).GetNum(), + GetTimeSignatureSegmentAtRow(iRow)->GetNum(), iDenominator); } @@ -258,13 +258,13 @@ void TimingData::SetHitComboAtRow(int iRow, int iCombo) { this->SetComboAtRow(iRow, iCombo, - this->GetComboSegmentAtRow(iRow).GetMissCombo()); + this->GetComboSegmentAtRow(iRow)->GetMissCombo()); } void TimingData::SetMissComboAtRow(int iRow, int iMiss) { this->SetComboAtRow(iRow, - this->GetComboSegmentAtRow(iRow).GetCombo(), + this->GetComboSegmentAtRow(iRow)->GetCombo(), iMiss); } @@ -390,23 +390,23 @@ void TimingData::SetSpeedPercentAtRow( int iRow, float fPercent ) { SetSpeedAtRow( iRow, fPercent, - GetSpeedSegmentAtBeat( NoteRowToBeat( iRow ) ).GetLength(), - GetSpeedSegmentAtBeat( NoteRowToBeat( iRow ) ).GetUnit()); + GetSpeedSegmentAtRow( iRow )->GetLength(), + GetSpeedSegmentAtRow( iRow )->GetUnit()); } void TimingData::SetSpeedWaitAtRow( int iRow, float fWait ) { SetSpeedAtRow( iRow, - GetSpeedSegmentAtBeat( NoteRowToBeat( iRow ) ).GetRatio(), + GetSpeedSegmentAtRow( iRow )->GetRatio(), fWait, - GetSpeedSegmentAtBeat( NoteRowToBeat( iRow ) ).GetUnit()); + GetSpeedSegmentAtRow( iRow )->GetUnit()); } void TimingData::SetSpeedModeAtRow( int iRow, unsigned short usMode ) { SetSpeedAtRow( iRow, - GetSpeedSegmentAtBeat( NoteRowToBeat( iRow ) ).GetRatio(), - GetSpeedSegmentAtBeat( NoteRowToBeat( iRow ) ).GetLength(), + GetSpeedSegmentAtRow( iRow )->GetRatio(), + GetSpeedSegmentAtRow( iRow )->GetLength(), usMode ); } @@ -472,22 +472,22 @@ float TimingData::GetWarpAtRow( int iWarpRow ) const float TimingData::GetSpeedPercentAtRow( int iRow ) { - return GetSpeedSegmentAtRow( iRow ).GetRatio(); + return GetSpeedSegmentAtRow( iRow )->GetRatio(); } float TimingData::GetSpeedWaitAtRow( int iRow ) { - return GetSpeedSegmentAtRow( iRow ).GetLength(); + return GetSpeedSegmentAtRow( iRow )->GetLength(); } unsigned short TimingData::GetSpeedModeAtRow( int iRow ) { - return GetSpeedSegmentAtRow( iRow ).GetUnit(); + return GetSpeedSegmentAtRow( iRow )->GetUnit(); } float TimingData::GetScrollAtRow( int iRow ) { - return GetScrollSegmentAtRow( iRow ).GetRatio(); + return GetScrollSegmentAtRow( iRow )->GetRatio(); } float TimingData::GetFakeAtRow( int iFakeRow ) const @@ -597,114 +597,122 @@ bool TimingData::IsFakeAtRow( int iNoteRow ) const return false; } -BPMSegment& TimingData::GetBPMSegmentAtRow( int iNoteRow ) +BPMSegment* TimingData::GetBPMSegmentAtRow( int iNoteRow ) { + vector &bpms = this->allTimingSegments[SEGMENT_BPM]; static BPMSegment empty; - if( m_BPMSegments.empty() ) - return empty; + if( bpms.empty() ) + return new BPMSegment(); int i = GetSegmentIndexAtRow( SEGMENT_BPM, iNoteRow ); - return m_BPMSegments[i]; + return static_cast(bpms[i]); } -TimeSignatureSegment& TimingData::GetTimeSignatureSegmentAtRow( int iRow ) +TimeSignatureSegment* TimingData::GetTimeSignatureSegmentAtRow( int iRow ) { unsigned i; - for( i=0; i iRow ) + vector &tSigs = this->allTimingSegments[SEGMENT_TIME_SIG]; + for( i=0; iGetRow() > iRow ) break; - return m_vTimeSignatureSegments[i]; + return static_cast(tSigs[i]); } -SpeedSegment& TimingData::GetSpeedSegmentAtRow( int iRow ) +SpeedSegment* TimingData::GetSpeedSegmentAtRow( int iRow ) { unsigned i; - for( i=0; i iRow ) + vector &speeds = this->allTimingSegments[SEGMENT_SPEED]; + for( i=0; iGetRow() > iRow ) break; - return m_SpeedSegments[i]; + return static_cast(speeds[i]); } -ScrollSegment& TimingData::GetScrollSegmentAtRow( int iRow ) +ScrollSegment* TimingData::GetScrollSegmentAtRow( int iRow ) { unsigned i; - for( i=0; i iRow ) + vector &scrolls = this->allTimingSegments[SEGMENT_SCROLL]; + for( i=0; iGetRow() > iRow ) break; - return m_ScrollSegments[i]; + return static_cast(scrolls[i]); } int TimingData::GetTimeSignatureNumeratorAtRow( int iRow ) { - return GetTimeSignatureSegmentAtRow( iRow ).GetNum(); + return GetTimeSignatureSegmentAtRow( iRow )->GetNum(); } int TimingData::GetTimeSignatureDenominatorAtRow( int iRow ) { - return GetTimeSignatureSegmentAtRow( iRow ).GetDen(); + return GetTimeSignatureSegmentAtRow( iRow )->GetDen(); } -ComboSegment& TimingData::GetComboSegmentAtRow( int iRow ) +ComboSegment* TimingData::GetComboSegmentAtRow( int iRow ) { unsigned i; - for( i=0; i iRow ) + vector &combos = this->allTimingSegments[SEGMENT_COMBO]; + for( i=0; iGetRow() > iRow ) break; - return m_ComboSegments[i]; + return static_cast(combos[i]); } -LabelSegment& TimingData::GetLabelSegmentAtRow( int iRow ) +LabelSegment* TimingData::GetLabelSegmentAtRow( int iRow ) { unsigned i; - for( i=0; i iRow ) + vector &labels = this->allTimingSegments[SEGMENT_LABEL]; + for( i=0; iGetRow() > iRow ) break; - return m_LabelSegments[i]; + return static_cast(labels[i]); } -StopSegment& TimingData::GetStopSegmentAtRow( int iNoteRow, bool bDelay ) +StopSegment* TimingData::GetStopSegmentAtRow( int iNoteRow, bool bDelay ) { - static StopSegment empty; - if( m_StopSegments.empty() ) - return empty; + vector &stops = this->allTimingSegments[SEGMENT_STOP_DELAY]; + if( stops.empty() ) + return new StopSegment(); int i = GetSegmentIndexAtRow( SEGMENT_STOP_DELAY, iNoteRow, bDelay ); - return m_StopSegments[i]; + return static_cast(stops[i]); } -WarpSegment& TimingData::GetWarpSegmentAtRow( int iRow ) +WarpSegment* TimingData::GetWarpSegmentAtRow( int iRow ) { - static WarpSegment empty; - if( m_WarpSegments.empty() ) - return empty; + vector &warps = this->allTimingSegments[SEGMENT_WARP]; + if( warps.empty() ) + return new WarpSegment(); int i = GetSegmentIndexAtRow( SEGMENT_WARP, iRow ); - return m_WarpSegments[i]; + return static_cast(warps[i]); } -FakeSegment& TimingData::GetFakeSegmentAtRow( int iRow ) +FakeSegment* TimingData::GetFakeSegmentAtRow( int iRow ) { - static FakeSegment empty; - if( m_FakeSegments.empty() ) - return empty; + vector &fakes = this->allTimingSegments[SEGMENT_FAKE]; + if( fakes.empty() ) + return new FakeSegment(); int i = GetSegmentIndexAtRow( SEGMENT_FAKE, iRow ); - return m_FakeSegments[i]; + return static_cast(fakes[i]); } -TickcountSegment& TimingData::GetTickcountSegmentAtRow( int iRow ) +TickcountSegment* TimingData::GetTickcountSegmentAtRow( int iRow ) { - static TickcountSegment empty; - if( m_TickcountSegments.empty() ) - return empty; + vector &ticks = this->allTimingSegments[SEGMENT_TICKCOUNT]; + if( ticks.empty() ) + return new TickcountSegment(); int i = GetSegmentIndexAtRow( SEGMENT_TICKCOUNT, iRow ); - return m_TickcountSegments[i]; + return static_cast(ticks[i]); } int TimingData::GetTickcountAtRow( int iRow ) const { - return m_TickcountSegments[GetSegmentIndexAtRow( SEGMENT_TICKCOUNT, iRow )].GetTicks(); + const vector &ticks = this->allTimingSegments[SEGMENT_TICKCOUNT]; + const int index = GetSegmentIndexAtRow( SEGMENT_TICKCOUNT, iRow ); + return static_cast(ticks[index])->GetTicks(); } float TimingData::GetPreviousBPMSegmentBeatAtRow( int iRow ) const @@ -1017,9 +1025,10 @@ float TimingData::GetNextLabelSegmentBeatAtRow( int iRow ) const bool TimingData::DoesLabelExist( RString sLabel ) const { - FOREACH_CONST( LabelSegment, m_LabelSegments, seg ) + const vector &labels = this->allTimingSegments[SEGMENT_LABEL]; + for (unsigned i = 0; i < labels.size(); i++) { - if( seg->GetLabel() == sLabel ) + if (static_cast(labels[i])->GetLabel() == sLabel) return true; } return false; @@ -1264,35 +1273,15 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool int length = iEndIndex - iStartIndex; int newLength = lrintf( fScale * length ); - for ( unsigned i = 0; i < m_BPMSegments.size(); i++ ) - m_BPMSegments[i].Scale( iStartIndex, length, newLength ); - - for( unsigned i = 0; i < m_StopSegments.size(); i++ ) - m_StopSegments[i].Scale( iStartIndex, length, newLength ); - - for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) - m_vTimeSignatureSegments[i].Scale( iStartIndex, length, newLength ); - - for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) - m_WarpSegments[i].Scale( iStartIndex, length, newLength ); - - for ( unsigned i = 0; i < m_TickcountSegments.size(); i++ ) - m_TickcountSegments[i].Scale( iStartIndex, length, newLength ); - - for ( unsigned i = 0; i < m_ComboSegments.size(); i++ ) - m_ComboSegments[i].Scale( iStartIndex, length, newLength ); - - for ( unsigned i = 0; i < m_LabelSegments.size(); i++ ) - m_LabelSegments[i].Scale( iStartIndex, length, newLength ); - - for ( unsigned i = 0; i < m_SpeedSegments.size(); i++ ) - m_SpeedSegments[i].Scale( iStartIndex, length, newLength ); - - for( unsigned i = 0; i < m_FakeSegments.size(); i++ ) - m_FakeSegments[i].Scale( iStartIndex, length, newLength ); - - for( unsigned i = 0; i < m_ScrollSegments.size(); i++ ) - m_ScrollSegments[i].Scale( iStartIndex, length, newLength ); + // TODO: Confirm this works as intended. + for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) + { + vector &segs = this->allTimingSegments[i]; + for (unsigned j = 0; j < segs.size(); j++) + { + segs[i][j].Scale(iStartIndex, length, newLength); + } + } // adjust BPM changes to preserve timing if( bAdjustBPM ) @@ -1512,12 +1501,16 @@ bool TimingData::HasFakes() const bool TimingData::HasSpeedChanges() const { - return m_SpeedSegments.size()>1 || m_SpeedSegments[0].GetRatio() != 1; + const vector &speeds = this->allTimingSegments[SEGMENT_SPEED]; + return (speeds.size()>1 || + static_cast(speeds[0])->GetRatio() != 1); } bool TimingData::HasScrollChanges() const { - return m_ScrollSegments.size()>1 || m_ScrollSegments[0].GetRatio() != 1; + const vector &scrolls = this->allTimingSegments[SEGMENT_SCROLL]; + return (scrolls.size()>1 || + static_cast(scrolls[0])->GetRatio() != 1); } void TimingData::NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, int &iBeatIndexOut, int &iRowsRemainder ) const diff --git a/src/TimingData.h b/src/TimingData.h index 795ab57d07..d9ee7e2c6f 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -72,13 +72,13 @@ public: * @param iNoteRow the row that has a BPMSegment. * @return the BPMSegment in question. */ - BPMSegment& GetBPMSegmentAtRow( int iNoteRow ); + BPMSegment* GetBPMSegmentAtRow( int iNoteRow ); /** * @brief Retrieve the BPMSegment at the specified beat. * @param fBeat the beat that has a BPMSegment. * @return the BPMSegment in question. */ - BPMSegment& GetBPMSegmentAtBeat( float fBeat ) { return GetBPMSegmentAtRow( (int)BeatToNoteRow(fBeat)); } + BPMSegment* GetBPMSegmentAtBeat( float fBeat ) { return GetBPMSegmentAtRow( (int)BeatToNoteRow(fBeat)); } /** * @brief Retrieve the next beat that contains a BPMSegment. @@ -201,39 +201,39 @@ public: * @param iNoteRow the row that has a StopSegment. * @return the StopSegment in question. */ - StopSegment& GetStopSegmentAtRow( int iNoteRow ) { return GetStopSegmentAtRow( iNoteRow, false ); } + StopSegment* GetStopSegmentAtRow( int iNoteRow ) { return GetStopSegmentAtRow( iNoteRow, false ); } /** * @brief Retrieve the StopSegment at the specified beat. * @param fBeat the beat that has a StopSegment. * @return the StopSegment in question. */ - StopSegment& GetStopSegmentAtBeat( float fBeat ) { return GetStopSegmentAtRow( BeatToNoteRow(fBeat), false); } + StopSegment* GetStopSegmentAtBeat( float fBeat ) { return GetStopSegmentAtRow( BeatToNoteRow(fBeat), false); } /** * @brief Retrieve the StopSegment at the specified row. * @param iNoteRow the row that has a StopSegment. * @param bDelay If true, this is actually a DelaySegment. * @return the StopSegment in question. */ - StopSegment& GetStopSegmentAtRow( int iNoteRow, bool bDelay ); + StopSegment* GetStopSegmentAtRow( int iNoteRow, bool bDelay ); /** * @brief Retrieve the StopSegment at the specified beat. * @param fBeat the beat that has a StopSegment. * @param bDelay If true, this is actually a DelaySegment. * @return the StopSegment in question. */ - StopSegment& GetStopSegmentAtBeat( float fBeat, bool bDelay ) { return GetStopSegmentAtRow( BeatToNoteRow(fBeat), bDelay ); } + StopSegment* GetStopSegmentAtBeat( float fBeat, bool bDelay ) { return GetStopSegmentAtRow( BeatToNoteRow(fBeat), bDelay ); } /** * @brief Retrieve the DelaySegment at the specified row. * @param iNoteRow the row that has a DelaySegment. * @return the DelaySegment in question. */ - StopSegment& GetDelaySegmentAtRow( int iNoteRow ) { return GetStopSegmentAtRow( iNoteRow, true ); } + StopSegment* GetDelaySegmentAtRow( int iNoteRow ) { return GetStopSegmentAtRow( iNoteRow, true ); } /** * @brief Retrieve the DelaySegment at the specified beat. * @param fBeat the beat that has a DelaySegment. * @return the DelaySegment in question. */ - StopSegment& GetDelaySegmentAtBeat( float fBeat ) { return GetStopSegmentAtRow( BeatToNoteRow(fBeat), true); } + StopSegment* GetDelaySegmentAtBeat( float fBeat ) { return GetStopSegmentAtRow( BeatToNoteRow(fBeat), true); } /** * @brief Retrieve the index of the StopSegments at the specified row. * @param iNoteRow the row that has a StopSegment. @@ -363,13 +363,13 @@ public: * @param iNoteRow the row that has a TimeSignatureSegment. * @return the TimeSignatureSegment in question. */ - TimeSignatureSegment& GetTimeSignatureSegmentAtRow( int iNoteRow ); + TimeSignatureSegment* GetTimeSignatureSegmentAtRow( int iNoteRow ); /** * @brief Retrieve the TimeSignatureSegment at the specified beat. * @param fBeat the beat that has a TimeSignatureSegment. * @return the TimeSignatureSegment in question. */ - TimeSignatureSegment& GetTimeSignatureSegmentAtBeat( float fBeat ) { return GetTimeSignatureSegmentAtRow( BeatToNoteRow(fBeat) ); } + TimeSignatureSegment* GetTimeSignatureSegmentAtBeat( float fBeat ) { return GetTimeSignatureSegmentAtRow( BeatToNoteRow(fBeat) ); } /** @@ -432,13 +432,13 @@ public: * @param iRow the row to focus on. * @return the WarpSegment in question. */ - WarpSegment& GetWarpSegmentAtRow( int iRow ); + WarpSegment* GetWarpSegmentAtRow( int iRow ); /** * @brief Retrieve the WarpSegment at the specified beat. * @param fBeat the beat to focus on. * @return the WarpSegment in question. */ - WarpSegment& GetWarpSegmentAtBeat( float fBeat ) { return GetWarpSegmentAtRow( BeatToNoteRow( fBeat ) ); } + WarpSegment* GetWarpSegmentAtBeat( float fBeat ) { return GetWarpSegmentAtRow( BeatToNoteRow( fBeat ) ); } /** * @brief Checks if the row is inside a warp. * @param iRow the row to focus on. @@ -513,13 +513,13 @@ public: * @param iNoteRow the row that has a TickcountSegment. * @return the TickcountSegment in question. */ - TickcountSegment& GetTickcountSegmentAtRow( int iNoteRow ); + TickcountSegment* GetTickcountSegmentAtRow( int iNoteRow ); /** * @brief Retrieve the TickcountSegment at the specified beat. * @param fBeat the beat that has a TickcountSegment. * @return the TickcountSegment in question. */ - TickcountSegment& GetTickcountSegmentAtBeat( float fBeat ) { return GetTickcountSegmentAtRow( BeatToNoteRow(fBeat) ); } + TickcountSegment* GetTickcountSegmentAtBeat( float fBeat ) { return GetTickcountSegmentAtRow( BeatToNoteRow(fBeat) ); } /** * @brief Retrieve the next beat that contains a TickcountSegment. @@ -632,13 +632,13 @@ public: * @param iNoteRow the row that has a ComboSegment. * @return the ComboSegment in question. */ - ComboSegment& GetComboSegmentAtRow( int iNoteRow ); + ComboSegment* GetComboSegmentAtRow( int iNoteRow ); /** * @brief Retrieve the ComboSegment at the specified beat. * @param fBeat the beat that has a ComboSegment. * @return the ComboSegment in question. */ - ComboSegment& GetComboSegmentAtBeat( float fBeat ) { return GetComboSegmentAtRow( BeatToNoteRow(fBeat) ); } + ComboSegment* GetComboSegmentAtBeat( float fBeat ) { return GetComboSegmentAtRow( BeatToNoteRow(fBeat) ); } /** * @brief Retrieve the next beat that contains a ComboSegment. @@ -701,13 +701,13 @@ public: * @param iNoteRow the row that has a LabelSegment. * @return the LabelSegment in question. */ - LabelSegment& GetLabelSegmentAtRow( int iNoteRow ); + LabelSegment* GetLabelSegmentAtRow( int iNoteRow ); /** * @brief Retrieve the LabelSegment at the specified beat. * @param fBeat the beat that has a LabelSegment. * @return the LabelSegment in question. */ - LabelSegment& GetLabelSegmentAtBeat( float fBeat ) { return GetLabelSegmentAtRow( BeatToNoteRow(fBeat) ); } + LabelSegment* GetLabelSegmentAtBeat( float fBeat ) { return GetLabelSegmentAtRow( BeatToNoteRow(fBeat) ); } /** * @brief Retrieve the previous beat that contains a LabelSegment. @@ -841,13 +841,13 @@ public: * @param iNoteRow the row that has a SpeedSegment. * @return the SpeedSegment in question. */ - SpeedSegment& GetSpeedSegmentAtRow( int iNoteRow ); + SpeedSegment* GetSpeedSegmentAtRow( int iNoteRow ); /** * @brief Retrieve the SpeedSegment at the specified beat. * @param fBeat the beat that has a SpeedSegment. * @return the SpeedSegment in question. */ - SpeedSegment& GetSpeedSegmentAtBeat( float fBeat ) { return GetSpeedSegmentAtRow( BeatToNoteRow(fBeat) ); } + SpeedSegment* GetSpeedSegmentAtBeat( float fBeat ) { return GetSpeedSegmentAtRow( BeatToNoteRow(fBeat) ); } float GetDisplayedSpeedPercent( float fBeat, float fMusicSeconds ) const; @@ -914,13 +914,13 @@ public: * @param iNoteRow the row that has a ScrollSegment. * @return the ScrollSegment in question. */ - ScrollSegment& GetScrollSegmentAtRow( int iNoteRow ); + ScrollSegment* GetScrollSegmentAtRow( int iNoteRow ); /** * @brief Retrieve the ScrollSegment at the specified beat. * @param fBeat the beat that has a ScrollSegment. * @return the ScrollSegment in question. */ - ScrollSegment& GetScrollSegmentAtBeat( float fBeat ) { return GetScrollSegmentAtRow( BeatToNoteRow(fBeat) ); } + ScrollSegment* GetScrollSegmentAtBeat( float fBeat ) { return GetScrollSegmentAtRow( BeatToNoteRow(fBeat) ); } /** * @brief Retrieve the next beat that contains a ScrollSegment. @@ -983,13 +983,13 @@ public: * @param iRow the row to focus on. * @return the FakeSegment in question. */ - FakeSegment& GetFakeSegmentAtRow( int iRow ); + FakeSegment* GetFakeSegmentAtRow( int iRow ); /** * @brief Retrieve the FakeSegment at the specified beat. * @param fBeat the beat to focus on. * @return the FakeSegment in question. */ - FakeSegment& GetFakeSegmentAtBeat( float fBeat ) { return GetFakeSegmentAtRow( BeatToNoteRow( fBeat ) ); } + FakeSegment* GetFakeSegmentAtBeat( float fBeat ) { return GetFakeSegmentAtRow( BeatToNoteRow( fBeat ) ); } /** * @brief Checks if the row is inside a fake. * @param iRow the row to focus on. From 01dacd9746b9b1c0651760f765aa7c875d6efa7f Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 23:54:06 -0400 Subject: [PATCH 30/94] [timing] More abstraction. This commit has 2 caveats. 1) Stops and Delays are treated the same in the editor right now. 2) TimingSegments.cpp: XToString should not require NUM_TimingSegmentTypes. Ideas? --- src/ScreenEdit.cpp | 109 ++---------- src/ScreenEdit.h | 2 +- src/TimingData.cpp | 343 ++++---------------------------------- src/TimingData.h | 370 +++-------------------------------------- src/TimingSegments.cpp | 15 ++ src/TimingSegments.h | 4 +- 6 files changed, 86 insertions(+), 757 deletions(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index a7d5cec57d..3248853703 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -812,7 +812,7 @@ void ScreenEdit::Init() InitEditMappings(); - currentCycleSegment = "label"; + currentCycleSegment = SEGMENT_LABEL; // save the originals for reverting later CopyToLastSave(); @@ -1261,7 +1261,7 @@ void ScreenEdit::UpdateTextInfo() sText += ssprintf( MAIN_TITLE_FORMAT.GetValue(), MAIN_TITLE.GetValue().c_str(), m_pSong->m_sMainTitle.c_str() ); if( m_pSong->m_sSubTitle.size() ) sText += ssprintf( SUBTITLE_FORMAT.GetValue(), SUBTITLE.GetValue().c_str(), m_pSong->m_sSubTitle.c_str() ); - sText += ssprintf( SEGMENT_TYPE_FORMAT.GetValue(), SEGMENT_TYPE.GetValue().c_str(), currentCycleSegment.c_str() ); + sText += ssprintf( SEGMENT_TYPE_FORMAT.GetValue(), SEGMENT_TYPE.GetValue().c_str(), TimingSegmentTypeToString(currentCycleSegment).c_str() ); sText += ssprintf( TAP_NOTE_TYPE_FORMAT.GetValue(), TAP_NOTE_TYPE.GetValue().c_str(), TapNoteTypeToString( m_selectedTap.type ).c_str() ); break; } @@ -1559,60 +1559,15 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } case EDIT_BUTTON_CYCLE_SEGMENT_LEFT: { - if (this->currentCycleSegment == "label") - this->currentCycleSegment = "fake"; - else if (this->currentCycleSegment == "fake") - this->currentCycleSegment = "scroll"; - else if (this->currentCycleSegment == "scroll") - this->currentCycleSegment = "speed"; - else if (this->currentCycleSegment == "speed") - this->currentCycleSegment = "combo"; - else if (this->currentCycleSegment == "combo") - this->currentCycleSegment = "tickcount"; - else if (this->currentCycleSegment == "tickcount") - this->currentCycleSegment = "timeSig"; - else if (this->currentCycleSegment == "timeSig") - this->currentCycleSegment = "warp"; - else if (this->currentCycleSegment == "warp") - this->currentCycleSegment = "delay"; - else if (this->currentCycleSegment == "delay") - this->currentCycleSegment = "stop"; - else if (this->currentCycleSegment == "stop") - this->currentCycleSegment = "bpm"; - else if (this->currentCycleSegment == "bpm") - this->currentCycleSegment = "label"; - // fallback gracefully instead of assert. - else this->currentCycleSegment = "label"; + int tmp = enum_add2( this->currentCycleSegment, -1 ); + wrap( *ConvertValue(&tmp), NUM_TimingSegmentTypes ); break; } case EDIT_BUTTON_CYCLE_SEGMENT_RIGHT: { - if (this->currentCycleSegment == "label") - this->currentCycleSegment = "bpm"; - else if (this->currentCycleSegment == "bpm") - this->currentCycleSegment = "stop"; - else if (this->currentCycleSegment == "stop") - this->currentCycleSegment = "delay"; - else if (this->currentCycleSegment == "delay") - this->currentCycleSegment = "warp"; - else if (this->currentCycleSegment == "warp") - this->currentCycleSegment = "timeSig"; - else if (this->currentCycleSegment == "timeSig") - this->currentCycleSegment = "tickcount"; - else if (this->currentCycleSegment == "tickcount") - this->currentCycleSegment = "combo"; - else if (this->currentCycleSegment == "combo") - this->currentCycleSegment = "speed"; - else if (this->currentCycleSegment == "speed") - this->currentCycleSegment = "scroll"; - else if (this->currentCycleSegment == "scroll") - this->currentCycleSegment = "fake"; - else if (this->currentCycleSegment == "fake") - this->currentCycleSegment = "label"; - // fallback gracefully instead of assert. - else this->currentCycleSegment = "label"; - break; - } + int tmp = enum_add2( this->currentCycleSegment, +1 ); + wrap( *ConvertValue(&tmp), NUM_TimingSegmentTypes ); + break; } case EDIT_BUTTON_SCROLL_SPEED_UP: case EDIT_BUTTON_SCROLL_SPEED_DOWN: { @@ -1729,56 +1684,18 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) break; case EDIT_BUTTON_SEGMENT_NEXT: { + // TODO: Work around Stops and Delays. We MAY have to separate them. TimingData &timing = GetAppropriateTiming(); - if (this->currentCycleSegment == "label") - ScrollTo(timing.GetNextLabelSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "bpm") - ScrollTo(timing.GetNextBPMSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "stop") - ScrollTo(timing.GetNextStopSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "delay") - ScrollTo(timing.GetNextDelaySegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "warp") - ScrollTo(timing.GetNextWarpSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "timeSig") - ScrollTo(timing.GetNextTimeSignatureSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "tickcount") - ScrollTo(timing.GetNextTickcountSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "combo") - ScrollTo(timing.GetNextComboSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "speed") - ScrollTo(timing.GetNextSpeedSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "scroll") - ScrollTo(timing.GetNextScrollSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "fake") - ScrollTo(timing.GetNextFakeSegmentBeatAtBeat(GetBeat())); + ScrollTo(timing.GetNextSegmentBeatAtBeat(this->currentCycleSegment, + GetBeat())); } break; case EDIT_BUTTON_SEGMENT_PREV: { + // TODO: Work around Stops and Delays. We MAY have to separate them. TimingData &timing = GetAppropriateTiming(); - if (this->currentCycleSegment == "label") - ScrollTo(timing.GetPreviousLabelSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "bpm") - ScrollTo(timing.GetPreviousBPMSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "stop") - ScrollTo(timing.GetPreviousStopSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "delay") - ScrollTo(timing.GetPreviousDelaySegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "warp") - ScrollTo(timing.GetPreviousWarpSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "timeSig") - ScrollTo(timing.GetPreviousTimeSignatureSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "tickcount") - ScrollTo(timing.GetPreviousTickcountSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "combo") - ScrollTo(timing.GetPreviousComboSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "speed") - ScrollTo(timing.GetPreviousSpeedSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "scroll") - ScrollTo(timing.GetPreviousScrollSegmentBeatAtBeat(GetBeat())); - else if (this->currentCycleSegment == "fake") - ScrollTo(timing.GetPreviousFakeSegmentBeatAtBeat(GetBeat())); + ScrollTo(timing.GetPreviousSegmentBeatAtBeat(this->currentCycleSegment, + GetBeat())); } break; case EDIT_BUTTON_SNAP_NEXT: diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index 6aa9954500..f2e8c66212 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -286,7 +286,7 @@ protected: TapNote m_selectedTap; /** @brief The type of segment users will jump back and forth between. */ - RString currentCycleSegment; + TimingSegmentType currentCycleSegment; void UpdateTextInfo(); BitmapText m_textInfo; // status information that changes diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 2ee7737f92..72a8e701f6 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -64,6 +64,41 @@ int TimingData::GetSegmentIndexAtRow(TimingSegmentType tst, return static_cast(i); } +float TimingData::GetNextSegmentBeatAtRow(TimingSegmentType tst, + int row, bool isDelay) const +{ + const vector segs = this->allTimingSegments[tst]; + for (unsigned i = 0; i < segs.size(); i++ ) + { + if( segs[i]->GetRow() <= row ) + { + continue; + } + if (tst != SEGMENT_STOP_DELAY || + static_cast(segs[i])->GetDelay() == isDelay) + return segs[i]->GetBeat(); + } + return NoteRowToBeat(row); +} + +float TimingData::GetPreviousSegmentBeatAtRow(TimingSegmentType tst, + int row, bool isDelay) const +{ + float backup = -1; + const vector segs = this->allTimingSegments[tst]; + for (unsigned i = 0; i < segs.size(); i++ ) + { + if( segs[i]->GetRow() >= row ) + { + break; + } + if (tst != SEGMENT_STOP_DELAY || + static_cast(segs[i])->GetDelay() == isDelay) + backup = segs[i]->GetBeat(); + } + return (backup > -1) ? backup : NoteRowToBeat(row); +} + // TODO: Find a way to combine all of these SetAtRows to one. /* Change an existing BPM segment, merge identical segments together or insert a new one. */ @@ -715,314 +750,6 @@ int TimingData::GetTickcountAtRow( int iRow ) const return static_cast(ticks[index])->GetTicks(); } -float TimingData::GetPreviousBPMSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_BPMSegments.size(); i++ ) - { - if( m_BPMSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_BPMSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextBPMSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_BPMSegments.size(); i++ ) - { - if( m_BPMSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_BPMSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousStopSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_StopSegments.size(); i++ ) - { - const StopSegment &s = m_StopSegments[i]; - if( s.GetRow() >= iRow ) - { - break; - } - if (!s.GetDelay()) - backup = s.GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextStopSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_StopSegments.size(); i++ ) - { - const StopSegment &s = m_StopSegments[i]; - if( s.GetRow() <= iRow ) - { - continue; - } - if (!s.GetDelay()) - return s.GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousDelaySegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_StopSegments.size(); i++ ) - { - const StopSegment &s = m_StopSegments[i]; - if( s.GetRow() >= iRow ) - { - break; - } - if (s.GetDelay()) - backup = s.GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextDelaySegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_StopSegments.size(); i++ ) - { - const StopSegment &s = m_StopSegments[i]; - if( s.GetRow() <= iRow ) - { - continue; - } - if (s.GetDelay()) - return s.GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousTimeSignatureSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) - { - if( m_vTimeSignatureSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_vTimeSignatureSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextTimeSignatureSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) - { - if( m_vTimeSignatureSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_vTimeSignatureSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - - -float TimingData::GetPreviousTickcountSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_TickcountSegments.size(); i++ ) - { - if( m_TickcountSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_TickcountSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextTickcountSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_TickcountSegments.size(); i++ ) - { - if( m_TickcountSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_TickcountSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousComboSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_ComboSegments.size(); i++ ) - { - if( m_ComboSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_ComboSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextComboSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_ComboSegments.size(); i++ ) - { - if( m_ComboSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_ComboSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - - - -float TimingData::GetPreviousWarpSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_WarpSegments.size(); i++ ) - { - if( m_WarpSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_WarpSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextWarpSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_WarpSegments.size(); i++ ) - { - if( m_WarpSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_WarpSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousFakeSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_FakeSegments.size(); i++ ) - { - if( m_FakeSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_FakeSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextFakeSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_FakeSegments.size(); i++ ) - { - if( m_FakeSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_FakeSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousSpeedSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_SpeedSegments.size(); i++ ) - { - if( m_SpeedSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_SpeedSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextSpeedSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_SpeedSegments.size(); i++ ) - { - if( m_SpeedSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_SpeedSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousScrollSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_ScrollSegments.size(); i++ ) - { - if( m_ScrollSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_ScrollSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextScrollSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_ScrollSegments.size(); i++ ) - { - if( m_ScrollSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_ScrollSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - -float TimingData::GetPreviousLabelSegmentBeatAtRow( int iRow ) const -{ - float backup = -1; - for (unsigned i = 0; i < m_LabelSegments.size(); i++ ) - { - if( m_LabelSegments[i].GetRow() >= iRow ) - { - break; - } - backup = m_LabelSegments[i].GetBeat(); - } - return (backup > -1) ? backup : NoteRowToBeat(iRow); -} - -float TimingData::GetNextLabelSegmentBeatAtRow( int iRow ) const -{ - for (unsigned i = 0; i < m_LabelSegments.size(); i++ ) - { - if( m_LabelSegments[i].GetRow() <= iRow ) - { - continue; - } - return m_LabelSegments[i].GetBeat(); - } - return NoteRowToBeat(iRow); -} - bool TimingData::DoesLabelExist( RString sLabel ) const { const vector &labels = this->allTimingSegments[SEGMENT_LABEL]; diff --git a/src/TimingData.h b/src/TimingData.h index d9ee7e2c6f..76030fe08e 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -27,6 +27,24 @@ public: return this->GetSegmentIndexAtRow(tst, BeatToNoteRow(beat), isDelay); } + float GetNextSegmentBeatAtRow(TimingSegmentType tst, + int row, bool isDelay = false) const; + + float GetNextSegmentBeatAtBeat(TimingSegmentType tst, + float beat, bool isDelay = false) const + { + return this->GetNextSegmentBeatAtRow(tst, BeatToNoteRow(beat), isDelay); + } + + float GetPreviousSegmentBeatAtRow(TimingSegmentType tst, + int row, bool isDelay = false) const; + + float GetPreviousSegmentBeatAtBeat(TimingSegmentType tst, + float beat, bool isDelay = false) const + { + return this->GetPreviousSegmentBeatAtRow(tst, BeatToNoteRow(beat), isDelay); + } + /** * @brief Sets up initial timing data with a defined offset. * @param fOffset the offset from the 0th beat. */ @@ -79,38 +97,6 @@ public: * @return the BPMSegment in question. */ BPMSegment* GetBPMSegmentAtBeat( float fBeat ) { return GetBPMSegmentAtRow( (int)BeatToNoteRow(fBeat)); } - - /** - * @brief Retrieve the next beat that contains a BPMSegment. - * @param iRow the present row. - * @return the next beat with a BPMSegment, or fBeat if there is none ahead. - */ - float GetNextBPMSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a BPMSegment. - * @param fBeat the present beat. - * @return the next beat with a BPMSegment, or fBeat if there is none ahead. - */ - float GetNextBPMSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextBPMSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a BPMSegment. - * @param iRow the present row. - * @return the previous beat with a BPMSegment, or fBeat if there is none prior. - */ - float GetPreviousBPMSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a BPMSegment. - * @param fBeat the present beat. - * @return the previous beat with a BPMSegment, or fBeat if there is none prior. - */ - float GetPreviousBPMSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousBPMSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** * @brief Retrieve the Stop/Delay at the given row. @@ -234,68 +220,7 @@ public: * @return the DelaySegment in question. */ StopSegment* GetDelaySegmentAtBeat( float fBeat ) { return GetStopSegmentAtRow( BeatToNoteRow(fBeat), true); } - /** - * @brief Retrieve the index of the StopSegments at the specified row. - * @param iNoteRow the row that has a StopSegment. - * @return the StopSegment's index in question. - */ - float GetNextStopSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a StopSegment. - * @param fBeat the present beat. - * @return the next beat with a StopSegment, or fBeat if there is none ahead. - */ - float GetNextStopSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextStopSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a StopSegment. - * @param iRow the present row. - * @return the previous beat with a StopSegment, or fBeat if there is none prior. - */ - float GetPreviousStopSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a StopSegment. - * @param fBeat the present beat. - * @return the previous beat with a StopSegment, or fBeat if there is none prior. - */ - float GetPreviousStopSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousStopSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - - /** - * @brief Retrieve the next beat that contains a DelaySegment. - * @param iRow the present row. - * @return the next beat with a DelaySegment, or fBeat if there is none ahead. - */ - float GetNextDelaySegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a DelaySegment. - * @param fBeat the present beat. - * @return the next beat with a DelaySegment, or fBeat if there is none ahead. - */ - float GetNextDelaySegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextDelaySegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a DelaySegment. - * @param iRow the present row. - * @return the previous beat with a DelaySegment, or fBeat if there is none prior. - */ - float GetPreviousDelaySegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a DelaySegment. - * @param fBeat the present beat. - * @return the previous beat with a DelaySegment, or fBeat if there is none prior. - */ - float GetPreviousDelaySegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousDelaySegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - + /** * @brief Retrieve the Time Signature's numerator at the given row. * @param iNoteRow the row in question. @@ -370,38 +295,6 @@ public: * @return the TimeSignatureSegment in question. */ TimeSignatureSegment* GetTimeSignatureSegmentAtBeat( float fBeat ) { return GetTimeSignatureSegmentAtRow( BeatToNoteRow(fBeat) ); } - - - /** - * @brief Retrieve the next beat that contains a TimeSignatureSegment. - * @param iRow the present row. - * @return the next beat with a TimeSignatureSegment, or fBeat if there is none ahead. - */ - float GetNextTimeSignatureSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a TimeSignatureSegment. - * @param fBeat the present beat. - * @return the next beat with a TimeSignatureSegment, or fBeat if there is none ahead. - */ - float GetNextTimeSignatureSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextTimeSignatureSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a TimeSignatureSegment. - * @param iRow the present row. - * @return the previous beat with a TimeSignatureSegment, or fBeat if there is none prior. - */ - float GetPreviousTimeSignatureSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a TimeSignatureSegment. - * @param fBeat the present beat. - * @return the previous beat with a TimeSignatureSegment, or fBeat if there is none prior. - */ - float GetPreviousTimeSignatureSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousTimeSignatureSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } /** * @brief Determine the beat to warp to. @@ -452,38 +345,6 @@ public: */ bool IsWarpAtBeat( float fBeat ) const { return IsWarpAtRow( BeatToNoteRow( fBeat ) ); } - - /** - * @brief Retrieve the next beat that contains a WarpSegment. - * @param iRow the present row. - * @return the next beat with a WarpSegment, or fBeat if there is none ahead. - */ - float GetNextWarpSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a WarpSegment. - * @param fBeat the present beat. - * @return the next beat with a WarpSegment, or fBeat if there is none ahead. - */ - float GetNextWarpSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextWarpSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a WarpSegment. - * @param iRow the present row. - * @return the previous beat with a WarpSegment, or fBeat if there is none prior. - */ - float GetPreviousWarpSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a WarpSegment. - * @param fBeat the present beat. - * @return the previous beat with a WarpSegment, or fBeat if there is none prior. - */ - float GetPreviousWarpSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousWarpSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** * @brief Retrieve the Tickcount at the given row. * @param iNoteRow the row in question. @@ -521,38 +382,6 @@ public: */ TickcountSegment* GetTickcountSegmentAtBeat( float fBeat ) { return GetTickcountSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the next beat that contains a TickcountSegment. - * @param iRow the present row. - * @return the next beat with a TickcountSegment, or fBeat if there is none ahead. - */ - float GetNextTickcountSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a TickcountSegment. - * @param fBeat the present beat. - * @return the next beat with a TickcountSegment, or fBeat if there is none ahead. - */ - float GetNextTickcountSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextTickcountSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a TickcountSegment. - * @param iRow the present row. - * @return the previous beat with a TickcountSegment, or fBeat if there is none prior. - */ - float GetPreviousTickcountSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a TickcountSegment. - * @param fBeat the present beat. - * @return the previous beat with a TickcountSegment, or fBeat if there is none prior. - */ - float GetPreviousTickcountSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousTickcountSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - - /** * @brief Retrieve the Combo at the given row. * @param iNoteRow the row in question. @@ -640,38 +469,6 @@ public: */ ComboSegment* GetComboSegmentAtBeat( float fBeat ) { return GetComboSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the next beat that contains a ComboSegment. - * @param iRow the present row. - * @return the next beat with a ComboSegment, or fBeat if there is none ahead. - */ - float GetNextComboSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a ComboSegment. - * @param fBeat the present beat. - * @return the next beat with a ComboSegment, or fBeat if there is none ahead. - */ - float GetNextComboSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextComboSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a ComboSegment. - * @param iRow the present row. - * @return the previous beat with a ComboSegment, or fBeat if there is none prior. - */ - float GetPreviousComboSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a ComboSegment. - * @param fBeat the present beat. - * @return the previous beat with a ComboSegment, or fBeat if there is none prior. - */ - float GetPreviousComboSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousComboSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - - /** * @brief Retrieve the Label at the given row. * @param iNoteRow the row in question. @@ -709,45 +506,12 @@ public: */ LabelSegment* GetLabelSegmentAtBeat( float fBeat ) { return GetLabelSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the previous beat that contains a LabelSegment. - * @param iRow the present row. - * @return the previous beat with a LabelSegment, or fBeat if there is none prior. - */ - float GetPreviousLabelSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a LabelSegment. - * @param fBeat the present beat. - * @return the previous beat with a LabelSegment, or fBeat if there is none prior. - */ - float GetPreviousLabelSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousLabelSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** * @brief Determine if the requisite label already exists. * @param sLabel the label to check. * @return true if it exists, false otherwise. */ bool DoesLabelExist( RString sLabel ) const; - /** - * @brief Retrieve the next beat that contains a LabelSegment. - * @param iRow the present row. - * @return the next beat with a LabelSegment, or fBeat if there is none ahead. - */ - float GetNextLabelSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a LabelSegment. - * @param fBeat the present beat. - * @return the next beat with a LabelSegment, or fBeat if there is none ahead. - */ - float GetNextLabelSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextLabelSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - - /** * @brief Retrieve the Speed's percent at the given row. * @param iNoteRow the row in question. @@ -851,38 +615,6 @@ public: float GetDisplayedSpeedPercent( float fBeat, float fMusicSeconds ) const; - /** - * @brief Retrieve the next beat that contains a SpeedSegment. - * @param iRow the present row. - * @return the next beat with a SpeedSegment, or fBeat if there is none ahead. - */ - float GetNextSpeedSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a SpeedSegment. - * @param fBeat the present beat. - * @return the next beat with a SpeedSegment, or fBeat if there is none ahead. - */ - float GetNextSpeedSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextSpeedSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a SpeedSegment. - * @param iRow the present row. - * @return the previous beat with a SpeedSegment, or fBeat if there is none prior. - */ - float GetPreviousSpeedSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a SpeedSegment. - * @param fBeat the present beat. - * @return the previous beat with a SpeedSegment, or fBeat if there is none prior. - */ - float GetPreviousSpeedSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousSpeedSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - - /** * @brief Retrieve the scrolling factor at the given row. * @param iNoteRow the row in question. @@ -922,38 +654,6 @@ public: */ ScrollSegment* GetScrollSegmentAtBeat( float fBeat ) { return GetScrollSegmentAtRow( BeatToNoteRow(fBeat) ); } - /** - * @brief Retrieve the next beat that contains a ScrollSegment. - * @param iRow the present row. - * @return the next beat with a ScrollSegment, or fBeat if there is none ahead. - */ - float GetNextScrollSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a ScrollSegment. - * @param fBeat the present beat. - * @return the next beat with a ScrollSegment, or fBeat if there is none ahead. - */ - float GetNextScrollSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextScrollSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a ScrollSegment. - * @param iRow the present row. - * @return the previous beat with a ScrollSegment, or fBeat if there is none prior. - */ - float GetPreviousScrollSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a ScrollSegment. - * @param fBeat the present beat. - * @return the previous beat with a ScrollSegment, or fBeat if there is none prior. - */ - float GetPreviousScrollSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousScrollSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - - /** * @brief Determine when the fakes end. * @param iRow The row you start on. @@ -1003,38 +703,6 @@ public: */ bool IsFakeAtBeat( float fBeat ) const { return IsFakeAtRow( BeatToNoteRow( fBeat ) ); } - /** - * @brief Retrieve the next beat that contains a FakeSegment. - * @param iRow the present row. - * @return the next beat with a FakeSegment, or fBeat if there is none ahead. - */ - float GetNextFakeSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a FakeSegment. - * @param fBeat the present beat. - * @return the next beat with a FakeSegment, or fBeat if there is none ahead. - */ - float GetNextFakeSegmentBeatAtBeat( float fBeat ) const - { - return this->GetNextFakeSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - /** - * @brief Retrieve the previous beat that contains a FakeSegment. - * @param iRow the present row. - * @return the previous beat with a FakeSegment, or fBeat if there is none prior. - */ - float GetPreviousFakeSegmentBeatAtRow( int iRow ) const; - /** - * @brief Retrieve the previous beat that contains a FakeSegment. - * @param fBeat the present beat. - * @return the previous beat with a FakeSegment, or fBeat if there is none prior. - */ - float GetPreviousFakeSegmentBeatAtBeat( float fBeat ) const - { - return this->GetPreviousFakeSegmentBeatAtRow( BeatToNoteRow(fBeat) ); - } - - /** * @brief Determine if this notes on this row can be judged. * @param row the row to focus on. diff --git a/src/TimingSegments.cpp b/src/TimingSegments.cpp index a26f94df23..deec665226 100644 --- a/src/TimingSegments.cpp +++ b/src/TimingSegments.cpp @@ -1,5 +1,20 @@ #include "global.h" #include "TimingSegments.h" +#include "EnumHelper.h" + +static const char *TimingSegmentTypeNames[] = { + "BPM", + "Stop/Delay", // TODO: separate when stops and delays are separate. + "Time Sig", + "Warp", + "Label", + "Tickcount", + "Combo", + "Speed", + "Scroll", + "Fake" +}; +XToString( TimingSegmentType ); #define LTCOMPARE(x) if(this->x < other.x) return true; if(this->x > other.x) return false; diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 39cbeffc34..36bfbad508 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -18,9 +18,11 @@ enum TimingSegmentType SEGMENT_SPEED, SEGMENT_SCROLL, SEGMENT_FAKE, - NUM_TimingSegmentTypes + NUM_TimingSegmentTypes, }; +const RString& TimingSegmentTypeToString( TimingSegmentType tst ); + /** * @brief The base timing segment for all of the changing glory. */ From 4e7c3282ec2c9017cae8043c9703517178132ca5 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 00:14:13 -0400 Subject: [PATCH 31/94] [timing] Caveat #2 fixed. Caveat #1 won't be until we make Delays their own segment...and somehow don't screw up the timing. --- src/ScreenEdit.cpp | 4 ++-- src/TimingData.cpp | 8 ++++---- src/TimingData.h | 4 ++-- src/TimingSegments.h | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 3248853703..19cce2f160 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -1560,13 +1560,13 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) case EDIT_BUTTON_CYCLE_SEGMENT_LEFT: { int tmp = enum_add2( this->currentCycleSegment, -1 ); - wrap( *ConvertValue(&tmp), NUM_TimingSegmentTypes ); + wrap( *ConvertValue(&tmp), NUM_TimingSegmentType ); break; } case EDIT_BUTTON_CYCLE_SEGMENT_RIGHT: { int tmp = enum_add2( this->currentCycleSegment, +1 ); - wrap( *ConvertValue(&tmp), NUM_TimingSegmentTypes ); + wrap( *ConvertValue(&tmp), NUM_TimingSegmentType ); break; } case EDIT_BUTTON_SCROLL_SPEED_UP: case EDIT_BUTTON_SCROLL_SPEED_DOWN: diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 72a8e701f6..6127c3221c 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -16,7 +16,7 @@ TimingData::TimingData(float fOffset) : TimingData::~TimingData() { - for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) + for (unsigned i = 0; i < NUM_TimingSegmentType; i++) { this->allTimingSegments[i].clear(); } @@ -1001,7 +1001,7 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool int newLength = lrintf( fScale * length ); // TODO: Confirm this works as intended. - for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) + for (unsigned i = 0; i < NUM_TimingSegmentType; i++) { vector &segs = this->allTimingSegments[i]; for (unsigned j = 0; j < segs.size(); j++) @@ -1037,7 +1037,7 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool void TimingData::InsertRows( int iStartRow, int iRowsToAdd ) { - for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) + for (unsigned i = 0; i < NUM_TimingSegmentType; i++) { vector &segs = this->allTimingSegments[i]; for (unsigned j = 0; j < segs.size(); j++) @@ -1067,7 +1067,7 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete ) /* We're moving rows up. Delete any BPM changes and stops in the region * being deleted. */ - for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++) + for (unsigned i = 0; i < NUM_TimingSegmentType; i++) { vector &segs = this->allTimingSegments[i]; for (unsigned j = 0; j < segs.size(); j++) diff --git a/src/TimingData.h b/src/TimingData.h index 76030fe08e..5249559dcf 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -781,7 +781,7 @@ public: */ bool operator==( const TimingData &other ) { - for (int i = 0; i < NUM_TimingSegmentTypes; i++) + for (int i = 0; i < NUM_TimingSegmentType; i++) { COMPARE(allTimingSegments[i].size()); for (unsigned j=0; j < allTimingSegments[i].size(); j++) @@ -819,7 +819,7 @@ public: // All of the following vectors must be sorted before gameplay. - vector allTimingSegments[NUM_TimingSegmentTypes]; + vector allTimingSegments[NUM_TimingSegmentType]; /** * @brief The initial offset of a song. diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 36bfbad508..37926abf61 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -18,7 +18,7 @@ enum TimingSegmentType SEGMENT_SPEED, SEGMENT_SCROLL, SEGMENT_FAKE, - NUM_TimingSegmentTypes, + NUM_TimingSegmentType, }; const RString& TimingSegmentTypeToString( TimingSegmentType tst ); From 4e58239255eba29e0963a95d7be9089438246920 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 00:54:11 -0400 Subject: [PATCH 32/94] [timing] TimingData.* should be good. Now to try to adjust the JSON files. --- src/TimingData.cpp | 188 +++++++++++++++++++++++++-------------------- 1 file changed, 103 insertions(+), 85 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 6127c3221c..fe54069489 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -780,10 +780,10 @@ enum void TimingData::GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float &fBeatOut, float &fBPSOut, bool &bFreezeOut, bool &bDelayOut, int &iWarpBeginOut, float &fWarpDestinationOut ) const { - - vector::const_iterator itBPMS = m_BPMSegments.begin(); - vector::const_iterator itWS = m_WarpSegments.begin(); - vector::const_iterator itSS = m_StopSegments.begin(); + const vector * segs = this->allTimingSegments; + vector::const_iterator itBPMS = segs[SEGMENT_BPM].begin(); + vector::const_iterator itWS = segs[SEGMENT_WARP].begin(); + vector::const_iterator itSS = segs[SEGMENT_STOP_DELAY].begin(); bFreezeOut = false; bDelayOut = false; @@ -806,19 +806,22 @@ void TimingData::GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float iEventRow = BeatToNoteRow(fWarpDestination); iEventType = FOUND_WARP_DESTINATION; } - if( itBPMS != m_BPMSegments.end() && itBPMS->GetRow() < iEventRow ) + if (itBPMS != segs[SEGMENT_BPM].end() && + (*itBPMS)->GetRow() < iEventRow ) { - iEventRow = itBPMS->GetRow(); + iEventRow = (*itBPMS)->GetRow(); iEventType = FOUND_BPM_CHANGE; } - if( itSS != m_StopSegments.end() && itSS->GetRow() < iEventRow ) + if (itSS != segs[SEGMENT_STOP_DELAY].end() && + (*itSS)->GetRow() < iEventRow ) { - iEventRow = itSS->GetRow(); + iEventRow = (*itSS)->GetRow(); iEventType = FOUND_STOP; } - if( itWS != m_WarpSegments.end() && itWS->GetRow() < iEventRow ) + if (itWS != segs[SEGMENT_WARP].end() && + (*itWS)->GetRow() < iEventRow ) { - iEventRow = itWS->GetRow(); + iEventRow = (*itWS)->GetRow(); iEventType = FOUND_WARP; } if( iEventType == NOT_FOUND ) @@ -838,19 +841,20 @@ void TimingData::GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float bIsWarping = false; break; case FOUND_BPM_CHANGE: - fBPS = itBPMS->GetBPS(); + fBPS = static_cast(*itBPMS)->GetBPS(); itBPMS ++; break; case FOUND_STOP: { - fTimeToNextEvent = itSS->GetPause(); + const StopSegment *ss = static_cast(*itSS); + fTimeToNextEvent = ss->GetPause(); fNextEventTime = fLastTime + fTimeToNextEvent; - const bool bIsDelay = itSS->GetDelay(); + const bool bIsDelay = ss->GetDelay(); if ( fElapsedTime < fNextEventTime ) { bFreezeOut = !bIsDelay; bDelayOut = bIsDelay; - fBeatOut = itSS->GetBeat(); + fBeatOut = ss->GetBeat(); fBPSOut = fBPS; return; } @@ -861,7 +865,8 @@ void TimingData::GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float case FOUND_WARP: { bIsWarping = true; - float fWarpSum = itWS->GetLength() + itWS->GetBeat(); + const WarpSegment *ws = static_cast(*itWS); + float fWarpSum = ws->GetLength() + ws->GetBeat(); if( fWarpSum > fWarpDestination ) { fWarpDestination = fWarpSum; @@ -887,10 +892,10 @@ float TimingData::GetElapsedTimeFromBeat( float fBeat ) const float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const { - - vector::const_iterator itBPMS = m_BPMSegments.begin(); - vector::const_iterator itWS = m_WarpSegments.begin(); - vector::const_iterator itSS = m_StopSegments.begin(); + const vector * segs = this->allTimingSegments; + vector::const_iterator itBPMS = segs[SEGMENT_BPM].begin(); + vector::const_iterator itWS = segs[SEGMENT_WARP].begin(); + vector::const_iterator itSS = segs[SEGMENT_STOP_DELAY].begin(); int iLastRow = 0; float fLastTime = -m_fBeat0OffsetInSeconds; @@ -908,14 +913,17 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const iEventRow = BeatToNoteRow(fWarpDestination); iEventType = FOUND_WARP_DESTINATION; } - if( itBPMS != m_BPMSegments.end() && itBPMS->GetRow() < iEventRow ) + if (itBPMS != segs[SEGMENT_BPM].end() && + (*itBPMS)->GetRow() < iEventRow ) { - iEventRow = itBPMS->GetRow(); + iEventRow = (*itBPMS)->GetRow(); iEventType = FOUND_BPM_CHANGE; } - if( itSS != m_StopSegments.end() && itSS->GetDelay() && itSS->GetRow() < iEventRow ) // delays (come before marker) + if (itSS != segs[SEGMENT_STOP_DELAY].end() && + static_cast(*itSS)->GetDelay() && + (*itSS)->GetRow() < iEventRow ) // delays (come before marker) { - iEventRow = itSS->GetRow(); + iEventRow = (*itSS)->GetRow(); iEventType = FOUND_STOP; } if( BeatToNoteRow(fBeat) < iEventRow ) @@ -923,14 +931,17 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const iEventRow = BeatToNoteRow(fBeat); iEventType = FOUND_MARKER; } - if( itSS != m_StopSegments.end() && !itSS->GetDelay() && itSS->GetRow() < iEventRow ) // stops (come after marker) + if (itSS != segs[SEGMENT_STOP_DELAY].end() && + !static_cast(*itSS)->GetDelay() && + (*itSS)->GetRow() < iEventRow ) // stops (come after marker) { - iEventRow = itSS->GetRow(); + iEventRow = (*itSS)->GetRow(); iEventType = FOUND_STOP; } - if( itWS != m_WarpSegments.end() && itWS->GetRow() < iEventRow ) + if (itWS != segs[SEGMENT_WARP].end() && + (*itWS)->GetRow() < iEventRow ) { - iEventRow = itWS->GetRow(); + iEventRow = (*itWS)->GetRow(); iEventType = FOUND_WARP; } float fTimeToNextEvent = bIsWarping ? 0 : NoteRowToBeat( iEventRow - iLastRow ) / fBPS; @@ -942,11 +953,11 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const bIsWarping = false; break; case FOUND_BPM_CHANGE: - fBPS = itBPMS->GetBPS(); + fBPS = static_cast(*itBPMS)->GetBPS(); itBPMS ++; break; case FOUND_STOP: - fTimeToNextEvent = itSS->GetPause(); + fTimeToNextEvent = static_cast(*itSS)->GetPause(); fNextEventTime = fLastTime + fTimeToNextEvent; fLastTime = fNextEventTime; itSS ++; @@ -956,7 +967,8 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const case FOUND_WARP: { bIsWarping = true; - float fWarpSum = itWS->GetLength() + itWS->GetBeat(); + WarpSegment *ws = static_cast(*itWS); + float fWarpSum = ws->GetLength() + ws->GetBeat(); if( fWarpSum > fWarpDestination ) { fWarpDestination = fWarpSum; @@ -974,18 +986,21 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const float TimingData::GetDisplayedBeat( float fBeat ) const { - vector::const_iterator it = m_ScrollSegments.begin(), end = m_ScrollSegments.end(); + const vector &scrolls = this->allTimingSegments[SEGMENT_SCROLL]; + vector::const_iterator it = scrolls.begin(), end = scrolls.end(); float fOutBeat = 0; for( ; it != end; it++ ) { - if( it+1 == end || fBeat <= (it+1)->GetBeat() ) + if( it+1 == end || fBeat <= (*(it+1))->GetBeat() ) { - fOutBeat += ( fBeat - (it)->GetBeat() ) * (it)->GetRatio(); + fOutBeat += ( fBeat - (*it)->GetBeat() ) * + static_cast(*it)->GetRatio(); break; } else { - fOutBeat += ( (it+1)->GetBeat() - (it)->GetBeat() ) * (it)->GetRatio(); + fOutBeat += ( (*(it+1))->GetBeat() - (*it)->GetBeat() ) * + static_cast(*it)->GetRatio(); } } return fOutBeat; @@ -1015,17 +1030,19 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool { int iNewEndIndex = iStartIndex + newLength; float fEndBPMBeforeScaling = GetBPMAtRow(iNewEndIndex); + vector &bpms = this->allTimingSegments[SEGMENT_BPM]; // adjust BPM changes "between" iStartIndex and iNewEndIndex - for ( unsigned i = 0; i < m_BPMSegments.size(); i++ ) + for ( unsigned i = 0; i < bpms.size(); i++ ) { - const int iSegStart = m_BPMSegments[i].GetRow(); + BPMSegment *bpm = static_cast(bpms[i]); + const int iSegStart = bpm->GetRow(); if( iSegStart <= iStartIndex ) continue; else if( iSegStart >= iNewEndIndex ) continue; else - m_BPMSegments[i].SetBPM( m_BPMSegments[i].GetBPM() * fScale ); + bpm->SetBPM( bpm->GetBPM() * fScale ); } // set BPM at iStartIndex and iNewEndIndex. @@ -1100,45 +1117,51 @@ float TimingData::GetDisplayedSpeedPercent( float fSongBeat, float fMusicSeconds * leaving the editor. Still, cover our butts in case this instance * isn't existing. */ if (!this) return 1.0f; - if( m_SpeedSegments.size() == 0 ) + + const vector &speeds = this->allTimingSegments[SEGMENT_SPEED]; + if( speeds.size() == 0 ) return 1.0f; const int index = GetSegmentIndexAtBeat( SEGMENT_SPEED, fSongBeat ); - const SpeedSegment &seg = m_SpeedSegments[index]; - float fStartBeat = seg.GetBeat(); + const SpeedSegment *seg = static_cast(speeds[index]); + float fStartBeat = seg->GetBeat(); float fStartTime = GetElapsedTimeFromBeat( fStartBeat ) - GetDelayAtBeat( fStartBeat ); float fEndTime; float fCurTime = fMusicSeconds; - if( seg.GetUnit() == 1 ) // seconds + if( seg->GetUnit() == 1 ) // seconds { - fEndTime = fStartTime + seg.GetLength(); + fEndTime = fStartTime + seg->GetLength(); } else { - fEndTime = GetElapsedTimeFromBeat( fStartBeat + seg.GetLength() ) - - GetDelayAtBeat( fStartBeat + seg.GetLength() ); + fEndTime = GetElapsedTimeFromBeat( fStartBeat + seg->GetLength() ) + - GetDelayAtBeat( fStartBeat + seg->GetLength() ); } - if( ( index == 0 && m_SpeedSegments[0].GetLength() > 0.0 ) && fCurTime < fStartTime ) + SpeedSegment *first = static_cast(speeds[0]); + + if( ( index == 0 && first->GetLength() > 0.0 ) && fCurTime < fStartTime ) { return 1.0f; } - else if( fEndTime >= fCurTime && ( index > 0 || m_SpeedSegments[0].GetLength() > 0.0 ) ) + else if( fEndTime >= fCurTime && ( index > 0 || first->GetLength() > 0.0 ) ) { - const float fPriorSpeed = ( index == 0 ? 1 : m_SpeedSegments[index - 1].GetRatio() ); + const float fPriorSpeed = (index == 0 ? + 1 : + static_cast(speeds[index - 1])->GetRatio() ); float fTimeUsed = fCurTime - fStartTime; float fDuration = fEndTime - fStartTime; float fRatioUsed = fDuration == 0.0 ? 1 : fTimeUsed / fDuration; - float fDistance = fPriorSpeed - seg.GetRatio(); + float fDistance = fPriorSpeed - seg->GetRatio(); float fRatioNeed = fRatioUsed * -fDistance; return (fPriorSpeed + fRatioNeed); } else { - return seg.GetRatio(); + return seg->GetRatio(); } } @@ -1146,59 +1169,54 @@ float TimingData::GetDisplayedSpeedPercent( float fSongBeat, float fMusicSeconds void TimingData::TidyUpData() { // If there are no BPM segments, provide a default. - if( m_BPMSegments.empty() ) + vector *segs = this->allTimingSegments; + if( segs[SEGMENT_BPM].empty() ) { LOG->UserLog( "Song file", m_sFile, "has no BPM segments, default provided." ); - AddBPMSegment( BPMSegment(0, 60) ); + AddSegment( SEGMENT_BPM, new BPMSegment(0, 60) ); } // Make sure the first BPM segment starts at beat 0. - if( m_BPMSegments[0].GetRow() != 0 ) - m_BPMSegments[0].SetRow(0); + if( segs[SEGMENT_BPM][0]->GetRow() != 0 ) + segs[SEGMENT_BPM][0]->SetRow(0); // If no time signature specified, assume 4/4 time for the whole song. - if( m_vTimeSignatureSegments.empty() ) + if( segs[SEGMENT_TIME_SIG].empty() ) { - TimeSignatureSegment seg(0, 4, 4); - m_vTimeSignatureSegments.push_back( seg ); + segs[SEGMENT_TIME_SIG].push_back( new TimeSignatureSegment(0, 4, 4) ); } - // Likewise, if no tickcount signature is specified, assume 2 ticks - //per beat for the entire song. The default of 2 is chosen more - //for compatibility with the Pump Pro series than anything else. - if( m_TickcountSegments.empty() ) + // Likewise, if no tickcount signature is specified, assume 4 ticks + //per beat for the entire song. The default of 4 is chosen more + //for compatibility with the main Pump series than anything else. + if( segs[SEGMENT_TICKCOUNT].empty() ) { - TickcountSegment seg(0, 2); - m_TickcountSegments.push_back( seg ); + segs[SEGMENT_TICKCOUNT].push_back( new TickcountSegment(0, 4) ); } // Have a default combo segment of one just in case. - if( m_ComboSegments.empty() ) + if( segs[SEGMENT_COMBO].empty() ) { - ComboSegment seg(0, 1, 1); - m_ComboSegments.push_back( seg ); + segs[SEGMENT_COMBO].push_back( new ComboSegment(0, 1, 1) ); } // Have a default label segment just in case. - if( m_LabelSegments.empty() ) + if( segs[SEGMENT_LABEL].empty() ) { - LabelSegment seg(0, "Song Start"); - m_LabelSegments.push_back( seg ); + segs[SEGMENT_LABEL].push_back( new LabelSegment(0, "Song Start") ); } // Always be sure there is a starting speed. - if( m_SpeedSegments.empty() ) + if( segs[SEGMENT_SPEED].empty() ) { - SpeedSegment seg(0, 1, 0); - m_SpeedSegments.push_back( seg ); + segs[SEGMENT_SPEED].push_back( new SpeedSegment(0, 1, 0) ); } // Always be sure there is a starting scrolling factor. - if( m_ScrollSegments.empty() ) + if( segs[SEGMENT_SCROLL].empty() ) { - ScrollSegment seg(0, 1); - m_ScrollSegments.push_back( seg ); + segs[SEGMENT_SCROLL].push_back( new ScrollSegment(0, 1) ); } } @@ -1243,19 +1261,18 @@ bool TimingData::HasScrollChanges() const void TimingData::NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, int &iBeatIndexOut, int &iRowsRemainder ) const { iMeasureIndexOut = 0; - - FOREACH_CONST( TimeSignatureSegment, m_vTimeSignatureSegments, iter ) + const vector &tSigs = this->allTimingSegments[SEGMENT_TIME_SIG]; + for (unsigned i = 0; i < tSigs.size(); i++) { - vector::const_iterator next = iter; - next++; - int iSegmentEndRow = (next == m_vTimeSignatureSegments.end()) ? INT_MAX : next->GetRow(); + TimeSignatureSegment *curSig = static_cast(tSigs[i]); + int iSegmentEndRow = (i + 1 == tSigs.size()) ? INT_MAX : curSig->GetRow(); + + int iRowsPerMeasureThisSegment = curSig->GetNoteRowsPerMeasure(); - int iRowsPerMeasureThisSegment = iter->GetNoteRowsPerMeasure(); - - if( iNoteRow >= iter->GetRow() ) + if( iNoteRow >= curSig->GetRow() ) { // iNoteRow lands in this segment - int iNumRowsThisSegment = iNoteRow - iter->GetRow(); + int iNumRowsThisSegment = iNoteRow - curSig->GetRow(); int iNumMeasuresThisSegment = (iNumRowsThisSegment) / iRowsPerMeasureThisSegment; // don't round up iMeasureIndexOut += iNumMeasuresThisSegment; iBeatIndexOut = iNumRowsThisSegment / iRowsPerMeasureThisSegment; @@ -1265,8 +1282,9 @@ void TimingData::NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, i else { // iNoteRow lands after this segment - int iNumRowsThisSegment = iSegmentEndRow - iter->GetRow(); - int iNumMeasuresThisSegment = (iNumRowsThisSegment + iRowsPerMeasureThisSegment - 1) / iRowsPerMeasureThisSegment; // round up + int iNumRowsThisSegment = iSegmentEndRow - curSig->GetRow(); + int iNumMeasuresThisSegment = (iNumRowsThisSegment + iRowsPerMeasureThisSegment - 1) + / iRowsPerMeasureThisSegment; // round up iMeasureIndexOut += iNumMeasuresThisSegment; } } From ff2fbea45d303ce3fe4f140009c09d539ebd8977 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 01:10:46 -0400 Subject: [PATCH 33/94] [timing] yeah, need some help on this one. --- src/NotesLoaderJson.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index b80ea41753..4ebf450c59 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -10,30 +10,28 @@ #include "Steps.h" #include "GameManager.h" -void Deserialize(BPMSegment &seg, const Json::Value &root); - void NotesLoaderJson::GetApplicableFiles( const RString &sPath, vector &out ) { GetDirListing( sPath + RString("*.json"), out ); } -void Deserialize(BPMSegment &seg, const Json::Value &root) +static void Deserialize(TimingSegment *seg, const Json::Value &root) { - seg.SetBeat((float)(root["Beat"].asDouble())); - seg.SetBPM((float)(root["BPM"].asDouble())); -} - -static void Deserialize(StopSegment &seg, const Json::Value &root) -{ - seg.SetBeat((float)(root["Beat"].asDouble())); - seg.SetPause((float)(root["Seconds"].asDouble())); + seg->SetBeat((float)(root["Beat"].asDouble())); + if (seg->GetType() == SEGMENT_BPM) + { + static_cast(seg)->SetBPM((float)(root["BPM"].asDouble())); + } + else + { + static_cast(seg)->SetPause((float)(root["Seconds"].asDouble())); + } } static void Deserialize(TimingData &td, const Json::Value &root) { - vector &bpms = td.allTimingSegments[SEGMENT_BPM]; -// JsonUtil::DeserializeVectorObjects( &bpms, Deserialize, root["BpmSegments"] ); -// JsonUtil::DeserializeVectorObjects( *(td).allTimingSegments[SEGMENT_STOP_DELAY], Deserialize, root["StopSegments"] ); + JsonUtil::DeserializeVectorPointers( td.allTimingSegments[SEGMENT_BPM], Deserialize, root["BpmSegments"] ); + JsonUtil::DeserializeVectorPointers( td.allTimingSegments[SEGMENT_STOP_DELAY], Deserialize, root["StopSegments"] ); } static void Deserialize(LyricSegment &o, const Json::Value &root) From d9f301a85a36ffb2052394543c1d1e75ecc34f00 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 01:15:51 -0400 Subject: [PATCH 34/94] [timing] same with this one. --- src/NotesWriterJson.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/NotesWriterJson.cpp b/src/NotesWriterJson.cpp index 56b34efad7..f4ef393da6 100644 --- a/src/NotesWriterJson.cpp +++ b/src/NotesWriterJson.cpp @@ -9,22 +9,23 @@ #include "NoteData.h" #include "GameManager.h" -static void Serialize(const BPMSegment &seg, Json::Value &root) +static void Serialize(const TimingSegment *seg, Json::Value &root) { - root["Beat"] = seg.GetBeat(); - root["BPM"] = seg.GetBPM(); -} - -static void Serialize(const StopSegment &seg, Json::Value &root) -{ - root["Beat"] = seg.GetBeat(); - root["Seconds"] = seg.GetPause(); + root["Beat"] = seg->GetBeat(); + if (seg->GetType() == SEGMENT_BPM) + { + root["BPM"] = static_cast(const_cast(seg))->GetBPM(); + } + else + { + root["Seconds"] = static_cast(const_cast(seg))->GetPause(); + } } static void Serialize(const TimingData &td, Json::Value &root) { -// JsonUtil::SerializeVectorObjects( td.m_BPMSegments, Serialize, root["BpmSegments"] ); -// JsonUtil::SerializeVectorObjects( td.m_StopSegments, Serialize, root["StopSegments"] ); + JsonUtil::SerializeVectorPointers( td.allTimingSegments[SEGMENT_BPM], Serialize, root["BpmSegments"] ); + JsonUtil::SerializeVectorPointers( td.allTimingSegments[SEGMENT_STOP_DELAY], Serialize, root["StopSegments"] ); } static void Serialize(const LyricSegment &o, Json::Value &root) From bcec471213ae8d9f3554c131e71cb95f957c4619 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 18:39:41 -0400 Subject: [PATCH 35/94] [timing] Still struggling. Issues below. Loader: can't instantiate TimingSegment due to abstract nature. Writer: thinks there is no definition with what is provided. Anyone want a crack at it? --- src/NotesLoaderJson.cpp | 10 +++++----- src/NotesWriterJson.cpp | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index 4ebf450c59..3727b7a53c 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -15,16 +15,16 @@ void NotesLoaderJson::GetApplicableFiles( const RString &sPath, vector GetDirListing( sPath + RString("*.json"), out ); } -static void Deserialize(TimingSegment *seg, const Json::Value &root) +static void Deserialize(TimingSegment &seg, const Json::Value &root) { - seg->SetBeat((float)(root["Beat"].asDouble())); - if (seg->GetType() == SEGMENT_BPM) + (&seg)->SetBeat((float)(root["Beat"].asDouble())); + if ((&seg)->GetType() == SEGMENT_BPM) { - static_cast(seg)->SetBPM((float)(root["BPM"].asDouble())); + static_cast(&seg)->SetBPM((float)(root["BPM"].asDouble())); } else { - static_cast(seg)->SetPause((float)(root["Seconds"].asDouble())); + static_cast(&seg)->SetPause((float)(root["Seconds"].asDouble())); } } diff --git a/src/NotesWriterJson.cpp b/src/NotesWriterJson.cpp index f4ef393da6..26cc3a28b3 100644 --- a/src/NotesWriterJson.cpp +++ b/src/NotesWriterJson.cpp @@ -9,16 +9,16 @@ #include "NoteData.h" #include "GameManager.h" -static void Serialize(const TimingSegment *seg, Json::Value &root) +static void Serialize(const TimingSegment &seg, Json::Value &root) { - root["Beat"] = seg->GetBeat(); - if (seg->GetType() == SEGMENT_BPM) + root["Beat"] = (&seg)->GetBeat(); + if ((&seg)->GetType() == SEGMENT_BPM) { - root["BPM"] = static_cast(const_cast(seg))->GetBPM(); + root["BPM"] = static_cast(const_cast(&seg))->GetBPM(); } else { - root["Seconds"] = static_cast(const_cast(seg))->GetPause(); + root["Seconds"] = static_cast(const_cast(&seg))->GetPause(); } } From c454bb9c1420f120164fff98ab99dd253b39d61d Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 18:46:11 -0400 Subject: [PATCH 36/94] [timing] Slightly (?) better (??) casting. --- src/NotesLoaderJson.cpp | 8 ++++---- src/NotesWriterJson.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index 3727b7a53c..d113e2105c 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -17,14 +17,14 @@ void NotesLoaderJson::GetApplicableFiles( const RString &sPath, vector static void Deserialize(TimingSegment &seg, const Json::Value &root) { - (&seg)->SetBeat((float)(root["Beat"].asDouble())); - if ((&seg)->GetType() == SEGMENT_BPM) + seg.SetBeat((float)(root["Beat"].asDouble())); + if (seg.GetType() == SEGMENT_BPM) { - static_cast(&seg)->SetBPM((float)(root["BPM"].asDouble())); + static_cast(seg).SetBPM((float)(root["BPM"].asDouble())); } else { - static_cast(&seg)->SetPause((float)(root["Seconds"].asDouble())); + static_cast(seg).SetPause((float)(root["Seconds"].asDouble())); } } diff --git a/src/NotesWriterJson.cpp b/src/NotesWriterJson.cpp index 26cc3a28b3..984a895295 100644 --- a/src/NotesWriterJson.cpp +++ b/src/NotesWriterJson.cpp @@ -11,14 +11,14 @@ static void Serialize(const TimingSegment &seg, Json::Value &root) { - root["Beat"] = (&seg)->GetBeat(); - if ((&seg)->GetType() == SEGMENT_BPM) + root["Beat"] = seg.GetBeat(); + if (seg.GetType() == SEGMENT_BPM) { - root["BPM"] = static_cast(const_cast(&seg))->GetBPM(); + root["BPM"] = static_cast(const_cast(seg)).GetBPM(); } else { - root["Seconds"] = static_cast(const_cast(&seg))->GetPause(); + root["Seconds"] = static_cast(const_cast(seg)).GetPause(); } } From a785bcf905dd746ab4cd93125a135d3908a79632 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 19:04:54 -0400 Subject: [PATCH 37/94] [timing] Some progress...I think. --- src/JsonUtil.h | 13 +++++++++++++ src/NotesLoaderJson.cpp | 26 ++++++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/JsonUtil.h b/src/JsonUtil.h index 87942336e0..0d6c7821aa 100644 --- a/src/JsonUtil.h +++ b/src/JsonUtil.h @@ -149,6 +149,19 @@ namespace JsonUtil fn(*v[i], root[i]); } } + + template + static void DeserializeVectorPointers(vector &v, void fn(T *, const Json::Value &), const Json::Value &root) + { + for(unsigned i=0; i static void DeserializeArrayValues(vector &v, const Json::Value &root) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index d113e2105c..6865120fbc 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -15,16 +15,26 @@ void NotesLoaderJson::GetApplicableFiles( const RString &sPath, vector GetDirListing( sPath + RString("*.json"), out ); } -static void Deserialize(TimingSegment &seg, const Json::Value &root) +static void Deserialize(TimingSegment &seg_, const Json::Value &root) { - seg.SetBeat((float)(root["Beat"].asDouble())); - if (seg.GetType() == SEGMENT_BPM) + TimingSegment *seg = &seg_; + + float fBeat = root["Beat"].asDouble(); + seg->SetBeat(fBeat); + switch (seg->GetType()) { - static_cast(seg).SetBPM((float)(root["BPM"].asDouble())); - } - else - { - static_cast(seg).SetPause((float)(root["Seconds"].asDouble())); + case SEGMENT_BPM: + { + float fBPM = root["BPM"].asDouble(); + static_cast(seg)->SetBPM(fBPM); + break; + } + case SEGMENT_STOP_DELAY: + { + float fStop = root["Seconds"].asDouble(); + static_cast(seg)->SetPause(fStop); + break; + } } } From 3ffafc4d2b81962686aff9da73d40772f379e671 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 15 Jul 2011 19:12:19 -0400 Subject: [PATCH 38/94] [timing] Loader compiles. Writer: not yet. --- src/JsonUtil.h | 9 +++++++++ src/TimingSegments.h | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/JsonUtil.h b/src/JsonUtil.h index 0d6c7821aa..f8e47c5104 100644 --- a/src/JsonUtil.h +++ b/src/JsonUtil.h @@ -31,6 +31,15 @@ namespace JsonUtil for(unsigned i=0; i + static void SerializeVectorPointers(const vector &v, void fn(const T *, Json::Value &), Json::Value &root) + { + root = Json::Value(Json::arrayValue); + root.resize(v.size()); + for(unsigned i=0; i static void SerializeArray(const V &v, void fn(const T &, Json::Value &), Json::Value &root) diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 37926abf61..ee594c77ac 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -19,6 +19,7 @@ enum TimingSegmentType SEGMENT_SCROLL, SEGMENT_FAKE, NUM_TimingSegmentType, + TimingSegmentType_Invalid, }; const RString& TimingSegmentTypeToString( TimingSegmentType tst ); @@ -76,7 +77,10 @@ struct TimingSegment * @return the starting beat. */ float GetBeat() const; - virtual TimingSegmentType GetType() const = 0; + virtual TimingSegmentType GetType() const + { + return TimingSegmentType_Invalid; + } /** * @brief Compares two DrivedSegments to see if one is less than the other. From c527b80356945c2446770aa89770de41e46e1221 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sat, 16 Jul 2011 14:51:53 -0500 Subject: [PATCH 39/94] I hate missing metrics --- Themes/_fallback/metrics.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index da55d7ef33..7255b9a842 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -200,6 +200,8 @@ DrunkOffsetFrequency=10 DrunkArrowMagnitude=0.5 BeatOffsetHeight=15 BeatPIHeight=2 +MiniPercentBase=0.5 +MiniPercentGate=1 TinyPercentBase=0.5 TinyPercentGate=1 DizzyHoldHeads=false From e45594f3abaa80fc676591efc0ddd86bf126db05 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sat, 16 Jul 2011 14:53:05 -0500 Subject: [PATCH 40/94] attempt to remove shortcuts in windows uninstaller --- sm-ssc.nsi | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/sm-ssc.nsi b/sm-ssc.nsi index 4655f8e1ba..293c2ab13b 100644 --- a/sm-ssc.nsi +++ b/sm-ssc.nsi @@ -846,8 +846,37 @@ Section "Uninstall" RMDir "$INSTDIR" ; will delete only if empty SetShellVarContext current - Delete "$DESKTOP\Play StepMania CVS.lnk" - Delete "$DESKTOP\${PRODUCT_DISPLAY}.lnk" + + ; kill shortcuts + !ifdef MAKE_DESKTOP_SHORTCUT + Delete "$DESKTOP\$(TEXT_IO_RUN).lnk" + !endif + !ifdef MAKE_DESKTOP_SHORTCUT + Delete "$DESKTOP\$(TEXT_IO_RUN).lnk" + !endif + + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_RUN).lnk" + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_RUN_WITHOUT_SSE2).lnk" + + !ifdef MAKE_OPEN_PROGRAM_FOLDER_SHORTCUT + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_OPEN_PROGRAM_FOLDER).lnk" + !endif + !ifdef MAKE_OPEN_SETTINGS_FOLDER_SHORTCUT + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_OPEN_SETTINGS_FOLDER).lnk" + !endif + + ;Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_VIEW_STATISTICS).lnk" + ;Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_TOOLS).lnk" + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_MANUAL).lnk" + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_UNINSTALL).lnk" + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_WEB_SITE).lnk" + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_TEXTURE_FONT_GENERATOR).lnk" + !ifdef MAKE_UPDATES_SHORTCUT + Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_CHECK_FOR_UPDATES).lnk" + !endif + Delete "$INSTDIR\${PRODUCT_ID}.lnk" + Delete "$INSTDIR\${PRODUCT_ID} (non-SSE2).lnk" + ; I'm being paranoid here: Delete "$SMPROGRAMS\${PRODUCT_ID}\*.*" RMDir "$SMPROGRAMS\${PRODUCT_ID}" From 9fe597e8beb05aa16f7aef7e7bd628dd0ef95dac Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sat, 16 Jul 2011 15:14:08 -0500 Subject: [PATCH 41/94] new installer graphics and icon --- Installer/custom-sm5.bmp | Bin 23428 -> 23428 bytes Installer/header-sm5.bmp | Bin 9744 -> 9744 bytes Installer/install.ico | Bin 766 -> 477478 bytes Installer/welcome-sm5.bmp | Bin 52576 -> 52576 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Installer/custom-sm5.bmp b/Installer/custom-sm5.bmp index 4d4a4490d82d51dd0571db1a725a32932616d461..17c427c6b4b5b3bf3d0c59fb691f469a1906cebc 100644 GIT binary patch literal 23428 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 B`}_a^ literal 23428 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 QkE45&x^=tgkiQ204}aHu_5c6? literal 766 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 nu-d1+KT(-l_ Date: Sat, 16 Jul 2011 19:27:33 -0400 Subject: [PATCH 42/94] Trying this again for hold graphic judgments. --- Themes/_fallback/Scripts/03 Gameplay.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Themes/_fallback/Scripts/03 Gameplay.lua b/Themes/_fallback/Scripts/03 Gameplay.lua index 3fd0d83e4b..629453ff5a 100644 --- a/Themes/_fallback/Scripts/03 Gameplay.lua +++ b/Themes/_fallback/Scripts/03 Gameplay.lua @@ -187,7 +187,11 @@ function HoldTiming() end function ShowHoldJudgments() - return not GAMESTATE:GetCurrentGame():GetName() == "pump" + if GAMESTATE:GetCurrentGame():GetName() == "pump" then + return false + else + return true + end end function HoldHeadStep() @@ -271,4 +275,4 @@ end function ComboUnderField() return GetUserPrefB("UserPrefComboUnderField") -end \ No newline at end of file +end From e3aed6100316e353fc824c70b840aa61be64ff89 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 16 Jul 2011 19:28:14 -0400 Subject: [PATCH 43/94] ...yeah, we need a better way for Mac apps. --- Xcode/stepmania.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Xcode/stepmania.xcodeproj/project.pbxproj b/Xcode/stepmania.xcodeproj/project.pbxproj index 0f026901f7..a2fac07ad9 100644 --- a/Xcode/stepmania.xcodeproj/project.pbxproj +++ b/Xcode/stepmania.xcodeproj/project.pbxproj @@ -2019,7 +2019,7 @@ AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; - AA29CE580558741A00961A51 /* StepMania.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StepMania.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AA29CE580558741A00961A51 /* StepMania-debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "StepMania-debug.app"; sourceTree = BUILT_PRODUCTS_DIR; }; AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; @@ -3232,7 +3232,7 @@ 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - AA29CE580558741A00961A51 /* StepMania.app */, + AA29CE580558741A00961A51 /* StepMania-debug.app */, AA40D52B09A08D660068C0D5 /* sm-ssc.app */, AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */, AA7A2B940AE09B520054C5BA /* lua */, @@ -5736,7 +5736,7 @@ name = stepmania; productInstallPath = "$(HOME)/Applications"; productName = "SDL App"; - productReference = AA29CE580558741A00961A51 /* StepMania.app */; + productReference = AA29CE580558741A00961A51 /* StepMania-debug.app */; productType = "com.apple.product-type.application"; }; AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { From 18971175ae01b17363a31209a2c967eb77e68736 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Sat, 16 Jul 2011 19:12:33 -0600 Subject: [PATCH 44/94] nobody has done this yet so... --- src/{sm-ssc-net2003.sln => sm5-net2003.sln} | 0 src/{sm-ssc-net2005.sln => sm5-net2005.sln} | 0 src/{sm-ssc-net2008.sln => sm5-net2008.sln} | 0 src/{sm-ssc-net2010.sln => sm5-net2010.sln} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename src/{sm-ssc-net2003.sln => sm5-net2003.sln} (100%) rename src/{sm-ssc-net2005.sln => sm5-net2005.sln} (100%) rename src/{sm-ssc-net2008.sln => sm5-net2008.sln} (100%) rename src/{sm-ssc-net2010.sln => sm5-net2010.sln} (100%) diff --git a/src/sm-ssc-net2003.sln b/src/sm5-net2003.sln similarity index 100% rename from src/sm-ssc-net2003.sln rename to src/sm5-net2003.sln diff --git a/src/sm-ssc-net2005.sln b/src/sm5-net2005.sln similarity index 100% rename from src/sm-ssc-net2005.sln rename to src/sm5-net2005.sln diff --git a/src/sm-ssc-net2008.sln b/src/sm5-net2008.sln similarity index 100% rename from src/sm-ssc-net2008.sln rename to src/sm5-net2008.sln diff --git a/src/sm-ssc-net2010.sln b/src/sm5-net2010.sln similarity index 100% rename from src/sm-ssc-net2010.sln rename to src/sm5-net2010.sln From 9fa492210df273402f0a521542f1dc6015217abe Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sat, 16 Jul 2011 20:22:08 -0500 Subject: [PATCH 45/94] sm-ssc -> StepMania per solution filename rename --- src/StepMania-net2008.vcproj | 2 +- src/StepMania-net2010.vcxproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/StepMania-net2008.vcproj b/src/StepMania-net2008.vcproj index de9c6271f7..fa58c85a68 100644 --- a/src/StepMania-net2008.vcproj +++ b/src/StepMania-net2008.vcproj @@ -2,7 +2,7 @@ - sm-ssc + StepMania {AF209DBD-24BD-4356-8DFE-41751B221195} StepMania MFCProj From 35b5dffcf8c71229518c816d8bb50fd1c44d39d5 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 16 Jul 2011 23:17:24 -0400 Subject: [PATCH 46/94] ...what country are we in for this spelling? --- src/StepMania.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StepMania.cpp b/src/StepMania.cpp index a3d4af5c6f..955fa1466e 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -1106,7 +1106,7 @@ int main(int argc, char* argv[]) STATSMAN = new StatsManager; // Initialize which courses are ranking courses here. - pLoadingWindow->SetText("Updating cource rankings..."); + pLoadingWindow->SetText("Updating course rankings..."); SONGMAN->UpdateRankingCourses(); SAFE_DELETE( pLoadingWindow ); // destroy this before init'ing Display From ba06e3e447341ae8f4bb0d3fa52617af7258c8f3 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sat, 16 Jul 2011 22:48:17 -0500 Subject: [PATCH 47/94] installer update of no consequence --- sm-ssc.nsi | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sm-ssc.nsi b/sm-ssc.nsi index 293c2ab13b..f0644064db 100644 --- a/sm-ssc.nsi +++ b/sm-ssc.nsi @@ -52,8 +52,16 @@ SetDateSave on ; (can be on to have files restored to their orginal date) ; I think it may need actual admin privs for writing to the registry... -aj - ; RequestExecutionLevel user - ; this folder may not be the best idea for Windows Vista/7. -aj + ;RequestExecutionLevel user + + ;GetVersion::WindowsServicePackMajor + ;Pop $R0 + ;${If} $R0 >= 6 + ; vista & 7 + ;${Else} + ; xp and below + ;${EndIf} + InstallDir "$PROGRAMFILES\${PRODUCT_ID}" InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\${PRODUCT_ID}" "" From 5413f3b86cbbdaa02a65b699b3348c26080b50c6 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 01:00:12 -0400 Subject: [PATCH 48/94] Possible stopgap. Debating if this file should be reverted to the template era for a bit of time. --- src/TimingSegments.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 39cbeffc34..b74c115805 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -350,7 +350,7 @@ struct ComboSegment : public TimingSegment * It is best to override the values as soon as possible. */ ComboSegment() : - TimingSegment(-1), combo(1) { } + TimingSegment(-1), combo(1), missCombo(1) { } ComboSegment(const ComboSegment &other) : TimingSegment(other.GetRow()), From e97408f5eae5f61ee88867f8cbd28dbce1c231a5 Mon Sep 17 00:00:00 2001 From: Thai Pangsakulyanont Date: Sun, 17 Jul 2011 12:19:14 +0700 Subject: [PATCH 49/94] [timing] it now builds, but it crashes upon starting (EXC_BAD_ACCESS) --- Xcode/stepmania.xcodeproj/project.pbxproj | 6 +++--- src/JsonUtil.h | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Xcode/stepmania.xcodeproj/project.pbxproj b/Xcode/stepmania.xcodeproj/project.pbxproj index 0f026901f7..a2fac07ad9 100644 --- a/Xcode/stepmania.xcodeproj/project.pbxproj +++ b/Xcode/stepmania.xcodeproj/project.pbxproj @@ -2019,7 +2019,7 @@ AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; - AA29CE580558741A00961A51 /* StepMania.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StepMania.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AA29CE580558741A00961A51 /* StepMania-debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "StepMania-debug.app"; sourceTree = BUILT_PRODUCTS_DIR; }; AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; @@ -3232,7 +3232,7 @@ 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - AA29CE580558741A00961A51 /* StepMania.app */, + AA29CE580558741A00961A51 /* StepMania-debug.app */, AA40D52B09A08D660068C0D5 /* sm-ssc.app */, AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */, AA7A2B940AE09B520054C5BA /* lua */, @@ -5736,7 +5736,7 @@ name = stepmania; productInstallPath = "$(HOME)/Applications"; productName = "SDL App"; - productReference = AA29CE580558741A00961A51 /* StepMania.app */; + productReference = AA29CE580558741A00961A51 /* StepMania-debug.app */; productType = "com.apple.product-type.application"; }; AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { diff --git a/src/JsonUtil.h b/src/JsonUtil.h index f8e47c5104..22c33ae4ec 100644 --- a/src/JsonUtil.h +++ b/src/JsonUtil.h @@ -32,6 +32,15 @@ namespace JsonUtil fn(*v[i], root[i]); } + template + static void SerializeVectorPointers(const vector &v, void fn(const T &, Json::Value &), Json::Value &root) + { + root = Json::Value(Json::arrayValue); + root.resize(v.size()); + for(unsigned i=0; i static void SerializeVectorPointers(const vector &v, void fn(const T *, Json::Value &), Json::Value &root) { From b545c7d6d31b44d9c3ba0be7f81837d2120e180d Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 01:22:59 -0400 Subject: [PATCH 50/94] Revert Quantize*. Ended up being finicky and only working with some files. Perhaps some ups needed downs or vice~versa. --- src/Player.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Player.cpp b/src/Player.cpp index 8638d33cff..cf8aacbccf 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -2965,12 +2965,12 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) if( iCheckpointFrequencyRows > 0 ) { // "the first row after the start of the range that lands on a beat" - int iFirstCheckpointInRange = QuantizeUp(m_iFirstUncrossedRow, - iCheckpointFrequencyRows); + int iFirstCheckpointInRange = ((m_iFirstUncrossedRow+iCheckpointFrequencyRows-1) + /iCheckpointFrequencyRows) * iCheckpointFrequencyRows; // "the last row or first row earlier that lands on a beat" - int iLastCheckpointInRange = QuantizeDown(iLastRowCrossed, - iCheckpointFrequencyRows); + int iLastCheckpointInRange = ((iLastRowCrossed)/iCheckpointFrequencyRows) + * iCheckpointFrequencyRows; for( int r = iFirstCheckpointInRange; r <= iLastCheckpointInRange; r += iCheckpointFrequencyRows ) { @@ -2992,12 +2992,12 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) int iTrack = nIter.Track(); // "the first row after the hold head that lands on a beat" - int iFirstCheckpointOfHold = QuantizeUp(iStartRow, - iCheckpointFrequencyRows); + int iFirstCheckpointOfHold = ((iStartRow+iCheckpointFrequencyRows)/iCheckpointFrequencyRows) + * iCheckpointFrequencyRows; // "the end row or the first earlier row that lands on a beat" - int iLastCheckpointOfHold = QuantizeDown(iEndRow, - iCheckpointFrequencyRows); + int iLastCheckpointOfHold = ((iEndRow)/iCheckpointFrequencyRows) + * iCheckpointFrequencyRows; // count the end of the hold as a checkpoint bool bHoldOverlapsRow = iFirstCheckpointOfHold <= r && r <= iLastCheckpointOfHold; From de3916297e4212dfa65a23d79ff2f391f630138b Mon Sep 17 00:00:00 2001 From: Thai Pangsakulyanont Date: Sun, 17 Jul 2011 12:30:09 +0700 Subject: [PATCH 51/94] it runs, but scrolls stop working. --- src/TimingData.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index fe54069489..da8100c483 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -16,11 +16,6 @@ TimingData::TimingData(float fOffset) : TimingData::~TimingData() { - for (unsigned i = 0; i < NUM_TimingSegmentType; i++) - { - this->allTimingSegments[i].clear(); - } - delete [] this->allTimingSegments; } void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highest ) const From 78db19603340efe8a983eeb0f40d1a594d300b9c Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 01:55:40 -0400 Subject: [PATCH 52/94] Okay, 8% missing is a bit much. --- Data/AI.ini | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Data/AI.ini b/Data/AI.ini index 7ca232dfac..421c8757b7 100644 --- a/Data/AI.ini +++ b/Data/AI.ini @@ -39,17 +39,17 @@ WeightW2=30 WeightW1=50 [Skill5] -WeightMiss=8 -WeightW5=1 -WeightW4=1 +WeightMiss=2 +WeightW5=3 +WeightW4=5 WeightW3=5 WeightW2=30 WeightW1=55 [Skill6] -WeightMiss=8 -WeightW5=1 -WeightW4=1 +WeightMiss=2 +WeightW5=3 +WeightW4=5 WeightW3=5 WeightW2=30 WeightW1=55 From e6be564be8a5145f8c6156dda8c383dea0258c4a Mon Sep 17 00:00:00 2001 From: Thai Pangsakulyanont Date: Sun, 17 Jul 2011 13:03:21 +0700 Subject: [PATCH 53/94] [timing] make sure the segments are sorted --- src/TimingData.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index da8100c483..fd3db33b47 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -32,11 +32,17 @@ void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highe } } +struct ts_less : binary_function { + bool operator() (const TimingSegment *x, const TimingSegment *y) const { + return (*x) < (*y); + } +}; + void TimingData::AddSegment(TimingSegmentType tst, TimingSegment * seg) { vector &segs = this->allTimingSegments[tst]; // Unsure if this uses the proper comparison. - segs.insert(upper_bound(segs.begin(), segs.end(), seg), seg); + segs.insert(upper_bound(segs.begin(), segs.end(), seg, ts_less()), seg); } int TimingData::GetSegmentIndexAtRow(TimingSegmentType tst, @@ -984,6 +990,11 @@ float TimingData::GetDisplayedBeat( float fBeat ) const const vector &scrolls = this->allTimingSegments[SEGMENT_SCROLL]; vector::const_iterator it = scrolls.begin(), end = scrolls.end(); float fOutBeat = 0; + for( it = it + 1; it != end; it++ ) + { + ASSERT((*(it-1))->GetBeat() <= (*it)->GetBeat()); + } + it = scrolls.begin(); for( ; it != end; it++ ) { if( it+1 == end || fBeat <= (*(it+1))->GetBeat() ) From 8d85d196788bf5ea992361303d2588486f7564e4 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 11:19:23 -0400 Subject: [PATCH 54/94] [timing] Editor didn't choke on dance-3panel. ...why do we even HAVE this mode anyway? --- .../Mecha-Tribe Assault.ssc | 588 +++++++++++++++--- 1 file changed, 510 insertions(+), 78 deletions(-) diff --git a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc index a053075757..48af730db7 100644 --- a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc +++ b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc @@ -7062,379 +7062,379 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS:; +#ATTACKS: +; #NOTES: -// measure 0 00000000 00000000 00000000 00000000 -, // measure 1 +, 00000000 00000000 00000000 00000000 -, // measure 2 +, 00000000 00000000 00000000 00000000 -, // measure 3 +, 00000000 00000000 00000000 00000000 -, // measure 4 +, 10000001 00000000 00000000 00000000 -, // measure 5 +, 01000010 00000000 00000000 00000000 -, // measure 6 +, 00100100 00000000 00000000 00000000 -, // measure 7 +, 00011000 00000000 00000000 00000000 -, // measure 8 +, 01000010 00000000 00000000 00000000 -, // measure 9 +, 00100100 00000000 00000000 00000000 -, // measure 10 +, 10000001 00000000 00000000 00000000 -, // measure 11 +, 00011000 00000000 00000000 00000000 -, // measure 12 +, 10000001 00000000 00100001 00000000 -, // measure 13 +, 10000001 00000000 00100001 00000000 -, // measure 14 +, 01001000 00000000 00011000 00000000 -, // measure 15 +, 01001000 00000000 00011000 00000000 -, // measure 16 +, 00100010 00000000 01000010 00000000 -, // measure 17 +, 00100010 00000000 01000010 00000000 -, // measure 18 +, 10000100 00000000 00010100 00000000 -, // measure 19 +, 20020200 00000000 00000000 30030300 -, // measure 20 +, 10000001 00000000 10000100 00000000 -, // measure 21 +, 10000001 00000000 10000100 00000000 -, // measure 22 +, 00010010 00000000 00011000 00000000 -, // measure 23 +, 00010010 00000000 00011000 00000000 -, // measure 24 +, 01000100 00000000 01000010 00000000 -, // measure 25 +, 01000100 00000000 01000010 00000000 -, // measure 26 +, 00100001 00000000 00101000 00000000 -, // measure 27 +, 00202002 00000000 00000000 00303003 -, // measure 28 +, 00000001 00100000 00000100 00010000 -, // measure 29 +, 00001000 10000000 00000100 00100000 -, // measure 30 +, 00000001 01000000 00000010 00010000 -, // measure 31 +, 20000002 32000203 03200320 00322030 -, // measure 32 +, 10033000 00000100 00100000 00001000 -, // measure 33 +, 00010000 00000001 00100000 00000100 -, // measure 34 +, 10000000 00000010 01000000 00001000 -, // measure 35 +, 20000002 30200023 02300230 03022300 -, // measure 36 +, 10033010 00000000 00011000 00000000 -, // measure 37 +, 00100100 00000000 01000001 00000000 -, // measure 38 +, 10000010 00000000 01000100 00000000 -, // measure 39 +, 02202000 00000000 00000000 03303000 -, // measure 40 +, 01000001 00000000 00011000 00000000 -, // measure 41 +, 00100100 00000000 10000010 00000000 -, // measure 42 +, 01000001 00000000 00100010 00000000 -, // measure 43 +, 00020220 00000000 00000000 00030330 -, // measure 44 +, 10000001 00001000 00010100 00010010 -, // measure 45 +, 01000100 00001000 00100010 00100100 -, // measure 46 +, 10000001 00000010 01000100 01000010 -, // measure 47 +, 00200002 00000000 00000000 00300003 -, // measure 48 +, 10000001 00010000 00101000 01001000 -, // measure 49 +, 00100010 00010000 01000100 00100100 -, // measure 50 +, 10000001 01000000 00100010 01000010 -, // measure 51 +, 20000200 00000000 00000000 30000300 -, // measure 52 +, 00022000 00000000 00000000 20033002 -, // measure 53 +, 30200203 00000000 02300320 00000000 -, // measure 54 +, 03022030 00000000 00000000 00100100 -, // measure 55 +, 00233200 00000000 00000000 00000000 -, // measure 56 +, 02300320 00000000 23000032 00000000 -, // measure 57 +, 30200203 00000000 02300320 00000000 -, // measure 58 +, 03022030 00000000 20033002 00000000 -, // measure 59 +, 32000023 00000000 03200230 00000000 -, // measure 60 +, 00322300 00000000 00000000 00000000 -, // measure 61 +, 20033002 00000000 00000000 00000000 -, // measure 62 +, 30200203 00000000 00000000 01000010 -, // measure 63 +, 02300320 00000000 00000000 00000000 -, // measure 64 +, 03022030 00000000 20033002 00000000 -, // measure 65 +, 30200203 00000000 02300320 00000000 -, // measure 66 +, 03022030 00000000 00233200 00000000 -, // measure 67 +, 02300320 00000000 23000032 00000000 -, // measure 68 +, 30011003 00000000 00000000 00000000 -, // measure 69 +, 01100110 00000000 00000000 00000000 -, // measure 70 +, 10011001 00000000 00000000 10011001 -, // measure 71 +, 10011001 00000000 00000000 00000000 -, // measure 72 +, 01100110 00000000 00000000 00000000 -, // measure 73 +, 10011001 00000000 00000000 00000000 -, // measure 74 +, 01100110 00000000 00000000 @@ -7443,14 +7443,446 @@ M0000 00000000 00000000 20022002 -, // measure 75 +, 00000000 00000000 00000000 00000000 -, // measure 76 +, 30033003 00000000 00000000 00000000 ; + +//---------------dance-threepanel - It's a 3 panel chart.---------------- +#NOTEDATA:; +#CHARTNAME:Simple: +#STEPSTYPE:dance-threepanel; +#DESCRIPTION:It's a 3 panel chart.; +#CHARTSTYLE:Pad; +#DIFFICULTY:Easy; +#METER:1; +#RADARVALUES:0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000,0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000; +#CREDIT:Jason Felds; +#OFFSET:-0.028000; +#BPMS:0.000000=180.000000 +; +#STOPS:; +#DELAYS:; +#WARPS:; +#TIMESIGNATURES:0.000000=4=4 +; +#TICKCOUNTS:0.000000=2 +; +#COMBOS:0.000000=1 +; +#SPEEDS:0.000000=1.000000=0.000000=0 +; +#SCROLLS:0.000000=1.000000 +; +#FAKES:; +#LABELS:0.000000=Song Start +,16.000000=Verse 1A +,32.000000=Verse 1B +,48.000000=Verse 2A +,64.000000=Verse 2B +,80.000000=Verse 3A +,96.000000=Verse 3B +,112.000000=Verse 4A +,128.000000=Verse 4B +,144.000000=Verse 5A +,160.000000=Verse 5B +,176.000000=Verse 6A +,192.000000=Verse 6B +,208.000000=Verse 7A +,224.000000=Verse 7B +,240.000000=Verse 8A +,256.000000=Verse 8B +,272.000000=Verse 9A +,288.000000=Verse 9B +,304.000000=Fin +; +#ATTACKS:; +#NOTES: +// measure 0 +000 +000 +000 +000 +, // measure 1 +000 +000 +000 +000 +, // measure 2 +000 +000 +000 +000 +, // measure 3 +000 +000 +000 +000 +, // measure 4 +100 +000 +000 +000 +, // measure 5 +000 +000 +000 +000 +, // measure 6 +001 +000 +000 +000 +, // measure 7 +000 +000 +000 +000 +, // measure 8 +010 +000 +000 +000 +, // measure 9 +000 +000 +000 +000 +, // measure 10 +001 +000 +000 +000 +, // measure 11 +000 +000 +000 +000 +, // measure 12 +100 +000 +000 +000 +, // measure 13 +010 +000 +000 +000 +, // measure 14 +001 +000 +000 +000 +, // measure 15 +010 +000 +000 +000 +, // measure 16 +100 +000 +000 +000 +, // measure 17 +001 +000 +000 +000 +, // measure 18 +010 +000 +000 +000 +, // measure 19 +001 +000 +000 +000 +, // measure 20 +101 +000 +000 +000 +, // measure 21 +010 +000 +000 +000 +, // measure 22 +100 +000 +000 +000 +, // measure 23 +001 +000 +000 +000 +, // measure 24 +010 +000 +000 +000 +, // measure 25 +001 +000 +000 +000 +, // measure 26 +100 +000 +000 +000 +, // measure 27 +010 +000 +000 +000 +, // measure 28 +101 +000 +100 +000 +, // measure 29 +100 +000 +100 +000 +, // measure 30 +100 +000 +000 +000 +, // measure 31 +110 +000 +000 +000 +, // measure 32 +001 +000 +001 +000 +, // measure 33 +001 +000 +001 +000 +, // measure 34 +001 +000 +000 +000 +, // measure 35 +011 +000 +000 +000 +, // measure 36 +100 +000 +010 +000 +, // measure 37 +100 +000 +001 +000 +, // measure 38 +100 +000 +000 +000 +, // measure 39 +101 +000 +000 +000 +, // measure 40 +001 +000 +010 +000 +, // measure 41 +001 +000 +100 +000 +, // measure 42 +001 +000 +000 +000 +, // measure 43 +101 +000 +000 +000 +, // measure 44 +010 +000 +001 +000 +, // measure 45 +100 +000 +010 +000 +, // measure 46 +100 +000 +001 +000 +, // measure 47 +010 +000 +000 +000 +, // measure 48 +010 +000 +100 +000 +, // measure 49 +001 +000 +010 +000 +, // measure 50 +001 +000 +100 +000 +, // measure 51 +010 +000 +000 +000 +, // measure 52 +011 +000 +000 +000 +, // measure 53 +110 +000 +000 +000 +, // measure 54 +101 +000 +101 +000 +, // measure 55 +101 +000 +000 +000 +, // measure 56 +010 +000 +000 +001 +, // measure 57 +001 +000 +000 +100 +, // measure 58 +100 +000 +000 +010 +, // measure 59 +010 +000 +000 +000 +, // measure 60 +100 +000 +000 +001 +, // measure 61 +001 +000 +000 +010 +, // measure 62 +010 +000 +000 +001 +, // measure 63 +001 +000 +000 +100 +, // measure 64 +100 +000 +001 +000 +, // measure 65 +010 +000 +001 +000 +, // measure 66 +100 +000 +010 +000 +, // measure 67 +100 +000 +001 +000 +, // measure 68 +010 +000 +000 +000 +, // measure 69 +001 +000 +000 +000 +, // measure 70 +100 +000 +000 +010 +, // measure 71 +010 +000 +000 +000 +, // measure 72 +100 +000 +000 +000 +, // measure 73 +001 +000 +000 +000 +, // measure 74 +010 +000 +000 +000 +, // measure 75 +001 +000 +000 +000 +; From 09dc94cfe837a23facd02fc411e56966bba1c85e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 12:54:50 -0400 Subject: [PATCH 55/94] Abstract common functionality. --- src/BackgroundUtil.cpp | 19 +++++++++++++++++++ src/BackgroundUtil.h | 5 +++++ src/NotesWriterSM.cpp | 29 ++--------------------------- src/NotesWriterSSC.cpp | 29 ++--------------------------- 4 files changed, 28 insertions(+), 54 deletions(-) diff --git a/src/BackgroundUtil.cpp b/src/BackgroundUtil.cpp index 6644d1593d..d101be23e1 100644 --- a/src/BackgroundUtil.cpp +++ b/src/BackgroundUtil.cpp @@ -68,6 +68,25 @@ RString BackgroundChange::GetTextDescription() const return s; } +RString BackgroundChange::ToString() const +{ + /* TODO: Technically we need to double-escape the filename + * (because it might contain '=') and then unescape the value + * returned by the MsdFile. */ + return ssprintf("%.3f=%s=%.3f=%d=%d=%d=%s=%s=%s=%s=%s", + this->m_fStartBeat, + SmEscape(this->m_def.m_sFile1).c_str(), + this->m_fRate, + this->m_sTransition == SBT_CrossFade, // backward compat + this->m_def.m_sEffect == SBE_StretchRewind, // backward compat + this->m_def.m_sEffect != SBE_StretchNoLoop, // backward compat + this->m_def.m_sEffect.c_str(), + this->m_def.m_sFile2.c_str(), + this->m_sTransition.c_str(), + SmEscape(RageColor::NormalizeColorString(this->m_def.m_sColor1)).c_str(), + SmEscape(RageColor::NormalizeColorString(this->m_def.m_sColor2)).c_str()); +} + const RString BACKGROUND_EFFECTS_DIR = "BackgroundEffects/"; const RString BACKGROUND_TRANSITIONS_DIR = "BackgroundTransitions/"; diff --git a/src/BackgroundUtil.h b/src/BackgroundUtil.h index 80d36b8a92..c4907b590c 100644 --- a/src/BackgroundUtil.h +++ b/src/BackgroundUtil.h @@ -64,6 +64,11 @@ struct BackgroundChange RString m_sTransition; RString GetTextDescription() const; + + /** + * @brief Get the string representation of the change. + * @return the string representation. */ + RString ToString() const; }; /** @brief Shared background-related routines. */ namespace BackgroundUtil diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index 05863f9af0..4be321e651 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -19,31 +19,6 @@ ThemeMetric USE_CREDIT ( "NotesWriterSM", "DescriptionUsesCreditField" ); -/** - * @brief Turn the BackgroundChange into a string. - * @param bgc the BackgroundChange in question. - * @return the converted string. */ -static RString BackgroundChangeToString( const BackgroundChange &bgc ) -{ - // TODO: Technically we need to double-escape the filename (because it might - // contain '=') and then unescape the value returned by the MsdFile. - RString s = ssprintf( - "%.3f=%s=%.3f=%d=%d=%d=%s=%s=%s=%s=%s", - bgc.m_fStartBeat, - SmEscape(bgc.m_def.m_sFile1).c_str(), - bgc.m_fRate, - bgc.m_sTransition == SBT_CrossFade, // backward compat - bgc.m_def.m_sEffect == SBE_StretchRewind, // backward compat - bgc.m_def.m_sEffect != SBE_StretchNoLoop, // backward compat - bgc.m_def.m_sEffect.c_str(), - bgc.m_def.m_sFile2.c_str(), - bgc.m_sTransition.c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor1)).c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor2)).c_str() - ); - return s; -} - /** * @brief Write out the common tags for .SM files. * @param f the file in question. @@ -155,7 +130,7 @@ static void WriteGlobalTags( RageFile &f, Song &out ) f.Write( ssprintf("#BGCHANGES%d:", b+1) ); FOREACH_CONST( BackgroundChange, out.GetBackgroundChanges(b), bgc ) - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); /* If there's an animation plan at all, add a dummy "-nosongbg-" tag to indicate that * this file doesn't want a song BG entry added at the end. See SMLoader::TidyUpData. @@ -171,7 +146,7 @@ static void WriteGlobalTags( RageFile &f, Song &out ) f.Write( "#FGCHANGES:" ); FOREACH_CONST( BackgroundChange, out.GetForegroundChanges(), bgc ) { - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); } f.PutLine( ";" ); } diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index 8d9434e10f..8ca8140231 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -16,31 +16,6 @@ #include "Song.h" #include "Steps.h" -/** - * @brief Turn the BackgroundChange into a string. - * @param bgc the BackgroundChange in question. - * @return the converted string. */ -static RString BackgroundChangeToString( const BackgroundChange &bgc ) -{ - // TODO: Technically we need to double-escape the filename (because it might contain '=') and then - // unescape the value returned by the MsdFile. - RString s = ssprintf( - "%.3f=%s=%.3f=%d=%d=%d=%s=%s=%s=%s=%s", - bgc.m_fStartBeat, - SmEscape(bgc.m_def.m_sFile1).c_str(), - bgc.m_fRate, - bgc.m_sTransition == SBT_CrossFade, // backward compat - bgc.m_def.m_sEffect == SBE_StretchRewind, // backward compat - bgc.m_def.m_sEffect != SBE_StretchNoLoop, // backward compat - bgc.m_def.m_sEffect.c_str(), - bgc.m_def.m_sFile2.c_str(), - bgc.m_sTransition.c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor1)).c_str(), - SmEscape(RageColor::NormalizeColorString(bgc.m_def.m_sColor2)).c_str() - ); - return s; -} - /** * @brief Turn a vector of lines into a single line joined by newline characters. * @param lines the list of lines to join. @@ -292,7 +267,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.Write( ssprintf("#BGCHANGES%d:", b+1) ); FOREACH_CONST( BackgroundChange, out.GetBackgroundChanges(b), bgc ) - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); /* If there's an animation plan at all, add a dummy "-nosongbg-" tag to * indicate that this file doesn't want a song BG entry added at the end. @@ -308,7 +283,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.Write( "#FGCHANGES:" ); FOREACH_CONST( BackgroundChange, out.GetForegroundChanges(), bgc ) { - f.PutLine( BackgroundChangeToString(*bgc)+"," ); + f.PutLine( (*bgc).ToString() +"," ); } f.PutLine( ";" ); } From 3c348a8ac36da161027cb40d70cb132027abb1b1 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 13:04:36 -0400 Subject: [PATCH 56/94] Consistent function placement. This will be used for later. --- src/RageUtil.cpp | 7 +++++++ src/RageUtil.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/RageUtil.cpp b/src/RageUtil.cpp index d72a4780dd..bcfadb1720 100644 --- a/src/RageUtil.cpp +++ b/src/RageUtil.cpp @@ -1731,6 +1731,13 @@ bool StringToFloat( const RString &sString, float &fOut ) return sString.size() && *endPtr == '\0' && isfinite( fOut ); } +RString FloatToString( const float &num ) +{ + stringstream ss; + ss << num; + return ss.str(); +} + const wchar_t INVALID_CHAR = 0xFFFD; /* U+FFFD REPLACEMENT CHARACTER */ wstring RStringToWstring( const RString &s ) diff --git a/src/RageUtil.h b/src/RageUtil.h index 17f4d24f0e..e3a83e576f 100644 --- a/src/RageUtil.h +++ b/src/RageUtil.h @@ -416,6 +416,7 @@ int StringToInt( const RString &sString ); * @return the string we are after. */ RString IntToString( const int &iNum ); float StringToFloat( const RString &sString ); +RString FloatToString( const float &num ); bool StringToFloat( const RString &sString, float &fOut ); RString WStringToRString( const wstring &sString ); From 186200d3c67d890e7e6596094257d16afa9c602e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 13:15:30 -0400 Subject: [PATCH 57/94] Prep work for #NOTES-less cache. This commit should be runnable, but I still be careful. --- src/Steps.cpp | 16 +++++++++++++++- src/Steps.h | 13 +++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Steps.cpp b/src/Steps.cpp index 5961172f93..7e9e659c4a 100644 --- a/src/Steps.cpp +++ b/src/Steps.cpp @@ -24,6 +24,11 @@ #include "NoteDataUtil.h" #include "NotesLoaderSSC.h" #include "NotesLoaderSM.h" +#include "NotesLoaderSMA.h" +#include "NotesLoaderDWI.h" +#include "NotesLoaderKSF.h" +#include "NotesLoaderBMS.h" +#include "NotesLoaderPMS.h" #include @@ -78,6 +83,11 @@ unsigned Steps::GetHash() const return m_iHash; } +bool Steps::IsNoteDataEmpty() const +{ + return this->m_sNoteDataCompressed.empty(); +} + void Steps::SetNoteData( const NoteData& noteDataNew ) { ASSERT( noteDataNew.GetNumTracks() == GAMEMAN->GetStepsTypeInfo(m_StepsType).iNumTracks ); @@ -89,7 +99,6 @@ void Steps::SetNoteData( const NoteData& noteDataNew ) m_sNoteDataCompressed = RString(); m_iHash = 0; - m_sFilename = RString(); // We can no longer read from the file because it has changed in memory. } void Steps::GetNoteData( NoteData& noteDataOut ) const @@ -250,6 +259,11 @@ void Steps::CalculateRadarValues( float fMusicLengthSeconds ) } void Steps::Decompress() const +{ + const_cast(this)->Decompress(); +} + +void Steps::Decompress() { if( m_bNoteDataIsFilled ) return; // already decompressed diff --git a/src/Steps.h b/src/Steps.h index a6a4aded2e..877fa1549d 100644 --- a/src/Steps.h +++ b/src/Steps.h @@ -49,6 +49,7 @@ public: void Compress() const; void Decompress() const; + void Decompress(); /** * @brief Determine if these steps were created by the autogenerator. * @return true if they were, false otherwise. @@ -138,6 +139,18 @@ public: void SetNoteData( const NoteData& noteDataNew ); void SetSMNoteData( const RString ¬es_comp ); void GetSMNoteData( RString ¬es_comp_out ) const; + + /** + * @brief Retrieve the NoteData from the original source. + * @return true if successful, false for failure. */ + bool GetNoteDataFromSimfile(); + + /** + * @brief Determine if we are missing any note data. + * + * This takes advantage of the fact that we usually compress our data. + * @return true if our notedata is empty, false otherwise. */ + bool IsNoteDataEmpty() const; void TidyUpData(); void CalculateRadarValues( float fMusicLengthSeconds ); From bafcea2a6b71fc4178d6cb41c2637e6ba5f4c989 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 13:27:47 -0400 Subject: [PATCH 58/94] Just about all that can be done before Loading. This next commit will be the big one it seems. --- src/Song.cpp | 203 ++++++++++++++++++++++++--------------------------- src/Song.h | 23 +++++- src/Steps.h | 5 ++ 3 files changed, 121 insertions(+), 110 deletions(-) diff --git a/src/Song.cpp b/src/Song.cpp index 5a93c27078..38d93f7f96 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -258,7 +258,7 @@ static set BlacklistedImages; bool Song::LoadFromSongDir( RString sDir ) { // LOG->Trace( "Song::LoadFromSongDir(%s)", sDir.c_str() ); - ASSERT( sDir != "" ); + ASSERT_M( sDir != "", "Songs can't be loaded from an empty directory!" ); // make sure there is a trailing slash at the end of sDir if( sDir.Right(1) != "/" ) @@ -321,10 +321,14 @@ bool Song::LoadFromSongDir( RString sDir ) LOG->UserLog( "Song", sDir, "has no music file either. Ignoring this song directory." ); return false; } - + // Make sure we have a future filename figured out. + vector folders; + split(sDir, "/", folders); + RString songName = folders[2] + ".ssc"; + this->m_sSongFileName = sDir + songName; // Continue on with a blank Song so that people can make adjustments using the editor. } - TidyUpData(); + TidyUpData(false, true); // save a cache file so we don't have to parse it all over again next time if( !SaveToCacheFile() ) @@ -333,8 +337,6 @@ bool Song::LoadFromSongDir( RString sDir ) FOREACH( Steps*, m_vpSteps, s ) { - (*s)->SetFilename( sCacheFilePath ); - /* Compress all Steps. During initial caching, this will remove cached * NoteData; during cached loads, this will just remove cached SMData. */ (*s)->Compress(); @@ -446,7 +448,7 @@ void FixupPath( RString &path, const RString &sSongPath ) } // Songs in BlacklistImages will never be autodetected as song images. -void Song::TidyUpData( bool bFromCache ) +void Song::TidyUpData( bool fromCache, bool duringCache ) { // We need to do this before calling any of HasMusic, HasHasCDTitle, etc. ASSERT_M( m_sSongDir.Left(3) != "../", m_sSongDir ); // meaningless @@ -543,7 +545,7 @@ void Song::TidyUpData( bool bFromCache ) /* Generate these before we autogen notes, so the new notes can inherit * their source's values. */ - ReCalculateRadarValuesAndLastSecond( bFromCache ); + ReCalculateRadarValuesAndLastSecond( fromCache, true ); Trim( m_sMainTitle ); Trim( m_sSubTitle ); @@ -779,11 +781,11 @@ void Song::TidyUpData( bool bFromCache ) * music starts. */ if( arrayPossibleMovies.size() == 1 ) this->AddBackgroundChange(BACKGROUND_LAYER_1, - BackgroundChange(0, - arrayPossibleMovies[0], - "", - 1.f, - SBE_StretchNoLoop)); + BackgroundChange(0, + arrayPossibleMovies[0], + "", + 1.f, + SBE_StretchNoLoop)); } @@ -791,64 +793,6 @@ void Song::TidyUpData( bool bFromCache ) * for edits). We should be able to use difficulty names as unique * identifiers for steps. */ SongUtil::AdjustDuplicateSteps( this ); - - { - /* Generated filename; this doesn't always point to a loadable file, - * but instead points to the file we should write changed files to, - * and will always be a .SSC. - * - * This is a little tricky. We can't always use the song title directly, - * since it might contain characters we can't store in filenames. Two - * easy options: we could manually filter out invalid characters, or we - * could use the name of the directory, which is always a valid filename - * and should always be the same as the song. The former might not catch - * everything--filename restrictions are platform-specific; we might even - * be on an 8.3 filesystem, so let's do the latter. - * - * We can't rely on searching for other data filenames; it works for DWIs, - * but not KSFs and BMSs. - * - * So, let's do this (by priority): - * 1. If there's a .SSC file, use that filename. No reason to use anything - * else; it's the filename in use. - * 2. If there's an .SM, use it with a changed extension. - * 3. If there's a .DWI, use it with a changed extension. - * 4. Otherwise, use the name of the directory, since it's definitely a valid - * filename, and should always be the title of the song (unlike KSFs). */ - m_sSongFileName = m_sSongDir; - vector asFileNames; - do - { - GetDirListing( m_sSongDir+"*.ssc", asFileNames ); - if( !asFileNames.empty() ) - { - m_sSongFileName += asFileNames[0]; - break; - } - - GetDirListing( m_sSongDir+"*.sma", asFileNames ); - if (!asFileNames.empty() ) - { - m_sSongFileName += SetExtension( asFileNames[0], "ssc" ); - break; - } - - GetDirListing( m_sSongDir+"*.sm", asFileNames ); - if( !asFileNames.empty() ) - { - m_sSongFileName += SetExtension( asFileNames[0], "ssc" ); - break; - } - - GetDirListing( m_sSongDir+"*.dwi", asFileNames ); - if( !asFileNames.empty() ) { - m_sSongFileName += SetExtension( asFileNames[0], "ssc" ); - break; - } - m_sSongFileName += Basename(m_sSongDir); - m_sSongFileName += ".ssc"; - } while(0); - } } void Song::TranslateTitles() @@ -863,9 +807,9 @@ void Song::TranslateTitles() m_sMainTitleTranslit, m_sSubTitleTranslit, m_sArtistTranslit ); } -void Song::ReCalculateRadarValuesAndLastSecond( bool bFromCache ) +void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache) { - if( bFromCache && this->GetFirstSecond() >= 0 && this->GetLastSecond() > 0 ) + if( fromCache && this->GetFirstSecond() >= 0 && this->GetLastSecond() > 0 ) { // this is loaded from cache, then we just have to calculate the radar values. for( unsigned i=0; iCalculateRadarValues( m_fMusicLengthSeconds ); + // Must initialize before the gotos. + NoteData tempNoteData; + pSteps->GetNoteData( tempNoteData ); + // calculate lastSecond // If it's autogen, then first/last beat will come from the parent. if( pSteps->IsAutogen() ) - continue; + goto wipe_notedata; /* Don't calculate with edits unless the song only contains an edit * chart, like those in Mungyodance 3. Otherwise, edits installed on * the machine could extend the length of the song. */ if( pSteps->IsAnEdit() && m_vpSteps.size() > 1 ) - continue; + goto wipe_notedata; // Don't set first/last beat based on lights. They often start very // early and end very late. if( pSteps->m_StepsType == StepsType_lights_cabinet ) - continue; - - NoteData tempNoteData; - pSteps->GetNoteData( tempNoteData ); + continue; // no need to wipe this. /* Many songs have stray, empty song patterns. Ignore them, so they * don't force the first beat of the whole song to 0. */ - if( tempNoteData.GetLastRow() == 0 ) - continue; - - localFirst = min(localFirst, + if( tempNoteData.GetLastRow() != 0 ) + { + localFirst = min(localFirst, pSteps->m_Timing.GetElapsedTimeFromBeat(tempNoteData.GetFirstBeat())); - localLast = max(localLast, + localLast = max(localLast, pSteps->m_Timing.GetElapsedTimeFromBeat(tempNoteData.GetLastBeat())); + } + wipe_notedata: + if (duringCache) + { + // update this when at that point. + } } this->firstSecond = localFirst; @@ -1005,11 +955,15 @@ bool Song::SaveToSMFile() bool Song::SaveToSSCFile( RString sPath, bool bSavingCache ) { - LOG->Trace( "Song::SaveToSSCFile('%s')", sPath.c_str() ); + RString path = sPath; + if (!bSavingCache) + path = SetExtension(sPath, "ssc"); + + LOG->Trace( "Song::SaveToSSCFile('%s')", path.c_str() ); // If the file exists, make a backup. - if( !bSavingCache && IsAFile(sPath) ) - FileCopy( sPath, sPath + ".old" ); + if( !bSavingCache && IsAFile(path) ) + FileCopy( path, path + ".old" ); vector vpStepsToSave; FOREACH_CONST( Steps*, m_vpSteps, s ) @@ -1022,16 +976,23 @@ bool Song::SaveToSSCFile( RString sPath, bool bSavingCache ) if( pSteps->WasLoadedFromProfile() ) continue; + if (!bSavingCache) + pSteps->SetFilename(path); vpStepsToSave.push_back( pSteps ); } + + if (bSavingCache) + { + return NotesWriterSSC::Write(path, *this, vpStepsToSave, bSavingCache); + } - if( !NotesWriterSSC::Write(sPath, *this, vpStepsToSave, bSavingCache) ) + if( !NotesWriterSSC::Write(path, *this, vpStepsToSave, bSavingCache) ) return false; - if( !bSavingCache && g_BackUpAllSongSaves.Get() ) + if( g_BackUpAllSongSaves.Get() ) { - RString sExt = GetExtension( sPath ); - RString sBackupFile = SetExtension( sPath, "" ); + RString sExt = GetExtension( path ); + RString sBackupFile = SetExtension( path, "" ); time_t cur_time; time( &cur_time ); @@ -1043,18 +1004,15 @@ bool Song::SaveToSSCFile( RString sPath, bool bSavingCache ) sBackupFile = SetExtension( sBackupFile, sExt ); sBackupFile += ssprintf( ".old" ); - if( FileCopy(sPath, sBackupFile) ) - LOG->Trace( "Backed up %s to %s", sPath.c_str(), sBackupFile.c_str() ); + if( FileCopy(path, sBackupFile) ) + LOG->Trace( "Backed up %s to %s", path.c_str(), sBackupFile.c_str() ); else - LOG->Trace( "Failed to back up %s to %s", sPath.c_str(), sBackupFile.c_str() ); + LOG->Trace( "Failed to back up %s to %s", path.c_str(), sBackupFile.c_str() ); } - if( !bSavingCache ) - { - // Mark these steps saved to disk. - FOREACH( Steps*, vpStepsToSave, s ) - (*s)->SetSavedToDisk( true ); - } + // Mark these steps saved to disk. + FOREACH( Steps*, vpStepsToSave, s ) + (*s)->SetSavedToDisk( true ); return true; } @@ -1063,13 +1021,7 @@ bool Song::SaveToCacheFile() { SONGINDEX->AddCacheIndex(m_sSongDir, GetHashForDirectory(m_sSongDir)); const RString sPath = GetCacheFilePath(); - if( !SaveToSSCFile(sPath, true) ) - return false; - - FOREACH( Steps*, m_vpSteps, pSteps ) - (*pSteps)->SetFilename( sPath ); - - return true; + return SaveToSSCFile(sPath, true); } bool Song::SaveToDWIFile() @@ -1295,6 +1247,45 @@ vector &Song::GetForegroundChanges() return *m_ForegroundChanges.Get(); } +vector Song::GetChangesToVectorString(const vector & changes) const +{ + vector ret; + FOREACH_CONST( BackgroundChange, changes, bgc ) + { + ret.push_back((*bgc).ToString()); + } + return ret; +} + +vector Song::GetBGChanges1ToVectorString() const +{ + return this->GetChangesToVectorString(this->GetBackgroundChanges(BACKGROUND_LAYER_1)); +} + +vector Song::GetBGChanges2ToVectorString() const +{ + return this->GetChangesToVectorString(this->GetBackgroundChanges(BACKGROUND_LAYER_2)); +} + +vector Song::GetFGChanges1ToVectorString() const +{ + return this->GetChangesToVectorString(this->GetForegroundChanges()); +} + +vector Song::GetInstrumentTracksToVectorString() const +{ + vector ret; + FOREACH_ENUM(InstrumentTrack, it) + { + if (this->HasInstrumentTrack(it)) + { + ret.push_back(InstrumentTrackToString(it) + + "=" + + this->m_sInstrumentTrackFile[it]); + } + } + return ret; +} RString GetSongAssetPath( RString sPath, const RString &sSongPath ) { diff --git a/src/Song.h b/src/Song.h index a75b740dcd..29a53ff942 100644 --- a/src/Song.h +++ b/src/Song.h @@ -91,14 +91,17 @@ public: // This one takes the effort to reuse Steps pointers as best as it can bool ReloadFromSongDir( RString sDir ); - /** @brief Call this after loading a song to clean up invalid data. */ - void TidyUpData( bool bFromCache = false ); + /** + * @brief Call this after loading a song to clean up invalid data. + * @param fromCache was this data loaded from the cache file? + * @param duringCache was this data loaded during the cache process? */ + void TidyUpData( bool fromCache = false, bool duringCache = false ); /** * @brief Get the new radar values, and determine the last second at the same time. * * This is called by TidyUpData, after saving the Song. */ - void ReCalculateRadarValuesAndLastSecond( bool bFromCache = false ); + void ReCalculateRadarValuesAndLastSecond(bool fromCache = false, bool duringCache = false); /** * @brief Translate any titles that aren't in english. * @@ -180,7 +183,6 @@ public: RString GetDisplaySubTitle() const; RString GetDisplayArtist() const; - // Returns the transliterated titles, if any; otherwise returns the main titles. /** * @brief Retrieve the transliterated title, or the main title if there is no translit. * @return the proper title. */ @@ -315,12 +317,20 @@ private: * * This must be sorted before gameplay. */ AutoPtrCopyOnWrite m_ForegroundChanges; + + vector GetChangesToVectorString(const vector & changes) const; public: const vector &GetBackgroundChanges( BackgroundLayer bl ) const; vector &GetBackgroundChanges( BackgroundLayer bl ); const vector &GetForegroundChanges() const; vector &GetForegroundChanges(); + vector GetBGChanges1ToVectorString() const; + vector GetBGChanges2ToVectorString() const; + vector GetFGChanges1ToVectorString() const; + + vector GetInstrumentTracksToVectorString() const; + /** * @brief The list of LyricSegments. * @@ -426,6 +436,11 @@ public: CachedObject m_CachedObject; + RString GetAttackString() const + { + return join(":", this->m_sAttackString); + } + // Lua void PushSelf( lua_State *L ); diff --git a/src/Steps.h b/src/Steps.h index 877fa1549d..f954e39d32 100644 --- a/src/Steps.h +++ b/src/Steps.h @@ -213,6 +213,11 @@ public: void GetDisplayBpms( DisplayBpms &addTo) const; + RString GetAttackString() const + { + return join(":", this->m_sAttackString); + } + private: inline const Steps *Real() const { return parent ? parent : this; } void DeAutogen( bool bCopyNoteData = true ); /* If this Steps is autogenerated, make it a real Steps. */ From 0a14687cf62999f8e144d579d2a02ad71253da91 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sun, 17 Jul 2011 12:56:16 -0500 Subject: [PATCH 59/94] change loading window design to be more consistent on Windows --- src/archutils/Win32/WindowsResources.rc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/archutils/Win32/WindowsResources.rc b/src/archutils/Win32/WindowsResources.rc index 91007fdd3a..a9792bbfe8 100644 --- a/src/archutils/Win32/WindowsResources.rc +++ b/src/archutils/Win32/WindowsResources.rc @@ -13,11 +13,13 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// English (United States) resources +// English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) +#endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // @@ -47,11 +49,11 @@ EXSTYLE WS_EX_APPWINDOW CAPTION "Stepmania" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - CTEXT "line1",IDC_STATIC_MESSAGE1,0,67,310,10,SS_NOPREFIX | SS_CENTERIMAGE - CTEXT "line2",IDC_STATIC_MESSAGE2,0,76,310,10,SS_NOPREFIX | SS_CENTERIMAGE - CTEXT "line3",IDC_STATIC_MESSAGE3,0,84,310,10,SS_NOPREFIX | SS_CENTERIMAGE + CTEXT "line1",IDC_STATIC_MESSAGE1,7,43,303,10,SS_NOPREFIX | SS_CENTERIMAGE + CTEXT "line2",IDC_STATIC_MESSAGE2,7,52,303,10,SS_NOPREFIX | SS_CENTERIMAGE + CTEXT "line3",IDC_STATIC_MESSAGE3,7,61,303,10,SS_NOPREFIX | SS_CENTERIMAGE CONTROL "",IDC_SPLASH,"Static",SS_BITMAP,0,0,310,25 - CONTROL "",IDC_PROGRESS,"msctls_progress32",0x0,7,51,298,14 + CONTROL "",IDC_PROGRESS,"msctls_progress32",0x0,7,73,303,14 END IDD_DISASM_CRASH DIALOGEX 0, 0, 332, 114 @@ -103,7 +105,7 @@ END // #ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO +GUIDELINES DESIGNINFO BEGIN IDD_LOADING_DIALOG, DIALOG BEGIN @@ -213,7 +215,7 @@ BEGIN END END -#endif // English (United States) resources +#endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// From bd9e7fa3c440377d11b788b229d981cb1730d20e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:02:41 -0400 Subject: [PATCH 60/94] Better difficulty rating for 3panel easy. --- .../Mecha-Tribe Assault.ssc | 93 ++++++++----------- 1 file changed, 37 insertions(+), 56 deletions(-) diff --git a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc index 48af730db7..366b79ad19 100644 --- a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc +++ b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc @@ -17,42 +17,35 @@ #SAMPLESTART:48.018002; #SAMPLELENGTH:16.040001; #SELECTABLE:YES; -#BPMS:0.000000=180.000000 -; +#BPMS:0.000000=180.000000; #STOPS:; #DELAYS:; #WARPS:; -#TIMESIGNATURES:0.000000=4=4 -; -#TICKCOUNTS:0.000000=2 -; -#COMBOS:0.000000=1 -; -#SPEEDS:0.000000=1.000000=0.000000=0 -; -#SCROLLS:0.000000=1.000000 -; -#LABELS:0.000000=Song Start -,16.000000=Verse 1A -,32.000000=Verse 1B -,48.000000=Verse 2A -,64.000000=Verse 2B -,80.000000=Verse 3A -,96.000000=Verse 3B -,112.000000=Verse 4A -,128.000000=Verse 4B -,144.000000=Verse 5A -,160.000000=Verse 5B -,176.000000=Verse 6A -,192.000000=Verse 6B -,208.000000=Verse 7A -,224.000000=Verse 7B -,240.000000=Verse 8A -,256.000000=Verse 8B -,272.000000=Verse 9A -,288.000000=Verse 9B -,304.000000=Fin -; +#TIMESIGNATURES:0.000000=4=4; +#TICKCOUNTS:0.000000=2; +#COMBOS:0.000000=1; +#SPEEDS:0.000000=1.000000=0.000000=0h; +#SCROLLS:0.000000=1.000000; +#LABELS:0.000000=Song Start, +16.000000=Verse 1A, +32.000000=Verse 1B, +48.000000=Verse 2A, +64.000000=Verse 2B, +80.000000=Verse 3A, +96.000000=Verse 3B, +112.000000=Verse 4A, +128.000000=Verse 4B, +144.000000=Verse 5A, +160.000000=Verse 5B, +176.000000=Verse 6A, +192.000000=Verse 6B, +208.000000=Verse 7A, +224.000000=Verse 7B, +240.000000=Verse 8A, +256.000000=Verse 8B, +272.000000=Verse 9A, +288.000000=Verse 9B, +304.000000=Fin; #BGCHANGES:; #KEYSOUNDS:; #ATTACKS:; @@ -105,8 +98,7 @@ ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -1061,8 +1053,7 @@ M000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -1909,8 +1900,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -2581,8 +2571,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -3165,8 +3154,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 0000 0000 @@ -3602,8 +3590,7 @@ M00M ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 000000 000000 @@ -4553,10 +4540,7 @@ MMMMMM ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -TIME=101.194664: -LEN=7.000000: -MODS=*0.2399996928003932 Reverse, Overhead; +#ATTACKS::TIME=101.194664:LEN=7.000000:MODS=*0.2399996928003932 Reverse, Overhead; #NOTES: 00000 00000 @@ -5536,8 +5520,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 00000 00000 @@ -6458,8 +6441,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 00000 00000 @@ -7062,8 +7044,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS: -; +#ATTACKS::; #NOTES: 00000000 00000000 @@ -7462,7 +7443,7 @@ M0000 #DESCRIPTION:It's a 3 panel chart.; #CHARTSTYLE:Pad; #DIFFICULTY:Easy; -#METER:1; +#METER:2; #RADARVALUES:0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000,0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000; #CREDIT:Jason Felds; #OFFSET:-0.028000; From 48226f2027d4ce972fd0d42f1cfca34d2204e136 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:06:40 -0400 Subject: [PATCH 61/94] No longer store #NOTES in cache. Use the #STEPFILENAME tag to access the files as appropriate. To the betting pool fans: file cache version is 192. --- Docs/Changelog_SSCformat.txt | 4 + Docs/Changelog_sm5.txt | 7 + Docs/SimfileFormats/ssc_msd5.txt | 11 +- src/NotesLoaderBMS.cpp | 82 +++++- src/NotesLoaderBMS.h | 2 + src/NotesLoaderDWI.cpp | 487 ++++++++++++++++++------------- src/NotesLoaderDWI.h | 3 + src/NotesLoaderKSF.cpp | 146 ++++----- src/NotesLoaderKSF.h | 2 + src/NotesLoaderMidi.cpp | 2 +- src/NotesLoaderPMS.cpp | 79 ++++- src/NotesLoaderPMS.h | 2 + src/NotesLoaderSM.cpp | 30 +- src/NotesLoaderSM.h | 2 +- src/NotesLoaderSMA.cpp | 5 +- src/NotesLoaderSSC.cpp | 137 ++++++++- src/NotesLoaderSSC.h | 8 + src/NotesWriterSM.cpp | 11 +- src/NotesWriterSSC.cpp | 80 ++--- src/ScreenGameplay.cpp | 24 ++ src/Song.cpp | 6 +- src/Song.h | 6 +- src/Steps.cpp | 72 +++-- src/TimingData.cpp | 148 ++-------- src/TimingData.h | 2 + src/TimingSegments.h | 78 +++++ 26 files changed, 900 insertions(+), 536 deletions(-) diff --git a/Docs/Changelog_SSCformat.txt b/Docs/Changelog_SSCformat.txt index 721673f31d..75c9fe55ec 100644 --- a/Docs/Changelog_SSCformat.txt +++ b/Docs/Changelog_SSCformat.txt @@ -9,6 +9,10 @@ change to JSON, but it is unsure if this will be done. Implement .ssc at your own risk. ________________________________________________________________________________ +[v0.77] - Wolfman2000 +* Add the cache tag #STEPFILENAME to gain access to the proper #NOTES when + required. + [v0.76] - Wolfman2000 * Expand the #COMBOS tag to allow for Miss Combos. Anyone that is crazy enough to put in a 51 miss combo in their tags should be...oh wait: it's already diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 7f632cfb55..6887ae8504 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,13 @@ ________________________________________________________________________________ StepMania 5.0 ????????? | 20110??? -------------------------------------------------------------------------------- +2011/07/17 +---------- +* [Cache] No longer store #NOTES in the cache. This should speed things up + on the first load if there is not much to write. (General note: this was + taken from another branch, but results at that point were great.) + [Wolfman2000] + 2011/07/13 ---------- * [Difficulty] Allow ALL StepsTypes to use CustomDifficulty properly. diff --git a/Docs/SimfileFormats/ssc_msd5.txt b/Docs/SimfileFormats/ssc_msd5.txt index 07ae7177ed..b8e5a2aea3 100644 --- a/Docs/SimfileFormats/ssc_msd5.txt +++ b/Docs/SimfileFormats/ssc_msd5.txt @@ -25,15 +25,15 @@ #SAMPLELENGTH:; #DISPLAYBPM:[xxx][xxx:xxx]|[*]; #SELECTABLE:; -#LASTBEATHINT:; +#LASTSECONDHINT:; #BGCHANGES:; #FGCHANGES:; #KEYSOUNDS:; #ATTACKS:; // stored in cache -#FIRSTBEAT:; // calculated -#LASTBEAT:; // calculated +#FIRSTSECOND:; // calculated +#LASTSECOND:; // calculated #SONGFILENAME:; #MUSICBYTES:; // ignored by loader #HASMUSIC:; @@ -66,5 +66,8 @@ #ATTACKS:; #DISPLAYBPM:; -// actual step data +// only in cache files +#STEPFILENAME:; + +// actual step data (not in cache files) #NOTES:; diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp index b8edfde57e..fdaf8ea92c 100644 --- a/src/NotesLoaderBMS.cpp +++ b/src/NotesLoaderBMS.cpp @@ -459,13 +459,16 @@ static bool SearchForKeysound( const RString &sPath, RString nDataOriginal, map< * Do a search. Don't do a wildcard search; if sData is "song.wav", * we might also have "song.png", which we shouldn't match. */ RString nData = nDataOriginal; - if( !IsAFile(out.GetSongDir()+nData) ) + RString dir = out.GetSongDir(); + if (dir.empty()) + dir = Dirname(sPath); + if( !IsAFile(dir+nData) ) { const char *exts[] = { "oga", "ogg", "wav", "mp3", NULL }; // XXX: stop duplicating these everywhere for( unsigned i = 0; exts[i] != NULL; ++i ) { RString fn = SetExtension( nData, exts[i] ); - if( IsAFile(out.GetSongDir()+fn) ) + if( IsAFile(dir+fn) ) { nData = fn; break; @@ -473,9 +476,9 @@ static bool SearchForKeysound( const RString &sPath, RString nDataOriginal, map< } } - if( !IsAFile(out.GetSongDir()+nData) ) + if( !IsAFile(dir+nData) ) { - LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", nData.c_str() ); + LOG->UserLog( "Song file", dir, "references key \"%s\" that can't be found", nData.c_str() ); return false; } @@ -1067,6 +1070,75 @@ void BMSLoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.bml"), out ); } +bool BMSLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps & out ) +{ + Song dummy; + // TODO: Simplify this copy/paste from LoadFromDir. + + vector BMSData; + BMSData.push_back(NameToData_t()); + ReadBMSFile(cachePath, BMSData.back()); + + RString commonSubstring; + GetCommonTagFromMapList( BMSData, "#title", commonSubstring ); + + Steps *copy = dummy.CreateSteps(); + + copy->SetDifficulty( Difficulty_Medium ); + RString sTag; + if( GetTagFromMap( BMSData[0], "#title", sTag ) && sTag.size() != commonSubstring.size() ) + { + sTag = sTag.substr( commonSubstring.size(), sTag.size() - commonSubstring.size() ); + sTag.MakeLower(); + + if( sTag.find('l') != sTag.npos ) + { + unsigned lPos = sTag.find('l'); + if( lPos > 2 && sTag.substr(lPos-2,4) == "solo" ) + { + copy->SetDifficulty( Difficulty_Edit ); + } + else + { + copy->SetDifficulty( Difficulty_Easy ); + } + } + else if( sTag.find('a') != sTag.npos ) + copy->SetDifficulty( Difficulty_Hard ); + else if( sTag.find('b') != sTag.npos ) + copy->SetDifficulty( Difficulty_Beginner ); + } + if( commonSubstring == "" ) + { + copy->SetDifficulty(Difficulty_Medium); + RString sTag; + if (GetTagFromMap(BMSData[0], "#title#", sTag)) + SearchForDifficulty(sTag, copy); + } + ReadGlobalTags( BMSData[0], dummy ); + if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' ) + { + switch( commonSubstring[commonSubstring.size() - 1] ) + { + case '[': + case '(': + case '<': + commonSubstring = commonSubstring.substr(0, commonSubstring.size() - 2); + default: + break; + } + } + map mapFilenameToKeysoundIndex; + + + const bool ok = LoadFromBMSFile( cachePath, BMSData[0], *copy, dummy, mapFilenameToKeysoundIndex ); + if( ok ) + { + out.SetNoteData(copy->GetNoteData()); + } + return ok; +} + bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) { LOG->Trace( "Song::LoadFromBMSDir(%s)", sDir.c_str() ); @@ -1171,6 +1243,7 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) iMainDataIndex = i; ReadGlobalTags( aBMSData[iMainDataIndex], out ); + out.m_sSongFileName = out.GetSongDir() + arrayBMSFileNames[iMainDataIndex]; // The brackets before the difficulty are in common substring, so remove them if it's found. if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' ) @@ -1203,6 +1276,7 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) if( i == static_cast(iMainDataIndex) ) out.m_SongTiming = pNewNotes->m_Timing; + pNewNotes->SetFilename(out.GetSongDir() + arrayBMSFileNames[i]); out.AddSteps( pNewNotes ); } else diff --git a/src/NotesLoaderBMS.h b/src/NotesLoaderBMS.h index caf8372d64..caf124f07b 100644 --- a/src/NotesLoaderBMS.h +++ b/src/NotesLoaderBMS.h @@ -2,11 +2,13 @@ #define NOTES_LOADER_BMS_H class Song; +class Steps; /** @brief Reads a Song from a set of .BMS files. */ namespace BMSLoader { void GetApplicableFiles( const RString &sPath, vector &out ); bool LoadFromDir( const RString &sDir, Song &out ); + bool LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ); } #endif diff --git a/src/NotesLoaderDWI.cpp b/src/NotesLoaderDWI.cpp index 9d1f2fc9b6..242108bbe3 100644 --- a/src/NotesLoaderDWI.cpp +++ b/src/NotesLoaderDWI.cpp @@ -170,6 +170,238 @@ Difficulty DwiCompatibleStringToDifficulty( const RString& sDC ) else return Difficulty_Invalid; } +static StepsType GetTypeFromMode(const RString &mode) +{ + if( mode == "SINGLE" ) + return StepsType_dance_single; + else if( mode == "DOUBLE" ) + return StepsType_dance_double; + else if( mode == "COUPLE" ) + return StepsType_dance_couple; + else if( mode == "SOLO" ) + return StepsType_dance_solo; + ASSERT_M(0, "Unrecognized DWI notes format " + mode + "!"); + return StepsType_Invalid; // just in case. +} + +static NoteData ParseNoteData(RString &step1, RString &step2, + Steps &out, const RString &path) +{ + g_mapDanceNoteToNoteDataColumn.clear(); + switch( out.m_StepsType ) + { + case StepsType_dance_single: + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; + break; + case StepsType_dance_double: + case StepsType_dance_couple: + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_LEFT] = 4; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_DOWN] = 5; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_UP] = 6; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_RIGHT] = 7; + break; + case StepsType_dance_solo: + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPLEFT] = 1; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 2; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 3; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPRIGHT] = 4; + g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 5; + break; + DEFAULT_FAIL( out.m_StepsType ); + } + + NoteData newNoteData; + newNoteData.SetNumTracks( g_mapDanceNoteToNoteDataColumn.size() ); + + for( int pad=0; pad<2; pad++ ) // foreach pad + { + RString sStepData; + switch( pad ) + { + case 0: + sStepData = step1; + break; + case 1: + if( step2 == "" ) // no data + continue; // skip + sStepData = step2; + break; + DEFAULT_FAIL( pad ); + } + + sStepData.Replace("\n", ""); + sStepData.Replace("\r", ""); + sStepData.Replace("\t", ""); + sStepData.Replace(" ", ""); + + double fCurrentBeat = 0; + double fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; + + for( size_t i=0; i': + fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; + break; + + default: // this is a note character + { + if( c == '!' ) + { + LOG->UserLog( + "Song file", + path, + "has an unexpected character: '!'." ); + continue; + } + + bool jump = false; + if( c == '<' ) + { + /* Arr. Is this a jump or a 1/192 marker? */ + if( Is192( sStepData, i ) ) + { + fCurrentIncrementer = 1.0/192 * BEATS_PER_MEASURE; + break; + } + + /* It's a jump. + * We need to keep reading notes until we hit a >. */ + jump = true; + i++; + } + + const int iIndex = BeatToNoteRow( (float)fCurrentBeat ); + i--; + do { + c = sStepData[i++]; + + if( jump && c == '>' ) + break; + + int iCol1, iCol2; + DWIcharToNoteCol( + c, + (GameController)pad, + iCol1, + iCol2, + path ); + + if( iCol1 != -1 ) + newNoteData.SetTapNote(iCol1, + iIndex, + TAP_ORIGINAL_TAP); + if( iCol2 != -1 ) + newNoteData.SetTapNote(iCol2, + iIndex, + TAP_ORIGINAL_TAP); + + if(i>=sStepData.length()) + { + break; + //we ran out of data + //while looking for the ending > mark + } + + if( sStepData[i] == '!' ) + { + i++; + const char holdChar = sStepData[i++]; + + DWIcharToNoteCol(holdChar, + (GameController)pad, + iCol1, + iCol2, + path ); + + if( iCol1 != -1 ) + newNoteData.SetTapNote(iCol1, + iIndex, + TAP_ORIGINAL_HOLD_HEAD); + if( iCol2 != -1 ) + newNoteData.SetTapNote(iCol2, + iIndex, + TAP_ORIGINAL_HOLD_HEAD); + } + } + while( jump ); + fCurrentBeat += fCurrentIncrementer; + } + break; + } + } + } + + /* Fill in iDuration. */ + for( int t=0; tUserLog("Song file", + path, + "failed to close a hold note in \"%s\" on track %i", + DifficultyToString(out.GetDifficulty()).c_str(), + t); + + newNoteData.SetTapNote( t, iHeadRow, TAP_EMPTY ); + } + } + } + + ASSERT( newNoteData.GetNumTracks() > 0 ); + return newNoteData; +} + /** * @brief Look through the notes tag to extract the data. * @param sMode the steps type. @@ -192,216 +424,17 @@ static bool LoadFromDWITokens( { CHECKPOINT_M( "DWILoader::LoadFromDWITokens()" ); - out.m_StepsType = StepsType_Invalid; + out.m_StepsType = GetTypeFromMode(sMode); - if( sMode == "SINGLE" ) out.m_StepsType = StepsType_dance_single; - else if( sMode == "DOUBLE" ) out.m_StepsType = StepsType_dance_double; - else if( sMode == "COUPLE" ) out.m_StepsType = StepsType_dance_couple; - else if( sMode == "SOLO" ) out.m_StepsType = StepsType_dance_solo; - else - { - ASSERT_M(0, "Unrecognized DWI notes format " + sMode + "!"); - out.m_StepsType = StepsType_dance_single; - } + out.SetMeter(StringToInt(sNumFeet)); - - g_mapDanceNoteToNoteDataColumn.clear(); - switch( out.m_StepsType ) - { - case StepsType_dance_single: - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; - break; - case StepsType_dance_double: - case StepsType_dance_couple: - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_LEFT] = 4; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_DOWN] = 5; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_UP] = 6; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD2_RIGHT] = 7; - break; - case StepsType_dance_solo: - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPLEFT] = 1; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 2; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 3; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UPRIGHT] = 4; - g_mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 5; - break; - DEFAULT_FAIL( out.m_StepsType ); - } - - int iNumFeet = StringToInt(sNumFeet); - // out.SetDescription(sDescription); // Don't put garbage in the description. - out.SetMeter(iNumFeet); out.SetDifficulty( DwiCompatibleStringToDifficulty(sDescription) ); - - NoteData newNoteData; - newNoteData.SetNumTracks( g_mapDanceNoteToNoteDataColumn.size() ); - - for( int pad=0; pad<2; pad++ ) // foreach pad - { - RString sStepData; - switch( pad ) - { - case 0: - sStepData = sStepData1; - break; - case 1: - if( sStepData2 == "" ) // no data - continue; // skip - sStepData = sStepData2; - break; - DEFAULT_FAIL( pad ); - } - - sStepData.Replace("\n", ""); - sStepData.Replace("\r", ""); - sStepData.Replace("\t", ""); - sStepData.Replace(" ", ""); - - double fCurrentBeat = 0; - double fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; - - for( size_t i=0; i': - fCurrentIncrementer = 1.0/8 * BEATS_PER_MEASURE; - break; - - default: // this is a note character - { - if( c == '!' ) - { - LOG->UserLog( "Song file", sPath, "has an unexpected character: '!'." ); - continue; - } - - bool jump = false; - if( c == '<' ) - { - /* Arr. Is this a jump or a 1/192 marker? */ - if( Is192( sStepData, i ) ) - { - fCurrentIncrementer = 1.0/192 * BEATS_PER_MEASURE; - break; - } - - /* It's a jump. We need to keep reading notes until we hit a >. */ - jump = true; - i++; - } - - const int iIndex = BeatToNoteRow( (float)fCurrentBeat ); - i--; - do { - c = sStepData[i++]; - - if( jump && c == '>' ) - break; - - int iCol1, iCol2; - DWIcharToNoteCol( c, (GameController)pad, iCol1, iCol2, sPath ); - - if( iCol1 != -1 ) - newNoteData.SetTapNote(iCol1, iIndex, TAP_ORIGINAL_TAP); - if( iCol2 != -1 ) - newNoteData.SetTapNote(iCol2, iIndex, TAP_ORIGINAL_TAP); - - if(i>=sStepData.length()) { - break;//we ran out of data while looking for the ending > mark - } - - if( sStepData[i] == '!' ) - { - i++; - const char holdChar = sStepData[i++]; - - DWIcharToNoteCol( holdChar, (GameController)pad, iCol1, iCol2, sPath ); - - if( iCol1 != -1 ) - newNoteData.SetTapNote(iCol1, iIndex, TAP_ORIGINAL_HOLD_HEAD); - if( iCol2 != -1 ) - newNoteData.SetTapNote(iCol2, iIndex, TAP_ORIGINAL_HOLD_HEAD); - } - } - while( jump ); - fCurrentBeat += fCurrentIncrementer; - } - break; - } - } - } - - /* Fill in iDuration. */ - for( int t=0; tUserLog( "Song file", sPath, "failed to close a hold note in \"%s\" on track %i", - sDescription.c_str(), t ); - - newNoteData.SetTapNote( t, iHeadRow, TAP_EMPTY ); - } - } - } - - ASSERT( newNoteData.GetNumTracks() > 0 ); - - out.SetNoteData( newNoteData ); + + out.SetNoteData( ParseNoteData(sStepData1, sStepData2, out, sPath) ); out.TidyUpData(); out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved - return true; } @@ -444,17 +477,55 @@ void DWILoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.dwi"), out ); } +bool DWILoader::LoadNoteDataFromSimfile( const RString &path, Steps &out ) +{ + MsdFile msd; + if( !msd.ReadFile( path, false ) ) // don't unescape + { + LOG->UserLog("Song file", + path, + "couldn't be opened: %s", + msd.GetError().c_str() ); + return false; + } + + for( unsigned i=0; i &BlacklistedImages ) { vector aFileNames; GetApplicableFiles( sPath_, aFileNames ); - + if( aFileNames.size() > 1 ) { LOG->UserLog( "Song", sPath_, "has more than one DWI file. There should be only one!" ); return false; } - + /* We should have exactly one; if we had none, we shouldn't have been called to begin with. */ ASSERT( aFileNames.size() == 1 ); const RString sPath = sPath_ + aFileNames[0]; @@ -468,6 +539,8 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla return false; } + out.m_sSongFileName = sPath; + for( unsigned i=0; i &Bla sPath ); if( pNewNotes->m_StepsType != StepsType_Invalid ) + { + pNewNotes->SetFilename( sPath ); out.AddSteps( pNewNotes ); + } else delete pNewNotes; } @@ -664,7 +740,6 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla // do nothing. We don't care about this value name } } - out.TidyUpData(); return true; } diff --git a/src/NotesLoaderDWI.h b/src/NotesLoaderDWI.h index 1aa9e729c4..c121d0dc28 100644 --- a/src/NotesLoaderDWI.h +++ b/src/NotesLoaderDWI.h @@ -6,6 +6,7 @@ #include class Song; +class Steps; /** @brief The DWILoader handles parsing the .dwi file. */ namespace DWILoader @@ -24,6 +25,8 @@ namespace DWILoader * @return its success or failure. */ bool LoadFromDir( const RString &sPath, Song &out, set &BlacklistedImages ); + + bool LoadNoteDataFromSimfile( const RString &path, Steps &out ); } #endif diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index 0e078bb7ad..fdd93670c5 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -195,28 +195,43 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, out.SetDifficulty( Difficulty_Edit ); if( !out.GetMeter() ) out.SetMeter( 25 ); } - else if( sFName.find("wild") != string::npos || sFName.find("wd") != string::npos || sFName.find("crazy+") != string::npos || sFName.find("cz+") != string::npos || sFName.find("hardcore") != string::npos ) + else if(sFName.find("wild") != string::npos || + sFName.find("wd") != string::npos || + sFName.find("crazy+") != string::npos || + sFName.find("cz+") != string::npos || + sFName.find("hardcore") != string::npos ) { out.SetDifficulty( Difficulty_Challenge ); if( !out.GetMeter() ) out.SetMeter( 20 ); } - else if( sFName.find("crazy") != string::npos || sFName.find("cz") != string::npos || sFName.find("nightmare") != string::npos || sFName.find("nm") != string::npos || sFName.find("crazydouble") != string::npos ) + else if(sFName.find("crazy") != string::npos || + sFName.find("cz") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("crazydouble") != string::npos ) { out.SetDifficulty( Difficulty_Hard ); if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. } - else if( sFName.find("hard") != string::npos || sFName.find("hd") != string::npos || sFName.find("freestyle") != string::npos || sFName.find("fs") != string::npos || sFName.find("double") != string::npos ) + else if(sFName.find("hard") != string::npos || + sFName.find("hd") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("fs") != string::npos || + sFName.find("double") != string::npos ) { out.SetDifficulty( Difficulty_Medium ); if( !out.GetMeter() ) out.SetMeter( 8 ); } - else if( sFName.find("easy") != string::npos || sFName.find("ez") != string::npos || sFName.find("normal") != string::npos ) + else if(sFName.find("easy") != string::npos || + sFName.find("ez") != string::npos || + sFName.find("normal") != string::npos ) { // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster out.SetDifficulty( Difficulty_Easy ); if( !out.GetMeter() ) out.SetMeter( 4 ); } - else if( sFName.find("beginner") != string::npos || sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) + else if(sFName.find("beginner") != string::npos || + sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) { out.SetDifficulty( Difficulty_Beginner ); if( !out.GetMeter() ) out.SetMeter( 4 ); @@ -230,10 +245,18 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, out.m_StepsType = StepsType_pump_single; // Check for "halfdouble" before "double". - if( sFName.find("halfdouble") != string::npos || sFName.find("half-double") != string::npos || sFName.find("h_double") != string::npos || sFName.find("hdb") != string::npos ) + if(sFName.find("halfdouble") != string::npos || + sFName.find("half-double") != string::npos || + sFName.find("h_double") != string::npos || + sFName.find("hdb") != string::npos ) out.m_StepsType = StepsType_pump_halfdouble; // Handle bDoublesChart from above as well. -aj - else if( sFName.find("double") != string::npos || sFName.find("nightmare") != string::npos || sFName.find("freestyle") != string::npos || sFName.find("db") != string::npos || sFName.find("nm") != string::npos || sFName.find("fs") != string::npos || bDoublesChart ) + else if(sFName.find("double") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("db") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("fs") != string::npos || bDoublesChart ) out.m_StepsType = StepsType_pump_double; else if( sFName.find("_1") != string::npos ) out.m_StepsType = StepsType_pump_single; @@ -280,7 +303,10 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, if( iHoldStartRow[t] == BeatToNoteRow(prevBeat) ) notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); else - notedata.AddHoldNote( t, iHoldStartRow[t], BeatToNoteRow(prevBeat) , TAP_ORIGINAL_HOLD_HEAD ); + notedata.AddHoldNote(t, + iHoldStartRow[t], + BeatToNoteRow(prevBeat), + TAP_ORIGINAL_HOLD_HEAD ); } } break; @@ -307,53 +333,6 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, { // duh iTickCount = static_cast(numTemp); - //if( iTickCount > ROWS_PER_BEAT ) - - /* adapt tickcounts // - // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT - // put this inside the tickcount handling condition yes/no - - if( iTickCount > ROWS_PER_BEAT ) // beyond 48 - { - // clamp/scale/whatever and use scroll segments - } - else if( iTickCount > 32 || iTickCount < ROWS_PER_BEAT ) // ranging from 33 to 48, approximate to 32 - { - fScrollRatio = 32; - iTickCount = 32; - } - else if( iTickCount > 24 || iTickCount < 32 ) // ranging from 25 to 31, approximate to 24 - { - fScrollRatio = 24; - iTickCount = 24; - } - else if( iTickCount > 16 || iTickCount < 24 ) // ranging from 17 to 23, approximate to 16 - { - fScrollRatio = 16; - iTickCount = 16; - } - else if( iTickCount > 12 || iTickCount < 16 ) // ranging from 13 to 15, approximate to 12 - { - fScrollRatio = 12; - iTickCount = 12; - } - else if( iTickCount > 8 || iTickCount < 12 ) // ranging from 9 to 11, approximate to 8 - { - fScrollRatio = 8; - iTickCount = 8; - } - else if( iTickCount > 6 || iTickCount < 8 ) // 7, approximate to 6 - { - fScrollRatio = 6 / iTickCountt; - iTickCount = 6; - } - else if( iTickCount > 4 || iTickCount < 6 ) // 5, approximate to 4 - { - fScrollRatio = iTickCount / 4; - iTickCount = 4; - } - //*/ - stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); } else if (BeginsWith(sRowString, "|B")) @@ -516,7 +495,21 @@ static void LoadTags( const RString &str, Song &out ) out.m_sArtist = artist; } -static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant ) +static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) +{ + /* TICKCOUNT will be used below if there are DM compliant BPM changes + * and stops. It will be called again in LoadFromKSFFile for the + * actual steps. */ + ticks = StringToInt( value ); + ticks = ticks > 0 ? ticks : 4; + // add a tickcount for those using the [Player] + // CheckpointsUseTimeSignatures metric. -aj + // It's not with timesigs now -DaisuMaster + TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); + timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); +} + +static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) { MsdFile msd; if( !msd.ReadFile( sPath, false ) ) // don't unescape @@ -594,17 +587,7 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant } else if ( sValueName=="TICKCOUNT" ) { - /* TICKCOUNT will be used below if there are DM compliant BPM changes - * and stops. It will be called again in LoadFromKSFFile for the - * actual steps. */ - iTickCount = StringToInt( sParams[1] ); - iTickCount = iTickCount > 0 ? iTickCount : 4; - // add a tickcount for those using the [Player] - // CheckpointsUseTimeSignatures metric. -aj - // It's not with timesigs now -DaisuMaster - TickcountSegment * tcs = new TickcountSegment(0); - tcs->SetTicks(iTickCount > ROWS_PER_BEAT ? ROWS_PER_BEAT : iTickCount); - out.m_SongTiming.AddSegment( SEGMENT_TICKCOUNT, tcs ); + ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); } else if ( sValueName=="STEP" ) { @@ -689,7 +672,6 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool bKIUCompliant } // This is where the DMRequired test will take place. - //if (BeginsWith(NoteRowString, "|T") || BeginsWith(NoteRowString, "|B") || BeginsWith(NoteRowString, "|D") || BeginsWith(NoteRowString, "|E") ) if ( BeginsWith( NoteRowString, "|" ) ) { // have a static timing for everything @@ -723,6 +705,22 @@ void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.ksf"), out ); } +bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + bool KIUCompliant = false; + Song dummy; + if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) + return false; + Steps *notes = dummy.CreateSteps(); + if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) + { + KIUCompliant = true; // yeah, reusing a variable. + out.SetNoteData(notes->GetNoteData()); + } + delete notes; + return KIUCompliant; +} + bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) { LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); @@ -733,7 +731,7 @@ bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) // We shouldn't have been called to begin with if there were no KSFs. ASSERT( arrayKSFFileNames.size() ); - //bool bKIUCompliant = false; + bool bKIUCompliant = false; /* With Split Timing, there has to be a backup Song Timing in case * anything goes wrong. As these files are kept in alphabetical * order (hopefully), it is best to use the LAST file for timing @@ -751,22 +749,24 @@ bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) // for directmove though, and we're just gathering basic info anyway, and // most of the time all the KSF files have the same info in the #TITLE:; section unsigned files = arrayKSFFileNames.size(); - if( !LoadGlobalData(out.GetSongDir() + arrayKSFFileNames[0], out, false) ) + RString dir = out.GetSongDir(); + if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) return false; + out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; // load the Steps from the rest of the KSF files for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); out.AddSteps( pNewNotes ); } - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderKSF.h b/src/NotesLoaderKSF.h index b18e94a1e9..650f7aa44f 100644 --- a/src/NotesLoaderKSF.h +++ b/src/NotesLoaderKSF.h @@ -2,11 +2,13 @@ #define NOTES_LOADER_KSF_H class Song; +class Steps; /** @brief Reads a Song from a set of .KSF files. */ namespace KSFLoader { void GetApplicableFiles( const RString &sPath, vector &out ); bool LoadFromDir( const RString &sDir, Song &out ); + bool LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ); } #endif diff --git a/src/NotesLoaderMidi.cpp b/src/NotesLoaderMidi.cpp index d34e5434a6..e1cdabe15d 100644 --- a/src/NotesLoaderMidi.cpp +++ b/src/NotesLoaderMidi.cpp @@ -956,7 +956,7 @@ bool MidiLoader::LoadFromDir( const RString &sDir, Song &out ) if( !LoadFromMidi(sDir+vsFiles[0], out) ) return false; - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderPMS.cpp b/src/NotesLoaderPMS.cpp index 301b843379..ca4c672091 100644 --- a/src/NotesLoaderPMS.cpp +++ b/src/NotesLoaderPMS.cpp @@ -573,7 +573,7 @@ static bool LoadFromPMSFile( const RString &sPath, const NameToData_t &mapNameTo return true; } -static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, MeasureToTimeSig_t &sigAdjustmentsOut, map &idToKeySoundIndexOut ) +static void ReadGlobalTags( const RString &sPath, const NameToData_t &mapNameToData, Song &out, MeasureToTimeSig_t &sigAdjustmentsOut, map &idToKeySoundIndexOut ) { RString sData; if( GetTagFromMap(mapNameToData, "#title", sData) ) @@ -611,26 +611,29 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur // this is keysound file name. Looks like "#WAV1A" RString nData = it->second; RString sWavID = sName.Right(2); + RString dir = out.GetSongDir(); + if (dir.empty()) + dir = Dirname(sPath); /* Due to bugs in some programs, many PMS files have a "WAV" extension * on files in the PMS for files that actually have some other extension. * Do a search. Don't do a wildcard search; if sData is "song.wav", * we might also have "song.png", which we shouldn't match. */ - if( !IsAFile(out.GetSongDir()+nData) ) + if( !IsAFile(dir+nData) ) { const char *exts[] = { "oga", "ogg", "wav", "mp3", NULL }; // XXX: stop duplicating these everywhere for( unsigned i = 0; exts[i] != NULL; ++i ) { RString fn = SetExtension( nData, exts[i] ); - if( IsAFile(out.GetSongDir()+fn) ) + if( IsAFile(dir+fn) ) { nData = fn; break; } } } - if( !IsAFile(out.GetSongDir()+nData) ) - LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", nData.c_str() ); + if( !IsAFile(dir+nData) ) + LOG->UserLog( "Song file", dir, "references key \"%s\" that can't be found", nData.c_str() ); sWavID.MakeUpper(); // HACK: undo the MakeLower() out.m_vsKeysoundFile.push_back( nData ); @@ -810,6 +813,64 @@ void PMSLoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.pms"), out ); } +bool PMSLoader::LoadNoteDataFromSimfile(const RString &cachePath, Steps &out) +{ + Song dummy; + // TODO: Simplify this copy/paste from LoadFromDir. + + vector BMSData; + BMSData.push_back(NameToData_t()); + ReadPMSFile(cachePath, BMSData.back()); + + RString commonSubstring; + GetCommonTagFromMapList( BMSData, "#title", commonSubstring ); + + Steps *copy = dummy.CreateSteps(); + + copy->SetDifficulty( Difficulty_Medium ); + RString sTag; + if( GetTagFromMap( BMSData[0], "#title", sTag ) && sTag.size() != commonSubstring.size() ) + { + sTag = sTag.substr( commonSubstring.size(), sTag.size() - commonSubstring.size() ); + sTag.MakeLower(); + + if( sTag.find('l') != sTag.npos ) + { + unsigned lPos = sTag.find('l'); + if( lPos > 2 && sTag.substr(lPos-2,4) == "solo" ) + { + copy->SetDifficulty( Difficulty_Edit ); + } + else + { + copy->SetDifficulty( Difficulty_Easy ); + } + } + else if( sTag.find('a') != sTag.npos ) + copy->SetDifficulty( Difficulty_Hard ); + else if( sTag.find('b') != sTag.npos ) + copy->SetDifficulty( Difficulty_Beginner ); + } + if( commonSubstring == "" ) + { + copy->SetDifficulty(Difficulty_Medium); + RString unused; + if (GetTagFromMap(BMSData[0], "#title#", sTag)) + SearchForDifficulty(unused, copy); + } + MeasureToTimeSig_t sigAdjustments; + map idToKeysoundIndex; + ReadGlobalTags( cachePath, BMSData[0], dummy, sigAdjustments, idToKeysoundIndex ); + + const bool ok = LoadFromPMSFile( cachePath, BMSData[0], *copy, sigAdjustments, idToKeysoundIndex ); + if( ok ) + { + out.SetNoteData(copy->GetNoteData()); + } + return ok; + +} + bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) { LOG->Trace( "Song::LoadFromPMSDir(%s)", sDir.c_str() ); @@ -915,7 +976,8 @@ bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) MeasureToTimeSig_t sigAdjustments; map idToKeysoundIndex; - ReadGlobalTags( aPMSData[iMainDataIndex], out, sigAdjustments, idToKeysoundIndex ); + ReadGlobalTags( sDir, aPMSData[iMainDataIndex], out, sigAdjustments, idToKeysoundIndex ); + out.m_sSongFileName = out.GetSongDir() + arrayPMSFileNames[iMainDataIndex]; // Override what that global tag said about the title if we have a good substring. // Prevents clobbering and catches "MySong (7keys)" / "MySong (Another) (7keys)" @@ -930,7 +992,10 @@ bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) Steps* pNewNotes = apSteps[i]; const bool ok = LoadFromPMSFile( out.GetSongDir() + arrayPMSFileNames[i], aPMSData[i], *pNewNotes, sigAdjustments, idToKeysoundIndex ); if( ok ) + { + pNewNotes->SetFilename(out.GetSongDir() + arrayPMSFileNames[i]); out.AddSteps( pNewNotes ); + } else delete pNewNotes; } @@ -941,7 +1006,7 @@ bool PMSLoader::LoadFromDir( const RString &sDir, Song &out ) ConvertString( out.m_sArtist, "utf-8,japanese" ); ConvertString( out.m_sGenre, "utf-8,japanese" ); - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderPMS.h b/src/NotesLoaderPMS.h index 0cdc0d398d..65ec7f4ecb 100644 --- a/src/NotesLoaderPMS.h +++ b/src/NotesLoaderPMS.h @@ -2,11 +2,13 @@ #define NOTES_LOADER_PMS_H class Song; +class Steps; /** @brief Reads a Song from a set of .PMS files. */ namespace PMSLoader { void GetApplicableFiles( const RString &sPath, vector &out ); bool LoadFromDir( const RString &sDir, Song &out ); + bool LoadNoteDataFromSimfile(const RString & cachePath, Steps & out); } #endif diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index ba3ea24e50..9a5f276105 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -10,6 +10,7 @@ #include "Song.h" #include "SongManager.h" #include "Steps.h" +#include "Attack.h" #include "PrefsManager.h" void SMLoader::SetSongTitle(const RString & title) @@ -95,23 +96,6 @@ void SMLoader::LoadFromTokens( } out.SetMeter( StringToInt(sMeter) ); - vector saValues; - split( sRadarValues, ",", saValues, true ); - int categories = NUM_RadarCategory - 1; // Fakes aren't counted in the radar values. - if( saValues.size() == (unsigned)categories * NUM_PLAYERS ) - { - RadarValues v[NUM_PLAYERS]; - FOREACH_PlayerNumber( pn ) - { - // Can't use the foreach anymore due to flexible radar lines. - for( RadarCategory rc = (RadarCategory)0; rc < categories; - enum_add( rc, 1 ) ) - { - v[pn][rc] = StringToFloat( saValues[pn*categories + rc] ); - } - } - out.SetCachedRadarValues( v ); - } out.SetSMNoteData( sNoteData ); @@ -645,9 +629,8 @@ bool SMLoader::LoadFromBGChangesString( BackgroundChange &change, const RString return aBGChangeValues.size() >= 2; } -bool SMLoader::LoadNotedataFromSimfile( const RString &path, Steps &out ) +bool SMLoader::LoadNoteDataFromSimfile( const RString &path, Steps &out ) { - // stub: do this later. MsdFile msd; if( !msd.ReadFile( path, true ) ) // unescape { @@ -698,7 +681,7 @@ bool SMLoader::LoadNotedataFromSimfile( const RString &path, Steps &out ) RString noteData = sParams[6]; Trim( noteData ); out.SetSMNoteData( noteData ); - + out.TidyUpData(); return true; } } @@ -717,6 +700,7 @@ bool SMLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCache } out.m_SongTiming.m_sFile = sPath; + out.m_sSongFileName = sPath; for( unsigned i=0; iSetFilename(sPath); out.AddSteps( pNewNotes ); } // XXX: Does anyone know what LEADTRACK is for? -Wolfman2000 @@ -1110,7 +1095,10 @@ void SMLoader::TidyUpData( Song &song, bool bFromCache ) bg.push_back( BackgroundChange(lastBeat,song.m_sBackgroundFile) ); } while(0); } - song.TidyUpData( bFromCache ); + if (bFromCache) + { + song.TidyUpData( bFromCache, true ); + } } /* diff --git a/src/NotesLoaderSM.h b/src/NotesLoaderSM.h index 6654c5bc62..6ba22589d6 100644 --- a/src/NotesLoaderSM.h +++ b/src/NotesLoaderSM.h @@ -46,7 +46,7 @@ struct SMLoader * @brief Retrieve the relevant notedata from the simfile. * @param path the path where the simfile lives. * @param out the Steps we are loading the data into. */ - virtual bool LoadNotedataFromSimfile(const RString &path, Steps &out ); + virtual bool LoadNoteDataFromSimfile(const RString &path, Steps &out ); /** * @brief Attempt to load the specified sm file. diff --git a/src/NotesLoaderSMA.cpp b/src/NotesLoaderSMA.cpp index 2a6198e1ff..1a3cf4ef00 100644 --- a/src/NotesLoaderSMA.cpp +++ b/src/NotesLoaderSMA.cpp @@ -164,6 +164,7 @@ bool SMALoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach } out.m_SongTiming.m_sFile = sPath; // songs still have their fallback timing. + out.m_sSongFileName = sPath; int state = SMA_GETTING_SONG_INFO; Steps* pNewNotes = NULL; @@ -450,7 +451,7 @@ bool SMALoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach sParams[5], sParams[6], *pNewNotes ); - + pNewNotes->SetFilename(sPath); out.AddSteps( pNewNotes ); } else if( sValueName=="TIMESIGNATURES" || sValueName=="LEADTRACK" ) @@ -462,7 +463,7 @@ bool SMALoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach sValueName.c_str() ); } TidyUpData(out, false); - out.TidyUpData(); + out.TidyUpData(false, true); return true; } diff --git a/src/NotesLoaderSSC.cpp b/src/NotesLoaderSSC.cpp index 2e5fc1cabf..4475916620 100644 --- a/src/NotesLoaderSSC.cpp +++ b/src/NotesLoaderSSC.cpp @@ -146,6 +146,95 @@ void SSCLoader::ProcessScrolls( TimingData &out, const RString sParam ) } } +bool SSCLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + LOG->Trace( "Loading notes from %s", cachePath.c_str() ); + + MsdFile msd; + if (!msd.ReadFile(cachePath, true)) + { + LOG->UserLog("Unable to load any notes from", + cachePath, + "for this reason: %s", + msd.GetError().c_str()); + return false; + } + + bool tryingSteps = false; + float storedVersion; + const unsigned values = msd.GetNumValues(); + + for (unsigned i = 0; i < values; i++) + { + const MsdFile::value_t ¶ms = msd.GetValue(i); + RString valueName = params[0]; + valueName.MakeUpper(); + RString matcher = params[1]; // mainly for debugging. + Trim(matcher); + + if (valueName=="VERSION") + { + storedVersion = StringToFloat(matcher); + } + if (tryingSteps) + { + if( valueName=="STEPSTYPE" ) + { + if (out.m_StepsType != GAMEMAN->StringToStepsType(matcher)) + tryingSteps = false; + } + else if( valueName=="CHARTNAME") + { + if (storedVersion >= VERSION_CHART_NAME_TAG && out.GetChartName() != matcher) + tryingSteps = false; + } + else if( valueName=="DESCRIPTION" ) + { + if (storedVersion < VERSION_CHART_NAME_TAG) + { + if (out.GetChartName() != matcher) + tryingSteps = false; + } + else if (out.GetDescription() != matcher) + tryingSteps = false; + } + + else if( valueName=="DIFFICULTY" ) + { + if (out.GetDifficulty() != StringToDifficulty(matcher)) + tryingSteps = false; + } + + else if( valueName=="METER" ) + { + if (out.GetMeter() != StringToInt(matcher)) + tryingSteps = false; + } + + else if( valueName=="CREDIT" ) + { + if (out.GetCredit() != matcher) + tryingSteps = false; + } + + else if( valueName=="NOTES" || valueName=="NOTES2" ) + { + out.SetSMNoteData(matcher); + out.TidyUpData(); + return true; + } + } + else + { + if(valueName == "NOTEDATA") + { + tryingSteps = true; + } + } + } + return false; +} + bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCache ) { LOG->Trace( "Song::LoadFromSSCFile(%s)", sPath.c_str() ); @@ -158,6 +247,7 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach } out.m_SongTiming.m_sFile = sPath; // songs still have their fallback timing. + out.m_sSongFileName = sPath; int state = GETTING_SONG_INFO; const unsigned values = msd.GetNumValues(); @@ -484,27 +574,35 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach else if( sValueName=="RADARVALUES" ) { - vector saValues; - split( sParams[1], ",", saValues, true ); - - int categories = NUM_RadarCategory; - if( out.m_fVersion < VERSION_RADAR_FAKE ) - categories -= 1; - - if( saValues.size() == (unsigned)categories * NUM_PLAYERS ) + if (bFromCache) { - RadarValues v[NUM_PLAYERS]; - FOREACH_PlayerNumber( pn ) + vector saValues; + split( sParams[1], ",", saValues, true ); + + int categories = NUM_RadarCategory; + if( out.m_fVersion < VERSION_RADAR_FAKE ) + categories -= 1; + + if( saValues.size() == (unsigned)categories * NUM_PLAYERS ) { - // Can't use the foreach anymore due to flexible radar lines. - for( RadarCategory rc = (RadarCategory)0; rc < categories; - enum_add( rc, +1 ) ) + RadarValues v[NUM_PLAYERS]; + FOREACH_PlayerNumber( pn ) { - v[pn][rc] = StringToFloat( saValues[pn*categories + rc] ); + // Can't use the foreach anymore due to flexible radar lines. + for( RadarCategory rc = (RadarCategory)0; rc < categories; + enum_add( rc, +1 ) ) + { + v[pn][rc] = StringToFloat( saValues[pn*categories + rc] ); + } } + pNewNotes->SetCachedRadarValues( v ); } - pNewNotes->SetCachedRadarValues( v ); } + else + { + // just recalc at time. + } + } else if( sValueName=="CREDIT" ) @@ -519,6 +617,7 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach pNewNotes->m_Timing = stepsTiming; pNewNotes->SetSMNoteData( sParams[1] ); pNewNotes->TidyUpData(); + pNewNotes->SetFilename(sPath); out.AddSteps( pNewNotes ); } @@ -605,6 +704,14 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach pNewNotes->SetMaxBPM(StringToFloat(sParams[2])); } } + else if( sValueName=="STEPFILENAME" ) + { + state = GETTING_SONG_INFO; + if( bHasOwnTiming ) + pNewNotes->m_Timing = stepsTiming; + pNewNotes->SetFilename(sParams[1]); + out.AddSteps( pNewNotes ); + } break; } } diff --git a/src/NotesLoaderSSC.h b/src/NotesLoaderSSC.h index 5b35cc5c4c..3d8f8ca634 100644 --- a/src/NotesLoaderSSC.h +++ b/src/NotesLoaderSSC.h @@ -30,6 +30,8 @@ const float VERSION_SPLIT_TIMING = 0.7f; const float VERSION_OFFSET_BEFORE_ATTACK = 0.72f; /** @brief The version that introduced the Chart Name tag. */ const float VERSION_CHART_NAME_TAG = 0.74f; +/** @brief The version that introduced the cache switch tag. */ +const float VERSION_CACHE_SWITCH_TAG = 0.77f; /** * @brief The SSCLoader handles all of the parsing needed for .ssc files. @@ -65,6 +67,12 @@ struct SSCLoader : public SMLoader */ bool LoadEditFromMsd( const MsdFile &msd, const RString &sEditFilePath, ProfileSlot slot, bool bAddStepsToSong ); + /** + * @brief Retrieve the specific NoteData from the file. + * @param cachePath the path to the cache file. + * @param out the Steps to receive just the particular notedata. + * @return true if successful, false otherwise. */ + virtual bool LoadNoteDataFromSimfile( const RString &cachePath, Steps &out ); void ProcessWarps( TimingData &, const RString, const float ); void ProcessLabels( TimingData &, const RString ); diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index 4be321e651..81eca70991 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -160,16 +160,7 @@ static void WriteGlobalTags( RageFile &f, Song &out ) } f.PutLine( ";" ); - f.Write( "#ATTACKS:" ); - for( unsigned a=0; a < out.m_sAttackString.size(); a++ ) - { - RString sData = out.m_sAttackString[a]; - f.Write( ssprintf( "%s", sData.c_str() ) ); - - if( a != (out.m_sAttackString.size() - 1) ) - f.Write( ":" ); // Not the end, so write a divider ':' - } - f.PutLine( ";" ); + f.PutLine( ssprintf("#ATTACKS:%s;", out.GetAttackString().c_str()) ); } /** diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index 8ca8140231..566905d759 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -180,12 +180,29 @@ static void GetTimingTags( vector &lines, TimingData timing, bool bIsSo static void WriteTimingTags( RageFile &f, const TimingData &timing, bool bIsSong = false ) { - - vector lines; - - GetTimingTags( lines, timing, bIsSong ); - - f.PutLine( JoinLineList( lines ) ); + f.PutLine(ssprintf("#BPMS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_BPM)).c_str())); + f.PutLine(ssprintf("#STOPS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_STOP_DELAY, false)).c_str())); + f.PutLine(ssprintf("#DELAYS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_STOP_DELAY, true)).c_str())); + f.PutLine(ssprintf("#WARPS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_WARP)).c_str())); + f.PutLine(ssprintf("#TIMESIGNATURES:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_TIME_SIG)).c_str())); + f.PutLine(ssprintf("#TICKCOUNTS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_TICKCOUNT)).c_str())); + f.PutLine(ssprintf("#COMBOS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_COMBO)).c_str())); + f.PutLine(ssprintf("#SPEEDS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_SPEED)).c_str())); + f.PutLine(ssprintf("#SCROLLS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_SCROLL)).c_str())); + if (!bIsSong) + f.PutLine(ssprintf("#FAKES:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_FAKE)).c_str())); + f.PutLine(ssprintf("#LABELS:%s;", + join(",\r\n", timing.ToVectorString(SEGMENT_LABEL)).c_str())); } @@ -212,10 +229,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.PutLine( ssprintf( "#MUSIC:%s;", SmEscape(out.m_sMusicFile).c_str() ) ); { - vector vs; - FOREACH_ENUM( InstrumentTrack, it ) - if( out.HasInstrumentTrack(it) ) - vs.push_back( InstrumentTrackToString(it) + "=" + out.m_sInstrumentTrackFile[it] ); + vector vs = out.GetInstrumentTracksToVectorString(); if( !vs.empty() ) { RString s = join( ",", vs ); @@ -229,7 +243,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.Write( "#SELECTABLE:" ); switch(out.m_SelectionDisplay) { - default: ASSERT(0); // fall through + default: ASSERT_M(0, "An invalid selectable value was found for this song!"); // fall through case Song::SHOW_ALWAYS: f.Write( "YES" ); break; //case Song::SHOW_NONSTOP: f.Write( "NONSTOP" ); break; case Song::SHOW_NEVER: f.Write( "NO" ); break; @@ -297,16 +311,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) } f.PutLine( ";" ); - f.Write( "#ATTACKS:" ); - for( unsigned a=0; a < out.m_sAttackString.size(); a++ ) - { - RString sData = out.m_sAttackString[a]; - f.Write( ssprintf( "%s", sData.c_str() ) ); - - if( a != (out.m_sAttackString.size() - 1) ) - f.Write( ":" ); // Not the end, so write a divider ':' - } - f.PutLine( ";" ); + f.PutLine( ssprintf("#ATTACKS:%s;", out.GetAttackString().c_str()) ); } /** @@ -345,17 +350,7 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa GetTimingTags( lines, in.m_Timing ); - RString attacks = ""; - for( unsigned a=0; a < in.m_sAttackString.size(); a++ ) - { - RString sData = in.m_sAttackString[a]; - attacks += sData; - - if( a != (in.m_sAttackString.size() - 1) ) - attacks += ":\r\n"; // Not the end, so write a divider ':' - } - Trim(attacks, ":"); // just in case something screwy happens. - lines.push_back( ssprintf( "#ATTACKS:%s;", attacks.c_str())); + lines.push_back( ssprintf("#ATTACKS:%s;", in.GetAttackString().c_str())); switch( in.GetDisplayBPM() ) { @@ -376,16 +371,21 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa lines.push_back( ssprintf( "#DISPLAYBPM:*;" ) ); break; } - - RString sNoteData; - in.GetSMNoteData( sNoteData ); + if (bSavingCache) + { + lines.push_back(ssprintf("#STEPFILENAME:%s;", in.GetFilename().c_str())); + } + else + { + RString sNoteData; + in.GetSMNoteData( sNoteData ); - lines.push_back( song.m_vsKeysoundFile.empty() ? "#NOTES:" : "#NOTES2:" ); - - TrimLeft(sNoteData); - split( sNoteData, "\n", lines, true ); - lines.push_back( ";" ); + lines.push_back( song.m_vsKeysoundFile.empty() ? "#NOTES:" : "#NOTES2:" ); + TrimLeft(sNoteData); + split( sNoteData, "\n", lines, true ); + lines.push_back( ";" ); + } return JoinLineList( lines ); } diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index 650c9c3a3f..d0ac5a1cfd 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -393,9 +393,33 @@ void ScreenGameplay::Init() /* Called once per stage (single song or single course). */ GAMESTATE->BeginStage(); + int player = 1; + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) + { + unsigned int count = pi->m_vpStepsQueue.size(); + + for (unsigned int i = 0; i < count; i++) + { + Steps *curSteps = pi->m_vpStepsQueue[i]; + if (curSteps->IsNoteDataEmpty()) + { + if (curSteps->GetNoteDataFromSimfile()) + { + LOG->Trace("Notes should be loaded for player %d", player); + } + else + { + LOG->Trace("Error loading notes for player %d", player); + } + } + } + player++; + } + if(!GAMESTATE->IsCourseMode() && !GAMESTATE->m_bDemonstrationOrJukebox) { // fill in difficulty of CPU players with that of the first human player + // this should not need to worry about step content. FOREACH_PotentialCpuPlayer(p) GAMESTATE->m_pCurSteps[p].Set( GAMESTATE->m_pCurSteps[ GAMESTATE->GetFirstHumanPlayer() ] ); diff --git a/src/Song.cpp b/src/Song.cpp index 38d93f7f96..afdddd4c4e 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 191; +const int FILE_CACHE_VERSION = 192; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; @@ -860,7 +860,9 @@ void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache) wipe_notedata: if (duringCache) { - // update this when at that point. + NoteData dummy; + dummy.SetNumTracks(tempNoteData.GetNumTracks()); + pSteps->SetNoteData(dummy); } } diff --git a/src/Song.h b/src/Song.h index 29a53ff942..5f17ad8969 100644 --- a/src/Song.h +++ b/src/Song.h @@ -20,7 +20,7 @@ void FixupPath( RString &path, const RString &sSongPath ); RString GetSongAssetPath( RString sPath, const RString &sSongPath ); /** @brief The version of the .ssc file format. */ -const static float STEPFILE_VERSION_NUMBER = 0.76f; +const static float STEPFILE_VERSION_NUMBER = 0.77f; /** @brief How many edits for this song can each profile have? */ const int MAX_EDITS_PER_SONG_PER_PROFILE = 15; @@ -100,7 +100,9 @@ public: /** * @brief Get the new radar values, and determine the last second at the same time. * - * This is called by TidyUpData, after saving the Song. */ + * This is called by TidyUpData, after saving the Song. + * @param fromCache was this data loaded from the cache file? + * @param duringCache was this data loaded during the cache process? */ void ReCalculateRadarValuesAndLastSecond(bool fromCache = false, bool duringCache = false); /** * @brief Translate any titles that aren't in english. diff --git a/src/Steps.cpp b/src/Steps.cpp index 7e9e659c4a..9700de9a1b 100644 --- a/src/Steps.cpp +++ b/src/Steps.cpp @@ -88,6 +88,45 @@ bool Steps::IsNoteDataEmpty() const return this->m_sNoteDataCompressed.empty(); } +bool Steps::GetNoteDataFromSimfile() +{ + // Replace the line below with the Steps' cache file. + RString stepFile = this->GetFilename(); + RString extension = GetExtension(stepFile); + if (extension.empty() || extension == "ssc") // remember cache files. + { + SSCLoader loader; + return loader.LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "sm") + { + SMLoader loader; + return loader.LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "sma") + { + SMALoader loader; + return loader.LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "dwi") + { + return DWILoader::LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "ksf") + { + return KSFLoader::LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "bms" || extension == "bml" || extension == "bme") + { + return BMSLoader::LoadNoteDataFromSimfile(stepFile, *this); + } + else if (extension == "pms") + { + return PMSLoader::LoadNoteDataFromSimfile(stepFile, *this); + } + return false; +} + void Steps::SetNoteData( const NoteData& noteDataNew ) { ASSERT( noteDataNew.GetNumTracks() == GAMEMAN->GetStepsTypeInfo(m_StepsType).iNumTracks ); @@ -130,7 +169,6 @@ void Steps::SetSMNoteData( const RString ¬es_comp_ ) m_sNoteDataCompressed = notes_comp_; m_iHash = 0; - m_sFilename = RString(); // We can no longer read from the file because it has changed in memory. } /* XXX: this function should pull data from m_sFilename, like Decompress() */ @@ -293,38 +331,14 @@ void Steps::Decompress() if( !m_sFilename.empty() && m_sNoteDataCompressed.empty() ) { - // We have data on disk and not in memory. Load it. - Song s; - SSCLoader loaderSSC; - bool bLoadedFromSSC = loaderSSC.LoadFromSimfile(m_sFilename, s, true); - if( !bLoadedFromSSC ) + // We have NoteData on disk and not in memory. Load it. + if (!this->GetNoteDataFromSimfile()) { - // try reading from .sm instead - SMLoader loaderSM; - if( !loaderSM.LoadFromSimfile(m_sFilename, s, true) ) - { - LOG->Warn( "Couldn't load \"%s\"", m_sFilename.c_str() ); - return; - } - } - - /* Find the steps. */ - StepsID ID; - ID.FromSteps( this ); - - /* We're using a StepsID to search in a different copy of a Song than - * the one it was created with. Clear the cache before doing this, - * or search results will come from cache and point to the original - * copy. */ - CachedObject::ClearCacheAll(); - Steps *pSteps = ID.ToSteps( &s, true ); - if( pSteps == NULL ) - { - LOG->Warn( "Couldn't find %s in \"%s\"", ID.ToString().c_str(), m_sFilename.c_str() ); + LOG->Warn("Couldn't load \"%s\"", m_sFilename.c_str()); return; } - pSteps->GetSMNoteData( m_sNoteDataCompressed ); + this->GetSMNoteData( m_sNoteDataCompressed ); } if( m_sNoteDataCompressed.empty() ) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index fd3db33b47..6097c69489 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -1299,6 +1299,24 @@ void TimingData::NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, i return; } +vector TimingData::ToVectorString(TimingSegmentType tst, + bool isDelay, int dec) const +{ + const vector segs = this->allTimingSegments[tst]; + vector ret; + + for (unsigned i = 0; i < segs.size(); i++) + { + if (tst == SEGMENT_STOP_DELAY) + { + StopSegment *seg = static_cast(segs[i]); + if (seg->GetDelay() == isDelay) + continue; + } + ret.push_back(segs[i]->ToString(dec)); + } + return ret; +} // lua start #include "LuaBinding.h" @@ -1315,136 +1333,47 @@ public: static int HasScrollChanges( T* p, lua_State *L ) { lua_pushboolean(L, p->HasScrollChanges()); return 1; } static int GetWarps( T* p, lua_State *L ) { - vector vWarps; - vector &warps = p->allTimingSegments[SEGMENT_WARP]; - for (unsigned i = 0; i < warps.size(); i++) - { - WarpSegment *seg = static_cast(warps[i]); - const float length = seg->GetLength(); - const float beat = seg->GetBeat(); - vWarps.push_back( ssprintf("%f=%f", beat, length) ); - } - LuaHelpers::CreateTableFromArray(vWarps, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_WARP), L); return 1; } static int GetFakes( T* p, lua_State *L ) { - vector vFakes; - vector &fakes = p->allTimingSegments[SEGMENT_FAKE]; - for (unsigned i = 0; i < fakes.size(); i++) - { - FakeSegment *seg = static_cast(fakes[i]); - const float length = seg->GetLength(); - const float beat = seg->GetBeat(); - vFakes.push_back( ssprintf("%f=%f", beat, length) ); - } - LuaHelpers::CreateTableFromArray(vFakes, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_FAKE), L); return 1; } static int GetScrolls( T* p, lua_State *L ) { - vector vScrolls; - vector &scrolls = p->allTimingSegments[SEGMENT_SCROLL]; - for (unsigned i = 0; i < scrolls.size(); i++) - { - ScrollSegment *seg = static_cast(scrolls[i]); - const float ratio = seg->GetRatio(); - const float beat = seg->GetBeat(); - vScrolls.push_back( ssprintf("%f=%f", beat, ratio) ); - } - LuaHelpers::CreateTableFromArray(vScrolls, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_SCROLL), L); return 1; } static int GetSpeeds( T* p, lua_State *L ) { - vector vSpeeds; - vector &speeds = p->allTimingSegments[SEGMENT_SPEED]; - for (unsigned i = 0; i < speeds.size(); i++) - { - SpeedSegment *seg = static_cast(speeds[i]); - const float length = seg->GetLength(); - const float ratio = seg->GetRatio(); - const unsigned short unit = seg->GetUnit(); - const float beat = seg->GetBeat(); - vSpeeds.push_back( ssprintf("%f=%f=%f=%uh", beat, ratio, length, unit) ); - } - LuaHelpers::CreateTableFromArray(vSpeeds, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_SPEED), L); return 1; } static int GetTimeSignatures( T* p, lua_State *L ) { - vector vTimes; - vector &tSigs = p->allTimingSegments[SEGMENT_TIME_SIG]; - for (unsigned i = 0; i < tSigs.size(); i++) - { - TimeSignatureSegment *seg = static_cast(tSigs[i]); - const int numerator = seg->GetNum(); - const int denominator = seg->GetDen(); - const float beat = seg->GetBeat(); - vTimes.push_back( ssprintf("%f=%d=%d", beat, numerator, denominator) ); - } - LuaHelpers::CreateTableFromArray(vTimes, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_TIME_SIG), L); return 1; } static int GetCombos( T* p, lua_State *L ) { - vector vCombos; - vector &combos = p->allTimingSegments[SEGMENT_COMBO]; - for (unsigned i = 0; i < combos.size(); i++) - { - ComboSegment *seg = static_cast(combos[i]); - const int combo = seg->GetCombo(); - const int miss = seg->GetMissCombo(); - const float beat = seg->GetBeat(); - vCombos.push_back( ssprintf("%f=%d=%d", beat, combo, miss) ); - } - LuaHelpers::CreateTableFromArray(vCombos, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_COMBO), L); return 1; } static int GetTickcounts( T* p, lua_State *L ) { - vector vTicks; - vector &ticks = p->allTimingSegments[SEGMENT_TICKCOUNT]; - for (unsigned i = 0; i < ticks.size(); i++) - { - TickcountSegment *seg = static_cast(ticks[i]); - const int tick = seg->GetTicks(); - const float beat = seg->GetBeat(); - vTicks.push_back( ssprintf("%f=%d", beat, tick) ); - } - LuaHelpers::CreateTableFromArray(vTicks, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_TICKCOUNT), L); return 1; } static int GetStops( T* p, lua_State *L ) { - vector vStops; - vector &stops = p->allTimingSegments[SEGMENT_STOP_DELAY]; - for (unsigned i = 0; i < stops.size(); i++) - { - StopSegment *seg = static_cast(stops[i]); - const float fStartBeat = seg->GetBeat(); - const float fStopLength = seg->GetPause(); - if(!seg->GetDelay()) - vStops.push_back( ssprintf("%f=%f", fStartBeat, fStopLength) ); - } - - LuaHelpers::CreateTableFromArray(vStops, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_STOP_DELAY, false), L); return 1; } static int GetDelays( T* p, lua_State *L ) { - vector vDelays; - vector &stops = p->allTimingSegments[SEGMENT_STOP_DELAY]; - for (unsigned i = 0; i < stops.size(); i++) - { - StopSegment *seg = static_cast(stops[i]); - const float fStartBeat = seg->GetBeat(); - const float fStopLength = seg->GetPause(); - if(seg->GetDelay()) - vDelays.push_back( ssprintf("%f=%f", fStartBeat, fStopLength) ); - } - - LuaHelpers::CreateTableFromArray(vDelays, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_STOP_DELAY, true), L); return 1; } static int GetBPMs( T* p, lua_State *L ) @@ -1463,31 +1392,12 @@ public: } static int GetLabels( T* p, lua_State *L ) { - vector vLabels; - vector &labels = p->allTimingSegments[SEGMENT_LABEL]; - for (unsigned i = 0; i < labels.size(); i++) - { - LabelSegment *seg = static_cast(labels[i]); - const float fStartRow = seg->GetBeat(); - const RString sLabel = seg->GetLabel(); - vLabels.push_back( ssprintf("%f=%s", fStartRow, sLabel.c_str()) ); - } - LuaHelpers::CreateTableFromArray(vLabels, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_LABEL), L); return 1; } static int GetBPMsAndTimes( T* p, lua_State *L ) { - vector vBPMs; - vector &bpms = p->allTimingSegments[SEGMENT_BPM]; - for (unsigned i = 0; i < bpms.size(); i++) - { - BPMSegment *seg = static_cast(bpms[i]); - const float fStartRow = seg->GetBeat(); - const float fBPM = seg->GetBPM(); - vBPMs.push_back( ssprintf("%f=%f", fStartRow, fBPM) ); - } - - LuaHelpers::CreateTableFromArray(vBPMs, L); + LuaHelpers::CreateTableFromArray(p->ToVectorString(SEGMENT_BPM), L); return 1; } static int GetActualBPM( T* p, lua_State *L ) diff --git a/src/TimingData.h b/src/TimingData.h index 5249559dcf..2486ff5701 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -825,6 +825,8 @@ public: * @brief The initial offset of a song. */ float m_fBeat0OffsetInSeconds; + + vector ToVectorString(TimingSegmentType tst, bool isDelay = false, int dec = 6) const; }; #undef COMPARE diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 09ea2782f1..2b0eed4d3d 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -81,6 +81,11 @@ struct TimingSegment { return TimingSegmentType_Invalid; } + // TODO: Remove isDelay optional param and split Stops and Delays. + virtual RString ToString(int dec) const + { + return FloatToString(this->GetBeat()); + } /** * @brief Compares two DrivedSegments to see if one is less than the other. @@ -206,6 +211,13 @@ struct FakeSegment : public TimingSegment TimingSegmentType GetType() const { return SEGMENT_FAKE; } + virtual RString ToString(int dec) const + { + RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetLength()); + } + private: /** * @brief The number of beats the FakeSegment is alive for. @@ -260,6 +272,13 @@ struct WarpSegment : public TimingSegment void Scale( int start, int length, int newLength ); + virtual RString ToString(int dec) const + { + RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetLength()); + } + /* * @brief Compares two WarpSegments to see if one is less than the other. * @param other the other WarpSegment to compare to. @@ -326,6 +345,12 @@ struct TickcountSegment : public TimingSegment * @param i the tickcount. */ void SetTicks(const int i); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + "f=%i"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetTicks()); + } + /** * @brief Compares two TickcountSegments to see if one is less than the other. * @param other the other TickcountSegment to compare to. @@ -404,6 +429,17 @@ struct ComboSegment : public TimingSegment * @param i the miss combo. */ void SetMissCombo(const int i); + virtual RString ToString(int dec) const + { + RString str = "%.0" + IntToString(dec) + "f=%i"; + if (this->GetCombo() == this->GetMissCombo()) + { + return ssprintf(str.c_str(), this->GetBeat(), this->GetCombo()); + } + str += "=%i"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetCombo(), this->GetMissCombo()); + } + /** * @brief Compares two ComboSegments to see if one is less than the other. * @param other the other ComboSegment to compare to. @@ -462,6 +498,12 @@ struct LabelSegment : public TimingSegment * @param l the label. */ void SetLabel(const RString l); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + "f=%s"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetLabel().c_str()); + } + /** * @brief Compares two LabelSegments to see if one is less than the other. * @param other the other LabelSegment to compare to. @@ -526,6 +568,13 @@ struct BPMSegment : public TimingSegment * @param l the label. */ void SetBPS(const float newBPS); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetBPM()); + } + /** * @brief Compares two LabelSegments to see if one is less than the other. * @param other the other LabelSegment to compare to. @@ -604,6 +653,12 @@ struct TimeSignatureSegment : public TimingSegment * @param i the denominator. */ void SetDen(const int i); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + "f=%i=%i"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetNum(), this->GetDen()); + } + /** * @brief Retrieve the number of note rows per measure within the TimeSignatureSegment. * @@ -727,6 +782,15 @@ struct SpeedSegment : public TimingSegment void SetUnit(const int i); void Scale( int start, int length, int newLength ); + + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f=%.0" + + IntToString(dec) + "f=%uh"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetRatio(), + this->GetLength(), this->GetUnit()); + } /** * @brief Compares two SpeedSegments to see if one is less than the other. @@ -792,6 +856,13 @@ struct ScrollSegment : public TimingSegment * @param i the ratio. */ void SetRatio(const float i); + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetBeat(), this->GetRatio()); + } + /** * @brief Compares two ScrollSegment to see if one is less than the other. * @param other the other ScrollSegment to compare to. @@ -867,6 +938,13 @@ struct StopSegment : public TimingSegment * @brief Set the behavior in this StopSegment. * @param i the behavior. */ void SetDelay(const bool i); + + virtual RString ToString(int dec) const + { + const RString str = "%.0" + IntToString(dec) + + "f=%.0" + IntToString(dec) + "f"; + return ssprintf(str.c_str(), this->GetPause()); + } /** * @brief Compares two StopSegments to see if one is less than the other. From 20817bde34cca0754c1355d21241e3a0cc5ddd9f Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:10:18 -0400 Subject: [PATCH 62/94] Revert Mac individually named builds. We need to find a better way without forcing an hg commit request every time we switch Native to Debug to Universal. --- Xcode/stepmania.xcodeproj/project.pbxproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Xcode/stepmania.xcodeproj/project.pbxproj b/Xcode/stepmania.xcodeproj/project.pbxproj index a2fac07ad9..36f73f5a4b 100644 --- a/Xcode/stepmania.xcodeproj/project.pbxproj +++ b/Xcode/stepmania.xcodeproj/project.pbxproj @@ -2019,7 +2019,7 @@ AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; - AA29CE580558741A00961A51 /* StepMania-debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "StepMania-debug.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA29CE580558741A00961A51 /* StepMania.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StepMania.app; sourceTree = BUILT_PRODUCTS_DIR; }; AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; @@ -3232,7 +3232,7 @@ 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - AA29CE580558741A00961A51 /* StepMania-debug.app */, + AA29CE580558741A00961A51 /* StepMania.app */, AA40D52B09A08D660068C0D5 /* sm-ssc.app */, AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */, AA7A2B940AE09B520054C5BA /* lua */, @@ -5736,7 +5736,7 @@ name = stepmania; productInstallPath = "$(HOME)/Applications"; productName = "SDL App"; - productReference = AA29CE580558741A00961A51 /* StepMania-debug.app */; + productReference = AA29CE580558741A00961A51 /* StepMania.app */; productType = "com.apple.product-type.application"; }; AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { @@ -7918,7 +7918,7 @@ "-fno-exceptions", "-falign-loops=16", ); - PRODUCT_NAME = "StepMania-debug"; + PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; }; @@ -8629,7 +8629,7 @@ "-fno-exceptions", "-falign-loops=16", ); - PRODUCT_NAME = "StepMania-FastDebug"; + PRODUCT_NAME = StepMania; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; From f8446ac3ca7df405d6c572f53609d8450b69b176 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 16:18:22 -0400 Subject: [PATCH 63/94] That "h" wasn't behaving right. Remove. --- src/Song.cpp | 2 +- src/TimingSegments.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Song.cpp b/src/Song.cpp index afdddd4c4e..2ceff1d54c 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 192; +const int FILE_CACHE_VERSION = 193; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 2b0eed4d3d..bb07e2f7c7 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -787,7 +787,7 @@ struct SpeedSegment : public TimingSegment { const RString str = "%.0" + IntToString(dec) + "f=%.0" + IntToString(dec) + "f=%.0" - + IntToString(dec) + "f=%uh"; + + IntToString(dec) + "f=%u"; return ssprintf(str.c_str(), this->GetBeat(), this->GetRatio(), this->GetLength(), this->GetUnit()); } From 92bab49a16f9f3bb3c15d6be3f4564660c9a643a Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 22:21:16 -0400 Subject: [PATCH 64/94] Hurp-a-durp. ...never let me say that again. Cache increased. --- src/NotesWriterSSC.cpp | 2 +- src/Song.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index 566905d759..0a47768f41 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -329,7 +329,7 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa lines.push_back( ssprintf("//---------------%s - %s----------------", GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName, SmEscape(in.GetDescription()).c_str()) ); lines.push_back( "#NOTEDATA:;" ); // our new separator. - lines.push_back( ssprintf( "#CHARTNAME:%s:", SmEscape(in.GetChartName()).c_str())); + lines.push_back( ssprintf( "#CHARTNAME:%s;", SmEscape(in.GetChartName()).c_str())); lines.push_back( ssprintf( "#STEPSTYPE:%s;", GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName ) ); lines.push_back( ssprintf( "#DESCRIPTION:%s;", SmEscape(in.GetDescription()).c_str() ) ); lines.push_back( ssprintf( "#CHARTSTYLE:%s;", SmEscape(in.GetChartStyle()).c_str() ) ); diff --git a/src/Song.cpp b/src/Song.cpp index 2ceff1d54c..49b5f2bac4 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 193; +const int FILE_CACHE_VERSION = 194; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; From acbf2e9aa786b9db0f95ffa90be4fcea00554bde Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 23:42:38 -0400 Subject: [PATCH 65/94] Another syntax bug, another cache force. ...alright, even I'm getting annoyed with this. --- src/NotesLoaderSM.cpp | 3 ++- src/Song.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index 9a5f276105..c74e867a18 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -133,7 +133,8 @@ void SMLoader::ProcessAttackString( vector & attacks, MsdFile::value_t { RString tmp = params[s]; Trim(tmp); - attacks.push_back( tmp ); + if (tmp.size() > 0) + attacks.push_back( tmp ); } } diff --git a/src/Song.cpp b/src/Song.cpp index 49b5f2bac4..da0b73bcfc 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 194; +const int FILE_CACHE_VERSION = 195; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; From 0944948cadd6d6795001d9bb96517682fe01e922 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 17 Jul 2011 23:58:22 -0400 Subject: [PATCH 66/94] Fix Stops and Delays on the timing bar. --- src/TimingData.cpp | 2 +- src/TimingSegments.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 6097c69489..6802d7b474 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -1310,7 +1310,7 @@ vector TimingData::ToVectorString(TimingSegmentType tst, if (tst == SEGMENT_STOP_DELAY) { StopSegment *seg = static_cast(segs[i]); - if (seg->GetDelay() == isDelay) + if (seg->GetDelay() != isDelay) continue; } ret.push_back(segs[i]->ToString(dec)); diff --git a/src/TimingSegments.h b/src/TimingSegments.h index bb07e2f7c7..b8f954d467 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -943,7 +943,7 @@ struct StopSegment : public TimingSegment { const RString str = "%.0" + IntToString(dec) + "f=%.0" + IntToString(dec) + "f"; - return ssprintf(str.c_str(), this->GetPause()); + return ssprintf(str.c_str(), this->GetBeat(), this->GetPause()); } /** From a612d6eb93a2c5dbe0503ed57c03c8941c6b482b Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Mon, 18 Jul 2011 11:27:28 -0600 Subject: [PATCH 67/94] fix warnings retrieving placeholders (will work with those later I promise) --- src/NotesLoaderKSF.cpp | 47 ++++++++++++++++++++++++++++++++++++++++- src/NotesLoaderMidi.cpp | 2 +- src/NotesLoaderSSC.cpp | 2 +- 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index fdd93670c5..e920e53974 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -496,7 +496,52 @@ static void LoadTags( const RString &str, Song &out ) } static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) -{ +{ + /* adapt tickcounts // + // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT + // put this inside the tickcount handling condition yes/no + + if( iTickCount > ROWS_PER_BEAT ) // beyond 48 + { + // clamp/scale/whatever and use scroll segments + } + else if( iTickCount > 32 || iTickCount < ROWS_PER_BEAT ) // ranging from 33 to 48, approximate to 32 + { + fScrollRatio = 32; + iTickCount = 32; + } + else if( iTickCount > 24 || iTickCount < 32 ) // ranging from 25 to 31, approximate to 24 + { + fScrollRatio = 24; + iTickCount = 24; + } + else if( iTickCount > 16 || iTickCount < 24 ) // ranging from 17 to 23, approximate to 16 + { + fScrollRatio = 16; + iTickCount = 16; + } + else if( iTickCount > 12 || iTickCount < 16 ) // ranging from 13 to 15, approximate to 12 + { + fScrollRatio = 12; + iTickCount = 12; + } + else if( iTickCount > 8 || iTickCount < 12 ) // ranging from 9 to 11, approximate to 8 + { + fScrollRatio = 8; + iTickCount = 8; + } + else if( iTickCount > 6 || iTickCount < 8 ) // 7, approximate to 6 + { + fScrollRatio = 6 / iTickCountt; + iTickCount = 6; + } + else if( iTickCount > 4 || iTickCount < 6 ) // 5, approximate to 4 + { + fScrollRatio = iTickCount / 4; + iTickCount = 4; + } + //*/ + /* TICKCOUNT will be used below if there are DM compliant BPM changes * and stops. It will be called again in LoadFromKSFFile for the * actual steps. */ diff --git a/src/NotesLoaderMidi.cpp b/src/NotesLoaderMidi.cpp index e1cdabe15d..f356cdb3d6 100644 --- a/src/NotesLoaderMidi.cpp +++ b/src/NotesLoaderMidi.cpp @@ -677,7 +677,7 @@ static bool LoadFromMidi( const RString &sPath, Song &songOut ) FOREACH_CONST( MidiFileIn::TempoChange, midi.tempoEvents_, iter ) { - BPMSegment * bpmSeg; + BPMSegment * bpmSeg = NULL; bpmSeg->SetRow( MidiCountToNoteRow( iter->count ) ); double fSecondsPerBeat = (iter->tickSeconds * GUITAR_MIDI_COUNTS_PER_BEAT); bpmSeg->SetBPS( float( 1. / fSecondsPerBeat ) ); diff --git a/src/NotesLoaderSSC.cpp b/src/NotesLoaderSSC.cpp index 4475916620..bcefb97fad 100644 --- a/src/NotesLoaderSSC.cpp +++ b/src/NotesLoaderSSC.cpp @@ -161,7 +161,7 @@ bool SSCLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) } bool tryingSteps = false; - float storedVersion; + float storedVersion = 0; const unsigned values = msd.GetNumValues(); for (unsigned i = 0; i < values; i++) From 09ec4bee646f03f53db263219610f261849eb262 Mon Sep 17 00:00:00 2001 From: Colby Klein Date: Mon, 18 Jul 2011 11:33:44 -0700 Subject: [PATCH 68/94] ARB_fragment_program is not the correct ext: we need ARB_fragment_shader instead. I didn't notice as I don't have any hardware which does not support frag shaders. --- src/RageDisplay_Legacy.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/RageDisplay_Legacy.cpp b/src/RageDisplay_Legacy.cpp index 4247510dc7..2b664f2f5b 100644 --- a/src/RageDisplay_Legacy.cpp +++ b/src/RageDisplay_Legacy.cpp @@ -340,7 +340,7 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector asD GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector asDefines ) { // Don't do anything here if not the hardware/driver can't do it! - if (!GLEW_ARB_fragment_program && GLEW_ARB_shading_language_100 && ShaderType == GL_FRAGMENT_SHADER_ARB) + if (!GLEW_ARB_fragment_shader && ShaderType == GL_FRAGMENT_SHADER_ARB) return 0; if (!GLEW_ARB_vertex_shader && ShaderType == GL_VERTEX_SHADER_ARB) return 0; @@ -1662,7 +1662,7 @@ void RageDisplay_Legacy::SetTextureFiltering( TextureUnit tu, bool b ) void RageDisplay_Legacy::SetEffectMode( EffectMode effect ) { - if (!GLEW_ARB_fragment_program && !GLEW_ARB_shading_language_100) + if (!GLEW_ARB_fragment_shader) return; GLhandleARB hShader = 0; @@ -2648,11 +2648,9 @@ void RageDisplay_Legacy::SetSphereEnvironmentMapping(TextureUnit tu, bool b) } } -GLint iCelTexture1, iCelTexture2 = 0; - void RageDisplay_Legacy::SetCelShaded( int stage ) { - if (!GLEW_ARB_fragment_program && !GL_ARB_shading_language_100) + if (!GLEW_ARB_fragment_shader) return; // not supported switch (stage) From ab7c163f52e7aa660878e1f41ac6eea948d17aec Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Mon, 18 Jul 2011 20:06:40 -0600 Subject: [PATCH 69/94] is broken... --- src/NotesLoaderKSF.cpp | 1596 ++++++++++++++++++++-------------------- 1 file changed, 798 insertions(+), 798 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index e920e53974..e55c6aac1e 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -1,501 +1,501 @@ -#include "global.h" -#include "NotesLoaderKSF.h" -#include "RageUtil_CharConversions.h" -#include "MsdFile.h" -#include "RageLog.h" -#include "RageUtil.h" -#include "NoteData.h" -#include "NoteTypes.h" -#include "Song.h" -#include "Steps.h" - -static void HandleBunki( TimingData &timing, const float fEarlyBPM, - const float fCurBPM, const float fGap, - const float fPos ) -{ - const float BeatsPerSecond = fEarlyBPM / 60.0f; - const float beat = (fPos + fGap) * BeatsPerSecond; - LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", - fEarlyBPM, BeatsPerSecond, fPos, beat ); - timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); -} - -static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) -{ - LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); - - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // this is the value we read for TICKCOUNT - int iTickCount = -1; - // used to adapt weird tickcounts - //float fScrollRatio = 1.0f; -- uncomment when ready to use. - vector vNoteRows; - - // According to Aldo_MX, there is a default BPM and it's 60. -aj - bool bDoublesChart = false; - - TimingData stepsTiming; - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - - for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); - return false; - } - stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); - } - - else if( sValueName=="DIFFICULTY" ) - { - out.SetMeter( max(StringToInt(sParams[1]), 0) ); - } - // new cases from Aldo_MX's fork: - else if( sValueName=="PLAYER" ) - { - RString sPlayer = sParams[1]; - sPlayer.MakeLower(); - if( sPlayer.find( "double" ) != string::npos ) - bDoublesChart = true; - } - // This should always be last. - else if( sValueName=="STEP" ) - { - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - } - - if( iTickCount == -1 ) - { - iTickCount = 4; - LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); - } - - // Prepare BPM stuff already if the file uses KSF syntax. - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - - NoteData notedata; // read it into here - - { - RString sDir, sFName, sExt; - splitpath( sPath, sDir, sFName, sExt ); - sFName.MakeLower(); - - out.SetDescription(sFName); - // Check another before anything else... is this okay? -DaisuMaster - if( sFName.find("another") != string::npos ) - { - out.SetDifficulty( Difficulty_Edit ); - if( !out.GetMeter() ) out.SetMeter( 25 ); - } - else if(sFName.find("wild") != string::npos || - sFName.find("wd") != string::npos || - sFName.find("crazy+") != string::npos || - sFName.find("cz+") != string::npos || - sFName.find("hardcore") != string::npos ) - { - out.SetDifficulty( Difficulty_Challenge ); - if( !out.GetMeter() ) out.SetMeter( 20 ); - } - else if(sFName.find("crazy") != string::npos || - sFName.find("cz") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("crazydouble") != string::npos ) - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. - } - else if(sFName.find("hard") != string::npos || - sFName.find("hd") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("fs") != string::npos || - sFName.find("double") != string::npos ) - { - out.SetDifficulty( Difficulty_Medium ); - if( !out.GetMeter() ) out.SetMeter( 8 ); - } - else if(sFName.find("easy") != string::npos || - sFName.find("ez") != string::npos || - sFName.find("normal") != string::npos ) - { - // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster - out.SetDifficulty( Difficulty_Easy ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else if(sFName.find("beginner") != string::npos || - sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) - { - out.SetDifficulty( Difficulty_Beginner ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 10 ); - } - - out.m_StepsType = StepsType_pump_single; - - // Check for "halfdouble" before "double". - if(sFName.find("halfdouble") != string::npos || - sFName.find("half-double") != string::npos || - sFName.find("h_double") != string::npos || - sFName.find("hdb") != string::npos ) - out.m_StepsType = StepsType_pump_halfdouble; - // Handle bDoublesChart from above as well. -aj - else if(sFName.find("double") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("db") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("fs") != string::npos || bDoublesChart ) - out.m_StepsType = StepsType_pump_double; - else if( sFName.find("_1") != string::npos ) - out.m_StepsType = StepsType_pump_single; - else if( sFName.find("_2") != string::npos ) - out.m_StepsType = StepsType_pump_couple; - } - - switch( out.m_StepsType ) - { - case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; - case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? - case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; - default: FAIL_M( ssprintf("%i", out.m_StepsType) ); - } - - int t = 0; - int iHoldStartRow[13]; - for( t=0; t<13; t++ ) - iHoldStartRow[t] = -1; - - bool bTickChangeNeeded = false; - int newTick = -1; - float fCurBeat = 0.0f; - float prevBeat = 0.0f; // Used for hold tails. - - for( unsigned r=0; r(numTemp); - stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); - } - else if (BeginsWith(sRowString, "|B")) - { - // BPM - stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); - } - else if (BeginsWith(sRowString, "|E")) - { - // DelayBeat - float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; - fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|D")) - { - // Delays - float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); - fCurDelay += numTemp / 1000; - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) - { - // multipliers/combo - stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); - } - else if (BeginsWith(sRowString, "|S")) - { - // speed segments - } - else if (BeginsWith(sRowString, "|F")) - { - // fakes - } - else if (BeginsWith(sRowString, "|X")) - { - // scroll segments - stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); - return true; - } - - continue; - } - - // Half-doubles is offset; "0011111100000". - if( out.m_StepsType == StepsType_pump_halfdouble ) - sRowString.erase( 0, 2 ); - - // Update TICKCOUNT for Direct Move files. - if( bTickChangeNeeded ) - { - iTickCount = newTick; - bTickChangeNeeded = false; - } - - for( t=0; t < notedata.GetNumTracks(); t++ ) - { - if( sRowString[t] == '4' ) - { - /* Remember when each hold starts; ignore the middle. */ - if( iHoldStartRow[t] == -1 ) - iHoldStartRow[t] = BeatToNoteRow(fCurBeat); - continue; - } - - if( iHoldStartRow[t] != -1 ) // this ends the hold - { - int iEndRow = BeatToNoteRow(prevBeat); - if( iHoldStartRow[t] == iEndRow ) - notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); - else - { - //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); - notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); - } - iHoldStartRow[t] = -1; - } - - TapNote tap; - switch( sRowString[t] ) - { - case '0': tap = TAP_EMPTY; break; - case '1': tap = TAP_ORIGINAL_TAP; break; - //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster - case 'M': - case 'm': - tap = TAP_ORIGINAL_MINE; - break; - case 'F': - case 'f': - tap = TAP_ORIGINAL_FAKE; - break; - case 'L': - case 'l': - tap = TAP_ORIGINAL_LIFT; - break; - default: - LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", - sRowString.c_str() ); - //return false; - tap = TAP_EMPTY; - break; - } - - notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); - } - prevBeat = fCurBeat; - fCurBeat = prevBeat + 1.0f / iTickCount; - } - - out.SetNoteData( notedata ); - out.m_Timing = stepsTiming; - - out.TidyUpData(); - - out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved - - return true; -} - -static void LoadTags( const RString &str, Song &out ) -{ - /* str is either a #TITLE or a directory component. Fill in missing information. - * str is either "title", "artist - title", or "artist - title - difficulty". */ - vector asBits; - split( str, " - ", asBits, false ); - // Ignore the difficulty, since we get that elsewhere. - if( asBits.size() == 3 && ( - asBits[2].EqualsNoCase("double") || - asBits[2].EqualsNoCase("easy") || - asBits[2].EqualsNoCase("normal") || - asBits[2].EqualsNoCase("hard") || - asBits[2].EqualsNoCase("crazy") || - asBits[2].EqualsNoCase("nightmare")) - ) - { - asBits.erase( asBits.begin()+2, asBits.begin()+3 ); - } - - RString title, artist; - if( asBits.size() == 2 ) - { - artist = asBits[0]; - title = asBits[1]; - } - else if( asBits.size() == 1 ) - { - title = asBits[0]; - } - - // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). - if( !ConvertString( title, "korean" ) ) - title = ""; - if( !ConvertString( artist, "korean" ) ) - artist = ""; - - if( out.m_sMainTitle == "" ) - out.m_sMainTitle = title; - if( out.m_sArtist == "" ) - out.m_sArtist = artist; -} - -static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) +#include "global.h" +#include "NotesLoaderKSF.h" +#include "RageUtil_CharConversions.h" +#include "MsdFile.h" +#include "RageLog.h" +#include "RageUtil.h" +#include "NoteData.h" +#include "NoteTypes.h" +#include "Song.h" +#include "Steps.h" + +static void HandleBunki( TimingData &timing, const float fEarlyBPM, + const float fCurBPM, const float fGap, + const float fPos ) +{ + const float BeatsPerSecond = fEarlyBPM / 60.0f; + const float beat = (fPos + fGap) * BeatsPerSecond; + LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", + fEarlyBPM, BeatsPerSecond, fPos, beat ); + timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); +} + +static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) +{ + LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); + + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // this is the value we read for TICKCOUNT + int iTickCount = -1; + // used to adapt weird tickcounts + //float fScrollRatio = 1.0f; -- uncomment when ready to use. + vector vNoteRows; + + // According to Aldo_MX, there is a default BPM and it's 60. -aj + bool bDoublesChart = false; + + TimingData stepsTiming; + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + + for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); + return false; + } + stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); + } + + else if( sValueName=="DIFFICULTY" ) + { + out.SetMeter( max(StringToInt(sParams[1]), 0) ); + } + // new cases from Aldo_MX's fork: + else if( sValueName=="PLAYER" ) + { + RString sPlayer = sParams[1]; + sPlayer.MakeLower(); + if( sPlayer.find( "double" ) != string::npos ) + bDoublesChart = true; + } + // This should always be last. + else if( sValueName=="STEP" ) + { + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + } + + if( iTickCount == -1 ) + { + iTickCount = 4; + LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); + } + + // Prepare BPM stuff already if the file uses KSF syntax. + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + + NoteData notedata; // read it into here + + { + RString sDir, sFName, sExt; + splitpath( sPath, sDir, sFName, sExt ); + sFName.MakeLower(); + + out.SetDescription(sFName); + // Check another before anything else... is this okay? -DaisuMaster + if( sFName.find("another") != string::npos ) + { + out.SetDifficulty( Difficulty_Edit ); + if( !out.GetMeter() ) out.SetMeter( 25 ); + } + else if(sFName.find("wild") != string::npos || + sFName.find("wd") != string::npos || + sFName.find("crazy+") != string::npos || + sFName.find("cz+") != string::npos || + sFName.find("hardcore") != string::npos ) + { + out.SetDifficulty( Difficulty_Challenge ); + if( !out.GetMeter() ) out.SetMeter( 20 ); + } + else if(sFName.find("crazy") != string::npos || + sFName.find("cz") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("crazydouble") != string::npos ) + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. + } + else if(sFName.find("hard") != string::npos || + sFName.find("hd") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("fs") != string::npos || + sFName.find("double") != string::npos ) + { + out.SetDifficulty( Difficulty_Medium ); + if( !out.GetMeter() ) out.SetMeter( 8 ); + } + else if(sFName.find("easy") != string::npos || + sFName.find("ez") != string::npos || + sFName.find("normal") != string::npos ) + { + // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster + out.SetDifficulty( Difficulty_Easy ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else if(sFName.find("beginner") != string::npos || + sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) + { + out.SetDifficulty( Difficulty_Beginner ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 10 ); + } + + out.m_StepsType = StepsType_pump_single; + + // Check for "halfdouble" before "double". + if(sFName.find("halfdouble") != string::npos || + sFName.find("half-double") != string::npos || + sFName.find("h_double") != string::npos || + sFName.find("hdb") != string::npos ) + out.m_StepsType = StepsType_pump_halfdouble; + // Handle bDoublesChart from above as well. -aj + else if(sFName.find("double") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("db") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("fs") != string::npos || bDoublesChart ) + out.m_StepsType = StepsType_pump_double; + else if( sFName.find("_1") != string::npos ) + out.m_StepsType = StepsType_pump_single; + else if( sFName.find("_2") != string::npos ) + out.m_StepsType = StepsType_pump_couple; + } + + switch( out.m_StepsType ) + { + case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; + case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? + case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; + default: FAIL_M( ssprintf("%i", out.m_StepsType) ); + } + + int t = 0; + int iHoldStartRow[13]; + for( t=0; t<13; t++ ) + iHoldStartRow[t] = -1; + + bool bTickChangeNeeded = false; + int newTick = -1; + float fCurBeat = 0.0f; + float prevBeat = 0.0f; // Used for hold tails. + + for( unsigned r=0; r(numTemp); + // I have been owned by the man -DaisuMaster + stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); + } + else if (BeginsWith(sRowString, "|B")) + { + // BPM + stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); + } + else if (BeginsWith(sRowString, "|E")) + { + // DelayBeat + float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; + fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|D")) + { + // Delays + float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); + fCurDelay += numTemp / 1000; + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) + { + // multipliers/combo + stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); + } + else if (BeginsWith(sRowString, "|S")) + { + // speed segments + } + else if (BeginsWith(sRowString, "|F")) + { + // fakes + } + else if (BeginsWith(sRowString, "|X")) + { + // scroll segments + stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); + //return true; + } + + continue; + } + + // Half-doubles is offset; "0011111100000". + if( out.m_StepsType == StepsType_pump_halfdouble ) + sRowString.erase( 0, 2 ); + + // Update TICKCOUNT for Direct Move files. + if( bTickChangeNeeded ) + { + iTickCount = newTick; + bTickChangeNeeded = false; + } + + for( t=0; t < notedata.GetNumTracks(); t++ ) + { + if( sRowString[t] == '4' ) + { + /* Remember when each hold starts; ignore the middle. */ + if( iHoldStartRow[t] == -1 ) + iHoldStartRow[t] = BeatToNoteRow(fCurBeat); + continue; + } + + if( iHoldStartRow[t] != -1 ) // this ends the hold + { + int iEndRow = BeatToNoteRow(prevBeat); + if( iHoldStartRow[t] == iEndRow ) + notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); + else + { + //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); + notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); + } + iHoldStartRow[t] = -1; + } + + TapNote tap; + switch( sRowString[t] ) + { + case '0': tap = TAP_EMPTY; break; + case '1': tap = TAP_ORIGINAL_TAP; break; + //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster + case 'M': + case 'm': + tap = TAP_ORIGINAL_MINE; + break; + case 'F': + case 'f': + tap = TAP_ORIGINAL_FAKE; + break; + case 'L': + case 'l': + tap = TAP_ORIGINAL_LIFT; + break; + default: + LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", + sRowString.c_str() ); + //return false; + tap = TAP_EMPTY; + break; + } + + notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); + } + prevBeat = fCurBeat; + fCurBeat = prevBeat + 1.0f / iTickCount; + } + + out.SetNoteData( notedata ); + out.m_Timing = stepsTiming; + + out.TidyUpData(); + + out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved + + return true; +} + +static void LoadTags( const RString &str, Song &out ) +{ + /* str is either a #TITLE or a directory component. Fill in missing information. + * str is either "title", "artist - title", or "artist - title - difficulty". */ + vector asBits; + split( str, " - ", asBits, false ); + // Ignore the difficulty, since we get that elsewhere. + if( asBits.size() == 3 && ( + asBits[2].EqualsNoCase("double") || + asBits[2].EqualsNoCase("easy") || + asBits[2].EqualsNoCase("normal") || + asBits[2].EqualsNoCase("hard") || + asBits[2].EqualsNoCase("crazy") || + asBits[2].EqualsNoCase("nightmare")) + ) + { + asBits.erase( asBits.begin()+2, asBits.begin()+3 ); + } + + RString title, artist; + if( asBits.size() == 2 ) + { + artist = asBits[0]; + title = asBits[1]; + } + else if( asBits.size() == 1 ) + { + title = asBits[0]; + } + + // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). + if( !ConvertString( title, "korean" ) ) + title = ""; + if( !ConvertString( artist, "korean" ) ) + artist = ""; + + if( out.m_sMainTitle == "" ) + out.m_sMainTitle = title; + if( out.m_sArtist == "" ) + out.m_sArtist = artist; +} + +static void ProcessTickcounts( const RString & tempValue, int & ticks, TimingData & timing ) { /* adapt tickcounts // // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT @@ -540,303 +540,303 @@ static void ProcessTickcounts( const RString & value, int & ticks, TimingData & fScrollRatio = iTickCount / 4; iTickCount = 4; } - //*/ - - /* TICKCOUNT will be used below if there are DM compliant BPM changes - * and stops. It will be called again in LoadFromKSFFile for the - * actual steps. */ - ticks = StringToInt( value ); - ticks = ticks > 0 ? ticks : 4; - // add a tickcount for those using the [Player] - // CheckpointsUseTimeSignatures metric. -aj - // It's not with timesigs now -DaisuMaster - TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); - timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); -} - -static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) -{ - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster - // search for music with song in the file name - vector arrayPossibleMusic; - GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); - - if( !arrayPossibleMusic.empty() ) // we found a match - out.m_sMusicFile = arrayPossibleMusic[0]; - // ^this was below, at the end - - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - int iTickCount = -1; - bKIUCompliant = false; - vector vNoteRows; - - for( unsigned i=0; i < msd.GetNumValues(); i++ ) - { - const MsdFile::value_t &sParams = msd.GetValue(i); - RString sValueName = sParams[0]; - sValueName.MakeUpper(); - - // handle the data - if( sValueName=="TITLE" ) - LoadTags(sParams[1], out); - else if( sValueName=="BPM" ) - { - BPM1 = StringToFloat(sParams[1]); - out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); - } - else if( sValueName=="BPM2" ) - { - bKIUCompliant = true; - BPM2 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BPM3" ) - { - bKIUCompliant = true; - BPM3 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BUNKI" ) - { - bKIUCompliant = true; - BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="BUNKI2" ) - { - bKIUCompliant = true; - BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="STARTTIME" ) - { - SMGap1 = -StringToFloat( sParams[1] )/100; - out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; - } - // This is currently required for more accurate KIU BPM changes. - else if( sValueName=="STARTTIME2" ) - { - bKIUCompliant = true; - SMGap2 = -StringToFloat( sParams[1] )/100; - } - else if ( sValueName=="STARTTIME3" ) - { - // STARTTIME3 only ensures this is a KIU compliant simfile. - bKIUCompliant = true; - } - else if ( sValueName=="TICKCOUNT" ) - { - ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); - } - else if ( sValueName=="STEP" ) - { - /* STEP will always be the last header in a KSF file by design. Due to - * the Direct Move syntax, it is best to get the rows of notes here. */ - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - - else if( sValueName=="DIFFICULTY" ) - { - /* DIFFICULTY is handled only in LoadFromKSFFile. Ignore it here. */ - continue; - } - // New cases noted in Aldo_MX's code: - else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) - { - out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); - } - else if( sValueName=="TITLEFILE" ) - { - out.m_sBackgroundFile = sParams[1]; - } - else if( sValueName=="DISCFILE" ) - { - out.m_sBannerFile = sParams[1]; - } - else if( sValueName=="SONGFILE" ) - { - out.m_sMusicFile = sParams[1]; - } - //else if( sValueName=="INTROFILE" ) - //{ - // nothing to add... - //} - // end new cases - else - { - LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", - sValueName.c_str() ); - } - } - - //intro length in piu mixes is generally 7 seconds - out.m_fMusicSampleLengthSeconds = 7.0f; - - /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. - * Otherwise, the whole file has to be processed. Right now, this is only - * called once, for the initial file (often the Crazy steps). Hopefully that - * will end up changing soon. */ - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - else - { - float fCurBeat = 0.0f; - bool bDMRequired = false; - - for( unsigned i=0; i < vNoteRows.size(); ++i ) - { - RString& NoteRowString = vNoteRows[i]; - StripCrnl( NoteRowString ); - - if( NoteRowString == "" ) - continue; // ignore empty rows. - - if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. - { - if (!bDMRequired) - bKIUCompliant = true; - break; - } - - // This is where the DMRequired test will take place. - if ( BeginsWith( NoteRowString, "|" ) ) - { - // have a static timing for everything - bDMRequired = true; - continue; - } - else - { - // ignore whatever else... - //continue; - } - - fCurBeat += 1.0f / iTickCount; - } - } - - // Try to fill in missing bits of information from the pathname. - { - vector asBits; - split( sPath, "/", asBits, true); - - ASSERT( asBits.size() > 1 ); - LoadTags( asBits[asBits.size()-2], out ); - } - - return true; -} - -void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) -{ - GetDirListing( sPath + RString("*.ksf"), out ); -} - -bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) -{ - bool KIUCompliant = false; - Song dummy; - if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) - return false; - Steps *notes = dummy.CreateSteps(); - if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) - { - KIUCompliant = true; // yeah, reusing a variable. - out.SetNoteData(notes->GetNoteData()); - } - delete notes; - return KIUCompliant; -} - -bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) -{ - LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); - - vector arrayKSFFileNames; - GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); - - // We shouldn't have been called to begin with if there were no KSFs. - ASSERT( arrayKSFFileNames.size() ); - - bool bKIUCompliant = false; - /* With Split Timing, there has to be a backup Song Timing in case - * anything goes wrong. As these files are kept in alphabetical - * order (hopefully), it is best to use the LAST file for timing - * purposes, for that is the "normal", or easiest difficulty. - * Usually. */ - // Nevermind, kiu compilancy is screwing things up: - // IE, I have two simfiles, oh wich each have four ksf files, the first one has - // the first ksf with directmove timing changes, and the rest are not, everything - // goes fine. In the other hand I have my second simfile with the first ksf file - // without directmove timing changes and the rest have changes, changes are not - // loaded due to kiucompilancy in the first ksf file. - // About the "normal" thing, my simfiles' ksfs uses non-standard naming so - // the last chart is usually nightmare or normal, I use easy and normal - // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming - // for directmove though, and we're just gathering basic info anyway, and - // most of the time all the KSF files have the same info in the #TITLE:; section - unsigned files = arrayKSFFileNames.size(); - RString dir = out.GetSongDir(); - if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) - return false; - - out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; - // load the Steps from the rest of the KSF files - for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); - out.AddSteps( pNewNotes ); - } - out.TidyUpData(false, true); - - return true; -} - -/* - * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ + //*/ + + /* TICKCOUNT will be used below if there are DM compliant BPM changes + * and stops. It will be called again in LoadFromKSFFile for the + * actual steps. */ + ticks = StringToInt( tempValue ); + ticks = ticks > 0 ? ticks : 4; + // add a tickcount for those using the [Player] + // CheckpointsUseTimeSignatures metric. -aj + // It's not with timesigs now -DaisuMaster + TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); + timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); +} + +static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) +{ + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster + // search for music with song in the file name + vector arrayPossibleMusic; + GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); + + if( !arrayPossibleMusic.empty() ) // we found a match + out.m_sMusicFile = arrayPossibleMusic[0]; + // ^this was below, at the end + + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + int iTickCount = -1; + bKIUCompliant = false; + vector vNoteRows; + + for( unsigned i=0; i < msd.GetNumValues(); i++ ) + { + const MsdFile::value_t &sParams = msd.GetValue(i); + RString sValueName = sParams[0]; + sValueName.MakeUpper(); + + // handle the data + if( sValueName=="TITLE" ) + LoadTags(sParams[1], out); + else if( sValueName=="BPM" ) + { + BPM1 = StringToFloat(sParams[1]); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); + } + else if( sValueName=="BPM2" ) + { + bKIUCompliant = true; + BPM2 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BPM3" ) + { + bKIUCompliant = true; + BPM3 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BUNKI" ) + { + bKIUCompliant = true; + BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="BUNKI2" ) + { + bKIUCompliant = true; + BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="STARTTIME" ) + { + SMGap1 = -StringToFloat( sParams[1] )/100; + out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; + } + // This is currently required for more accurate KIU BPM changes. + else if( sValueName=="STARTTIME2" ) + { + bKIUCompliant = true; + SMGap2 = -StringToFloat( sParams[1] )/100; + } + else if ( sValueName=="STARTTIME3" ) + { + // STARTTIME3 only ensures this is a KIU compliant simfile. + bKIUCompliant = true; + } + else if ( sValueName=="TICKCOUNT" ) + { + ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + } + else if ( sValueName=="STEP" ) + { + /* STEP will always be the last header in a KSF file by design. Due to + * the Direct Move syntax, it is best to get the rows of notes here. */ + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + else if( sValueName=="DIFFICULTY" || sValueName=="PLAYER" ) + { + /* DIFFICULTY and PLAYER are handled only in LoadFromKSFFile. + Ignore those here. */ + continue; + } + // New cases noted in Aldo_MX's code: + else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) + { + out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); + } + else if( sValueName=="TITLEFILE" ) + { + out.m_sBackgroundFile = sParams[1]; + } + else if( sValueName=="DISCFILE" ) + { + out.m_sBannerFile = sParams[1]; + } + else if( sValueName=="SONGFILE" ) + { + out.m_sMusicFile = sParams[1]; + } + //else if( sValueName=="INTROFILE" ) + //{ + // nothing to add... + //} + // end new cases + else + { + LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", + sValueName.c_str() ); + } + } + + //intro length in piu mixes is generally 7 seconds + out.m_fMusicSampleLengthSeconds = 7.0f; + + /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. + * Otherwise, the whole file has to be processed. Right now, this is only + * called once, for the initial file (often the Crazy steps). Hopefully that + * will end up changing soon. */ + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + else + { + float fCurBeat = 0.0f; + bool bDMRequired = false; + + for( unsigned i=0; i < vNoteRows.size(); ++i ) + { + RString& NoteRowString = vNoteRows[i]; + StripCrnl( NoteRowString ); + + if( NoteRowString == "" ) + continue; // ignore empty rows. + + if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. + { + if (!bDMRequired) + bKIUCompliant = true; + break; + } + + // This is where the DMRequired test will take place. + if ( BeginsWith( NoteRowString, "|" ) ) + { + // have a static timing for everything + bDMRequired = true; + continue; + } + else + { + // ignore whatever else... + //continue; + } + + fCurBeat += 1.0f / iTickCount; + } + } + + // Try to fill in missing bits of information from the pathname. + { + vector asBits; + split( sPath, "/", asBits, true); + + ASSERT( asBits.size() > 1 ); + LoadTags( asBits[asBits.size()-2], out ); + } + + return true; +} + +void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) +{ + GetDirListing( sPath + RString("*.ksf"), out ); +} + +bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + bool KIUCompliant = false; + Song dummy; + if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) + return false; + Steps *notes = dummy.CreateSteps(); + if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) + { + KIUCompliant = true; // yeah, reusing a variable. + out.SetNoteData(notes->GetNoteData()); + } + delete notes; + return KIUCompliant; +} + +bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) +{ + LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); + + vector arrayKSFFileNames; + GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); + + // We shouldn't have been called to begin with if there were no KSFs. + ASSERT( arrayKSFFileNames.size() ); + + bool bKIUCompliant = false; + /* With Split Timing, there has to be a backup Song Timing in case + * anything goes wrong. As these files are kept in alphabetical + * order (hopefully), it is best to use the LAST file for timing + * purposes, for that is the "normal", or easiest difficulty. + * Usually. */ + // Nevermind, kiu compilancy is screwing things up: + // IE, I have two simfiles, oh wich each have four ksf files, the first one has + // the first ksf with directmove timing changes, and the rest are not, everything + // goes fine. In the other hand I have my second simfile with the first ksf file + // without directmove timing changes and the rest have changes, changes are not + // loaded due to kiucompilancy in the first ksf file. + // About the "normal" thing, my simfiles' ksfs uses non-standard naming so + // the last chart is usually nightmare or normal, I use easy and normal + // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming + // for directmove though, and we're just gathering basic info anyway, and + // most of the time all the KSF files have the same info in the #TITLE:; section + unsigned files = arrayKSFFileNames.size(); + RString dir = out.GetSongDir(); + if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) + return false; + + out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; + // load the Steps from the rest of the KSF files + for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); + out.AddSteps( pNewNotes ); + } + out.TidyUpData(false, true); + + return true; +} + +/* + * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ From 9c826b7e271a884716cba649f3872a58ea6e8a4f Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Mon, 18 Jul 2011 20:12:53 -0600 Subject: [PATCH 70/94] bleh --- src/NotesLoaderKSF.cpp | 49 ++---------------------------------------- 1 file changed, 2 insertions(+), 47 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index e55c6aac1e..254524dfa0 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -495,57 +495,12 @@ static void LoadTags( const RString &str, Song &out ) out.m_sArtist = artist; } -static void ProcessTickcounts( const RString & tempValue, int & ticks, TimingData & timing ) +static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) { - /* adapt tickcounts // - // valid tickcounts for SM: 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 64, ROWS_PER_BEAT - // put this inside the tickcount handling condition yes/no - - if( iTickCount > ROWS_PER_BEAT ) // beyond 48 - { - // clamp/scale/whatever and use scroll segments - } - else if( iTickCount > 32 || iTickCount < ROWS_PER_BEAT ) // ranging from 33 to 48, approximate to 32 - { - fScrollRatio = 32; - iTickCount = 32; - } - else if( iTickCount > 24 || iTickCount < 32 ) // ranging from 25 to 31, approximate to 24 - { - fScrollRatio = 24; - iTickCount = 24; - } - else if( iTickCount > 16 || iTickCount < 24 ) // ranging from 17 to 23, approximate to 16 - { - fScrollRatio = 16; - iTickCount = 16; - } - else if( iTickCount > 12 || iTickCount < 16 ) // ranging from 13 to 15, approximate to 12 - { - fScrollRatio = 12; - iTickCount = 12; - } - else if( iTickCount > 8 || iTickCount < 12 ) // ranging from 9 to 11, approximate to 8 - { - fScrollRatio = 8; - iTickCount = 8; - } - else if( iTickCount > 6 || iTickCount < 8 ) // 7, approximate to 6 - { - fScrollRatio = 6 / iTickCountt; - iTickCount = 6; - } - else if( iTickCount > 4 || iTickCount < 6 ) // 5, approximate to 4 - { - fScrollRatio = iTickCount / 4; - iTickCount = 4; - } - //*/ - /* TICKCOUNT will be used below if there are DM compliant BPM changes * and stops. It will be called again in LoadFromKSFFile for the * actual steps. */ - ticks = StringToInt( tempValue ); + ticks = StringToInt( value ); ticks = ticks > 0 ? ticks : 4; // add a tickcount for those using the [Player] // CheckpointsUseTimeSignatures metric. -aj From 7014edbe265831407058fecd7f98f8aa6bd95a2b Mon Sep 17 00:00:00 2001 From: Aldo Fregoso Date: Mon, 18 Jul 2011 22:17:55 -0500 Subject: [PATCH 71/94] Fixed VS2010 project --- src/StepMania-net2010.vcxproj | 12 ++++++------ src/archutils/Win32/mapconv.exe | Bin 65536 -> 105472 bytes src/archutils/Win32/verinc.exe | Bin 49152 -> 67072 bytes 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/StepMania-net2010.vcxproj b/src/StepMania-net2010.vcxproj index 2af10e5a07..3b712c40e3 100644 --- a/src/StepMania-net2010.vcxproj +++ b/src/StepMania-net2010.vcxproj @@ -67,15 +67,15 @@ <_ProjectFileVersion>10.0.30319.1 - $(TargetDir) - $(SolutionDir)/build-$(SolutionName)/$(ProjectName)/$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ true true - $(TargetDir) - $(SolutionDir)/build-$(SolutionName)/$(ProjectName)/$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ false - $(TargetDir) - $(SolutionDir)/build-$(SolutionName)/$(ProjectName)/$(Configuration)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\ true true $(SolutionDir)$(Configuration)\ diff --git a/src/archutils/Win32/mapconv.exe b/src/archutils/Win32/mapconv.exe index 5d30c815fa3371ea371d40eb118dbe8689fbe133..8b23d80115af64158ca137b1664a426bd0be7719 100644 GIT binary patch literal 105472 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 O0u-PC1t{>p75EPY=FJEI literal 65536 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 bH(TIl3*2mhn=Np&1#Y&$%@+7?wZQ)Yicn=D diff --git a/src/archutils/Win32/verinc.exe b/src/archutils/Win32/verinc.exe index 545ffec5dbc6e8ca57b7e37c674124cdabba4135..d17008756afecc646edc7661d738cdd2c075af5b 100644 GIT binary patch literal 67072 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 XYW)53{89qHl)x_~@Jk6?RRaG9Hp@6K literal 49152 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 TYoM%wvIfc;C~M%o(ZIg}`Tco^ From c14dfd767c7c1a006589a6cb2b1da96424933f38 Mon Sep 17 00:00:00 2001 From: Aldo Fregoso Date: Mon, 18 Jul 2011 22:41:13 -0500 Subject: [PATCH 72/94] Shared change with SMA, Low Level Hooks to disable Window's system shortcuts, try to press Windows Key when SM has focus :D --- src/StepMania.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/StepMania.cpp b/src/StepMania.cpp index 955fa1466e..68bf9010ed 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -69,7 +69,8 @@ #include "Profile.h" #if defined(WIN32) -#include +#include +#include "archutils/Win32/AppInstance.h" // used by SetWindowsHookEx -Aldo #endif void ShutdownGame(); @@ -934,6 +935,32 @@ static void ApplyLogPreferences() static LocalizedString COULDNT_OPEN_LOADING_WINDOW( "StepMania", "Couldn't open any loading windows." ); +#if defined(WIN32) +// Low Level hooks go here, I only added Windows Key, but letting the player choose which system shortcuts +// wants to get disabled via PREFSMAN would be nice -Aldo +LRESULT CALLBACK SpecialKeysHook(int code,WPARAM wparam,LPARAM lparam) +{ + if( HOOKS->AppHasFocus() ) // only disable system shortcuts when the game has focus + { + PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam; + + switch(wparam) + { + case WM_KEYDOWN: + case WM_KEYUP: + case WM_SYSKEYDOWN: + case WM_SYSKEYUP: + if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN) + { + return 1; + } + } + } + + return CallNextHookEx(0,code,wparam,lparam); +} +#endif + int main(int argc, char* argv[]) { RageThreadRegister thread( "Main thread" ); @@ -1124,6 +1151,23 @@ int main(int argc, char* argv[]) StoreActualGraphicOptions(); LOG->Info( "%s", GetActualGraphicOptionsString().c_str() ); +#if defined(WIN32) + // Apply Low Level hooks just after creating the display, so we have a valid + // HINSTANCE, rather than a NULL one -Aldo + AppInstance inst; + HHOOK hook; + hook = SetWindowsHookEx( + WH_KEYBOARD_LL, + SpecialKeysHook, + inst.Get(), + 0 + ); + if(!hook) + { + LOG->Warn("SetWindowsHookEx: Could not create hook (Error %d).", GetLastError()); + } +#endif + SONGMAN->PreloadSongImages(); /* Input handlers can have dependences on the video system so From 1d557bf968b39e547ac345b67e40f4d83dd35f1e Mon Sep 17 00:00:00 2001 From: Jonathan Payne Date: Tue, 19 Jul 2011 17:09:43 -0700 Subject: [PATCH 73/94] more theme tidying. hopefully get this better running for saner people. --- .../ScreenGameplay background.lua | 1 + .../ScreenGameplay background.redir | 1 - .../default.lua | 21 ++++++++++++------- .../keyboard.lua | 14 +++++++++---- Themes/_fallback/Scripts/02 Colors.lua | 9 ++++---- Themes/default-dev-midi/metrics.ini | 5 ++++- .../ScreenCredits background/default.lua | 2 +- .../ScreenGameplay background.lua | 1 + .../default.lua | 2 +- .../ScreenPlayerOptions background.lua | 2 +- .../default.lua | 2 +- .../Graphics/Player toasty/default.lua | 4 ++-- .../Graphics/ScreenGameplay StageDisplay.lua | 1 + .../ScreenTitleMenu TimingDifficulty.lua | 2 +- .../ScreenWithMenuElements StageDisplay.lua | 2 +- Themes/default/metrics.ini | 13 ++++++------ 16 files changed, 50 insertions(+), 32 deletions(-) create mode 100644 Themes/_fallback/BGAnimations/ScreenGameplay background.lua delete mode 100644 Themes/_fallback/BGAnimations/ScreenGameplay background.redir create mode 100644 Themes/default/BGAnimations/ScreenGameplay background.lua diff --git a/Themes/_fallback/BGAnimations/ScreenGameplay background.lua b/Themes/_fallback/BGAnimations/ScreenGameplay background.lua new file mode 100644 index 0000000000..989e15f73d --- /dev/null +++ b/Themes/_fallback/BGAnimations/ScreenGameplay background.lua @@ -0,0 +1 @@ +return Def.ActorFrame { Name="YOU_WISH_YOU_WERE_PLAYING_BEATMANIA_RIGHT_NOW" }; \ No newline at end of file diff --git a/Themes/_fallback/BGAnimations/ScreenGameplay background.redir b/Themes/_fallback/BGAnimations/ScreenGameplay background.redir deleted file mode 100644 index 04b2ead777..0000000000 --- a/Themes/_fallback/BGAnimations/ScreenGameplay background.redir +++ /dev/null @@ -1 +0,0 @@ -_blank \ No newline at end of file diff --git a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua index 994e3caf01..66e7d7daa7 100644 --- a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua +++ b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua @@ -46,26 +46,30 @@ function MakeScoreList(StagesAgo) OffCommand=cmd(linear,0.3;addx,150;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="PlayerScoreP1"; InitCommand=cmd(x,-135;diffuse,color("#fdf991");shadowlength,0;zoom,0.6); OnCommand=cmd(x,-135;addx,50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,-50;diffusealpha,1;zoom,0.6); OffCommand=cmd(linear,0.3;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="PlayerScoreP2"; InitCommand=cmd(x,135;diffuse,color("#abfe8e");shadowlength,0;zoom,0.6); OnCommand=cmd(x,135;addx,-50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,50;diffusealpha,1;zoom,0.6); OffCommand=cmd(linear,0.3;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="MachineBestP1"; InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5); OnCommand=cmd(x,-250;addx,-250;diffusealpha,1;decelerate,0.3;addx,250); OffCommand=cmd(linear,0.3;addx,-150;diffusealpha,0); }; - LoadFont( "_regra bold 30px" ) .. { + LoadFont( "Common Normal" ) .. { +-- LoadFont( "_regra bold 30px" ) .. { Name="MachineBestP2"; InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5); OnCommand=cmd(x,250;addx,250;diffusealpha,1;decelerate,0.3;addx,-250); @@ -130,7 +134,7 @@ function MakeScoreList(StagesAgo) if visible then assert(CurrentPart[pn]); - c.Difficulty[pn]:SetDifficultyAndStepsTypeFrame( CurrentPart[pn] ); +-- c.Difficulty[pn]:SetDifficultyAndStepsTypeFrame( CurrentPart[pn] ); local hsl = MachineProfile:GetHighScoreList( Current, CurrentPart[pn] ); assert( hsl ); @@ -198,8 +202,8 @@ for i = 1,5 do }; end -children[#children+1] = - LoadActor( THEME:GetPathB("","_shared underlay") ) .. { OnCommand=cmd(); }; +--[[ children[#children+1] = + LoadActor( THEME:GetPathB("","_shared underlay") ) .. { OnCommand=cmd(); }; --]] children[#children+1] = LoadActor( "keyboard" ) .. { InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+80); @@ -217,7 +221,8 @@ for pn in ivalues(PlayerNumber) do OffCommand=cmd(stoptweening;bouncebegin,0.3;zoom,0;addx,-200*P1); }; - children[#children+1] = LoadFont( "_regra bold 30px" ) .. { + children[#children+1] = LoadFont( "Common Normal" ) .. { +-- children[#children+1] = LoadFont( "_regra bold 30px" ) .. { Name="PlayerText"; InitCommand=cmd(x,pn == PLAYER_1 and (SCREEN_CENTER_X-WideScale(310,330)) or (SCREEN_CENTER_X+WideScale(198,204)); halign,0; diff --git a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua index 052c378720..08852dbaba 100644 --- a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua +++ b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua @@ -19,7 +19,8 @@ end local MapNameToLetter = {}; local MapLetterToName = {}; -local letter = LoadFont( "_regra bold 30px" ) .. { +local letter = LoadFont( "Common Normal" ) .. { +-- local letter = LoadFont( "_regra bold 30px" ) .. { InitCommand=cmd(zoom,0.8;shadowlength,0); PulseCommand = function(self) self:finishtweening(); @@ -37,13 +38,18 @@ for l in ivalues(Letters) do Text = l; }; if l == "BACK" or l == "ENTER" then - children[#children].File = THEME:GetPathF("", "_venacti 26px normal"); + children[#children].File = THEME:GetPathF("", "Common Normal"); +-- children[#children].File = THEME:GetPathF("", "_venacti 26px normal"); end; end; -children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "type key") ) .. { Name = "Type"; SupportPan = true; } +--[[ children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "type key") ) .. { Name = "Type"; SupportPan = true; } children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "back") ) .. { Name = "Back"; SupportPan = true; } children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "enter") ) .. { Name = "Enter"; SupportPan = true; } -children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "move cursor") ) .. { Name = "Move"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "move cursor") ) .. { Name = "Move"; SupportPan = true; } --]] +children[#children+1] = LoadActor( THEME:GetPathS("Common", "value") ) .. { Name = "Type"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS("Common", "cancel") ) .. { Name = "Back"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS("Common", "start") ).. { Name = "Enter"; SupportPan = true; } +children[#children+1] = LoadActor( THEME:GetPathS("MusicWheel", "change") ) .. { Name = "Move"; SupportPan = true; } local CursorFiles = { [PLAYER_1] = "Cursor P1", diff --git a/Themes/_fallback/Scripts/02 Colors.lua b/Themes/_fallback/Scripts/02 Colors.lua index 9cfe09c54c..4e4a852f60 100644 --- a/Themes/_fallback/Scripts/02 Colors.lua +++ b/Themes/_fallback/Scripts/02 Colors.lua @@ -6,6 +6,7 @@ Color = { -- These colors are pure swatch colors and are here purely to be used -- on demand without having to type color("stuff") or dig through -- a palette to get the color you want. + __call(_color) = function(self, _color) return self[_color] end, Black = color("0,0,0,1"), White = color("1,1,1,1"), Red = color("#ed1c24"), @@ -31,7 +32,7 @@ Color = { end } -- Remapped Color Module, since some themes are crazy -Colors = Color; +-- Colors = Color; GameColor = { PlayerColors = { @@ -95,9 +96,9 @@ GameColor.Difficulty["Nightmare"] = GameColor.Difficulty["Challenge"]; GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"]; --[[ Fallbacks ]] -function Color(c) - return Colors[c] -end +function Color( in_c ) + return __call(in_c) +end --]] function BoostColor( cColor, fBoost ) local c = cColor diff --git a/Themes/default-dev-midi/metrics.ini b/Themes/default-dev-midi/metrics.ini index 72b1cbe014..2f0e2571a5 100644 --- a/Themes/default-dev-midi/metrics.ini +++ b/Themes/default-dev-midi/metrics.ini @@ -1,5 +1,8 @@ [Global] FallbackTheme=default +[ScreenTitleMenu] +ChoiceNames="1,4,5,6,PopScreen,7" +ChoicePopScreen="name,Boobs;text,Boobs"; [ScreenGameplay] # LifeP1OnCommand=visible,false -# LifeP2OnCommand=visible,false \ No newline at end of file +# LifeP2OnCommand=visible,false diff --git a/Themes/default/BGAnimations/ScreenCredits background/default.lua b/Themes/default/BGAnimations/ScreenCredits background/default.lua index 47e9237339..8cd4a8ea35 100644 --- a/Themes/default/BGAnimations/ScreenCredits background/default.lua +++ b/Themes/default/BGAnimations/ScreenCredits background/default.lua @@ -13,7 +13,7 @@ local t = Def.ActorFrame { LoadActor("_grid")..{ InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true); OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Black");diffuseshift;effecttiming,(1/8)*4,0,(7/8)*4,0;effectclock,'beatnooffset'; - effectcolor2,Color("Black");effectcolor1,Colors.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); + effectcolor2,Color("Black");effectcolor1,Color.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); }; }; diff --git a/Themes/default/BGAnimations/ScreenGameplay background.lua b/Themes/default/BGAnimations/ScreenGameplay background.lua new file mode 100644 index 0000000000..989e15f73d --- /dev/null +++ b/Themes/default/BGAnimations/ScreenGameplay background.lua @@ -0,0 +1 @@ +return Def.ActorFrame { Name="YOU_WISH_YOU_WERE_PLAYING_BEATMANIA_RIGHT_NOW" }; \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua b/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua index de7cf0b949..732b6a912d 100644 --- a/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua +++ b/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua @@ -7,7 +7,7 @@ t[#t+1] = Def.Sprite { BeforeLoadingNextCourseSongMessageCommand=function(self) self:LoadFromSongBackground( SCREENMAN:GetTopScreen():GetNextCourseSong() ) end; ChangeCourseSongInMessageCommand=cmd(scaletoclipped,SCREEN_WIDTH,SCREEN_HEIGHT); StartCommand=cmd(diffusealpha,0;decelerate,0.5;diffusealpha,1;); - FinishCommand=cmd(linear,0.1;glow,Colors.Alpha(Color("White"),0.5);decelerate,0.4;glow,Color("Invisible");diffusealpha,0); + FinishCommand=cmd(linear,0.1;glow,Color.Alpha(Color("White"),0.5);decelerate,0.4;glow,Color("Invisible");diffusealpha,0); }; t[#t+1] = Def.ActorFrame { diff --git a/Themes/default/BGAnimations/ScreenPlayerOptions background.lua b/Themes/default/BGAnimations/ScreenPlayerOptions background.lua index e7cafc1283..f06580a070 100644 --- a/Themes/default/BGAnimations/ScreenPlayerOptions background.lua +++ b/Themes/default/BGAnimations/ScreenPlayerOptions background.lua @@ -24,7 +24,7 @@ t[#t+1] = Def.ActorFrame { --[[ LoadActor(THEME:GetPathB("ScreenWithMenuElements","background/_grid")).. { InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true); OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Black");diffuseshift;effecttiming,(1/8)*4,0,(7/8)*4,0;effectclock,'beatnooffset'; - effectcolor2,Color("Black");effectcolor1,Colors.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); + effectcolor2,Color("Black");effectcolor1,Color.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345); }; --]] LoadActor(THEME:GetPathB("ScreenWithMenuElements","background/_bg top")) .. { InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT); diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua index 2a5ef20e90..73c5519edb 100644 --- a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua +++ b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua @@ -33,7 +33,7 @@ t[#t+1] = Def.ActorFrame { --[[ LoadActor("_grid") .. { InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true); OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Orange");diffuseshift;effecttiming,(1/8)*2,0,(7/8)*2,0;effectclock,'beatnooffset'; - effectcolor2,Color("Orange");effectcolor1,Colors.Alpha(Color("Orange"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480); + effectcolor2,Color("Orange");effectcolor1,Color.Alpha(Color("Orange"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480); }; --]] LoadActor("_bg top") .. { InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT); diff --git a/Themes/default/Graphics/Player toasty/default.lua b/Themes/default/Graphics/Player toasty/default.lua index bbc4c72c04..206e223510 100644 --- a/Themes/default/Graphics/Player toasty/default.lua +++ b/Themes/default/Graphics/Player toasty/default.lua @@ -13,7 +13,7 @@ return Def.ActorFrame { InitCommand=cmd(zoomto,fWidth,SCREEN_HEIGHT;diffuse,PlayerColor(Player);diffusealpha,0;fadeleft,32/(256+16);faderight,32/(256+16)); ToastyAchievedMessageCommand=function(self,params) if params.PlayerNumber == Player then - (cmd(stoptweening;linear,2.125;diffuse,Colors.Alpha( PlayerColor(Player), 0.345 );glow,color("1,1,1,0.5");decelerate,3;glow,Colors.Alpha( ColorDarkTone( PlayerColor(Player) ), 0 );diffuseramp; + (cmd(stoptweening;linear,2.125;diffuse,Color.Alpha( PlayerColor(Player), 0.345 );glow,color("1,1,1,0.5");decelerate,3;glow,Color.Alpha( ColorDarkTone( PlayerColor(Player) ), 0 );diffuseramp; effectcolor1,ColorLightTone( PlayerColor(Player) );effectcolor2,PlayerColor(Player); effectclock,'beat';effectperiod,2; ))(self); @@ -23,7 +23,7 @@ return Def.ActorFrame { ToastyDroppedMessageCommand=function(self,params) if params.PlayerNumber == Player then if HasToasty then - (cmd(finishtweening;stopeffect;glow,color("1,1,1,0.5");decelerate,0.35;diffuse,Colors.Alpha( Color("Black"), 0.25 );glow,color("1,1,1,0");linear,0.35*0.25;diffusealpha,0))(self); + (cmd(finishtweening;stopeffect;glow,color("1,1,1,0.5");decelerate,0.35;diffuse,Color.Alpha( Color("Black"), 0.25 );glow,color("1,1,1,0");linear,0.35*0.25;diffusealpha,0))(self); HasToasty = false; else return diff --git a/Themes/default/Graphics/ScreenGameplay StageDisplay.lua b/Themes/default/Graphics/ScreenGameplay StageDisplay.lua index a20a1c542f..81761ccc77 100644 --- a/Themes/default/Graphics/ScreenGameplay StageDisplay.lua +++ b/Themes/default/Graphics/ScreenGameplay StageDisplay.lua @@ -13,6 +13,7 @@ end for s in ivalues(Stage) do stages[#stages+1] = MakeBitmapTest() .. { + InitCommand=cmd(shadowlength,2); SetCommand=function(self, params) local Stage = GAMESTATE:GetCurrentStage(); local StageIndex = GAMESTATE:GetCurrentStageIndex(); diff --git a/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua b/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua index 0437d83b4d..1be2c9961f 100644 --- a/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua +++ b/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua @@ -2,7 +2,7 @@ return Def.ActorFrame { --[[ LoadActor(THEME:GetPathG("ScreenTitleMenu","PreferenceFrame")) .. { OnCommand=function(self) if GetTimingDifficulty() == 7 then - (cmd(glowshift;diffuse,Color("Yellow");diffuserightedge,Color("Red");effectcolor1,Colors.Alpha( Color("Red"), 0.5 );effectcolor2,Color("Invisible");effectperiod,1.25/2))(self); + (cmd(glowshift;diffuse,Color("Yellow");diffuserightedge,Color("Red");effectcolor1,Color.Alpha( Color("Red"), 0.5 );effectcolor2,Color("Invisible");effectperiod,1.25/2))(self); elseif GetTimingDifficulty() < 4 then (cmd(diffuseshift;effectcolor1,Color("Blue");effectcolor2,ColorDarkTone(Color("Blue"));effectperiod,1.25))(self); elseif GetTimingDifficulty() > 4 and GetTimingDifficulty < 6 then diff --git a/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua b/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua index abc1409fa6..9853636553 100644 --- a/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua +++ b/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua @@ -69,7 +69,7 @@ else self:settextf( "Stage %03i", RealStage); self:diffuse( StageToColor('Stage_1st') ); self:diffusebottomedge( ColorMidTone(StageToColor('Stage_1st')) ); - self:strokecolor( Colors.Alpha( ColorDarkTone(StageToColor('Stage_1st')), 0.75) ); + self:strokecolor( Color.Alpha( ColorDarkTone(StageToColor('Stage_1st')), 0.75) ); end; end; } diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 5b83cf0ef7..11e368b4e4 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -110,7 +110,7 @@ ItemsSpacingY=24 NumShownItems=8 [FadingBanner] -BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Colors.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible"); +BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Color.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible"); [Gameplay] @@ -422,7 +422,7 @@ end; ShowAutogen=true AutogenX=0 AutogenY=0 -#AutogenOnCommand=diffuseshift;effectcolor1,Colors.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") ); +#AutogenOnCommand=diffuseshift;effectcolor1,Color.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") ); AutogenOnCommand=blend,Blend.Add;diffuseshift;effectcolor1,color("#FFCC00FF");effectcolor2,color("#FFCC0088"); # ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle") @@ -479,6 +479,7 @@ Fallback="StepsDisplay" # end; PillTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \ local fItemWidth = ( 256 / numItems ) \ + self:x( ((itemIndex-(numItems/2))*fItemWidth) + ( numItems / 2 ) ); \ self:zoomtowidth(fItemWidth); \ end; # PillTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \ @@ -489,8 +490,8 @@ end; # self:effecttiming(1,0.01875*itemIndex,1,1-(0.01875*itemIndex)); \ # self:effectclock('beatnooffset'); \ # end; -TextureCoordScaleX=1 -NumPills=1 +TextureCoordScaleX=256/16 +NumPills=16 [TextBanner] TitleOnCommand=horizalign,left;shadowlength,1; @@ -1333,10 +1334,10 @@ BPMDisplayY=SCREEN_BOTTOM-16 BPMDisplayOnCommand=draworder,101 BPMDisplayOffCommand=bounceend,0.25;zoom,0 # -ShowStageDisplay=false +ShowStageDisplay=true StageDisplayX=SCREEN_CENTER_X StageDisplayY=SCREEN_TOP+24 -StageDisplayOnCommand=zoom,0.5; +StageDisplayOnCommand=zoom,0.675; StageDisplayOffCommand=bounceend,0.25;zoom,0 # ShowScoreFrame=GetUserPrefB("GameplayFooter"); From 1f3eaf6d20a1d8518eb563c3cd4c822ee5c8f58a Mon Sep 17 00:00:00 2001 From: Colby Klein Date: Tue, 19 Jul 2011 17:24:07 -0700 Subject: [PATCH 74/94] Fix Color metatable --- Themes/_fallback/Scripts/02 Colors.lua | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Themes/_fallback/Scripts/02 Colors.lua b/Themes/_fallback/Scripts/02 Colors.lua index 4e4a852f60..b46d9c5fe5 100644 --- a/Themes/_fallback/Scripts/02 Colors.lua +++ b/Themes/_fallback/Scripts/02 Colors.lua @@ -1,12 +1,11 @@ -- SSC Color Module and Library -local nilColor = color("0,0,0,0") + -- Original Color Module. Color = { -- Color Library -- These colors are pure swatch colors and are here purely to be used -- on demand without having to type color("stuff") or dig through -- a palette to get the color you want. - __call(_color) = function(self, _color) return self[_color] end, Black = color("0,0,0,1"), White = color("1,1,1,1"), Red = color("#ed1c24"), @@ -17,7 +16,7 @@ Color = { Purple = color("#92278f"), Outline = color("0,0,0,0.5"), Invisible = color("1,1,1,0"), - Stealth = nilColor, + Stealth = color("0,0,0,0"), -- Color Functions -- These functions alter colors in a certain way so that you can make -- new ones without having to copy a color or find a new one. @@ -31,6 +30,9 @@ Color = { return { c[1],c[2],c[3],fAlpha }; end } + +setmetatable(Color, { __call = function(self, c) return self[c] end }) + -- Remapped Color Module, since some themes are crazy -- Colors = Color; @@ -96,10 +98,6 @@ GameColor.Difficulty["Nightmare"] = GameColor.Difficulty["Challenge"]; GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"]; --[[ Fallbacks ]] -function Color( in_c ) - return __call(in_c) -end --]] - function BoostColor( cColor, fBoost ) local c = cColor return { c[1]*fBoost, c[2]*fBoost, c[3]*fBoost, c[4] } From 0c1a33cbe36aa5e75ada401f4c714f9593700172 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 18:35:29 -0600 Subject: [PATCH 75/94] things ksfs are still broken --- Songs/StepMania 5/ksf/easy.ksf | 383 +++++++++++++++++++++++++++++++++ Songs/StepMania 5/ksf/song.ogg | Bin 0 -> 220298 bytes src/NotesLoaderKSF.cpp | 7 +- src/TimingData.cpp | 2 + 4 files changed, 390 insertions(+), 2 deletions(-) create mode 100644 Songs/StepMania 5/ksf/easy.ksf create mode 100644 Songs/StepMania 5/ksf/song.ogg diff --git a/Songs/StepMania 5/ksf/easy.ksf b/Songs/StepMania 5/ksf/easy.ksf new file mode 100644 index 0000000000..d4353e9f65 --- /dev/null +++ b/Songs/StepMania 5/ksf/easy.ksf @@ -0,0 +1,383 @@ +#TITLE:?; +#BPM:150; +#STARTTIME:0; +#PLAYER:SINGLE; +#TICKCOUNT:4; +#SONGFILE:song.ogg; +#STEP: +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0100100000000 +0000000000000 +0000000000000 +0000000000000 +0010000000000 +0000000000000 +0000000000000 +0000000000000 +0010000000000 +0000000000000 +0000000000000 +0000000000000 +0010000000000 +0000000000000 +0000000000000 +0000000000000 +|T2| +1001000000000 +0000000000000 +0010000000000 +0000000000000 +0010000000000 +0000000000000 +0010000000000 +0000000000000 +|T1| +0100100000000 +0010000000000 +0010000000000 +0010000000000 +|T4| +1001000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +2222222222222 \ No newline at end of file diff --git a/Songs/StepMania 5/ksf/song.ogg b/Songs/StepMania 5/ksf/song.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e8b8af412f2fe0182848fb6e23ebd0a3e01e4a6a GIT binary patch literal 220298 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

  • %kq5 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
    rJPKGV< zJYV#(KaS*I0nb4Pf7k1L2md6&gjv-mPi=R%MlPGGoyfgAHlG-SEP8wqADT7Z_@+SvRz_83$Qqk@Qk#r z9z`gx%kK$m&jIbSjT9;n_?B@N^o^$yl zO=0f!KAfJExJx*&+r0_o;4M^wwQ*q#maLDoCJx(RNzwE$aj+Dtvs@yga`GvD&cm zLPC{Mf&2fnKYIQTb3g`Q4rc*0e)xR@O*I{@&25eCEv;>}ZN$VRG|a@FUdYO!MKAY6koRHt0OU*QuBoAKytlqYH_->pgFZiPmSsPl}kbfkTt))lJyNTzgY*1SBj>o~-E zsr949MD8SZHJ|g>i>Oa9izlIK{uN|V{ySF2<%sk z&Kh5K(Ku29$E^j%>OL`y&DwMq7Kg#P=R%WXvi)RoihV@cQoxG5uv;n%R9H4IZHj%j z@qUv4@XVB%*G*)1u<@CSl{+h)h&(EPObV<||BhkFy2EN)jk0%UGXbSO(R=I-u&aqu zHxuRdyztC4fYRG&kB`E8@zSF2L8Oak685}#^px{rUkY@?6q$Ww!k}Up^>7m(@%5GN zS{uI@xm|Yb(^I*U`as|Pj|lRw_hwGp<7E?h1<)BQ6m42984tGqwDwSvCu8{)G!6>! zaIu6|>R8=S&?9$E_^MIs;fKT>yJ2|3Gg58?eWwWYLpBYVTt>tq zOERdr4+GW;FwE?z4ktr7KEjWQpgG$XbB($h6sXi8sx2Li0C4iPEn60 z%GjQf)j(zPIs4e9N-*79U9CAG-+p&CE713VnO&VR;wCE%0-Ra@Rf}J$5S1hm3h_8d z=w4elSoTR}oR`?myw_tYx1TgF`3$s|#3`FDWvGW{AZ>~g*T~w}ZJnx|#~hA3R=xE@ z`1LLxMs|PT$&-`AmIJ_q*sl7)yj=s^iSfjI70oO0OE!b;3aR!#d4+*$TLK_n{1?WPZkaWoJIQAF)8rc@yLA?X~Q1sL)fO}^T! zHg&=J(||tb*v7~1?&@M)6do{SX0Z`>O(YGX()gAgaTlKyLX7>dk|&w&rr#J`-gMMd zRKuzw{HrcNVXApYDu0_Tk4@Otk#-Du%AHwQ|4TvvJU_!{z~n7QLTKpRk)81x_{?8Q zKeV6MbF$ig^L2~sa>Zlj!ub}@IZ$_2JiO@Ero%y@L3`oL;O67f{sA`yybi%`v@>p8|68+~V`Ci&X8|7l#u8AySt?aLAEWIru``}S z!O{E*YF3lftLau)WS43em^faZ^XJx+=(_gt@S7lbEOf!{U~mV_>=Los=>ZZ_2p#IY zwzCaNGI19F?)QQZBkL*`tw1_G9akKhyo>w_o~?8tQ6Hr3xFX#xaVg_W-S&3ZT-srC z%uTu9nlDB{i(t@5$S%N=k6hgwdDj2-^_SX7Ah%*LQQPN^4csq_MV@GUiR8*7#1)~i z3$$rLo#Jtem<}^=E0UCKyzILAV+%7Eo z!OLPFxwUDwJjA-BuH{1&BGvlIul7a#R^AgX7lnP|9$|7SFhS2s+h_v`ed^cEHLoD4 zsO&Cw;ADl6drA6rzp#%uNHsipIA(91bsIDlaY`mXsa6cX8H@(E@DykxfjinF&~5;2 z;_DXit1TCysMl5`rvfV4g*0_LxiJ!)Kd(s@4XFHuyjBq8i2kUA-W{9~Y)?l$YccwK zBBh+Sd`95wHJF4TX?~aCvhlfkl8a0x)afIx-nXnR56GztB-uHt(7MM;x^Sk6wXGXO zBFQfTj|Gvl9RC!Kxu)<3^3DJcks=vQ;Ok5j`jc-UvvRST+~(<6Z+{%)sm~kGia^3X zc(+hDwo0qmSs97&Q{WRnOU?f8R06h$d1a#)mtO5BhSMe%h(HaWSvm-eBhx1e~2DQuB-e`*P$4ygoCE- z076d$l9iDF-qnmueBN5HZtd}q-!i>}bma{s2M&gaQu>p#j|fEQWe#D+_p89_*C_fk zpQJzYQ~|9mOivSq-o8FB_+2S*Ydu~l{y4BFiH*=h6&wDlQ8Sla0mqKY)_~RKo&-#! z_;>v=j47p40d+Z+5~{7To5GiQS57KH={Rl*zGt`;G6O}K?C5HC7qtlk^(VELIaTic zp@H%V<-*ffvd?XW;rRv8OyzO_>G5+G#dAqPsXSkmV+ri{T@f*r(EBc(XMf@|xWcTS zXZTeqGd1^yqcV$x^xq{9ku44!Z50)86B$03SNZ0K(p0QYV;enSzYR_p}V78IioXVv_h=+A@w5E6bH3U7dqH|7!Oq=N2vgSN@r`-%_slS+nP(&G5$L=8T3x>47fqXg~0#V6?e_I)7docyS+U<_~~XDQ)b zz4lZ!C?O81wr)~stUv`zK>rJqfP&ocxei%P(MlG0znk2uea*GB?lbnVN$&fAN(LE& z3H!s6u=<&GHEP#P^spka#H_fUoo+=Otak-Tg~Q_qs`v}~n3Nkx`aIqss=kz!BLQ+-E4OFn;Go(MFJ=r??AYi2hd1O<5 z#EL1#rnZ;REufD+7S=yK@KP(~`=oOjb&C0|Hl$R+{?jzI+X1W&w<^j><4mgXz=2E- zE_e>9to5%~sSGz#T$Kd6IJ8_dATkyw2Dq>>n?@a3XDMJEZvANEv4Ub6Oda*=;Lz9u zRA+WEPG9&O5LL;WPPM8fW5KCe2HK?OLZZ*EAHC)mRtM92j^mRNWbz#w&#fi!cPN=` ze5YPgS$dZk36onzwf%)77J|(%v?Wis@ZKD+P;O%&m@YHg=zo7yo6Usf(w#I>MH@|^ zB-1D;C&@trbW24y;sP`#*}7Smd054VlMfQiCxZWguwfdSx`)g6F*eA z@tu7hV`1iu7m8Vz;g^G3IsBV&?23DU7r+Yc6d_UOW>dw$A)cet?vEnTz}Gs09btWQ z&L>OF>ji=LVGC}D$*8N8jJe)#&NkkkEOKi#bSk8jc%96{pn%^5UZ4Q!n<4_ zNVjRIJ;(GkKYmtrcDB!hneYD|ZorQkr*b;_kNd07_nyzk&yQ0Kj2ytWdar`p{rh7YI+wBIvM~xu1wTk7BBDI;I zg(*xDe0LTR|2LS0-@Tpm6GJR@eg}B+dI!A-h37=BEmp#J5wcp~gBHo^XE8gyXGM{) zd=zK9+UpTncy8tD%N875I8(Ha=4w!*SLz>&26}DNq<4!N8!!AZv{wVrvK>bRnvF?o zr4;W86!}RTNo+^<$0jL`o@7Gu;xnLrfMx_>ypE7gHk*6P;E-9?Q1o*iq5lPTXRa{FgH+$j$}{Gvxg zJ0Y(SEDL0?+zh?gSL#i636c?+;>jmMLYWJ*%d>y`m2OqS5d4oT$Bb(!e9EGwXdZY3 z^?(Wk2swMhTCGkHzIteoW_*WN1D{kf+q}RF68|h?Lrd)VRtFT-Uc+Nhh-D3P9tcus zSfxgOC*e*WYul`^e&*sFb^_S{GODk2r_O9VP!k0Z#?OkhokxBf65M1)a_$*_CjG<) zmS^VI4cUXnMmKm->j%}7KBKtdM#wG!(`#V`p0q8P*enn6ux5R%j_Y=>E!OtGO0{Eu z{(GOe!^uoLCV_=2c$83uM%Q@3Z%O79HT$&bAZJ`nSjL-^(8UZ{`P=Q7F{@i-qP@*f z+W1d7N9=l+6p_Qy*&IFd+O^W_aES1t`mo)+9Y&rl-C>rRTaiM#{w*#W*suFH)Inh6 zugvQG-)6s8Q31?#P6z2FJH3=NF0`onv&x~qE*cf=FVnYNrlj(RM2NrDm1Fy1z3&!Y*#0mAH6AP_g5eFi{5Fj=_3VnvKL)kV|#s^>R&xS~!{tuf{~xdFQKtFwTI@6=L)h z?%msZO(bm;V0s+Ts0z0vhAV_*!8PGEazAyJDdA+gfzF@wp@Gv6D^$Q68mF+E zmjr+N&)h-)69Rx^{3irK0lXg^yVnWo8oQf2TAJ$XJIRPhi5VF2FqxTJ+I#ET>l-?2 z+uQyNxqwoyuH1_`ENm7ZT>l4ue>ll+)~!kA%MSA9tO@OGXLYBEZGRBuI17CjK?0JR z!ew6>RKYMIpQHE3u+WQb5k>gHId8>alg0^+LP9c$dTOlS7zPhgd&Wvh^Jf+f+5*^MQ}wc`jgipeqrc(Xpyv#>F^H^ms>AQD^jP$U3G^7o-!NRUlP$T6`}X zWIgOMYv)4U-DH0TP0Z#?3O{3iWx<=L{}3n6Yh^C(Esk&y`@znm-Bc7AmxL&;D$!U` z{|~#K==_7Bv_j=x6T9ZJ2v13(kVaFs4&ukB8$T11X9|_Xe%A{@F*-czh+hWMpKV!5 zZ=*_TrW^JuDXYBmYh>IuBZI45z2dx=Aj+i63fJ3U`5Q$Oy*eQWo)uOiw{!gzi}$#& zYIvfs!5)8{FIvCL_dS##!7czdH`Noz zZU!1?{i{yvsJf}06t7n>Hq zTn(;3ekIyZNz1Asvr(&jfj#hR#ao8}D^A!}RjyuSl0yXql$_1Pi?dRfl-87CB7A~7 zZ3C^&-Ua;|fgTZUm*e&_h`q24kG%R68dS3h?Zv?F{6NQS{y{s-Tz=uTsiWR(hMfY7 z;A~I>&AJSx3KS{T0|`HOlxzYH#I(jSE4(Wrc=)#$Ih6@SfR0BhjJE`~jj1*m^xesJ zVe`%gV%Oz?uWFx;#M5 zaiYFMioFN0&aSnJD-MJZqb?YRf)k>BuSQOZXD4+FQW#kAuMVgt4p|XoQrE>RO zE}gqrK8(1e+lhQ@S#|DMRGNFF3TMcS$KeLkcritKjIa2cI!*uJ*pFBF7MTddJV-&7wMUKQx2-p)%^={!OCRL_%8q|k zUR{(fR{AMbq$~!pwsY|CHEUZe+iPPe52tg?a!2&IZR(JYbU`mW`ZPgJ zlI$Jk^i!Sr-_Os9dU;kyx(NaIld~GV?;>IZ`my~RlQFjtS@QlZ3nSJxUeKUXuHA;~ z@bve~B?KB`@bPt1$bcEhxae3!E?AfAAH}BjhA>Y#SLgM)+nbxk;{LfZ#qqE*QQaQA zAZEF=<3jVaR(WuAl%ikpw!Iwz6KIB}t+P}o5-{%^NTR-n;1ryrd5At(ugXA35EcIk zfgzZ?=(}wPRQcbT;r8aR;BeH|ER`Hew1dSrY*}2|8NVU0Ci5Dp%FU7?NdLcsyVO?4 zl31KU)e6c(!cb8{iH`{p`$s^f^z@ID>yfL&z**Xvpg1t-WIm}L;7kYQ?1Jd?C6j8i zjS%1qig5$?YveTA7lE+&SaQCKQME-hoJ1Xp;3f{zBSXKwHue{12H;iPMxDjLB^CpM zh}!{AQ{_!MHi06iv?N#r_WO^GznX3%l*#H@8o{5XA0MQ1MY=(UQ-G1jj);Wm>MGwr zCuDhK&VLXTe#=cQd=y@t4M(_dVH>Y_Z5lD<6iNs=hK+%vKhq?}y9l?iayOlZ@v>gi zshiLbqu(g<2?6aJ7JE|5>@p_#2xgf^Web#w2|>jU9ko3EgF4hq0D*bjv;f*ck4yGA zu$?Lk0-)%1K7CyvEfz(J$tV<7(7C$eF>>iGyB{o^OlMRo}GtoIo zOn1jm?;Tkr6MQg@hyElpMV_LnNz)W7BW`ubgdb^WoZ;UYc7rO&BirIt^T;v_E9cO5 z+T9cr^ZPZ7>sbc6Z%&ehRqGJQmlO<`q?ru1!fkd2lB3 zFB)E)am_Xdwiqby6JJW!&kIf#ZN9|?oOf;~dq1DD%22@ATTs}zP)Qt|FzMVLp_s!| zK~)pxDW%1RhCXijj@eUD7;A7CQ(<6SOrLb%^|T%IsiAS&c`aNqSu+!k?VH<&O*Z<^ ziOn@O-;O6&nzuaCOv{~2pk9B`21XRO(_%fW+Yar+Z*CvhA)AgLM0hXAM+8bA$a_Td zJ;qlQ4Dab6|0sIlxMjUx^%9c+qQDF;mWwbGDvGzIV8Zw4TdisXF=_$Kz2s6LFvh_~ zQTXvZ;P2K-@8kf+=A;lA{ei`N5s9)3)8kWn)iWvopnBEkU}>Wh>Ey@N3bUto`?wz2 z`xPaM2r=&*I|vYKMWD3BXV)ewJh>XRN3*<9X|LX8^AHrlu^OMdxpEEqrQSf?F9FfL9SxGnd@=~FtH~25rWi1R)LU2*lH|VQ=6{4blFo;ZQw0R+k=J| zq)xX!k2kzlli#a_+D{ub+T59q9}r`~P+t|)dNCjX0hIn0DwW}@Na%hma;S$e z!({3;J&vS}wiYFmsM|YU(?ykJPIhsZR^M)|sFeK093?{#bwcI9#vh2tTJvS&Up&&{ zvk`x0@GT>_zJm)zXE*Zkc9KPdiJbhDj?Xm{gr%v)L=KIxg7fB6+3K)Nv2{)_FNkI| z&XAh**U0lwl(DI&jBq}U88G~H6@f%>rH;P0V%URmblx|s4Fqx!SEf!y6m$RNb*RhA zjrSGs0UBCY3s=>KlN-7?YeV$k-|*H83zI6EY@+S512uAHyn8Uz~mO(lGUJ zXChlZ+;7O3yPB&%rZFC_m{Nl;dv{UU?Ls@G$-UZ8>zcqX(0R=Rw^Jo|r5HrG$>XSJ!S{XR0f2 zTt9-VXi=NA7?7y1LMfh?RCx|4JL=B$ynnF2WoZ|Jxs90|3u<$ZfP4K`?sL`6KjN(@ zb|HZ$$skGb045R+h=tvQ8UA^J3X;k-;+*@~JZ)y%kzYjO%%-T&WUl$>h*)VWW6&I~ z-b9E6{S|}&`5_<)H<&N9p$S{X6bJ5q&Tv{D6Ux#_L*2CENU@=&m!nwgvmpr&jA766 zTI(Ie%9kSizRhgf_p`5j^EBTRtUR?KjU?~SmD1cAR~eBCHX2eINT*kI;mgAsK#O78 zN~7+(_1%S_`f6sbGl0ki$2q<=RTZJ_d5>;)bvIA^+b;fwcwkDW9W|Ge>TBvoXja7ZxylGukv z5HVD3opPO691puRo;QVE5RJJR9o>IsV+F>^uGHQs_IrbuqgcN3-Dq9MSr4XaIl7F<-gp2G4oFxFf2=ug3TW{;i2 z3d6MA8sRRC-rU7Yw!6`9kt?)IA$68Hb46SGR-+?;q2quKe$Q5hVMD?D7-i6QLusz< zP6#xX!RwwMfv_Ka&4nlH~9+fUoytMhhX<*gb{PV)wDB1Z!8Oge@ zzOQgX13k&?@=34VT664nd??Ewb!D~J!Jn|34rLuKIMn{|_<4PTFlc6tKy@C>G|1I> zzsWyg2Y0j9TJZ`cKgT*#ADb5EOmq?CU{z51R~ri(qhd~b=3IxX&>^vO{|u?H<=QdOAo4z@P&t@eQJMO`)c7zJ>&6j*vmVK}q_ zO2{q@iPZ^x?O@vD?wW6Mgrings4ED^_$=->g0_4S<`drC-&5rg!TZEEzqKm>ua|U> zLWdHa-|=<91Vz$F`Qt*yhpgo5+jbdvHy^wI3IqH!<+?UKCuo%WiG?zOV z%QO@hx9wU*4{t5o{!PilNn^vbG=TeC zZCI<`Ute>Q+FJox{7kb=ktFRNrwA~RM5E|2;V1omwXbcH^%@Ig)_9eP@1v}j+Oy?# zfkPaSjsRHHcieWn?Ozi;o|Pnb)uH_H?%gmK&!=rXUjFO`$Cs4M@EbPR=5M-4M{;)X z?XYWxmj(vD(_|BSfh+?u{mhD8qC4lzVpGQ)IjeaXbI7ccaV$5@elOT7Q5d=`^+Ae? z9Btcy$(4Pv2NfMk22c1;cUUXQCVh2}PA$#Q4F84Jba}vaUsGOgyw}(a7!wDSwiEgb z>EJsRV3bG02+2C$L2lTQ{MNJc-AtNn(l4jV#H!+4Awi)SrDkr7!$C?s5@er*ZTpmD zz2r368%V+_8u#N~gv^+i=Yk$``oquA7 zYBWdG-g>d+}ssEPbWrKF!%E$N{yLgyfKr*xAUnh9Bqq z1P}k%2LpIQ{PT7P;1{Whm05O?c|hm5O^Vz!j8Na}OoAwgvDzC)2*!ueydc&|+eGHU zA^l-RrWp~0SCFrUF848)DI)PdxdwNC*o(s%S5sSLcC!m3Iuu`3lT}itj2RKNtR)CT zRTJ`3c7$w0CRI^bU^dKEDc?h@%9`1Ez28i9^&+XT?9ba2h~A=a!#Z`{kTY(?h3Srv z)%Z|)H=V)*v(-2=G~zDvg>_=?K|Y91e^b){@bO4)h3#kkgIz611zre-BByCKTWQVF zuJKZO%qnH_TtW81zCD1-LTJUEaGKv-l@$Bmwbl^s<7>E3EPeuci@F_%LM;Fl!Pp=g z+wVbwNS9KCBuxGd|BbR&qvI*$#tw1iRCVJIyAKp41?4IWY2B_5eyR-tm1W{yJ$b|$ z;vUyfI<9###sVP%GHbd9gw{y~-;38VigMU$!LHlFrraZb>l!`$iD)$R*;ZtWQ+_WT zDaF%jHjkI-*cT7f3pZ{my*tH)rDro5&EnDjt$i-OXT2+!;^j`>sCH=94Iwwb{f$h) z21q3OOuBkFlGPwmD<23FsCG2NNF5$d1{mO$=lKzen`qdN*|HBsD8Tq=9^ug&FEY(Q zX)Fh0^EJmdDuMMz$5UUwmAQoahC#J^Ll$C~R&JTar?%V~l%jdgcxpGjXpsUSp z+z3A1#4G1x^B=o`QbjV(C!Y$4VtASR>06f!?ar`1E80YzZ4fTiui!n?4w;O0=v7zWC}>wspRpTRq^4i;&x*WT>`3Mn1@Rlz?UkhG>26_#x*QuLibQ~4Aj{4o1uEUr|nLIVYQ8K zd0F`r1Ba`xa&8=08a%h7+b7Sxio5pD7V0ghyiJNEu+&u-IuuN9R=JS$7+^=d{^l1c zvGY|dWdRU}uAn;ME#iGs-MXvIEF_1}Ii zK45i8|I2dHzmm$_At}Q)g%NBB0j_A0PI*Z(E3D`E+s98_DZJn2@e$EgURX#ELH0E` zu(V#eg7TD|;)8#q_RzW{`I}roB?xH?v=^fJu}lA4Bv_#hYksdQ#s*{P#Z|2Oq&_{5 z(1@f|RCliOc3^#ifBz=OnA#PyZ{B{c!zPCMp)Dd$ev^UUH;Ibz`k-|zP{7bia_1^( zv}SCm0WLqbzUa8g3NYtXiK&Jp8KREvD`iRo*ynz+H+cZVVwVe(Q1*D_sUU!s(0JWC zXyfI#TvRA+Qd`*^fXd&TQ+lh=l;q~hG7MtYQ=3}EY_`Tsmik>tI3s%($2=Wm->^W@ zx#P$s8O7%-Y%I3aH3u=s%Sq(Yb$e8)B3C}?8;!ysJv3^cdUL%KnKhM#3B3;v0@Awj zSa7Lm@#&tqY;JjIS1y1-qv>2yZjt;ii+k>?=yEah>TCEm?{rr#DHl9{>Gb5b-j8=e zR~3K)!v0G7m(Un4P;XNSQti*OaZ@%KWdbVQaNTf~{ zT=z#l59)&2<=vqsmC1_3ivZyoHdN6=e?3ZRdF8H0Z(&t}P8j-&_>4{Jzztyh0r7w_ zovxasYH8^rZL08)qA`#)d3AiXa~k`^48F6Q0GSAvoAE@I3Stq=O%9tk#6D4MM*r} zl)fb~xt4X@@bZy_`Jk4_wuMQ^i$j_uR#GvvC{i&}l8$x*_25TPEld!C?@ZhntK}>d zHHs(Q6b0c{Dqmtcim;6SskDKb-u3v*mtgVk^y z>R&^`Un&cbU;!A6>2}KB7(wf*3M(ZuS<*p_-Bcbx)Q-|4n{rTe?Gs9Q+lBUjP|IpC zKhq+v7?-?4j5nVWIcGS+$TiL@)MZRZA99p+hZJ-+0V?qhO1oK@Dc-7SS} z$S+Fwlj&NZG)?};C`O_eQ-P9=+R9`mtSLFhC zNyAz+!c3H*KSqilPjX&k+1=|tZzNk&E8iR96R_0(Yef3-Cu=J{m~eTZ0uk!|&x3G{SlK+;L=1$4tZQUy^zbH#h44;k^_(2_xzhm8{Kr=jlrwit-Y|k+tD@&1{ zW_pAGZ0~<+H$qBn3o>0~oqS3lOd|>`8F8+YHxgMlZB3e(7JMi79-VZ!STca+G}6@? z+2f4o+3T&DRxtugVdQa|?Wld4$Gs(+vld=7WWXD_76Ak_mGGvh+j%i3=urj2a*Pl} zU5{;@DrRg3mhnY!I*m}5m2i{1(*!pf)@VNDpSaw{W;WSk3{CXKUM^B^`YJr)qJ9I} z_0-BzeJ7z3iaQaJkBy8aN92&t2Ww3cgG8e-*QHi%@)LeMmc z7Fd72Q`W6OhJZ^mQ?tgx8^4}9i9GC^T}QP%Sk z#hH7W{s8d`tLh+9X&oTaj48BIDOV$TeOl0ZZ*0V`Yg70+|09n)gT6%2}6BQFL zVuqa9VCp;Au>`TsTC{#RMe1*I?TWZF=U~=VRidpyH zc147QzM~f4t;FD#nw+Di1O=O`Zvpb(uKp_9<{C3uG--x`X8PSrhUEwy-PR<|%ry}0 z*Z+3dWo#I^hEWYkkAdinbbjh5dHCHGJ$jKWNIPGU!C2sufrG)|`evkHay>W}1;RRE zMb=r_o85M$jn1uKe|VmIYtiV@O(6F1o>&dLOkhLQoCEO^p}%`|nW}5baZpwiT$}0w zhKB1gy>IzudJ0E)UH=`?FW(JBNmS@J*04Ce(y_6k_(p&F8mq202B!D#%5MKEeP+}T zQqJ2%0FI{5|Th3UkiOjRgd;Ykyk;LfcOLPTo z-{2PT|BSMz($X)CVdblt0ncilvVnqX2Q8~$rO2YZL_B)!j`kw2oE1;VnPkc?q0Cbj zO!cO;oia>{1Bq$+pbdPdrb7INgb?``aF?W|3A$K_^ ze%=WP$ZGeOi!GHzXwyg!<1Gsb0gt4|Q6Dd#Efq8%6Z)VM?l1F9S5Vlc2_EXMcbSOX zC4ls5Q$zV~IH_k7zb;|eftwsr7u&TSBzv)BpR`M1JP)0OFR91OVfNVVeydUU<)~sF zXw=W3JksD8Ci)1k6D^m}$^EvH2j)9X^O`)4&%(bc{ld#|KS*D z0372W`$sA{At@0t6B8aiJ8ef>XJ<=mYio0ROIv$;dov+1AvGfnE+Z>#TgyIJ!p(3! z<%a<_@bNB&)wu`pqr`8u#b!QB1Q4xLR^SCllt&y`1Asef=dX*q&|9vEZ!n^GE~}5S zWza7gZCMX*KVTQYs_x{mIAu&o|9ID&rD`@pG{m;{+Fc2Qp@sHtPV6H3+x+0UABboulP#%&Y})g82M= zfB*OT?0Wcm`+jnK_I&cA04@0Ib)oIRnS$Wo(ztK`v~EjaXFv65uZP{(=qhafk0Hm+ zkd~gFPEA!-WgHHCmsI1`^w{)$f&&->3U@ErSlW*eK}L*@E{_w4`#i12r|HZRpB+U4 z#11Q`Q2H-Kv8v%JICy)8UdO8IyiA2#=lj@$VjC85K>?(;lADTfh5)edJZu=wir%NT zkz>H66|R5ezb0^yV z7`Zo`*0tH*SFW3tz3LOojgX1zF4u*-r9aOb{|slB#ub z&-|s#B8KQnXf@2zegJ zpffD-{r}1myGm*?sL2*77|9Ppx4+zM zl$YizY1xV2ED~3=?aAKfn9=+1BNqmF4F?_@Su1i^XGOTAZ$!|eany=JjmW49#ocU5 z3;8=;+Hv<}%6F$$bG0Ex6s2(qY@iItCu!Kb>yg~dzh!QT1aRTocMo1PfW^xFG|P=I zA|6NO;X{i=r*i;?1h2V(86shww|TY0YF1wO>YaTVVgeYr2|6jQueg<+^0l>BWIEa5!i19U zB19O?wEivn|C}MHF)A8EQGxsvYppDsEr(c}q(end>OQ1uEQ1@Vk7{9GO|-*mk95f> z=a_=YREpdzD)Qww))+Upd+JrQ_k2_&;yZzy;uLpLs|;Zz}h%ZuU+~* zoc%P0JCd>1c|trwc@Z20HEGCr=TQ5XFzDdofYp@hf8UM;3O<0iP^?lk{uB%bG*g*n z*+!ddvNNiE;r=}zdyGKznnYCGK{dh^!sEGiZ$_|L)C~n9F3v|`bGi^|ObxOGt47fx za+U$znNuH(T6TbsB?-7(zX|nrg9*;GZ8IU-{Vjx8(IuKOdkO+xx=fofyaN8du+ALDrL;KbT68L| zn$afa^}GR6r%WUp@!rTYRyE>OhGzibxsI^N$3aWkV$`!BR>kmQ(nD5M{5=VH^3&S5 ztTTfYf#u#_@$d$7hxRf+6VH2Csr^m_B>9YIKogiIH(AQ6)kZL>qp9=vjxxsgj+}8p zi6S!GD$g6Wa=sOJjA4E)c>mekqZ7@=P`WoxI)DEm#TEb}H;l zrdYx$|1El=Ogs8Ba28b+{e_2SQ~xE#jR&G@NKeH@SLF3Vix|XJtib*%qX`&_{Un*U zs$x{fPbR~@bF`+}3pK>uy#goOO#QcCPPNlDO-~f;t|%T>GOLTsH!Ck$9R4VIl=x~_ z-lrB`%PM2q)x+5R$+mW46StNTzc<#VvtkM*ioaLO%fM5a&?Ri+(sIT*YkOW38~+UJ z+KxFmfe2&Jw3OQ$od9?}6ZfrXPvA;UqnwliY*lCp{9M$a?q%ZOY>>?q&RwL zO7iXUP#1JH7PQ9;dh&vJ_ylw}OVzq?v20}O+V2huORDwT_g%>8`eC1t0K{3!GbXZy z+X#PoQEm&S+7LJjyaO z!ltnd>q39bmh&NvLpM%%LuWJtlM0F*Tb$At!I-29ycSC>3J-7@?C))4Z&KCJ{uGG6iB(^ zxNRYQ{Gx%NhR04Rn=KfiVMZ{xk3ooo$s%SfN|H6h(m{3**4oHf#i7EBvWS^VDC%b1Gb{)lf$KSBphjhNgk68*IS-2c0OKKJ+FbwcXnenlbRmegJ@Zt)R8lhcVM z9?3fy*ZAZu%@_=!0S@pi zn(h5p&s1xa2zmiF^!_Um{asNMNd?Ph_#qO*VRkLHwAY%DJM`RkA#rk}7NRyV!SZyi zW;0$`!jegBKa(~6-Fb3{VK43VeqBve`rI9=$3AF}HfHn2OhA5V1!%oHN45CvSm`us z(n#?h?WCVqF{;m}QpRupi7}l&WBM2D{h#69ZfY`Z*04M?KtPnymO0*;4apANzDm>S zV1};LDaS~Drzm);`#YOWo~vTKh!!knTkCrU=SqI%-QR$gwS}K$NW%6~WCIwYWjQnRW@W9O(oHr{T!Wil6} z{yYV{mt}u*Hp0KFKzCfzyhz7uqM~ThQwN30r;pKNM!J{gMnpF3!oI8pLW%zKWNaz0 z@9P2lEicOhjyVV*0BF4$L%kA5ZhRfigoV6kF>$BRKU>>_C{hb!`+Xy43&6=)T> zGAouWPOFm8R2|9WYQy7j7BeIOi&EOBz1J$wZN!-q0$8d5H_K-yyKPnORS71q1jsnm7{H{H?ghgW zvt8$Dq$5WciT|-WQ0w>0!n8MhLTQq{#f`EsN6Wb3X=#bKE{Jz&RO|y|tqBI|PoTb+ z?*#+GZ1u{lVcf}>s_TY-+~vs1ZZbmJ7HFW9thxLLrz6k{&hi%|W^b61k2e%yFOJc& zxC#QC^nUkBqWHp#gCJFV>0U^~tcc!Kw2&tAac+2-P#wsf$Z}1h=1+O8_Q<&UyJnt9 zC}6+!k5@%h(uOTJBD@GpBC#$XT9wT4hBA`m|GJKtr$bG0Y)Ns0lqFdG z+Ll{yDG_eFWXQoDz%0MlZdWbK0>5P_@6xn=i4c=(6jS>^gTM=XzS!aXD0jMoerIVX zTY~;u0BS)B)mx(;L$o%Oz1WM@iH7r<8nmcfP7hm%d;B^sAS0E&g9wC_40Q5)>x3K!sFu%LK z_Yb5r5#EKh_3B$BxLW)l=0A9kSMw|eOM^@P1_?|w0W|Qk}bS)2C8uJYreWH{sKip*2Lw>v>HL$)b zpxS@%08GM1(vW{MA|tY9CH=noegS2|Q0Wi#T-fN1VH(xl?g_wHxSuZ4*YYmk|2IgY z+D9$q0#1_pp@Ea6?ERsv$!S6KSukG5fy7gQ33f*L?hpNU-#KoI#jh_-LJrnd%3?9{ zHZhYfi}<_M_s#crIzEzZrvP4Y88t(2fQ1zV=XE#KyFeN3*lo^_6T+PPshoR81p%Qf zc}2>7^`wk7pXP4U4Ho;f=CgU^ggYZC6)9WoBzc+EGlbLgp}y&xf>m=KarrT}i>G*R z@5rb-i~a%^iBG${jn5e?z@eh7KOxJB0Bp<3xh0F`152Wn2Q#Qspz>-wJ-MmYvYz#* z5?Vm9VaroONVK2VnOTjTk;ZQ+<`;LO7l&RKu+6h5*xzFJNh!#!#)0T#lB1~q+rI{> zZC-3vDQWL1$rpWb#%mUzt=lkR6nwQ&!cEeZ(rv3(NRljzK44Mcl;L65rax%z;{F2j zAtvJvCDgOwyEnBex|!P9PJln&g}skJT!tR!UfijZRs_rTiN^o$X6-6tsWsW8f)!+i zecU+MzJLiQv&zjxP4>v9myIg@Xi0jsqNMtTn!vh!!7(jyYV>~6Kg`aj>s_`-&*4;i z?>8TaazFpPJ}Y!*Pk7vdAJ}Xv{Wx&;lAt4I&Kno~%Bd8Yji>N&3PZusjOP*@_n4ey z*t@hDaVyz0(PC;OF9i!HmNqbXWDU7F5p$_-xO2QsZGwQjre=~SUq6L?*Q9_X5-c4; zviNvI*#q`JpaBmG2rvAn_P_-Gz9`1m6E;>iw6xZBH@DZ;w>CDA5RuU^)8Vjl(Ee^| z{M}afNtpONW(9lTh1Ap>alY=+0sPwBufQ}LnYX`?5*@4Pi1EcYRwWtxKq`qM-gA@Y z;~J`Pz{zW+xy#JL8Xq4e_9GVL8(=V~F~h|k!P-^6s6047TO@&P&AFQ9b+z&c6wL@A zSu?cq`S|P%w(8m3qVsx+21@z#C|XkZ^zUg}93`))9m!m0eJhTEV$c-IhW$lwzeX5z z=l=w$;YvGb{u}Q^yKEq`0aMNOhXb>&HctO%b-xB|20tZHrPANnSf~Mp+5!TOh}O9< zu-(}>+?mf@E2f<~n@J_ROJ`Sob-__8lpuwf)UoZC0qEPQ-@#*Ec2>1uqLF6qYwlnb zn3uqsv^@*@712Zwnn9z$*0t}^8`nlD2O@gl+rSx0L=HglX6WXPn%Z_&_b{ZIk<`_< z9_4wU-B_s}a<`-Wvi7GsFow!$Uqk!rv^L7 z%8#|$tPg)l{{Dgw@p?T3jjJjCp&J0DbH*!&DO-1GqYG)^uNw!o|DW~qN-iGM6D=C!7g=8Ou8N$@^se8**+kB?@_k!{ zNFWt^EQqIoQ5%RAsoV8veHz^De=)>oZT=7PF$W4)GDx&s3qTy#Wti^VB zeM4rEncBg&HBuXZzDdCYg{`uz#J!4pGwTd+nh=R$p@$rr;xPDJ_a{yO0E|c_DIXqRo|2@EHyAbhi(eT-#}Q-XeV4oZ&5%j3?Gan zOAX!CH|43WDkipLaR}AtuS}=3nB4X6D%TP3Y*!1OaS;`nel1ltPP!2N z-iqD7g}9K9kD>*n({}y4dx6+2u*A&sF7_4!5p<{()K%iC_eYGZa-830h+M{dOMCRL ztx%O=>PX0%bEa_XpHr_m9o=B_@E?8Jfun1uuNPeMMM8aXJY|L)QVEIkS66$lTK;RA z`L}YHRZe8qlE+77fvbKk6VXGcs*^{Ns5BHW!0@*jOncQu-dhddnu>y+RA1L#&(ao#}s^dukFK|53}BPVX@a=p9EQ zz%Yut?0@Yq89>RAB+U{)4@}dd^PY#l3;W9DEX^*tO2+E6hbJ~-q-aW+51Q^v#4vg; zFbi=2J3pwlh+aiTV~g%Pq(qm}v45-m!oQZR(Q{T4G8B&2izY2)E+~LR6}ZDZLiR3< zH7u&ySQy1#90m1%H9c_P08Cg}iZg)~#5J=Of=95|yV`&gnVO0U;+V{Jt3y}6IOj7k zZDkr^({!Q%^G`q2wsOZ0>nI-6mJD=DwV#h5nd{9yZsFmfc{$`zcHoYSKDIKKVPQwq&}At4@~*wxpXf9*3;QLBVcAub0E62ST~vu;=g?o_!F9?zpQMQf_YF8FhIi- zKXG*Yfxi7Jt{Ox$;?OQ1bdICDXG$Ob8u{l*9P;66MPOFbkYGt80Y7YeM1#~4UDuz2 z(Rxv62;pz#2)fIh>Pu}mx}MRwJDz4Kr~@Ts)xeo8r16PiDEapGFjIsNG_Lt4ONrm_?!oe975UgH6` z^Kt%3poN@gN!twyA=ERDk6)WCldZB$kT|nLE;|~tUIo$+3H=w1uv)Y+dd70pAWRI4 zuRc7a>Y`%N0RQ8nq}LliPQ^`9`|sxCvV+*9U2UZ4!hTXA=;MnTtk?>h{7baa-;Wal zHJjCg^E~G;`4J8-JnX2Dje}Vtw-^j}%75Ivwp1X&ZA&Am^r%6G4gxT!LV=Uh72r}M z{B06lc*k4;$rANML-roO%ev4tU!(C(BA2|ABwqQ5$}!NAr733x1Fm=x4uW2+MKvRB zs>R!@j+KOi@$_C!-F}Xb&k!1o8rp(&IZEu20@JvI4Ant$X+3I>Xj$Y`}SKFubMNdqg3(GKQM>TuBN$$}-KC#>Gor$Psqzj6S)rby13Kr<+^ch6b zybG+nWW8JSDomFZ0lFGUi5gk%%I+?mD=yZTt`^y5BU%W3oQb$?x|2}NlU?30U!|nk z`MA1*5-eKPYbBX?Ue@nqM-=OvnEH4`rPA`^z~(3#Dy4~+pM*u*CQE)feY^4G>I-8= zh%eTXTyuD1W4)uzV&d16PBs(qmMhZ^?JlWzO_5&W!~co3fdDbGT$sT7ZS9*nWC7+5 zIldjZFlh5ih`pGwDaq=Oq*;5|Uuy7Bz=Z=3Zr~;9P$6wXnUJl5F8J^@)@-4B#Ycxz zdj*R9sSy@oIo^61+5;6)ym&^|nObc077nrXspx310NjkKFc~r{f~`ixg%Eu-lt^QU zF(WQoc}D#W(dH~$z4WcED+*JHGRf}R!@zj(Q25zyG{ZhL<345eIONML)3!x(IWA%U z%77purbr3pJrVVoj*>slsbVD-VtC-9)moxs1%B^d)L+q~V+Rp4X0D=jaWy^A&j{N# z`vgP)GDosOc5+m0I4F~yLkT;D*yJT_8#~%LMOKj9rWLU^=sf5lYGDM+IPp+l;-!EY zk(i+pnv1!JTd?xYUl$pMU>?{_C>*)h&it8@ytwoG z;lEB1*9wTEKypsgoO+R{svMIs<^)`y#iD4JU!joZP~X@#4^4@YhJi@D1w13>W~mRE zY4xpI_cxLoRGF4_y&#tN{lG8t;8E8@LP520M`T>9vm%l7O4(RQoBZ<5QSJL3yCPmf zP3h&}(ML8)7T^C!CdwGrW~7+J z(e$TwJaF%ygq&Eo`kyJIfz890yKo8y)2efy4=mN?)Z`IiksS3>^CM!Mh?(20_Yr?- zQxQhoEtCfosBiD#_(AlU>7cpU?KEbY-fWaP($*b}j;KDK54p8t_yE;Q6PtFI=WVYX z@lf&r-sp3us_k+rJa18uH9vTH21dRYBD0G*XLu?8fk|I9sOqVXZ_P;ehu!2ZpcyW5G4HXSBh z)b3acV=-i>rYf$(1K!I!$B6W%FQhZK_aI_!Sz;FU3r9dAi?J79{lwH%HQ`)`E<=h; z)!pvUDc9dfZqD_oDK_@~?wlM;mVJY%d3f4e4jFgz`ERC7zpvvIP@x$V_EDfJJBph; z#=i3?q7;D<8ifoyU#NffO)H=2j)2}-vPyNzT40=mZar#1W+r3pDPhkfM&_A;`drY4 z`ZS-M^6ea~KN>iD^@T+mw}kgf=}%|cVAiUZz?$2wfD#psB-g27;t@up$`y=*qm2Ha z*|BT79y5s(StJHD*I(Ec+ZV-TNvP)`_sA|av(*)uF4{8HMX=e*_cZ;mZefZlIwKdtv7w`&XY zwglInusbE{-w0s7V3>2gOgc^#|I#uS#sX7au|GnFrWlmSrgLW45YpTg<810YC{bT- z7j|=_<i<>f&-Q4Dpa7$VWEqps*m%R8S3}2fy)psUh%^+{ zuRk^lLni1Gs;OoWWUd6`)8@@2dQxRZ6P7pzQ9ecGHOi^&4!8_!LgOHE>)BGsfo zKbnEvMH$vA59))loVe%Xy*~k2p{<>Lf>L3pPrv-H>q3!id?7c{ortmspds2ttlW!b zP_u{#Cg!Oz$gJ^K_4x-Y*2pt&RJ^ThSNf@akb{#Kw%IayOfjAr886%!JIh(*#TrRp z98da6E!dA7dDVzGZ1T1&8jw+(qf#QpB!v1m)cGuH=)iPTWN7B*M)O9VsT&*bVs6$8Q7@b3zJ5LzkBJ(Xq$jAQjV&alNeH=yY+hoZq$)=CGp=d z68PkSuW4CjzuU?jw=$rP#Y!-oBMj?oG{e2F8KOm?pm)A|k-`xrOdc1OON?licGvRNj`T7*l89^xt_@^^X=Wr9EOPAC zF#8~YGUemhDb)LEMSJXgUi0>hz`T3rOBkM&_r|I%Jq<6(iF|1_Nb=+POguc+jK5ld z0Zuf@nE_K1c`kx7B09wVz^C5;@OJ&|E?gE88T7i00e%xLvUE(Od6#F>9gsTTYfi$2 z!8}s56KSD>s~m<8VF2hu`VA7^;o=RxGS{FSeCIVPP2AZZ%UAs4rCVvB>>vyZyFd2+ z-f~n4dvYG8S~H&zOZ;RaK>GH+BCNMa<2Q>Bvq;uK_~B+mTC z`?6$KHh3>RX_fbsX#g=kD6x_$l8}Ae^axhxPbNOVb=BArwLM(s7zawSStu~)O$Ggb zp&-uxKfr+n1UP=!pmGp&w6s^(w^Vm@5fhOzG2vjdvo$t$wAb`^0MkyJ8-QiS|Achg zGzJWt3Xw$sZ616k&dV<&iwUaF1y8ewG;Z0f3^%j($#9kC1b;#!f$ej7z)4JG)6z%+ znt-^_gKN-9xE0w0INaX(30O;2l1o&9`4J^Uxp2weL-N3mt+PN5)UlxvyQV$hlI{v z`XlKEs3?3yiz-z?Dd@Psy1wK7tL6UZHuf}=boSC!iw;oqiP*TR2&(NmKMG-V9)ExQ zZsqOSxA4Z!CARPDVtW3Qy;i!rMk;u%v2RF^`YraB-*xEDEpMF2L567lK^BxC4~w_M zY+WIAq;@4&Ck$TG&MltUn=zA?Wj%szGIyL2!*3zn@OH;jtt3kUHe9l!i&Xur2`bt* zcab>_-(;~OvTRRXCqM|>KWC0_EefQ2bY$1Z42LNE(-C^21p{cbgx2Yy@BNdC7FwJO<+4+`;H=V?Et=2n z>D53l`l@d84eQHAC~KDkY3Ouz#XV(4V`R}ZK6xcyS>R)+cN$@HBN~fYo{o{r?qOoD61xzQwWy%aG}-bY2WH!N3r{K--lW?ir>M3}&fB{24=(f}>u`N56h$9;tf8Qa7Wy z0UdMdjd5Uo?{w@>msP!}LLGHihuuTLf*LQ|5+T`tx7BBV;DH(vf`PJz?dp9Ov_cIOcI2Udr??WE|RqJvhNf9T82BdYb|*b;w+C4#NPS;LN9D z8{lWKEvQB}g#%0sn6u)sAs4yLL37Uu7<4?>V?C=-I{rDY5FJXUenmpg%77c?+@6aF zy&~>0X=32e{3Aw`mdUXxBRafHuK%wHWkr>UJM^iT?%HZ%a?yhw3WTn(;E56r#&oK*~g^c~DDto}|( z!^05bd`Flhep6G@#_w4Xu94ceZz?i=`k%DF|JE+5#zp`2s!<6Y;M+2!rL^1D9rCMr zWH`bYN0${zpoi;{9okKG(E;{0U4cQH#d>R21bk}AK;*aWUYnJRFh!;Hyr>|ssD(=WuzeIA_kY87>usR)JX6|Yw7 zeXpZ8Gi`Pe7rT`VqJ+*8WF8O&^D`g&)bI;T(>pbRMRAoVyKibE=gMIg4~P6IeN#Ns zExe1KFq1Ab-nA1<0c$&2-;y}X-KnRIQ&6qyt-mpMut1j8)YOk^S@f?KoEM2u&Ss@w z9RN@VtmlA>OvCn)uFC z`0>12dS8apUzcA#_$$rl9yG*|66xnj%qO@;WoI(Rm$Vr^QlP*cw>$WAXF<-=$ zd)+tVP)?$1jBn6KI+hCVYiF?bukW?Yj*#>z`b>+>R~V{SrM{t2{AdVpJgf)o9vp$& zk8A!m;AgPJ+4MuO9M-*HEc@-ILK(|t0 zc;RRdN-|W)D9(_ibE&yT9E!#xxH@57;1jnrFP7WG8Nag?D|N|ovCmJ+$nT!$0(MI? zFZ(EHF>ZHV3u;Il*QR_r5RH9J>C+&;nt~ZrzVkKW(cn)wOUeoIH;aV%{o(JDYQ9?t zxDx+k3;sK-Gu(VC;(@tWT&|w>^FhB4@8Y+Uc^_Do;G7rrig5D>U>};{O-)*r>V6Ai z_3Yzk{aLkfvZFD0XJxaKjoIr}xfahV$`rsoa>=R(7QC^foXAseF z%)ET6ZW)J%OH%jyfgY(7z?>M0ant;}1uX?ipCK-=1y`qUP>cR|!$Vc{_**jHEkuQ2 zTk%BHBDAKa2g^FSz>GBtnrx|m*0ppmqL$jf3FPt#=PYoxHCslb2V=X-4IfK{DG>be)4ofjSldYAg z$S|HUP~b^DYp?1-WUK_4_YNnV89j|If?S6-cIULPUPTl~$(~dz2WgLdA9=gy-bVv7 zsyA1rVD6Bt%GqTOyl;AUXY@o_FH|uJK{gpwQdVDV*3-j572iqki+s!`;)49V&)+`f z9o5w|>Pd7jz;r}FZ6cOe;$*S{;H48q9FZ%M$_GZGAP&(MW!~I73|ai} z7t^qO)@%HKLuXEBs;BChLbQ;XiTS=p$t8CLjGl3PZkM%Z1t+K)KLPcYvPf!MU_mv% z-+g^Do_MLtFsU&-Mr!=t5y8C5>-YOHEwed(su9oBM@0K^ljpl0YWHOV?1}9qccGo0 z$1fVCRa@->(q5t&c-9#5l0+Yy_FA4ss zQo=tos!}p*bX3mg6Y@aLvSl|(!Hg5F{@|<4LRN&7e7EPWr1eezd%Zy|Q~7J15?u67 zv%F(gvN@rpY?z7+_?rHQQHPX|a*8<*Dgpc`8yRu7h8$_*_Ttmy_KF*ILbdJo=GCI^wj9HX$pq8H7Rene9ieS3OKA0#X!G64;P*ZG|yKxXr}XPGU#*FneAcy*!vlug84o?7hBvmhJ`1O4m5`SJukg0PVe~L&>eenE)2mrc<428=K`zs0#Qh?PY>^iNb(AHCdRV zh4ULLeNDH3OD1uK^0I8lquz^)4L&(dT3GxB{c_88ykROs#1(DKub`3L_pv2`-aBfQ zWmrY)|BGP)E?ZD--+0GF00pQW*Yue};`$0M`osKu*qYbI=j)ArZ5XR%+47@5VN03X zCOsvkEt}}yj_XsW-!D@k->N4-DOV`2Y)LzMYjyZ&qdc)9kSF4}%tu2mh!Xo5QP7ye z-9d5HJW>!F0!-C7F0%<#9gq@OM^J^N?~?XYGk8sFY7?}kweS= z{CehkE;sMsI+0aL3igN)SzNpTUtB-IPOZQGCw%+!?Aa#-`j=MD^bjXsP8h_G=>E|2 z-IRYixE@!{7u(TCvW)DqwjV%Rl8q9vbc2)sYgg2ZdG$+di%z6_%g&Y@edbwMy>ge# zVyyZ^>PLt92`EVK4PR9P{9_^k8E0-!V9&_7ssjH$W*>UdRmkvs@{<(2w%+B%E~|Kr z9owsr?w{v|(}P_4+=G@Chd~7<`1)p&8@npk2Ay4TEjjSL;}$lA7oDN5@-Fvd;4$Er=0c`4vItOM|4B z&wG-5RKL(@e%zl5RHb~yRtNar&JzD@mb_7lBXZJP74WhGls|#@anf#Gn#7M6(ysj? zUu@|K#~auruTOU%7JLwzG?O62QyOMo;5#*umqXtPob!VJhPF>R3%gw*xiB||v0u=)Do;F1FjjgSOK<5f} z7F>J|*4Fm6x|Yty*4pZ-#*UWyK2kE^O98~gK3NTAWtkQ6sKKB_$wJ^o3MwUk8U7YpmsW|OusTi2`+rLY#-FI( z=U-aqQvtU2=*RvJXkn6g?nX_#m|A0zI!TY~pU%_S-!;7ET;HTQj@i^qnch9*W@o2_ zM(~G<4bWvKj7Cdq=XzhtlmE=qF`{>;KQ+l27(t9b#_})i{$spWfE73I&T-T_toXR$ zhIjq~bHsqoU*mrqqW5(UqS~@DA}(!gEzOa||-&_2w@Ok*umPvcAKm%K&cYRZvQ%%Q?vTu`r=rUK^ar(e*vX()? zlqOr*m=De@f^ODLSL9m!cWI~t-g;Nt9~QcDSLfrv+DXm6$!3iq+l3@GGT)YYy2lA- z4)XgX^7eVunak56sYY+l$n2fd2#fNCu;OZ^07G1EP0#M9-twi3K9PFN2 zSVb2_kZz8PDw8mwI}@ab7SN!7lh1VL^BIwf z1iC=tRz9GAv6wrRv}<%b5+KjZIntcbzip=%!;xrSwII6vdJ0doG} zs3EL|_R}p2TYK- ztFURzuIGSXZ0Eh zqT!CL`0x4VVhz+8G;VZF4O$VRGU$24c+g4ZP2*4W6s-N5Y3)*m+c? zKTMxH%t1eX`_#W;2rYXnwnTP3i5CP8@M7bWCb5>T#ms7-L6 z;TQLt*-oko95C3dG?wGFk9wOl#((<0ds!m@_2r$|^dHGIz0Y{)}=H_Bt zF4!YGAOv|Kd|7p1iP-n}u~pO3)ycwHdF%QihQSdziIAhD8`s>rFFT;K+1Bt4V+};6 z5(Suj+qb3c^PXyUAC&vm_jgEU>+s$x|J@&uspF}VG)}@d$+ep}joE9H{+s5{9tx<) zH30yGl9K5>$wPpcs9;06=TKyt%(<=(?D$KK%Brbs9A1?I_i*t7lWx!D5_h!y!t-jSl zQbSVCygZvJy6YMlX1U(7hIOW*6T9{&&doT72VK?mDfnW0+;gg2UTxNjI9rVwm-s@G%J|$8YSYe0W2(XC?PK!FaryR)?*YVeLZS;>{=D@M)>g z>pxq-|AZYQ3+nsEiTS{IkqW^=O1P>K@h`R{KlGUqN>0ho)*M4DkpePFYbRDuB~9$L z^wj68MzIkiOzHCT7g9;~vFIN0D^VR+P`W^b(8k4oc;P)W)S-8iqW?IbW`tF|!YsYP zG{PDR+85{~ksIc!3wLoYxC~f_eiPf;L_>OxE~%)9eyq$HS)-8cB0hKtorYV6z>AaI zS|#VTv}}W2;Z{q@;HJXx@X#tnHkcl#mvKV)@_EL80$+lPbWuCpMwsplDt*~`7GJEfovQfkZd=sKGj%=`iqp?-X|A4Qfg2v}7 z@LhB;?-90FsYPW@m~acZQOy445I|W0a^AUDGnDj=up1fPsJyvt0BG^Czn+bLzUUuo zuT-`KQ~YQ_EVtyx!-INU;?kr>+ujkiO1f!M&8dpymY|Xu#QkMClw2A98Xjqcr zK7TXG;tw!6aPwAl`TAA9R7-N4{emPNnM;4TYi?&J+aEcYiRM8_^0Npv6s4*#AiI9@ zV>?wxGj)!hJ$H`)h82Ncdn(@(AR8NiPSA!%&)|mFtmM?K30{R;bjxWYy6}ocn)uQu z6D1!|Osy@O?0#3C&UD6bwQY^(==vYh2ps#WC56>y<^fzwzppDne37CX%;?O&+3^qE z&mp}?>=Fs7)7z0N)2E&izCn2D7ca+q9vZ_L)5U+6%9{6TLCo3kICoMYKx9zl!f{zh zDvg6Z_0fX$O*7ztgJd4%PJ|Fyak}5|MJAAf6xLPR6Z)G?Q0S3{CcaB`M&E4Vs^zuV zD+wQ{3w}(F{-CL|23jjt-7S`897sAtcITC|Qsm8h9b>nVP;!7k}A;|W(jY=yl`4`S@=7T+L-rS%$eW3HVI&vT7 zt!z(B*^J$uxOFbi;f!5N2(mgXN49Ck5&5AZzkBaDnNsT>)F+CrXfp?#vhrry$#cF9 zI=-?#{F4D^kW{EvvLoP==3VbJ0^)YI719keFg&n^gjwgICM}zwqD5wxY)X-E$VK7OXDg=9)77M}hneE? z#LN6tD#&v$9Wn~LlEj*Xsq3sy%i|LsZN;<2i39x*{w)^>p99%Q*l4pia%|{+i`JVZ zEm_;RyymvSdQkHLX6CeZ-yTE`N3_o8GO4Pye5>dfF6B_ydZS(3i3W_Ej7q2J2-BZ* zVSEZpUHkqrx;FDS4m1J%y!l4)1IEGB81vdp99T<{nzL|g*=Ke1hAR{K46z#~aCvJR z9SBjcC!DFVk4U4=Q{nEC3IV z&xe~|N|u})<%(`tf6d2BVH^Kq-(}y^aWkPG7pu>xkUxOjBTiBMA0(5JwTo!>H{GA6}+9(BcB=0iAZnT&N( zx>2~(7cBm47#!ymr71)zA&)_k$Lj|0cYy^AdNqg!?@7!ykZFBoe@a^1ov{a9yU&zN zTRQNlo=63_7U;(Dd>^RA{U6o-b0pm|+kl$&C%6C*tCn54771&co}O&(ZT*Yln|MEQ z=Aqf5g#TaE>MTOon9T7f`m+(%D69vy$a-4R4^5SR8ha72Ik>ppjF-FlUOl_0 zfY?RrJ%^tMDRnYF#s0O&ojOZ}R`Jw*IU=ZY#piWylLvH7qoEJ!$_hFaYC}mnRFc!| znRX$QNc>40?c#+Yw>9e)kq^9mpvd?`LXbULC%0yHW`x>T>J0r0$8>N=pNAdLm&yqY zK(B^6mJ#Q_={>Sm0}o5W8zf9kb2KgoaO4m z@h9+es7a^pNbV4^ixd#fahq0?Rl_|n)!)9?Bd?Pqf-K0MK4Uzk zE(G^OT0x0%&JO7|norJ-g0%b5{kN@w9d#Z}tm>`T@>kg3?+d?3bol19g!9nV&@ztt zp#v2VZMM1J_XUoO&_Ui?5ZEyVf9emE#9<7mHSB8K9grcm8taxBosUzf&PA_ZRmYvg zUZjMzflPI6{ymh(-?6S8&+Hzy8gF4h6%xxE>8fr&l=Zs~_UURr*znmQODeNChzgWj z52Si{`l+Nz%$~|WiC93ae_AG{i^1rB4rPSS`mQ>a-G!e3HZ|ZF&NI?l)N9FtosvJ2;wvKAx*$nZ8Euj(bPSfj~KHf&4 zJ+Ya21xdgYsjhhh6489JQ zPkG53(usZ9AXJ`VE#{O6hCEX67KD)9j+Z~>(vjBOYh-5Z!Pm`Q7f zA2CqvWw-PIF(H^a(TdmC`8u!>2`V|{8n_w3wvljCP<{(^e>nNk=2@dDY2)Jr?XlyK zAlClT9h0pOQ1$4EFVDwyhWHY*>>1?P)#7EuO(0ttGh}|{L2skappi^`f45ujBKy~z z7J~7kEmS%f3^-@fdAHk>w6~1RxTO{JoBrNftC3U}4+9>(p!06ACz&wVvj4R12iQJ7 zaI#NO<}ic~6sox?UggVW+oir{_5OhDDm%88cedc4Hl~M@!JZ_Ju z!t;Qiqw^(3ptS3n&`*6fZ*=6gd9L$H*CgBL``Q`F-Ybv?1C`GV-ka*tml`Au^N*YN zX~`@I%zk6=sJmi=@Eh0mE@9h2;Z3gSJhAyMpsi`H<5ecJ8D_#;b-&)9;E<*qRO;x< z1~an*##;?fPj(HZbrpyKv_(QklnEoE|n5!zg^f~`KSA|8zfQ|A?v+=ua+ z;z@C8t@Yt^vMqLi-CyAXxV#%n1P{j3NV_u+FAo-RmP12GZrV#*gFb8DpAZwQmq$61 z%T)Ho*;L!R&t|*K^+_=hly04juxGEq`rtPh|EjR$Y4rx~rTJ8khP8RTu&z5hdJqE& zDR>x_RkvGF@@^_TDxc-lpt(A3A7XFSzlkx;XIqRp4XGWXR?Jpd>=uK4o>OoCJa?tb zq$NHrg14y5Zy3OqlPYlqvW&NiSyO)I8hhZikit#YWP^GUC7H9|)XJ;9qI&8VS}WwwT|GUrsQ17R)%RcED@PdY~BVtg`gI$8CZQcI&X1T|!!!CmBxp6WiJ? z&z?pSgK00S=u?R6aDe9uGRW5LoX4o+c09sln^yD30$> zdQ|9^g`8$D|H8ltAGK{oZ*is&aGGOtAW>WRB>{sFu7a$}16 zB~^#;17Wr!&gxYk!;Ro6bt!ISGg0G!VErYqKGkobg>%j>D?2(}8|^4AP!+vXFr4{> zR)wfMTb-QN=HgkuZ8_j_v#RDqF;DQ%DW!DNZyd02Q)*}6qXzoVVFQSij8hU_!&or^ zYxwO`L{>ZhIry*z)!+PjNr@An!a0_xYiC#KNC~0u4p;u z`!xG+9iD+jig}QyWJ$PX2Klg1Za!Qp2Q{(JHL+j|dl9=1Y$*5FWUZ>qNla*fXz`-$ zziQXtL{sHMJIj|t1@-!3DpnH zudVZiYbTuJpRW1jlYtjjdp>Gu-0&S8u%uTdZr0!ma@o_aZ%1C@z@cI$zoDqIQ{QbB zNpRI4lPD-mXFp&Fo#h%#s-!_3$X++iA}5DYb^_l;q9>axl)sQsM<$_Aa!GzR`|yA^ zHAsL*mgGOB&X%}iZ31m9d>xX>S-HhosC^1GxB#icsdT8Lo`uRn9Yv6I5Rcoen9Nii zHQ05HOsW*m>)&@gtxQpkbWSU3&1}+g{ojPizE21Y8a72k|2At8=o#}%-|nv8E-(6^ zZO#>Duz76NzN`$f^h?h4L>NvofhQN-#EY-;nV$rIlr}xDx$xZxtuv#}(xaslrfCe8 zM)ZQqccP}Ojav-{g|8bG^IkT+-vw#oHl&p!Y$p5{G=H@kf=w?i=T3n+{um&Sm3{nq zr%C6kM;&a`Kndwov)VRuv;}cDH56!~@uCbnqV~O1=sD!kKj}C&vQiWnBl9``{U-+Y z)2yXQPMCEU1KHZZJF4v1;mMkzz>?&oR-ZR@{Yt6Y+iL4ExKQE@!q z*|9jhg~g<FKP`S;9!UrNV@&IAq!p%CxkpFlA4@vS3_Xb# zT6|NAvQAH<)J<7;9M}PKO{~F``bIF2uYi}F$|ziNydG8yh^j$hL%KotasS%ym0Q7| z98*i{lrH|Ip?8`Nm3rIpvari`wV`A6pua6K8*V}C)}eU?C!)>Fdf)QLi8gB|+I;_m zjcv=#Q)O)4L#Hw=3b|o{^~Owr3mcc%bRD#2S^?FM|2VME_EKN~XzTcJpZMWHXjmdU zhGS~)>6&W?*~45COPu+~BHb%f2ysm8HTL`!HG`xtwe-#wbl)G>iCmo8WCz*hBaOGK z{y(DLDLl^admo-8jqS!xW81cE+qP}nw(TZqlE#f~r?K6>lYT$H_kZOeb1(;co@+mQ zuXV2*344SY>>lZ3()nvaLJ^r=gLVL{wGpi|<+r0ZuzR!^}xfl~1B&f8a{~N-H(Sm5vq^Z;^$qr-QDi z1cqg|W+B8HO>pSduk`QmF!x*dd;{M_FNu0SF48rE`$@kb!OeN@nU&Ni0mdT)oy{Jy zDBgS~2qLEY=gJ-(J4Uf$g=~8qehe(Fk%OhnH1xJIPWe=e{r=mP(@V28Q~WHmK`-iD=(v zo|qC#UuTgGQ-dChZDA7VHaWtW$-P9n{HlmWVX^{lYOw)YtW8v+9jEcf^wOUetOm*#yv_82nHr=fIJ>Zltww_eg}k;w z;|Y8K0epIF0BvGOs)W5rNsRQp$k)McXiHSn=Y1R06ANCA%LhzIWbM=>lgaiE`XRzg zRIV+cA8Q8vSAalG9hGF!EYK7$Lbxcef9!$l4iM>CbnbTjt?ZgMu_)B&=NSz}w68Rk zCI;?x+_*HsI~qi)ed)Bwlk3ua>cs|zpl~PBp#6LDUA7mb(wJG)wp=P7Q$%ILMz%o4{S1N%X`QAY zT&0ERiRMaK5pg%(clv^it2OrQR~;zxWmQA0)TG(Y4;3jcM0SloM#oim3>CRh`hcML zN4LVK4?Ar->Cg!-H~_4^fdj?ATGGDJanB~sV`sirT$(uQDGpCnbRtUV>#y8K+=rj1 z;8dvErNy;mYu!=H^#}OhMl8?p)!cC-C~Y2oKK;^<@E!|vdvg@y1e!mZcIRFB`kVfp znbZ7f62ZoOwskn~ge=_QM_?{rJZ?R&eJ@j5YbPFFZ8t1 zr1)}HK#`{<)2>nzsmtU&5lbJbu&W68KUeU8{IW)uy|-Ct7yzziIZ__X6SX&WUJUlsrrkh0GUdF zywii_gE&K+tCD3b(qTTFV^68vH)d1}Nc(fAk4F9BF~!iTxT|kJZQx>8ug-I?t;j9* z`wX76-`!#jhprFX!t!ARTe`aGj-(K}+p1xN&8I~-($&}bvfJh|Wxy_U34sHh*r*MT z{lPOf6!9->jguWgoZa#3^i5+{MD+1!~S4d>&WVAH;vsa6sbrf~@w)#&B?Wgn2j<%wVufUqylx)XOuz>jFc zGCVKt)~4~rGv{u~>TNeCxvJJVZYTNvgWy9l;%_IIOW10fG(evaw>;Bz@B5|a{ls*9EwN+c4jnWhhTNjMf z>on&KL?$EN4b}J_< zmkq+4miAdVJ!$F*yl!#dO&guEoKuK@3`I=YGAZbujPDQv*8V%*1q^@&aW~`hK-(3i zaPC7w0pM-5>r1rjC%%xY3P}#{@mi<^x|WM>j7)LrPkBQ%M~fbmz--y#pV z6X)p=wX{;{1rsq|TsP2M_EkPZUbIEqlHT8W7mMOkEt6-j;!~OJ==A~&7=1yMd zr@CCka^5a@^c=U?rj1Q-eb|sDqEuI)&7Ftq)z=GsvVlC}q>j+*{-}iezTVBn+XFmW zWmYEd)L+y71ln$#sI*3QsbG4yqL~KjP&r4fW74NA;thNxp-F2n?b*gl9OOsnkp<%1 zfo$ezhCZt?rG~Ug{dsQhVszy^0U)36v^g{z;AbVeuX|C$mb zl-$TT(0+&T;f3&50HW*F{bS|Cs26KP^tpkyDSvT95Z?C5pc1c}KrL!fnR3}x#avs9 zbKiX6F_~@sI6p-(f{8zoQIN$%=9jgYB#*jO@0LKGbf()?mE85vHPh2*If>yj{{tmF{vRlT4Fn}X7Z7d;I=hu^vqPf zE$xk6?cMGFelO4?BtQh1r7kxf9R;coQ(MG{*%#;7s+G~K@^)+z42R(t7mEolPrbb< z=>wfyxF*;&bgSIhLp-dJIM$cOMTkK{Vy;e%oM|fqV<&d6CJD{bG`;e`(!O`wTT33G z_4mt%A#-!t*Fjg;JxHf|yVhXVkDG=B?#kI*V;wp0V*)V+6y25pL`?B>@{jdKf+j1gA-C#J|T#Y5fOwa*Zmy3{a2oBivHnHVk?Qc2*slCXC zT}9Voj^X*fRs0nXN2(Y#r{nDoezikI7G7A159{&d#uN#s?kmg5zEfAyhB`-2*^NdL zh+&deMej!=|342E=$j$7O0SP&O#uiuWsEspXJq#b6yy%_$Y-9ld#Fc*{i6e?BhX?* zEYaO+ZeS$WAjjg1+Q2pWYE!J~q(40Klxbmq6&1siN*A#;Iq7`Sfm(i2!0VuprD&0q zG&ov^$d`Z^svt0t5uQOw^C*^|3kiooz+NNvECxr}jh8=8>8odOl z-;foA{w}1omyORq6z_s%G;PPQS%mM^5J=7Y&v`3A-&R$|HKnx>F!RKiyC=W`>fS+| zypc-bn-Fv6_JVb@-3DaA8r;frj&NB=qK@gh{AER{2>1i-`C#w-cqki6v~CumkfpMT zcVl}g*(DSpF9YMY$Tman-OQT$)86IDn-tCIj;vvYpel3ddw=NHin2TSsAn2!W@Tg- zlv_%ah-YOaJ3%zoLD2FX$@$4;q#F{a=!gnU+F3`O-cajJp{4{0oO(Iw%)YG7&prfr z5&`+AB4_Fghr=Ske8XtN`u;ucv}iryL{I$$sm$lqiY+kS@8pmg&$4ghSj)E3(AjcD zy5)9_?&S>_RflM5M4>KcP6xz-35CaEJCq-CQZ6;oV#@Z_N7t7T98f7|;n~!PqIw76 zX;PX{6d8HlEg$(0P=DlyL1akClbJ|+Zc2pU z_J?EP==ciB8keF#BNgIuY2o*Dp1WyFIg{-jcgX!nyKg z6NCvE1?(#vN@zPLZOQji>+eUih^9YU+PCSL=Jk+u*sf0nx3(80ad1U&;R&+^FFoJ5Je0kwk&OhoC~sRa zVq<|;DZ|;A<)}JxVVAZ<4q@G#gKCqi9F0Ciw}SX;GtMWMD|gX>4%%owIm(-@&^6~~ zzZoz6!&}v5DlO)}q53BWX*PXAMDxso0+7L?$||A_%`0nNewNUg{5?160PdXGcutoj z0u5@oi~Sv6i5zev<^K`mZL>s9xr63qlHX`O`s;9d)7j?0f0y z*AbhVzGYX_t{k=;@pW_7&!0Vaz@_a5Ua61IM83P2!;(FVTTp0f7{gaF+1suK{qi6q z`lMU!cOYmzEr$=dA|2Ktyv(o@yobJpLeo7Btt{gw=+gH|zaWe^RPJM*o{s|slr*$k zw+xAolz3V^RgRdTCJ%SFz|OA`v=g2S3ntmUfT`ImNr2=nJz{iI(j=CX8;_g*yy3c0 zo=R&@wNJ^nYXU79ews1Jii<`SnV!<#Dr{hiHwd{C%SH6)wH#9fb;;wgrhMxfqL4f` zr2fv|X{Z4M%p-;6KXfefn-O&}uf(0!kS6uzVI-qmYYYTW`8dL%cOTNVG4b#O5pec) z68fB!{_9r(hL&23V~0iaXxCodsW)c!+lMJ@KNKf<)AJ|h;~qk7&h5W~zGEf0RNk#B zOX_%QLXm!-zXh*p8rFf|B=)xz!ge*gL?}#=>--tuu%lzQ0aZVR!sW>&! z&Q2!F)e%D<_x8UdG**HtLKXi#i(Y9Wa89UZJEn2ZO7uomRlA4lP_J3;N&xrr2iz|J z06i4l{WrzPonDlq9`x7j4Ais}o0SfU*y+?U-&d7yeg8L}1`^fkGT4FK-oLb4*kplR zbMH<>>91i|duuNs%H>w`V<)fW2sEsNC3dde7sn_;yBF|52yUmrxXWC^ zZqFQwsB4=TW&*vpITfR?a=Zu9Ga06QArxKGEZ1jFjU*&$o856CwUU0==?k`I4nRXu zcY^$D0JA=cYIZd(Ey?g$K$l^pgQjk=w8KLJk_)$0bI!AuW=0pf%qKCLG&IAl!j8xq zR#DHkpleLm&5>K7I{fhbfal8gj8tig&K%|MOeG2wc9j>J|_b9HumF%w7zDnonm9_rsXui-N(O%DZ6aS08evwJmB%ii&Gd=v7gfW=6> z=73I4M=<4)@XPjA7_opgR(0z-Mmw+%3B_Ni7s9DOY`!#5T)6~1`u)?Wn4&yaxotp zxlxx;a-hA5x6eGcWDul^N14}HMSro#_{C+?8fKP1rM+)Npq{dxur@k*`O zwNH)w`$6ST1P{5tkzA%u0p0P;qEo;|1_Ukc!uyZKp;8pn2<=BNaQahX+?Ql(1Y1PC z{zb*gl`S2>)G^f;#qD+jJJCRAxAd*>#(!3Rj`O%g#^$jrwOyZ9InrFT-0m+Ch!3AD zO$7jOZ#x*9<9z*{`p)V4T1va#SevfQ^rjw$IWT?6M0C3hK^i=&;;+%0&|Ih#Kf3qUh4l2jlmncxc z8GU#>HY#`u>N$f4eO;$G|L-qe!@GaNb`=Kc-&TK-s=S4fD8c^xMu}q)D8XXHZYv;6 z7VD?dyxN-0$y@&Rn(X>Q+YD6uGhjwSHem)z_aU z*OKDCmbP=H^VKaIr8)!pLOi4 zGm3xPuW_SF;U*NbYS7IZmYW@L7~Bd+-*YRZCfg!=E@NN0=Ks@2x~COG7V$(xZ=BHUow15WuQrF zL@y{}J063oFW2^pQTl`E2B{X*THq~LC7%g@;DkJdzIVWe)!q0ST$b2yLz~kD<^0uq z!-tV^6?X|c+EX*WA~lq5VC?@0BHj-dpS-EQt@Md_g}b?+ zRD*A`2?@m#CSiI>_TpA9u!oz&8TkDbx)CFL>^4e#bq}c^+~?1V*-BVPrDvZ(H3?8M0u9$oC%z#yk<{9zjaKq6i1Pa!R;h>J>K)V2H=?3W$q~)BzgYv0#KzcV zLwHS%znF$0mj+T?GAeqL({}M(%5?iT((keGE^(BvJOaLet0Lc`=QOm_bg24o1602j z|IdW)b7C|&Za-gAB)$*_`h3~1*!*GUmedzaj?hZ%O;sGW0sbi8W%Al;6(eFdiHGV| zWb_6iy^u=x0TAWX%3n7hzc&&iBP1stY!x$0I}G!yzmF=xodBnNZE+F;Srle~<)95k zHSW$soP#cAOAVDMh~lkbjH;NP>uO%EfHS3jM26G3y z{C<`NzoITBv?3n3l_L`Dc;fO?L#n0#II%rvhxczxNfBk}B|U{pY1Q`~MIP93Y}0+p~F%-&Eb!)Z07I zK}bwY!-|i`#@XE3)za3|J@~!8yQTTF>H9~|FQ{UQtQ4V^1rZ3100I=;-El3_-Tj;l zY7`C`#f#xdA8lB!JtZ4B$CR;47h*VqTSX`eNMByHmx{De2fM&MiLRm1C#%T{D21lc zGZ%eb$b~Q^DK^e5(GNs=DhGeIsczOQG*!5c$x!auM>QTocD0fl@jxu07doO#5Rv`h zG=K9`ASxJ3*4>(CAJxd-8dVk;^!U}faujEIwh1TYn9VT0CNDyE00yitd8UBbqXI?M zRK>zt*72YQ)5KME7`TeW#j0Z-lqyNrLDH{yT!vHwb|wQaGrX+d>p$gk7DQ}|Fd?sq#l=VBKfFv zJW+rNoJRidJ%A9<&`uT6WD}!+*}+5D`k_9(;NBbr#L$ZKLba8Dt>BvbG|livQ4~JE z32#0NtO=9rP)4dOGB{#aIn0WR#~Qr;>K)0vGl&k^u9X)HWai#2W{HbO7B%~6?rc#R zh#M4_FjbsIcH5KKI%5nueuMI%DHJNrv!w!<-LfBihX1# zGb^;5pJ>P)+?gQ7%A{YW4t4nEXJ$MzQY+!}DAab#4os8dR~~md-vv2;KND54FehJZ zVUUoD4eX8Ga-u7&h)rPrf#myOO4M33#Q&_yMWK4iLPGF&_h*OXn$%xHhn6O^d%|BPfu1~f% z@FI-^K4@itMadJl8s@3OX&lc)fFc<8&+H(5FZ|fAG*It-lMfLw=;rj9?t%m4_PyU` z{0oQ+QP7$McYHXlFh-3tPyWCMPnB{$*VCXJB)-j-L#^3OG#^p~b2wJwtkRvvXsVEr zyYiu!u^Bhs=N5|^B#gl33{ljafSHPFwkY;tn+j?hg}(L)LNXI zN@8~g--ap{gt)oXffhNvxjiaIbi_r^<(>aJc4qj~jMN9$CdmZmC-b z8E#&oRK5*BeW3jOqDKAnPSF^2r?;6hmH1fR3B?qZJnYP|m6Stsg*3tD#~V&2^*goh zpF#jgpazyODo&|7dX~8ifcxeOY>?aG`#j|oHY|@iC+*#)bK?ZdAw0u6qeLt-=N;AM zYwXH^HY~;?Yc1p2px#=>#-j?EDV!&;G8XqUXRfi#>Cr6Txhf6 zKGRS!XhlLpGEKc3?t}a26Iseq!sUgC90KXDOK}$5=Trb=sLN7k`ooOhFBFQ7FNa(f z9q|IP?+6bH&vvl!7BX~g4-R~s3Sk})LAt1^j4a_$*eIX24M5V)CqYUTrCLX6TmfLf zv!9i%iRrwyJVM8#=35+VTYhI}^IwOL9;5STpq_ zLqZc6a)6ZWRGv`b_;>*klgHXw#yO>V^{P8HB+pJTc3S8BRvWLvU$$Iq^0p)aFfp4T z7-1U#{W~9seYrBQJ}B%aa~VFhFUd zx9^hw9pO!~0T$8Gcw_Dr22fyQwZVRA<^yt`>i)g&L;tlQ|BGbIGoxK(3OYcL6N4uF zN8G>{6DM~Ur?a$5C*FtCjY>~Y_j6Yrg;GnoBT4_~&s3+AZ@zQiQlB4y3_k*;d=}K9 zslR`@0BB70D)Q?pxO}g_i*>a8csZ2m* z)|iEThv8)n7K%Tjp&trO2j`o)({#eNRmLS~W%;PH1ZFb43FF+_o&#y;Gtg03YkP&?#xK)p^p&_1;pzPfXvuRPT-)Hd#dZdEbjNXC7?{>iU#WA)i8~9=v-o6Ni9(P z%jf(rJWX{mJtdL1m=Z938E(6tAH#7K^V1GL{drnAJCDZZ&g^|B2n#9>m^!b5u<&|s z3|8c7pAPXA<9v)vsbkNEWwyF0nI2hmqz}f#4G7Md>Lc0yM!2v5%O=8^Kh#D zGgBsuNW1RgW7ByV^`0@Z$v$N&5ylxU*XQE~GLL|F&V%%6Sb$!99E?qVlRzEZ|&uYOvvW)gnm>X|Df?X%)NCurZWGDOt9^aLI>RLSr5KX-L@%C+2B#4-trc4A}Q_`2e& z>GDNKE)QBq+4MHWQlQvfQkRscO5|jIX`IreWJ4%JuC^+O%-pwRC%@n8aTjhrJGp=2 z-GG89RX>?=k0?+i3q8Cf_FH2OlLrjrQz!FvopJ9a2Mj+rTY*eH^2#^2Oe z!9Ow+S;Q%%&{iJtv!eD~2O{Hh<_LTjfk$@1MG{k8%LCAd+H_C?5kg!8ANZF20CpIySp$b&5oF$ALXMinOvLYhlmHkyc(OGGgDT?Cb@7zYh3k zc3i2uQW=_M*?BUD@23{x(E1lBQ~fH`O`)Cv(>-t z9eQeAf&&=AfbmRe%po^MO!t-^b+NB=^vzh_%-Un_#>FoU9X-x9$|kW71SW)Hz3&E! z#QNAXPUp(TjXH}+Tzg&~Uj3Pb6tKRaOj|qF;+pYa?aw8aqbKn;kD&VD1VcO-hWz{* zN;f~RC_Yi?nJw9&WL-{2?dqU&?r^XY4Uwi1{;+b=G|szH{G0odQZr*(sBNEF@6etC zO`|fgK-h1>;?14NN@#Qu`d_=>`N`%1s&*VyUq)Vl9nqZL^uB~b#k<$xD@Z$N(KN&f}L)&3GAI<dsC_Y~yEU-Rm7J%y9Fe|1=_vxEQ9wY`Hb zwAK*g&E(X$4e9yS!N28JoK=_Q%^6&?b^}`RoC&-3j>w3h@ld30Spt1hUZtz5RAsJf z?z6&bWz}Z@^rx4r9;PSaNrC{Lmh`Ca*uTeum*35)UoM#PytFanUCO*id)kLtmLdxX zXWuSN4iO2vQAHr6@#56FSubqPLr?eNCT~xHMWb-PR3+nIrEQjrNA(&~BFlWEyQAWI zuTyRp={JG9>RlUe#g{8l)G4dJ-Hj<3rL+)ZNgJGrmvp(bVSj1KR4dx7 zMM&zsSzBD62<9~REr|R>-^=5937zi&Xn1*cDHJoe&XM#E&=o`(y1me1sTUzd`m1qVd>Z%;nU25_L`tnje-8nI z0({z?CqR{#09=(r=dBL05M05+pX;?j8;>>A8=@uXI9*B~=6nlFrIJAK*qPM_)-s{j z`!>tCiX@7f<#q!VE7(oS_vDzWrnO883aF5i$#WYGCKgwlP7QFa?j_RTV84_N_(b6k zrp)al3uSC4qhyr10E{ZPz=H7OM_4qi`dm?!hy?A_7P?$L9`=#@K>`Hh_5O{m3ld_r zZb$|Lm)M$~QS3rn&}2#!;V`h{w`K`?;s<74myCaG=>MrkTMyHZbw=mW02W|Rlqhk? zw!~PSo^s_Z7qY?fer7*T&}Y=<#gd%lRuf3r37;Ad^avLqRPNwuVEHkbqgG%q!Bdc*wh^O#`z-M&(eMH~QOt=iLOj$lDT~pn&WT(sKbm z?*ADu7->tADca@E0{S(FHJ`+qKB|kb2hw+JT8i!WAwXc$Tu8k<9Hl+e3BBG&Vr(Pb z6-4B>A*nuk%Pv1ygd+FiC&B~AUnRdgCnfro0=*=y0oj^n1FCw{2P?bA=pzq%Xljro z?_6T`5n^ne&u2@o>&_%~`t6yE^fB2cT)e5Qiw;IT6s-zo^}y)oGlG|-Vh&37ii>OL zc#yY-QLXgp=|oGUjo**RI>W-iwDEU7ct_cUkotd;kW>8%Q)6&2=oa%}07QBi> zi3s;hNXcPGmp1z3*!+g1z0xnJ+gG-bAv|7r`=w|Zr;;#9u%riq4SJl9dh4h(f-wBF|GCV3=CNns?Mrot0({E$p5* zqQ(NE_cAAV=rX9EBBm^RW(2^O#jkZ1CZ(Z3#eLqc<2DNG-|0)|`pP-!D>uYpl-Vbo z{4cEM*A-_*Zv-*mO)&4-Qjl4&cPE-@B*cmkN`L)`EX3q0%IIS=*(5w|7B!n^Pfs9% zEm^Q@{ENhSYG_7R3d`WA*{QU&u~@beS*B5^dDb{vbxNTkMt`AKGwN7#t6iAwq^YEE z#Lo@A4Q`d}U|4_Diug)8*U9^C?`VMbtn%T44ryQ#8Jt3Y`ZC=A42W8m&n+PHMVqZF zKSHI6fqizr(^UE8R@%i1{6g?8WEW+MikSo`{(Wygi&o4!YiY4Wf#e)k3gauil+~wk zLsURboMna>%ImVaj9PINV;VR5T-^}CWap~+sL1rEA303m`XntWPNcPoDKkH=FebvW z^+5&+sq7Ib`5yOpzA6e};e)5y5TNq4T%sRu-Jd@$#f(e0`4;_D+Nt%EBDcrrr+qlF z=o?*~s(0K~Ob>{$n`K1~0E;eD`j#Z**a=kay z$u5hZQEM9KO>fnW2S5200e(823>-5odMO9>--bPgKFhfdT zp1gkkqBYWI_G4QJ(?HOgOk9SlrCEtK{!71>sX?vvhY+>*^&$`XV=-{L4>}}7Jr@G_ ztmT1K@n`>`;U}s*I||I24T--2CS?oS;aVo^JL^n;#l&g(GF0Zes+9hRvivL61e(@V zCowIkxX95wUONdq(dKGvJ?bF7V(LiGt+WGWaxHEKf!Aw?Jaj(cpG^r^#?(mCUu2~v zn6xHz$*PiSl>B|UQuR{cII**!_X%nbrEvX zkB+7xcJ&6KkEbSAba4~dD9C$beVw-giOY({NJiG8pFk4N{J+#}OI0P+NX9Hsg)VBa z&1UvjVYrJiDopJ5VE8OeLf5x#P+OnNd#=uTvjZI@?mopEW#v~@DyKoLXH9*T`Vm%u zL*X|AA!@Dp)N5VGU)>cVRzjv=@&`5Rr_*U!wQgFteVi`bvPb=(E`HYGZ6Qn&Np-As z&F2Z)dPEb8h6G}pVF!OUG>8)>8(HSCTQ|&1`BZnQ4J{$~XX(DEu@Blh!zzBLYWq|| zd1Ce4^=Y6(w3dB7d)F*`QZPVJ)%eqR{0Juu0O>|N%*f&}i2+SGeIW>&@3(-add|Tf z%#aSIa~JEn{~v+0zVy2vwqm6hQ5Ua)hUvecLRq?);(|snZOHM+LZGnUIdIx^ls%+y zx!#cw35MzFm*b$Xd+Le>O39!F$7LPjs?9e=j}>iz!2c0ogoTE zN#@mcZ*|&-RFUh@7iYeHe_g`Rh2C@omDDA1cSykP7G0Hy6>p4MJodX$6zZOt9C4A( zWH|+%AB5PI3XAyj)G<|Ot=(;Va~SK0eM`YC5(Hh)2^}eI59*TULo3J~lvrx{{^guWkD4I+LP7 zRU_(mL0y})r35XfSkvouaeihslPAJ6IlP5>5vA7Us@;Q+U|obR;BLB%9){mc}f3d#~99A(arK1qnYUMeYX3cebyx!Mn+vv`HZpcY6!*XW+P z_#F}KGfH3YO@dC1jW_F*3wo#E^V_!<*(TkBy_w3!G#jdwOGA57@m=$uN@?q#d=0rS zNw-E~AqZ5#jX++`D|kcbvWA~buKZV>$k#IKw9aW+?Icq9^4Vo=x}9EbRXhEVfTLnx zEpHeK8O>!6UGWt)!Q;kr8FGqe|A}M|zbohV1H|qJ#wzpItRLWcZYt^GWye`S++tSO z``}oHwFwPHWjz+-?3Z#IM~=<{y0{|-Gm!~0b{h6gHbHNTMz)))`IRT%{5Sg)O(pu( zOsX;6Gzoay<86fKv~nV*ifiCR;~i-9_}L83OO4Ctd;`WOHNE}S4ATp?t>T-`4__w8 z1$7$oa*KNED95GcGq=;G!GB41{ysY!1Uqr^^0sr(!a&8 zyt;qJY}M*ZlI6*z6a$bJlDw%(aE(b`c*cWDRu}Xa;rXc{kiq5+V+)wkh|@?VTVxiq zRg2TRjafB{>=?GXLIfTME)6~k+{(%jz$de1uH8I7*3YFx;C;j( zV}^<=dLl7X|F#^WF60D%Sa6S)9fR|=@vn1hbZq-ho$bjeEW+9I+VN{)&J+F=Vgr2J znX(2~7Y;V!ab_AMY7h>1s{Dt}w7kzrqP7BKep}v7{m3{Z9M0cG(4Z`+bt1=~P^E!HEsX=<8MQ-|CYb8O= ze1vjZ=D6DSA{gmy_a;+R5O@H!J8pMZplj`t?z_qORN%(NrjI^*`$v4tT2kqrU?EDD+cP5XRQZ0dO&4crF1%CmeE0$m^=i?b@zs=wH9` zwRQhkgWE5`x6k%@oFPBFRVyq;K$(aNv+dr0qaUY}tns%1mc=9aXoS7yE@Zzi88%Zm zaGthdta_LgV+kOK>Kb@q0(^Pw`~(+zCAK5VGR=gTFLxpA@m+1gXoCK-swvdFrf+ ze`qb{RKmED+BxQciP$B&c0fyq*Dn>a%3;a0@zrjfZ^jp~NIwgIo`*mu&`(_{pL$=M zC!TN?2t}a)pW(Gg;9t+~BNhSq_>a=&yUm}}0O;^=nX(jT|t@iDF@xxAS5U;FM z*r`%@Q6cGUln_IGOL=u8tmS8}AB{+Ue3uG!wR`nT`U{&7&L8!y7j#$idmX0=By+~p zrIgmxPe1Ox!l6r{zjv&*QXs|P9_aS|Bt|&RzIO&}*E|eB@F8h7za8Eh+r@NFIuFTK zH4%D&&H#4^kly%Ns|2XHsqT449@mrs0$3I@Qq<~!P(aXTU;IIct}vE=aX{6dogv8)3uQl}K3jw)vVQ9-M#YoO{&mBKcfSj&+uTK{ zfi;y5EQGDbA@Nvy9pXC1VWcEF#ugxu3}o8zd;sIA1QfDIP2a05Siu7VdK%hKJJ}q1 ztQb}!t;p-A5=VY9Q)ORZ?-gXZVwdRrDtXIA_spG$a!kTJh~y_IMz$&*;?IErV`gu}GtmS%pH5Mf@@p~A zu~emw10SBe_UsG7v6+l@UBy5az6f7K!Vjm-mrM6k{;?>Y%(LyJTK@$l+zxAvwJ&k4C!0`U+9Z3?hOsd%lX0FyQ+jyAwyoj!9Ka zY5q%-9@OgFn!M7}Ur~O^W848NR|L6nk7o7brmrDxyEzRYbR1^QQ$gGW4bw0egXo@Y zzW(B8tFM3Q!pzV34GZWtQO&3sxMzJh{u6Wv`20Ua0S|~MAUzJL6XW5sG4*z~bvCzk z*0y)__jGl1v=b4N5VJ61GqO^2baeKR#%*f0LU-`>qyjmEFjq7+pQ%ZP0H2-E{veG1&!zo>`s|7)j!fVYCSYFE)R7trT=H`q<484bkMlL$4$ zW2@uLgI(x2sU}_U#~@)%Nxz0y(@*t7T>8SAu+T2Gm-$l(YCJB>c?dZ>|KDPq6w_FJ z?hW+0$b6_aT{}7@NGb}i-7OEHy)RNfBwHJuM(AfEm!YXPE@r%gkhW6$lzblD^wgVZ zQm&}lD#MX_;f$woUnU&&u@6XR7ckVcGB}$q$&gQ6eoOUtMmHen=-7x_Xj3o%uz?gu zX5ek$qd(UU4F(U?D9TDb7SjQpD>pK~L+VT|KS3R(pn2`|Js)&Y4J!gViQCUvXszf& z^iU*kTP0rxO7=o7e! z)qfqHOK(kSIukxg(jG{?i@WgaX#7owx(0neL9S#g2-AZ~O-sf@q1Rt$Kao@O?d&wNcvwx^+|I}RkP%u6|;sRY)x8N$^WrG zJu`&ifX!C^=D0XFjN!%>DQhl>;%lHC)EZ?vD;U1{0Zz#^SoSiwQ+r;?-#_zxGcdrb zzI{13X}!=ebX0Y?{kk)#{B1BrypR6m0y}yB?Sv;xSZ(BId_Yi^TR1}7x?p1^&arst zhmpB{mBPL31079e8is;v?(lI$0x%CnHz^EZ-aSrIqAGPqWlX*mr!@>qRk3`5W947` z%KxHc8p&0iWO_ur(F9hG^_>ow8+U@9i}zG(UL(Br1_Ev(wO8%8a)>Q%eN>s&Hdq|} za8?p11UacsywC)3#A83ucIni)xsp`9>%xgvC@sy6hHx@P zI9zUrQ@L81Y_{N`n4HXgTckRjF~If`!RbSVtjUyDia?FbW?kvJES2X8P5gcABN#DQpth@%n`&9s9HGKTP;$* zS+CKPghd-|lg;zQRb|(!SEI>oaO7aLj~uM*&B!7-~drCU`pkc*^Db z{d->J_rjNi?M_9oK*nBJ0TWatU2&d}dn(@ZV^Q*n%CEX6pgLchl=1B0{(pMU7edBF z>AE>FYf+Gf?1a4v{LK#VC5GHtsEZxFS23?&UiG#~h@{bf3~GN9;iwCzDox$rJB6S- z(?Rq-Q6o)(lwR7#l~jq<>NtIG6xS^ja%k=)P7F|iGGjTI<%VjWI5e0^#w(J$BB?%O zaoSV9=^3AqcC+p%^#!I?gs(_4z`+|JxxzprFx2*)IhT$c8LqW)na=d$4o#nGGals*#|bXe)R@ zh|q&;fK$xZE@(lBKr1%(oJJuyfhRpj*Ds(l z&;f82l4+-#k|g>@SmnpB)Qc0XCMR-s87jLy?6-G<@CGzAuCY{RSeQ}*nl=>(m-gT~{mS5~+hRlcN{MS}GRG9MR(~^^FkhXX zI#v{jtN(0;7%xViQn}Q!YC9T%UZ-DPe;NGYV&;3tgKKV#Ds-Ws+e)nh$kZ(cbIJCot#-8EAEKev zEdrq#nYLNpR3ZfQaS7_fu`b9()8DHXN+5aAegEvaKsaT?2=*4=c1Z!qo`ZdmmLE33)Y6$2)@IL%b*J zfQ-}6z7#lg(%`C%BC}q#faurZvgbQ)J}rrJF)R1g$r*%G9QZmNm(!YBCM$~klS`{T&VI#dbPRw*3n1jE$rOD}o? zVsjBHxF@+r(-a}q4>dZPuc3ayCKy$;M|8Jvw$!HsyY zY{(W*+@YkItwQXynZawnGy@hw1xkxJ`<^=y)It%_-2(qt5&w^d$w+@;i3{=YXH#bgfi!uwwp7c|9?!qb99|wwEZ1BX>8ke8r!zh z*lwK0wr$(C8r!ywHhxd~z4v$Dj59|5ea3V4*?X_K=K9Q^#Sen^0ow%>I~yS6s6~7| ze_gJ}9+CRg6`prK;#Qs2v}H?GCba@l3wj6k9!D~L*{q(YFrC>g@V3_lSlRhFK-N>x7}Qh%wBsX@Rwf?3*v#PK zy(bo#B9_RtYw;~ha9l`JoZNIbMA`Y;gc27lnZ{mok>RwE`{T7Msl6*R!(cED(RaZ& zI$|Y|7b~$e?1d|(6f-St)&7%KUCeonaQq-onw6&AM2)bY|{^&!+<(hD*Hn<1=>&^&Osb|p4doBy-Od|63<)w;%` zS{yKIDFfx#Fbt?^w+6MYME11|f*Fc5T)X`^cVGx@Js|(hW5kyy6oRiP!G1KFu6O*z z=M;xi6a0hKfDvsS^|1t}X*wlb(Bvp3Cdw|5FhQ7ugL(!Jh z{HcZBnHTJwJkGXYo9WY+-|@>$@DIAK^DKoBMET3!%?Er_CYU76#O~W}M#~fQu3|(x zT%G0AdERfMe0zfl`e%84irp~Ya6gVVwZ%DO=_H~|47IFBIxZt9p!`~1jddPdhzOWDN@&*9s#;}It z-s_qc3=lBHttUwH>nzf^a;?R?F+rM2I>q#+A-w$?X0v}Y*yB`ea$!)m6>{!LZcAeim zQy9>FJLQ?%)uDI(1h4+#*`3T}90P+bbjGnaat%p+M&F{FL`V*_kV!tIaHT{ngYWx0 zv`|mcqSC0T)3s2AU;rqRil801TyAjefg?eeSnOIcxc8fX6kt$-NygFk$9ceC0MS4* z6+$gZlK|i48EqDIv!``eZW`;o_NY97Y}~0818;x@+(On8mZ-q=YClpBu(gE!y=hms zx6qi+U={^oub_5<`)XVX*Q?<2>k3`*a}tlqx9wO%IkzAr<{#fVqjORV0VOi;UO=B> zQ;S>|VAn>&$GA2cktb-<;?tI9$pI{Hv+|D1JsRf5ub-bSGT*Nfiu(cSug3nTEQ%iR z_W_H}{DfIOK~^N{6|yED7tsj?AKH}KF_R-;+~Ip(a*?u>aT*w^Q#&nj_li1 z7lhu8$k6@PrU0oVjm+xrKFtQ)suWp=%>;gR(BgzUV0mt*|BPe*ypHGEf%c(Iqi!oI zciOTc^7 z^WndKheDI%bN02xp(2osY03{;D*DLY;@@R03kgPNH*Lrv0p)SY6dlg5`?|hA%w1Pr zJt;=52uyGWn&C)N_FUSQO?ix4I$=%r4I=H0vr8CcNor zXW+R)O_9p1x03w}P4$u9mBg!%m5kB3i#nUXoirrQ8TbO!#_>4_g@51@5pubjOLj0Bs!9@F> zESefK5sD)ypme8Lb&iIskE-%6^)h}1zi-jRIQ@#q+OcxdDe1lACtH<>)yRSW<)DA< z@`6Bw)`|09_N^)`gEhJ<=EBlfh)p(+jNrbkE(Ceex{Njs`6RsFXIk+Z6Ui&1ez8dv zTh+6u-$cRU{*+XzD92{iqI!PUdr(uUD%vM)_Jz{dmL>Kj&gal19Py_{WF{sTd;#6| zT2(g!?UXCx?v9c@XtPG;o(F?JaVEc+G-XMaR~}K*`$-iOC<$m3Fzw9#tAW&oKWRlv4T*APF28$~O@R@jaC5WR& zzP67LOx^{cxTjgq`Gu2LBKW)J-@k$_&Ldlbsr70?1F++PY zq#HV6slPxaAAgRE^!t#Wv1xH?HFd)2fwZ_>woYWXn%m&$!P7+!!DM9gtI7tyG5CR} zG#q*i+0oa^9K5ulrBFBdE^P9~gEgPS}5 zudcE9f4T-fK-V}PO&=#{ZD<9k8ufLZZCy>Iq{QSbjQGrKbO66ZU29`!OB>)q1h6B1 zxj&o7VrCQ7Wq@n-bSYq*1n$aS@=8npGId$go!Dd|ISU@hVLfCD7#VIDEA0V5Mn~FUX>3 zQRgYS=n&k+8={K$OLII&^8xKuldjE`f7%FfL#Wq~3iow%n9LOdA|YDq$nQ}|9@Zam zl~Oz1*fpku#o*6j`OX19>7E_$gIz1I8d1Bg_Y+@anL&8j423f7e`#{XV0q0)`IMKP zy%>vIH6`b}?mVU-d3E!WJv+XSfcpqay$g-b-ZgKt4`WB_*u&xpg4$uqa0-o72H#2JlBLi!#$&1*^jRS1;(UvxU zKBh0Uh72a<70X^Uy9xR!K_0a8s0H17iGP$Sx2I=-sb$iO?F4efsKC}z6HuE*lvw5h zVIS)E@&UA|M0hFxo6B@Rk0#R0*0tVJ^F^nHb1@rvgJ%z=Elml96io_tvi+v&SNh4W zlqq`aFNoLPPUPny<(Iqx*CpG!N z`I|J^N%5zJznPck+647No0rcSwhS;t$<3@$xScQ`0u@i1h-IuLqoOHxR??XrXeB6N zXFE1#LY|GrJJjND*}h)Zbz|YL1)?#+;%&$6y>Ai-i8_4f2@?P6?){G4Twp|+Bxcq6 zBzQ^SR)+1+ThE_Q@Eo^52 z^DcW_sfJQBFP8LaDcnzAO{o!$%F}k6R|afN^7#Vx^EEvr zP4%A=wnW635W`whhbix3J!2h9QP0mjb7HYtrqx$N7^#}XSvVG(@U9lqQ?-~k7hRF&!Qv$Qf z&7sDk{qqcVgn6Gj=aM*lyfGrI!hX@skV`q-JkcKODj~3;+cy_V#H%v(>lJ28G(&P- z-r$N)(m-+?nqy2faC>>*N|*(Y{;qnvdQhX1?h1?~Ty7%Hy=mvk{6S?iCMZWdZVO#-wH7y8 zEhiSN2^Q86?t1V5X@COlO7iG$Ov!%E@-4Xa=Zl-I04Gsd)2dP8MiS2jexha`YsULj zPIdRI*T1?;#v-pWqX;3*Y+!nH9UWVBd%Hn=8M6dRy-8^G0=B38v%|W(4sMO_F8GR} z`ftkzyy`FM?uTmp-?jO|VxZ=ZJRn|RM>1kRH7#+bVPgv@gf1S|x3qppwJfL^J)$+N z8!hDv|E(o!b_W2q8s3o3@T{NQq&p#j$sT1b*!bCdwaZajXzE`v=u_Wv|3GISgj7wLvRt!E8)$IC$B zGeQ5(2^tno?%T~(ftExFu^M*uw0vRrb{J`Ih!ceBSjrdOJzbZu5#wJ0o$4w9?*5mh zXAfY|RY}Px6{!jV=k}Eq1fQq(%em48tV|oRfL+-akaFBUx1=J{bVSSzF5qEg1YZ0gnD$mEj3xDr8a^WZh6>atN6aRh~8@`M!E zwyXNy05r}fJ!FTcAsDIc#@QGqODm1p>Dtwj;%hWZZmI9!5W$mZIiBSwKlZ#k-uIik zMa(8iDYX#{)wuH*U8TrQM;6ujM-QT0Giw0m^7yW{&-PBhUbx6RboX{tZxYBS>D zwc>j;yBL(~qtEgkc)f<4ncWgLGijfp3XLsnxu$U~R+GMp`{nV3JS(@BIMLv>{Kc7- zd$4Qx`CH_-`*b=nEKSNE#uy*(ohOL#gsCl9YR2~zE5~~Im>w@FkhlRZyMN;BSFPRr z1s$60_3xD_kgCU(PZmx1dby(-`lMaF^MMbbaGnZge$NdvMggbO|CuGRagnapy{8UE z%cR#~3H1RJ!va45`f)QdcQA(=<*ZBr>^qp^KmCmrtz8aQaF^iB&r6?;h7z+Z` zZ(Xrr=fK!)A?Jj&A-9xfn)kt3|0D<3nKTk?pf5r;WEAv(6mMU4jELFtz;b}wFX?tK zM$Yc-_E34;!I2X&a(HW{pSaC)f)LjQMF<;p4JAuW;}kY^9R3%yzcJ6FFK5FpXUk4h z%gv#sp>a@K1aD<9z)|CCIwhuUsrf|Mouun~@$`nU9MLC@KkpuXG)42iGsu75m+)5K z(7swc&3Eumf;=Qi^Pj)$|6Gyx*Zn&f{ytlUNoS<^{KHAE`gOv)x%>5 zMUa@Dx$dAX(zG_%coBLXaO$V03Va8}mstY`M-G31%(yQ>984DA$f;L*n(_ z3-X#EJ9{d|P45n$|9yU<{Jv*{_gA>(E46_~_IItf>49q5E-|1tII~k(bjP7p7IpQ(l$N^ zk8=W+DM~)o#VaZ{P2E~ysQ)fnpfzII7d`NMW(IaXV4aX;4O*oY%uXAh-eK|BCA8_4 z#)rlphbIaM*h`qyq+*^r&!;If3>3;2OAh$(FIJS(R2*Y6kwJ2!jQGiARr&zuXCoHXT0NW znn;7twNYN9@gmfDR4Op* zzfBzaN>xw03N@9K3Sh)PDG1k^FWXbBTuN$RoYd@ve#+}cS)T(@omLH$2;R~EaTVaH zkOBE zHWkxX7!POBOuiqB9SLV-E%I?q{+@bE@gIeHp#^!SuFZ4e-X1!ivOF_z2 ztt&+fYMFC#t$^X5#`jCT#G0B?L79>Oyz_sHI}dO(U@H#0#xW}>0$MlN7Htn|M(rSP z*l~LSJ~wH;`}@G<<7T>pYwo$!G1?r^+=YE#NdJP0q)MvS7uBn6Gx&T1il?a^P1dYU zPl(X4DOW9K^Q4QHq7^yfm|Q`Y0&}L7Oc1h7#7fqImWai3q~lErAd@h<;rvZO4*)GtaL`oMbbY; zMt<<(xCR~=kTo~rik~H}5c5AHveViB=4t!WsD4ibeH#C3XXy4Py7)<8NS(>C3^0S= zM^Zv5CV3>qZ`ki0>Z^36E!NaeI(4c(h-4K9U9dt4=VSPD8u3b6f;q&yb|ct=D!*QI zo+dleeSbfeFOe=z5@+FghMXzH=!P> z_3_ZHSFiY3%YSXoZuVs!bKBJ-3GZ3yLfBIMMRv>O$P&ToP(PC!?oad&(qkGa@e;D> zhr)yisSD>e8F}g(JGo^owOs}qd5sNQQfdiuZ+QoJ_2&~(M&O-M8 z_K`Z9Lu!2-ygAg~cFsU`GWQowE9#Di)fRIDso5t zT6G3y%jeS?>!{C9izZQuPH3Th5BD;wZ9x^xwu-@o(+Rh(hbt(H5I3iBrS$^aNP&C5 z@rwNsXtBD$hyGX+x4Yqt^K1&YdApzO6*I1~E?R30$i$}gStZanBlF8AOk&gFW}}{A z=242&9z3*g(I#crB|yTg(2M_xH0@uvg0Q-Lomr7>7Svz5ZSBgJ{&!jKn>E>+X84Pj zX{ArZn|zl#82Y%rgGd{X9@QkW-2Ctp1X#4=O^n$>A0%3!}ea#DgHW*{z4;d)y5UuJ^Sd-DW6cZCMS(jPhuj3d|C~8WrhP0KX6L&R-XO?0h;C=bQ9#Cr8(${04poQS(}Ro^x#_z- z$>$_X!{g9@)Cb!iRAr_=e4%j#S2b!Wx|CrT%6ZGUHse}QDa#Bn_u)7-Wv+i!cYMk+ zii^Mram(6TiI9=J)c+`xYtnd4SCGTh1D&MXK`DWo+__Fb8?!wFOPRvsHFXu;NRu&hjhTOD;s0U`HHvJ=6qlwfV17B) zk*NxrI#Fs#I(nLnx-x*zb7Pbe6j@3qN;=Z8W+;zKpDlL_$hOT@_foMtkBK%pFlJ5q~ZQVKY-MXy{NUz6N>?io z=Uo`<%zn@kxFdgfJPJJ&ucD*!>AG?G5wYl8KorjA8PvA)rjfzY*NM&68Dqd+zwR18 zR;9hi?_Jc?{P-Jms>c*O2~ka5*vt8`r8-ZK@f0PvPEPNb9(HEyQ3vHX=_rfZpbzlms9N{$2I;sx7`VBl2#Bc11^6k2rbi%uC+bLmfr=-MosVgdJ zA@i`6;(sLtOCSbBE{N!yjMkgGXSSH4DsYDyKtEM!v+wy5%%_SOr|dLv=X-uPQ4Tb^ zK7zm6N~aWyzxaPsSl>lDrD8sTOO!UzjG~(lJlu$ns8sLH?ibbVAAhBXx&%At)Cn#B z_FrntSA$+a!Bv$@Q!d{T6^L?GHD1}s*NCJBB|A!jgN|JdA=0|D<$={t#_&R}n!?8R z^jnUbRf}Rl1>>=YW$5rZn=L+bVSnB+U&8yxQXL$qZ_%5&dZ8SlUGbk3K7G?9c^9Ou ziUbcKUewJvHPTnbq&ypFx}^{L4qaBs5aAz08ceN+U7QNjUhX%)+G_k^V|5q1TC*KS ziP*QAjCQBM;`6u92|KJVlT8aUSo?>D=vfcYfSO(2_$E6fL6L+JPoyj2OHGd9z=5#0 z7Hfkx4nH<4Y!6CpA9NtZYFDR$&@k0TN*FO4h3!;bye=a=S-A!Rm+I7*aQ0V;!$qW+te{5t9({}>*%*)Abox?5qgxs~j|JqEphZ5ib*PWW>4)puB ze#s2VCPz5X{lSWMR@4FkYxJggHBqusAd~GVG?1uYT9&kCe>^Z@KomX@tC3&qc>yqZ z%j#I~t;QMyLF?N4%t8X+>HmGyv@I=b^twEX_~hi%*D6xLSf!*J-sL38Z`g$cJKTLf zZciQne+~Sv|G$rCma>h*ZH@2e_2+xf=O6W+*1vCWZ*X6|rvIELTDrs|8egQvtE)S; z&ZO?DvptkFd?+pcYL*^_Gih~@2jsen1By^+N~o6Ts%WxbV1ohcXCB$A&m1{)!e;W> zh3satK(_=do(bBCA(oA8CJ`2&n`glCS8F~7PJE46-QlJDc{EPYDTT)ZS`daPrBzR8 z2PJGd<@3tr16)}e29*0NJ*-pCWP+kRrV5eJz zIHRB?U|&}-K*k<`mE^cyai`mM0tOCb@JIhIU&a$U@=x3=*|ulMAL4$ehR`^xG1Sgl z@-)#nulrAxF?;=oeO^vh2HZ+o3gdir>UOqxG464*m&+!_4SYSZH(V}Mc|(ciJ?BqP z>@4l8y5#wC>fg5d!tAku8w!fYA0Met+2d-+70iO$EK)^g)gik{D)0w+C`xGNqDVac`~I2 zC=h_T>t>;BA>TXd_80m*Opn7(r*Ug6Rn1P@6URkLyJ?VSV5!o!2HqP}m!Z2{C5uGt zMmq{)?(nNEpF=XtEHzxIWa>HfVIolmqc(A=#BCU^!1hx|)?+smGdzQ-yUUU~(vyH0 z7P9ja$#OV?c~Z9xUSSizDvi}MJ3}ZSut&g9kg@Wt0#L3?wv($y+EQ^0-B1Nv9KXxC zlkyp&7LA+}ztz@-5Nqx(SVu_?zkefekd@B7=r|l@NLzWMq|5prmjSIZ`vWIjVvOw2W%Ku+<3DA(iq>#aZ7eO880(^|}XRKD47LpL#~G zZ!~U+@^uyXkyv|?SfQ193Zx_tGSZ`nE_2evW?Hw}i>>;v`0`}V{o5L77!bYx$0T9~ zGE89a@Ve|UX9b^$V7_1-xFbI)x*=8AXvG~c%s~sb_VWO4jU>rWkTUsgoi_LeEPyGO z5hHQ!NGgD%uXvOyh0 zwe3;$Nk9jrV);m%417iTPeuKwT=Z+TZ`w+xG}d6E&Y zO?8;LQENL5$5fxFbp$FBkJh@%KHXV1UWwP!*2nuzs-OndDAwbHLm!$2#7xU`|Ch+z zl!CZ4=XOu`DzYErlUopJ)E51^wo~CBeN%i!aTZXA5WE)j1m;~fL{v9rx&rF z$v<0XU&j6IVo5%aVJCpTlKVL2?^EGnE3bUErR($R-R1HJ@x-r&4fV1zR$3X$D%(7< z;pg#&zMKn-(z1{;q^xt1(8!AGmeux!MiMH270oyZK}USgho%)c4%_aTYLEp{RdHS) zGFFVgyf!d8j%r=ngRAPk5tbL$UBpEuFWn`#Pe!BH_v1ZNWi20?szM^1lex8)c!t4x zYtCJE>*;q!ItV2IBIM5~8+ zj%qZK*O}(-6^RPvvFdx8f%~Qh7k`f{956SftfT3V=Ghn8aW>2|zzt?{EC{djh8hw* zUn4T6ca=9h-2*3iKQk=IneHssKD{Y%&E%Oyr#*-$Bv!Ho8LIkTM$cH~$@lr2vJIvC&(7Lzc`yd`% zURIbAjS-dpYDq<~WK5hmA$~kr$9t#h15>bV4qhK5>sr$SEAmjO769TX9@!7|iA}0@ zN75R}kJ;5j-AFFqRR*VOThq9tM$8HI4e;8#+rP~T4#No+Y^$ldllP(mg<>q))cOTs zi_6K+l^HjyuxB?^MYYJrP4Mupl5KowG8?tP#=y+NVul%mkhabp*f1;~KH*hPC(H$9 z7v_CWO@=W+wQ}nIV1yX23e%v60S^LE9N9(Y4!_Qgk!#9C_iaZD^1R;^jL+(5u<{Dt z83}suY1s3sBCza}KzPi4pO{#@U57oFh+?Or>KG$cRG-ei46Zht-)WneqiL~<`>sa@8TDZd>&AMvaLYJXx?7u8v zdcTL)ER>4#lKQlsq#b`s$hJI$;Ehkp&j{d(d$|4|?Gv!p1ytF>2p-XR&@_#W+2GJV?8u)ITMJHq<7rV^9hf|2H03)_%n%NOyf zQOZUm3cb|u7a+@0aC%S?zEvoO+@zauD@6|{&Z19rZklG8Br5D$T)pVaIyuWGOYnZc zFkq-oqRFjs@h1CxQ(fl&##~He&eEjzB(45jAl|)^4p8g#UkS?zSnfcpkVYRs<@8ve zL3j)R=xxAq`7an6RJF((sVN@_G4u9j_e$Mod6B7zT0+Q;@AXcvnL}jIe~woAzQ3Ar zr1_7&a1@I;T*#?+NE}fQ{CrjTp|fkXkb!A z<%;ccnMG#vh*+C`N1MA^?+~gCB`&J|jE(TK747GiLnZFJ-WpqHh^%8+kJZwvzwHN& zmR&Fgbm|d6@6gv)23{0lwPW}?K>kOp2>3s-f)F59_~42~Q8d+&0A@?*8L+XKnHn3b zdRrQrdYW3A`Wrery2(h12^r|IaoAbA0l#j*fc)3quR5ytaBzYO{>#FDOzDResFGtt z5${i=)UmmW{v_~^DKQ;ry5Ozsr=*I&pfMpk3{KeB+6+!=0rzvID3&%CClr8F-e_4# zwVT$N>um@O*2*wzq!BQvknbB*mra7RIQ@;p)lGfnQh$$UBS7tb=IumR!#gT#=h=*q zj>L)f>@z?hWhW-YHBTY^IbRpM_i^$YTU3jtxPAqnMp>(tBa|hVVvem1b}q^naQt6a zRUns6{s~#LLPQy;m$W;gDB^Fsj6Vv8dIo>@g%pTC;nJ|ekKf?U90g|Wss8RgCl#r2 z0jed@v*)Cn^%olNll$+WyQJ!48RY}h9jBCj^>m7I2D=WT7$0$Mi%TK(lBmd7Eiip$bxB=*ENjOn(yyz7PonH)2(aiZVLbD2?B|jg})ognpNY;k)0R@n1 zWHKStkw}b$r3Eg=M98ry_nX87B8}DWeYY6exO~zBuq4S*V;T0VD(Rysta0Q;DyS@# z#7Rb4nR477h?Y~Y6rcsDsPJEm3GCLr5(al9%U(vMG$BgVb5xhVHYyZ!R~7=mtf65| zg@I)>ywZU;(st3OhR12=wQ=QS%}h9U?$*~mDekc^x5}(X;w;L$SfDa3cQb){{X`oW zQGT8k>to$_=o~@*{J;*`a{M5|dqF-XQ2IdLCz|guzCM%cf%sQSh2xg>epO0Lgn~}S z3-Ch)zotYHA?BT92LWQO2#~h;?Ak&_AXlgM zXqNv`+N*!nJPb{6qR!`Tu3UruX(i&5eQ{NW1E`r?&g?WGfkJm#qa20Cis-<5pI!2m z?k@R@D?YI!qU;0M*BulFQH`+}`Apa?=s*XRSVWyLUCiaZ1Dv7XXoXAhRje(VB}_3y z5wxx=)x|POG=}H|`qJe!14etg*~hV$xb`I zw;7OLWibGC0H$KcFiFE zW4L|6Ac2^w3X!W0&1u1N`80I--j_d*lCql~Q|!eQ=c9Ii&!F1H(=BJco9I?uv-e{% zk8U~2ya|RMt6n;6EmJCgt2F$}&q4z4(^GytFe8}6(@6KLn1-)lR+KZpgld`hbw}nq z4<6f`%d_2vu)c*(N_YUv!#WOV5!+GGF

    B@$&cv!Eg5<-^2-&gNgV}hjSh6Ua{_r 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�kxW3R!%e6?yaXS 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

    l9vr1SZt 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 O5WTzpR`T)#kpCZ4z?mfg literal 0 HcmV?d00001 diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index 254524dfa0..d950ea6220 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -313,11 +313,13 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, else if( BeginsWith(sRowString, "|") ) { + /* if (bKIUCompliant) { // Log an error, ignore the line. continue; } + */ // gotta do something tricky here: if the bpm is below one then a couple of calculations // for scrollsegments will be made, example, bpm 0.2, tick 4000, the scrollsegment will // be 0. if the tickcount is non a stepmania standard then it will be adapted, a scroll @@ -325,6 +327,7 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, // eh better do it considering the tickcount (high tickcounts) // I'm making some experiments, please spare me... + //continue; RString temp = sRowString.substr(2,sRowString.size()-3); float numTemp = StringToFloat(temp); @@ -583,11 +586,11 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant else if ( sValueName=="STARTTIME3" ) { // STARTTIME3 only ensures this is a KIU compliant simfile. - bKIUCompliant = true; + //bKIUCompliant = true; } else if ( sValueName=="TICKCOUNT" ) { - ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); } else if ( sValueName=="STEP" ) { diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 6802d7b474..0c8fbd69c5 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -235,6 +235,8 @@ void TimingData::SetWarpAtRow( int iRow, float fNew ) /* Change an existing Tickcount segment, merge identical segments together or insert a new one. */ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) { + LOG->Trace( "TimingData::SetTickcountAtRow( '%i' , '%i' )", iRow, iTicks ); + unsigned i; vector &ticks = this->allTimingSegments[SEGMENT_TICKCOUNT]; for( i=0; i Date: Tue, 19 Jul 2011 18:40:27 -0600 Subject: [PATCH 76/94] oh --- src/NotesLoaderKSF.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index d950ea6220..82b20fdfff 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -590,7 +590,7 @@ static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant } else if ( sValueName=="TICKCOUNT" ) { - //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); } else if ( sValueName=="STEP" ) { From b1f4bb151dc3f524560c88088203e970863b956e Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:40:44 -0500 Subject: [PATCH 77/94] [LoadingWindow] Added the ability for themes to have custom splash banners. (Currently Windows-only.) --- Docs/Changelog_sm5.txt | 5 ++ Themes/_fallback/Graphics/Common splash.png | Bin 0 -> 32208 bytes src/StepMania.cpp | 51 ++---------------- src/arch/LoadingWindow/LoadingWindow.h | 1 + src/arch/LoadingWindow/LoadingWindow_Gtk.h | 1 + src/arch/LoadingWindow/LoadingWindow_MacOSX.h | 1 + src/arch/LoadingWindow/LoadingWindow_Null.h | 1 + .../LoadingWindow/LoadingWindow_Win32.cpp | 34 +++++++++--- src/arch/LoadingWindow/LoadingWindow_Win32.h | 1 + 9 files changed, 40 insertions(+), 55 deletions(-) create mode 100644 Themes/_fallback/Graphics/Common splash.png diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 6887ae8504..ce445d891e 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,11 @@ ________________________________________________________________________________ StepMania 5.0 ????????? | 20110??? -------------------------------------------------------------------------------- +2011/07/19 +---------- +* [LoadingWindow] Added the ability for themes to have custom splash banners. + (Currently Windows-only.) [AJ] + 2011/07/17 ---------- * [Cache] No longer store #NOTES in the cache. This should speed things up diff --git a/Themes/_fallback/Graphics/Common splash.png b/Themes/_fallback/Graphics/Common splash.png new file mode 100644 index 0000000000000000000000000000000000000000..2c365a3306655f6d06aeca283456ba4cef7f7a84 GIT binary patch literal 32208 zcmV)RK(oJzP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0046PNklYhA1JF{7FR{=>#LIe>+&cWCQ489nH!*#;uI&&Sb zF~$KWuCsB%_c{|C0E58`1}2y=lk}Vr_`!G zb?VePr`|eUT~$qsvq(l!(UFXzq9GYUMME-%N*&1t5FbQU&=K(aq=r**h*ppy$G;e}Ju_o>j=1xM05J2$#dHINDXw$@<#QZfzO;D~`pA9WV zVd7C(w{kLBMF)V21`sMbAW*40IY6Zjkdq@*YJhNPbdXE0Ni=nbMl|67Z+_j$_wla- z0#%v6F5Pt{CrNVQl+pu|XcCRfjRKMrss<6LYLLIx^?>AZi+tRCIdw0+Tq>wNS593j z>(dy#ZP)#+Xtb2P+;p$rM8M({&=m#b5A_zG?dH}tyzw_fOU3hEM1NM@1K2ya+QRpTN?)m8^sv4%s7@86NQ$jPE_-DXgL{iT}6QA*-K{X6{ zJU-yHU{$`W2Yfi#cba)rJ>aWBK3Z5WK)|16%aR-UhDND-3}EL7`kIZR2!t@9BfOU( zu_kd@v$35(V&2hKV6Y<4T(MX%+{2tBB=!^xQu7B0G#O6ajJb=8`CZHr`pxGd2F;Bq z<}~`;k@(z?O`&{(wIJMT_QTBF&rf@NKC=x$Oi_g3+~hubMO7h$X__GhZDMXkRRNfW z;R?nWBgVi50Mj)6RYX(>!8w;>Nkvtx;&#>4v~Mb^3WBK{bA@t1p@xx}28#pMu33M; z0l8e;^wi{Y&pr3ti!WRG5e2<%6j7V_VUteh38!h!@K(-i9#J-kdGn}tj1%n|7XBR&xpOKO1#%j*^X z=udZILr5{8FA_AQRCDr~_pY3yOA)187G9nfAHyjHCl1xa;$I5rB=`j2TvwgDuRH54 zH~sC|J0ITumw&wU{*QjHrZbDfF(;n!hr6D*^Wp7(dEn(sFZ+63s8;?bKL5?PzUSj7 zochKueft;ttzLi44V&9Kx-8B|9DC-CcRzW@gWKsm6|kmnT*nbzDjH*CKBftT-iaQn@Fd*=8v-fZRP+B&YeVe^`G2UY5L<9ToU z>JNSkf@auAvj3`;KlJDeqpo42yYrD)V**SM!})4j`r!A=;ZXEvGa>V+dQNdh$5P7ts& zL#E@L<_HR(!fFIuQtd)gMU%O~@DaBW1qcwKX;bAUz;0JVJS+4dTjxQcg^zjjAwP6} z)n9wl2|ekqq~34?lUFmstJSbDTnNwO0)389wy-GU){2D)w=6{{S!q|bWOYEPrsR&ngH;{tA2LMnde^rs~^P^ z$#-6S>7^H+f7fk)44Q9o@A5ky+J5uze>t#Y>q%#vol3Qwed2l{(6?gMZTG+Q-V089 z`2Niw{Le33@QzE4JFurv!|=3NzyF#me|XJcvMe* z{{n#J9Tbbq_5KKW_*aG8p$(j?8Z=xQB5Z|R;p=si`=Nn zo!x7+-LR#FJg-Nn>2{pOfSMDjF)Lq++I%Bq&57OM>dhM!!inH&?o5``-kPI-H{$cm z}9m5?)EX6w)!1u#f7j(uyAZe<^k=iO?~y8&|eG-UQg z#EyqR@ z_?KI5+(z?Y<4i7w2X@@_#~c2B*R8sysS(xEo1(@>hWl^*^Nn}?<&U@i z`Nl$i#SE<{&d6E=bz?WSS=Nt z16aOd_0kmwbagM(bsd0aKww$RM{=rcskI07ymwAQb}vR!+*wm(oZno?7I#czQ?F?If|+l3;DOc;Rrt151>{l zp8m%3?|kq%RZ;8p+Surb<$={o;g~beyYv2Mn4)O)`o(WO?U^SZ0iZI$6eSfyDxD!B zA-K=;owf^ZnqT|guXIC?#p0W9ztPgb_~^(#?z!zVU;6H60K+tX_0w-LLQKVyMGLdb z*S*A}*?3%V6GV2v$3-j}E7lS{%Qr0V>)pDezoLnbG?73$4k4T#?L!aOn$d=JQW1bC z6%($suI~wNZ)%Bwhha!M3gOt@LZ@WV2Le`hy{;io)ZrG|N1_h$$S4%(LB5`1`It<@ zd~*PZ|{I0X3(OA!d#T5;VQ8LxK<^Fq4ICRCCN3A^hh*i%&^Jq;c zMq~=cxmh!)S}h476ou6cVnkJgh{&R;>7)>2it_0XUv%POEC2YrpDo*Of2*aMR=fBe z=YI9`9}z;l?}Agl@#V`v&`h-Da%LpSfm)?h&d(I5C-M`!XU2BUjEzk19x4}R%t)f6 zy&Ztb8_!sbd1vRPr;~>My_TvOMDVUy&;mFh_jfI%H`#c?0(KAfO7fJF<*8`l{#Mcb zQM})`Dg51o50})mGh)ao2hwqHfpi=Yc65`L#?N$Ax{iU1Mm{I!ZrqMZWlDc4-A%^q z(TM@+7>GPlC8L3Qqu@X?ZjY-hjB_#yMxLCOILS3KnWrQzchjgHOL8}|j)MU$Ze7&8 zb+Lf7z8WR|jcZ5e+~pq))D>-##!#wbydWT;FdTREkw+bOVkXA+~OoKZh@cbDmST$$<4erJ@171$5}+;QD`vPP}E) zEt%5nME|xItSHvKTP_z*J@f2zI?>&;m@%gCn#I3Zm_6l;H_lEUxor7<@Bi567-NQB zPe(ySTD`Jv!^Vq0_;FQHYnAeEuKA8q%yXb6ohsyK$A?~KMn#Q8V$oOe)EU1cp}}Bsg{fBXo#K_M$u^OjI-Xde#4;$ z9bu}r)B?NQvM3zwQ z5v;6(fRYX(Sl4A83Zbk)A(ZPNLRoX}%GYpm>NY(HWgUu?Z_~hAR^}jauIfa4jRDnqW8Sl@Np(q4l3NR7RMI^)f>6=|ZL~Dtq!tH-p<+07S&~?H1^hbn zrLJbAvILatVP&0Gl-$~dq&@iM^t6{y)Uaz-2!V7W_T?{s<%3uKqV4qe;_x>|kGb%K z4}bmYU*E9tpbbQrE@P@BSxSmAgZ8pw{F0LopyamQNh`Wv^JUG;Q??!ansNQ4xhefjwK=;245 zxL|SL)mL4%^_70csG`$PzWv3WBSX<>Z0k$UwRLoT?TSx~kB*deBEnZL|3rRv`h-)@ zI_~5%HywX^B9$uZV1$Pryzj|JA1LdnmP>cve)IU~i1nQGoo`&xzvJZ-PCM(^lg~W* z#4}rSZC3u4Ee{OrczNTICu}(6h#P);&BOn=Th^*8XMT3-o;z>tTfXYpQ{GUkRlf1% z&scXEp{!wIeDu!SZZveQVh|(JP3#&SA9-d=Z!S?YA&7yPaDFvT%i3FZJ-cOKc&7!v zvW6R8#JoPBh53M^!-_$!Wo6A*B}zH!Z1hLTL&#YxRhB%YBx6NrpYr;oEwk1@r&6Gl z+anYw{*_x-m3otP*U}6fu-F;AIKTkzedWlceCCh=f`Kf`&`baff`eR!4B!yXe@Uvy zu8sk`F_w}70gzm&Ttt=!k|bQJ7oMsCK#|^x^S~=_YYvWkn+%ZR71ev!ZWlZ?`qz~P zb>)icZKFVl#_U(RuHGOu4c-O6?o-8L+XhCv&;g47Dvh_VU1(l#6*OdB5GV-Or*j()iGu34(l zHn-Ogt?P!ga*W0#(}$T7M3&@M6|P%0TiW3&Dx^9ld78vCWYu_>1}qLFITguX5mdgc zRd1IOa5OpRUx+6-fBCZ5F(DQ$=(*|#KglmR@a4&}VVG8(5mi~$nab>X`ZFK>kKvuW ztN?Jo9%rEt_w(n}s6{yTZD`4B5n&2{i{R;K z?Y8jRJ>cQOv8p?v!<}<+9EAXovyba=R`oCtrraFrDH4 z#-fp=%~x!#>aK*9#H>!R98B>G>Kl!Y`^=4 zuYBRM(eVizpcqV(8ai=nF)>?hc+rewUptli6i2=W#!xpXrlM49AV#U?$C+Xc(Ws3E z!MhD~auB0|S}uJ}!ZC@a;uclCwP+Hzx)-U!B%uSBU=OR&=2$9=Iky$f zv9!;(4AVR0PGO5cEgR=6s2eaigutu$dv&GfJe1(oGY?xwOu+F+Z+iPzfBsy( zHP_b8x!DK^1R|9w@z8Z&xa_k+yjsot|9}6V{aeu4(bw0TX>HBV&h`%sj!jPeizF~qV(UbBAq~~hIB%@w(?z?I?^$e>qy6JN~@M~9VwS*73l=ZRis=#b(_Xh zOB|&-bQ8N~p_w2+VPFKtAVlL?m~$`!7q2QMax^Zb4I1eoBlL+?gmH*4sF4U`jPr2* z%~AlIn^nzl`Nv{$lPdsB&IK1T_-Z=OCX*2c;Vx2l_9+|OzeO^1%Zy5hL?eutv*o7Q zHcb)`hHhw_2Wdi!%70OnrIJZSQRd_QrfF6x)w*HsL(hq+imEF6*6U2p>zXmoAuJJ9 z8B_Ltz$MOkUDNqKNf=d_s;We^r+P^Up&Pnx&P%-A6O+3qCih5|j76w%GQhqlRyU!W zDAW)yqAiI9SqY>NQsLsTnscn0GIFoMFs7#Pr=h_xr8j6C~N?4!v1hE=o__yJ+QYD@wYpj@acbo{E?Y|dIU?|`qUjtw0iotPfoDKoJ)_|;1Jp{+06_@_Va+C3VSpm))t6HYp5 z`I>dP1xq5aBoXbQHv3DHKBhC?31$!VA|Qc2pwQL5%Io(}v)BwKBbXc>4>_Y~H+i=jiwz zOB{T_y5mkfY4P$^Egd~95}99ACrnK%PLA$;W$S(S{_UyfUT8+Qe$A>=Pd}q)>GDKN zrdlkF4)<@q>&|Cic*!N`Y|mYI(M2l{*ci*?_A#Ioyk0I&jtso`^b?!!`P+29U~_K4 zlAN=`*okr)TWuW#b3+Z+R5pMJ2skK2V8WTyrRJFCV3*wMxrB1uCy5JC4)igLUPyT8 zoO~iBSh{XOTSq2Nw9k(ed+vg!!G~wcj}1=z?D75wMkYB2V=(6tUni5P_r33Z zhn(?mF^`|?TVj1r?q6f;0uV-IshpTG2?cD``^&wq61-|h_!tyN<0`uDe={N{h3OfB41;UyiM6k^JJI{4aBXu>ei8^P*81~IWI9DKABBCcQGWnsu zUjK{VUVFW4zg#x+jcximo_1>*J5y_J^Ncb4|Hg3#Hv} zdEbA0&^O+E=szww?t=FX z=&2bE1{9SyS423ly=8V4QP*Yvnln&-SO*?l;C*ES(E zMiOBg?cFiWV{rH61gRABj#3jv3{F91h^W}mnfc-C4mo7qVq}wuDEQYQuiO~jz+~}P z_rLV%d!8$3x;wjMO%4SAmiP63_RCkzEIjyy86HWt#N%y>h)RA^DfrY_~loBrp&zx6Hd)k!Xs`NEgJl0Nix|J+qJ zStQ+>i^dbSLTG-~aG`7Uaxu@f%E8^q=#GcK@YzoWgT!~e{lYg~{HZOo>SWbSwY0{Q zX~ljj-#5(*&beN%my3DTtRLPJ8-L*DFMaWfQl)C${@mw2*Lm8zo}Q?;cXq4ujX*=1 z#|785dZkzpT6IHLJURH-6`%dY(9YdH!qZPa;eDU^^7Eo|SCz$5EwNaPF*fhk2_XdM zLf5r=wX!f~?9X@q>}#LD>)!iZihqCm+fMz^6`T7Dv1Cg++omWA=b~JgsTT96ENj_( z^%cMP^>4p_^^a!uJ9)T*TzjXYDEr=IZff;ktzHgj|-kkCV_Ya#k!Pgh^yY5 zxzpOd+%5QOjG$CUJQ|=^QLOppDS68huzegvP#6wfkiGS-$1GpB7}=CP-OK;=KWj@v zOZ=eT&O=l2TegnYOwOd4S$C$`N*66$c;)wh{%m|ze>KwD-W7?&>@e|F{FG=co=6Ui z&m6q8V`^~gqKzkw^H?;V;6ivP1%wdR+qTBfxf@TUW@|=Uw$&JU@#U>s`<5)e^7}t~ zCbnYhbUoYIlghR!swy$rk6qOl$0d9*FM;FP1b{NvtYsqD7y)Dw^Yz!$%J&uqFH%eG|O zR5fCqHnUg80+Fgl;)!IQM+fVX^G-i8Klt*F{s92#Wa2}YU3vdZJdw$@v~}5_M-)${ ziLo8yg-xp#P3(AK(_7yEOd-tm%5G z4#v=$aPYxFgIFl$_^wqHYW7O12Ex<>m{Si!q2S%O0 zV80%;#9?xn9NY&p|C%2c;2c~aruKEWw$=1I`p4Z_S}XD(C+|ObKfn5&AH0-a zyR)dbFIcQZV%#+MO;9d4hlnOpkx1nEol{2~aYQ`7>$w+Sw3PDcPk&lH?Ci&O7CL(t zMp7;NtPt)fA(2Y&oSaqK7M!^MqRn^RX`$CqhadWm|N7=%25O0xY`VRR1FwnN8}&w` ziDYWq==8Ex`|p>=!;d_&ym!gQ*IzKg)A3ZAo91g%iyBF!TXs$7&6dvB9lY|cJ8riQ z#97(5^wZzGdh<+DY3+z75+*nIxp7uSipoSZv7=y~d&1#QJ$Uc*%ktt&IMPZ@pv-%%II`Q@5+q}TmF9E zeEr!sSaW&)xeyzShI5o zC^|WC(vowR!KP{CFb}<(PZCcSNG%S`%faGbtbr+h4vNH|F%+tpt%4C$hW8)Px2&%V z$tX0#M&AE7eZ4 zxJ8T@-zT=5bCYv}3$3o5^~N{o%a43zx{~c$D2N%R@v6k*LN|0Zk;=4n{B5v&_Ip0u z)6ourO@|(`=JdBbGBn%P+09}J!_Z%)LJZRo#B$v|&ySaL8&5mq)RO_kqLKH0=-3O>VwMYIo{248fFKXZM4{rNhp7=bHUi)a!LFU~5(I*QOTJ;GkUBf~`|^ zw&vLL-+Zq1zV!Vc{@7DSyAf}RL}U7E;Z%lc62Rk`r_8SZ_~@koVzHP3f)e3En4HU& z08}&->wf%Em?x(o;f9M~ z7PcUWGZH0v5v<^(HsUELc##THK1roKXz9g6D`nXf6d;!bBV?^KWv7Z_U*}R#tQ5$m zppgAc@6ssLptSf{IgK<4RpK11MPXhJQtiHcMxGiYDl`MCf^<}Q`})O5MPUj%?EOFW zYfrsx?P3550|C}s7Awu9lgFQZ;S)1x$+a1#Y0mGldR{+bTD`7SN|D;k@W@C+Rhu)H zhYUZHa)_*FDHw@# zi}9*;C|4ATMu%%GyZ-2PtM{wbYFvN=LG77BaFC)X!$X5DRIgPkR?chJWRoJXR5th6 zlsNaocUteyXDeR(NrC~{6qtf+5(*^La#9&R8hBzMkA-ZouU&eJ4%qIPhVMUS)cW)tuGyis(@QxZu&p^ z$5?kuqCFn1nKcM|XO6YxX8(2TCqzn##B_r{(MnP!-mbQV;8_{_wxPxOi#b6q0HzVuFOT zM~=WuyE7qll5}Sh0M?55N2EZ~t_Cq+`w2 z$x(w8#`a}52j@Z&W}-ExMB>6ZYk&i4A~mU3Hf-3iZ2$GU%3Mvx43oRxLnC5(xmc}K z1XE~!UPRnXB$JV3i_~z=)W~>AEbQAa5&xSI_8=|1t5pcXLlc#VSIL=M}ML|JB2zV>QD;s-%QP5>{l>AYr3Z&cQ1Z z9%OS-MY!0KZs1HdWpi*5&*q=@V381BbV@@wwP%wc2~l0jTnZql*6P~XioM3RHHq0O zvPtC2XiXtsMK+0o!jny_0VHPL1-hBVpe))@XrJ|}44wwR_cMq`;f(i3= z9W|peZu)oJkx?y8zWCymzrXJJmtOkRNv9Tcp+w^*=Pn0J&Kxfsnl);gu}3*oLY2kt zpNT~>Ir&pR#F#;AXo5VCqAY(2^}`RB6;J1dGNi+*q(+!Bfw_`0@9@`#tY{?@=3$VCmdk`&*m; z#beQjr&vjANkkf@iE|c-&T8ewOZ$?UT+M{4sD`wxkO-wpbrsF@rJ$L7PfNZ;RAB=p zY^@-ZY!RNXR8mP7$@cDaDrs^NbSi5vqbb0JNW|lhKmF`~UGmO%yz4#3t~!w7E&J9P z)oAR#306!NMXJsZtI`Ih46n1IJ|a%O+5;ID6}|c2Tq@p*G@HDYhjGx#5Xb zeW~!}c;i;c5wSov>EuZ9uW;hx_Ovt3IH?^AOPq6Zd@a?INnol3#;~hgM_q?uzBVT& zxSwz$|DxkPeC5|#1852XC=9}#^94YN#$p971QXl~zPcfLa;^XP%@u#S?KUyz9x!JK zArXQP}a&m6!ilaLskKTC3^yW?3~7F$Fv~mwEJ$SKa)V+dP}2OwPGqa8;o%eETQS=vtEt@_Y|k2&Nds5{bmDDL|@E zPLqpdBEIdJ$1cC@GR$MI;FrGgmE_v93If6-Ex=UWL?Rv+qzEWNkdU8>NRS%oG-kf{ znU57Kbr3k`M;vm{Q6KoyK#>HOLS&H1sl6qgf9B6WzWQpWFe~i+$jAS)weOU?U{1aE zmMK9@7l_5<04AoUzy6JH0>~ue%@%!o*I|>Ys?liF*%>7M{T*-bJmKAW1457x)Y#?7 zR9&DYkr2d85EDf5&;ntCElJZKzwybJUm2YHNkwq6YI*OupT6qFq9WH~J;s^Dz!a4! z_WFac$k+OMveiMh_YYov`Q-|bP9?mbCT{ki$W&F0M%{JL;^UwARA$8)mSR2S)rc+- zk0CQWR`sT@pkN$|XU7I$J?| z8dD{-r7>MXTM{!Bv`IPkT_=CKgq%g0#*B1rm7R8I+`BU+XT*>xy)?6B=WY_y6;F-6 z{F#zpHUfxXaJ)2Io}4asw56fYzThu;KhkL}7ZBWfiPM-x6T(V8+f9gw07k?ZF=7#g z>jnUmLt#!Tpb&(BVRA!og=Fw0LvYhD7WDM2T)7gY>~VKotzNH`OC!5RYntZHDZ6(C z;7mJk-}YiIL|HRtizTa6@N5ceRkF2uwmdUgXVMyUVs+i%oso&z!tRMFd0l#II+;o) zglK%75CRdEh+qmqoXeXG3E%)10s`EgMwI0wYhqClo9Brqf)taB^2~&FjsXz^W2C5> z!9~Pg<;n>r=U(u&z5s2!xV^t_hra0Q>ONe+zM20{nX0OubLYRV+@a=vU8prm*kyo5!cIVo1tuS4XR;v^zN8MUL zAjVAHI(-(xs>n3Ccjpch;GD}%OD7Wtu3x)g;UdPE*wY^LnW?Flw{9KYJ?7@;%T*4l z6sC2?oOS8|k!Ety%3M63tu%08x`bR3(+*;IFwL7|VaR0Bk8d(|O_$J~#8lOTR2K3C zIs1^%kBTmWRXsA~(oox5KtM+e;H2%+wVOi%?P&=2ZW^#6R+1W-QYGH;KXN2IeJpcxW z+11Lt2mLTbF-=jyLDWtLxeykG# zG_y+yTaqBI%CcE9sCg^uETXL?5V3kuf4Ycvhi0mb_7tYdVR3E>(R7$L0pGlB^#+%^G&bF)@8>Q%1S zO|7mQMmlGM*F4Yq<3a?bH3h865DT76Zf~8k_XXF>x~@S99@8TX!&DUMU8MCaB=%6R zRTYG3O?}mBwWW&|T=wms++EBK_SfPqtx7abAi+)3(9C+()artpArtzHZ94dzE54fh z97i$n>``dBB|YDT@v4b3+dAq1GBoO;H^pGl;?_@yto zPo81!Crx9J2Onlijpy>2vM2ua;g2UKEjR8qP{lzWPn;{EnVd80<>{j0Y{@fEU}0CT z1=Etusyz;5oK%FwsvQzdyM*HHO(NL_H}7a8^K8pBBH8x9c+wG;LqL0`F`mfWCX3Kb zY%i8Sz2&7J9lH+gX{ZX^Gi%8{EsY!8)C{en8Fig&rm!qb?p`!`c2(^Adpjb|xgaPE zLU)LOPhfdJF(dK>m%eagE( z@vE0g!Z0EXtjTk9y;|1BMk4W~8c(rE)Ou0qzO)gbYGIa_W=y^A8jA~ZXOQO``3hlj zA39mP4()?pxqu1chGA+oy;9;@%`|kTMv(R&eINu(E;#ub4l~RlI2WcVe5VX?4wIV^ zMS1TBKl-yl?x&d25e7?W7ZL`Rko7wweeR zNdP9do*fuW)70ult!&gPHQhif+Z%_1$%W}fJYgM7O7-$ZoAs(*Ety(f7&-tYtjU5Kx4krR;c@32deBXeJ@u@u*nmMz4*8X7 zN8ow7!;2?#;7@4O>|QrRzq#=+Sfk9jJ-~rYm!S}*%V30=5}12kZd?b`nKBf@Y#EAk zE%TXn@*AZpe$KOHsNS+OUJfpwVA*MJja?bEr=gjs>A3!t(GULp`QpelN;MevCO2Nw zYcu7-&e_?)sr=5F>U2pj*G((bg}pgfgfENT_a8x++&Ry|iJM;D@e14hLJQT4Qxk>J zp~CpiT47exG%oD-$b0qU0tz8Q;@<7!Poxk2{MWvnN+!rYTbgR6LSb~MFt)RrpVsPi zQwVDXs}trpF|WHwN=PZ1R_Z=Ao^;CTj~8Q_rZJjJNW(C+YNb3qQ5YRAj_s@!^15#5 zrXidI{j^$DtJfQ=Xa!kK6Z3f0)&Pj+Dgr?Ox~`X}#|xuF#qpiBVqViUYqLO*KSy&` zA<<%3lLa(Q-*0(udgUQoC(5Zzwpy6U@9Hm%4OjBhTD@j+lh0|{2*cA8+CfJg?S}AX zn1{F`nF6||S7)aRW5dO zYVWR9%f<1X`CS9WiCwi)!O%2I;AXlN+JafJT2pEQb_aA?C!p9H#-818v+&LE!aM(K9ad{{9v1o9A3bc`C)MmbGe$@{yV@ zcsFB2oZGvYxp&PubyJx4t0F)+nnY9Waq;L7{;nOJsqN16( zY}OV&+@L~UR1=C(0yZXeHo-0#i#&MMEI%}dJUG^jzSD`3DNGV|s*KJwCakoC&NL>= z=tyItgpLfR3g}2td zQOD7pt#$LY+nPaSy$*KI_En_x?tAVz{FqygUVHZa+s9K8_S)1a5Lf8$JEq=!()la? zctfqG344Dh`NA|VMKQh=4%~ZaXXD5=9|t#5=G;0{i1un+0>Lm0P6~LvUI$TVEdnG= zWBz=3m?Yc*A7S(KoMmpEuiuPSh)8=u?9^+cl>qkc7Gs};hfadPatZcfG?a|qsii&9E0K62U_$no>{(sZ^qa=KeV!14Rj zv%_N73``9X1^va^V5x@5rZB(=$8}`awt6rN@_Q6$rszm06FZ0JJ@g39 zgUy9CndFQVoO?e-D*)mlW_MKQpT@NoKlm5OT7Q9wU@M>&LU6v5Z>f5hjUn~Erj6QnlYb$)c^=}L#${K zH$V1IhanHMf{+&rc1h^e>EM{45G3ggAW4@ORY=AYa?)1277`6)vr$gMC?O*o&@Ibg zVVze_i-Q2zR1plADuOXg6`?Rp6+nckA{4?@0SdFPC#{^Ka~ING=H!&1SlnC=7Jb3y zM!x(a$l*U#lCEW%l9R){IR%G?VX_EDDA%xQ1+88{xfFC06%EB2%5{`#DA!?a!l-Jf z>8R--!s%V@|Fdzw1ek7c@!B48WeO6oHWpbAPgWPS(wRc(i=Y1JqHVWdbYOQf7A@C} zx^774E$sPcnkKmCC%72_-#%XGS+lV%+iIEy0yN+zoYyw;3@>-DsWH|BO*nXV z*ByV|m?*{6NL@38b#B)@e!6LvHS={VTA$wh=X)O5(oq`h&cth);quo_Qve6HXb(Pc z|6VRJ32m=)rd)Vi%+M_dVU&glg&oepjUYXD>kYGl;HF`kx?$?3=VzFvW|+mAvHybX zqM4WOynFK=TIY(?v~_zI`!?kx_C&x<%Z+#wx3QZX_NyC4v2Gr{tQ{}i|G<_PL&1-blO+&A?QR7K zJy}4YCkp`GSpev1wIfP5u5_ceFSweRf1axOWgq~IivN>4S zJ*{>rxn7yGC8rSRaid+UlqD_Mb**0v0h+B~wv5?|sA>>^LZ};K4+)d~vR+jnoS0X2QY)uWEPd(opLyf!A2|Qb@0?xQx4lHu72TX)us}e$ zQZ3bu-~)fLS`$4zix>15nkEDn!v7v$I6JrO)efQYuN92gr%L%aSo;;MjZFQ2`RO;_ z`@zd^-x=GTuW&vu;j_uuDa%?45B}jdzq`)h{5MyB>wQ;z_a@ddGF{@F6Hzu5KWA0z z6Mwk+>E@pi3wvY^?7OlStXQ$3^-h&|VBJ#i>(*p{7(*b~@bJxHVOnwrx6pZ4A<&sr zTT-cjz=*1}Dyz0nzWB8-{MSsrC{-VB3#UFF6i*1+yWPEZEh0oq5E4Q7l!g1fhoGp| zy`EGwnMeeioQ$xwIfb^}|CK8)cLQtZP_wzLU?GEzBo0bgsN&*APsYI(7so8rk`Tj1 zC%cqDcLpGIXB_@s`kt)K&4W>LSqDWu{2h7RRGlcHy9MJ#bXjQz6M1xHFlJpB(cOZv z0=hGpD55JPQMO_{kFHis6r3D4E!Z5oGxqgF9-S5kr>xDbfUXuyl$>jqzJRV)`>w@v z!mTkQED=@9rTd?G@^AOuFQ4*Zuf}OElC@UH|K`x1cA&k%UjG6RTT4O!WH*+Yj6s4) zOBBhs5U@QNdvizOxhMbTTYf=ArTomFAA9t^2Ok!G#hPL6*RaB5(LsrfjRRxWb>6=2 zcJEraQF5@Q1rr5yXT0d)Qnq3|kIoFnOXzlU3g~Q+P|K|`@9=T4DBrkiUAy?!*=nQf zcmZ9lP?nM$_Jr${M@uxEtusfUyQWgoi_G0{6cpW-EwC5R2f9j_kMAEU8<_OL*;% z;UW9cT$N{gmBzIyrMjU%^7!MAJpQ;nd5LCWg{MDU`Gfz7MEVT98hlePgrX{nHQVR| zUvBjzliQ~Zi;&3IN=?H=nD=v2KnT6AyR*iRKJnzEPdrHiF_i^_Chy!KI2RiCuiky+ z@h2a7{Cx{L+S+q%g<@f79$)A6{TYT~<8RndVeN|*+zbQXu+6W+TD$9K6*@;@Pp2RR z76~qn2f;TwF*@?aFMe@8tWRMFZMd}O;F}W{ThHHC zz9+)X*vKX%3~Zp8!v`*nTd#29|*XLV7obl_OA@QoidOHzXQ4s-2Ky zTbZ)ptuf;rVchuI>E`6HLw_ zgcGJat0shy&VL{fxM_^<-u=iw9~l`Pm-#Xv*VfkEvtZHEB?laMAY*L)h7p3V=w19m zEmT_Jd`AR=n}V9fbb-l=;6no!p}WjQ^XCKWe526FSF6`Lmv;Z>$3Ci?Jh%{-JZk{V z!w=nff3*@C`9hfXC;6$!NNGs!O>$Odd{8!fs?Z!XWs=!PX@&7 zQaw&e&Rv^x24uz8OyU5Ce+FQ%C3HEsGUPzqrdiMmD0YPI#_7b6OX9wlM4^gA6tM_S z&t<;3Vv*)9@&6b7k-Z7m+GHokxvGL}YwJfp`MKEs$8MeF1)T?7eUE?U{~ypoC-nwhr#YxndV$cj=Ky0bQR2`9%!j|>EJP%i6WnuACdYAwh} zNabLc@S#&y!pR_BS=?G79Ne>IaPZLO(~|=@)bTuevKX61Pb+py*Q0s#WHCC61zGH# zwXc2Yn3K*yBU6sfqNf$(d33vXi|EN>EbpapOBF-vl5@Jqn#A4Di9!`o z6)_bjXEI;!TUfV{_h0%sd9t^A8YUFQp6xX_R0hT(mwxsO{au^x-7=ywuzeMS2oXlU zz9oRT8cFDdEss2U;py*S2$`ldfX9aO0{J~w5mP951R{Ydns{N?^gipx;NtJ`*n2Mi zY^hkh{jSX$4?N(~E5G-L0ki+9@qL~Fq9)REQ?#qb)`9-@2c6U;@?{|p=AjSH&E|Z0 z=+iNGzuzag5gIBE%~S@b%kylY%7_J8XBxaC&W3l60KJ8#OIgq0HVrgN9M81xe zNFZcFMv6(f9d~du@a_{Puw$YqP@JbhRVDc4bqFpxRO8+q+pR7zmX{Ethy_{fn)T%L zv|`M{1TT_wwR+3WpeN@=szM{j#;92@9!eZs^b0}4q6bTT7^p7D+4v1$p_7WRYm2hk zwVdPQVCM+PbuIAnu_9I?|6NG6z{}Imhdey3H*8kS8;{_$)|RjKc3a5%F9luzg6t7n z4b1Z%dH6=Y;;4Hb?r(`HueO$ef9s}L+0j}WdE%w*+Y^<^OuV&Htp)KtI?s(AO}0l7 z5P20Ej406SwdIpJ~;bUnC{_)n{#%hGwl$fFBRB}2q4TBjL|}+ddrhf9(eLuq82{wfW2CP zjj%})K$y~Mhk#~0(=z1Jgbg8kIKEAHgte`!z9-ZUq`|mt#X|7t={uLFy%AX28 zIa{1oTQ4~0tg-mQ{;{dpzd#{1O<%vTb?E7bca4s#3Ts9d5^W1Ec=*cYrZ3z=*jn@G z+&Z%EUtnu}b$4rN`;#y37>qMx2e?ijZ1PbJ^Z&~ zxe8!eR|5@*Fjny6m3wXD1Cy@3h#}*No2miK38D>iC|#sd*j)5J98(wN06JnjhWg7Qd1agS%+H)!V?Rk-}AQ?qGic?bQFE8q> z>!z`<)4UM^fwa8|BCK~a)~a4B{#bLwao%H@WWH2Z8N>f&f869{L#$iB{>75U1b@xHy2pixMIy&^@XufSTQw4~Y81>L z`Et&KM~8~A*v($R5LhO~d9%pZJ}snKsQ4;d$Cz@;;>fqY^FNjtf;WqN_v+~Z;gPR< z5b<1*FNY9B%zgv;S{u~hBA1FEk}Q4Zy6XU>Vp!gZc*KKR&2Y?z6;^!e!zClhOI^3jucLW%9YG>ZNqj^uMV2!S{E@e%}U!N8e1;kXuqc|av`eILeT{kt;`2@<| z{5a<^A%^PueT9vl+Yjs{#&m1p&i^$(3l$R3C#Po^qt~3dX_|GDzis2@rkRc^g_$WC5%SYhsi2ync%t>b3h;1_LNdjIv;Jpb}GMu4HI1R>0Tl6j2GQfXe(tTVIuDA$NYKucy! zC1{nAox76E4E-#1Esc@bu9uKYVe@nLJZ~zF zlat9WceQD{sTo`tobTn&Gu(8n%vzy?fL0;d`$C#c!{*mUs=m@YI@~){3{5x^66JO^KmokW)soa+BM%qc zEZ4MDJo@7?vc`v9!$#-TyooH1~>wwb}vJY_AjfKJw_}%D|&1ukS6^w5q1p^nL$TG`*tfiFow9 z!&bbpz3|_k`Ou?JJ!LJrcTW)h<4rgJ@mrU@XaD#~>y|P_DcAK^S!q>!wH!)yEgp-! zbwl@!zx&^EwMvBWkcXR^Va)fZ8#P@oYr4+GAG4AOFNfmOotk>o+V< zXVb}2O{?j8P1B1tZADMpQLXjsue;V0%$Cac-uSx<5A8L8N?o&>T&(FQuV1Qdd-TyK zo|1_ldgM`U>y|S%^p+gOR_dD0#aj>8i^%{4!H)AGcEww9t*@2gOISb|>7}~9sH63wb-8PQ{^OZq=@0+= z<98g=lT5@)uSJuIl;ihb^6s^%8^3$SZ*Ta6HK};q{t^PfgIA-oP#DHslt3e&SvaGF zqZ4y!rX5Nzc8$q268^|#Eri^ickU_;dJmQ|j7@_8y5tma*qA&{=0@1iDlgW$rSYUYolM2FDsk7vSytMepB}=)+mMJN8N*4j#AVr5L%`VA zIi@(#4CkMmp5CVEApCo}<>E}bIKPEE4A6mhjZf~jc3yecyk=WlKm4Dcjji0Yb-Gs5 zIXnx-Xpc)}0SG~i&>B~I5)?0uJ@xn7Z@T%$O0Dkw;J5Q#2%xL86RdH%&9!;9bZuEXDW;Y)cwQ_&L1s$x&vBTTc;-{ zo_O-f?frxD-Ii4Hs7*&K?OR5~_H9pPxmX+;8r-&hyQR0#zhpeN>99llR;*AIb=UCF zKOcX5Vrpg|>T1un9)8%y#Y_9RX}+>!+m?U&wG>sALk`@qa@DF-x}{hsY~S|slTSbA zi?6%d+cs@Fyl26peO@b$Z~R8yYfmW(5g=F{^D=kypB=*e zFQX-n_9**aOLnos>S7;*vjkyUh|d=C+YO_tfeR#KcxN*Co@8pT!1sMKGXt7wn%*<5 z=ZJ9wk?uUtdD!FQDL#j|>Sr{~d#2^QC*9;c5VV8x+Q&`gO$LU3F*g1{G zIXgZbp2iaAdgnA2k+6A?$Ba*mvDr}L1_;Al@Hs$&0z;KG9~i@a(0^Ra^ryBwM&Z5W>N z;F6p!_Fj*8uYD1#oQ9*E!);d+Zg%ARkuzT9Myq)*;uc{8g!5kt4Xp#$p&t{kYWV#Y zXa>@8TpmjurA90J6z|1}W`y`$wY0-Dsv2|?3IhSj7~U3*zbl^DtH}2Q<-(B0s~XNZ zjQTps)BL^L-4vLd4SnvIzX^i$!ABUHm!bFY;X4ub>?6Q|U){&2OSs_Q&h0+!U3Wjz zAB=pLcI6J`{a0Le8Gwt9Vb+d&f1D!rQH|lHnsaM>mSGMrMN{A2Yl{Ru#6Fs+`Gby_ zOSaeQ&{Q$cZ$>qHBDT~xw*tMB4^5#%YOk2vfu(C90#Bb}&cOB6gWjAR*v@GX!_H|a zz|LtXtdWwG2J`J}C7hBF;6u*!jECOl0PLKRWN@xM^uWk86!Obc(^1i&FsKGC1*==1 z+1tzYyiqQuO!HHv;w#)J*HP24s12Ph(CuAnLhR*AVK_V7th4UjRw#s>GhWRgT<1)P zktxBL7?~DeVq{v_9F#^%K3z?FuYGozky58#Tf>lSp@i9e#_J)#&S^l1ktt!P)JPeL zktxxzti^MtVNLgqoxMFbRDsgV4WGqX6W_Dz3Z%CF6((aV-?`0yN($gOszvg8+% z_ez*xYX<&$W&f1v8?Br1dICH?=0gv-b%F zdWTzbwrIP(;d8rChw=?Bn_kBX6LWD>YY ziM=xtD~Y{`d_Pn#59++C;oKu=d6)e`SwW4c%{`CNQHyZZ#SPw)P=^P3sA#|CddEYD`v{L;NQ;e zI^`XAKmAHrcJNtu;khQu-6}Y>U$!wB!Q+z zcij5(j~RvrV9g<~JN&fwMq?=u&5RHH`DY(C4ULFSeDi0QtU5wfW4c~@`hgps{>OEm z;LK6@^7Y3b_4*IS;%Q>a^w=wRU;m}j^llIqEr*Pk^E?YOfqEzazI>L1rZ zpmXu+qu=n6JAU(D)k=QT>F)>Okvo1W1k%~AH(l~$MTr<%HJ)tU`qW+b-~4S5(yiU6 zy!G2UZFs5lgdrdruI}cO z7lIr&6XczEbtwIhJ>2enZa0M76D6n-Qe5oz7f5a_yjTRu&xxcy66oyiDcDwZY-k$9 zFgyiD7?}bHBU2!Tkx4LMcnTm4Pl6GKr|cY=-pU6sG6k|y!tfNxy2~&!1pvd-Ai|K7 z57?!Kof^Sx&LiF$2{t#+^|ZsEFgyi??2pTqOw>#clZ$!(xXGg&Qzrjxt?~*tOEpw9 z^mgEk4YYF>Cbv~)N4|UWYec?z0AgrT0AhGTK#1W9K@dZef=CQc2qG~&B^Vklvf9fC z!;>Ijcp8jhWD;N)cAfy>qqKB82}T&1v~}pSlx-c$vXizB$<@4TaWrg4%(j|qFPGcU zlwFs_0glCo9X@tl3?tKEz>s5Ech$4KRW|fbIzr5;ZYw|6-S?(T zeym30yLa#GUA^hlw_RoNPq%iQ_ragHwl6A{s*CqK?419&hAGO>l!ztM=Y9AW?LEsU zC#Pza{P@HSI3Jo6kx2Bc5BxaWxnyMLP;qAW$j)7Yn?nEQ`+z)|P!zv%)Y#PFmL+!!C9XzS`d;OIB& zT4m?xtbiDt5ZTVfo6h(^D$_nRDOMkR`XML3mmr3wL~HxPfBW$Nwq(249&uLZ!u@*J z9)IRLzB)81AjGhY08;>P!UbPlb?~W^Q&W}Voc1MhwG~0K>?n-Mbls)fa{&4JlDqOFJA13B8@D z)RBxrGhjr;FgLr1Y4e`qii4)Xzliz><5dlH9qX3hi~~tw=23$a(sl^WO+&l>+ZR>}lj%?Yv7;?Z5KB8CxB-AE>ML9R=fy*h>|C@O5KB9t zM&p8;_x|C^!51Hl(RX|IKN>m|Igq5__dV>p7NeA z-W7`{WerQcKxnnnE!TXcTAW_IblJk5P9pSng6o=AFSm8~C0p`>n^CGTU}=YSSOc={ z3)ilw6Ojsy5qi5&DNfz}zwe(u`CVte>#E;;{Y};?>Ap^DE3%PoU$lPJlp2j0^@7De z7E38=hXJineANCyZM|rKYD7q;KnjS zAQn#zPk||FrEa=ybfacPjns8v$4%Tcx%r+i-t~oRXOB4J1NqrmOIqtY@X=UecnYc- zH4M{Zda@21~>)nk!p%+i3tg&K(tPazVsHi?Lk zXShjlQ;WvapZeJ=pa0$T($$-ued;lb#x%89qUB@Xf96v^>tDG1kg3_S)zb0d=ZpEt zi@$o`r9a-fV#CRgK6n>N&xny|TnLKA)2^ICn8cKSzx?)3Uo&v<@oy^@i%v_q;5-sd z7@VomSjC8PZVZR@P)4ZLO+&9I7ax1sug5<1)4|Tgt1X>RP0z00c;@B5oBh~#pJGhm zhHjNDRt(0Jd_4i8nR*gJjLmY3Tdk7c@1Rq^aP9OLuARR8H{+46!(?A#grNx`dr`1= zxX*$^d-Ovz;#v2(+`c>Ejf(@N6nLX)A0?U~AsYR(S-Kf`FYa?exdI*2rMp^^8vPxX}(q-uyYF^5(BuWS@NT2s6*qSyn*b)62#< zFh%&XqK`09siSUS-4eY1U}CJnd32VZ7sBKiU}nW+nBQCD2;q6~Izb4uB(QD?NRE00 zdOMsPfu$YN6N9&16nrLdblBJ7k6Ufs%46@`db4!ywFOD`wPg_KlOuGm5BOqsIp1Sz zx$Owh-16r+o#yh^zmWdOguM^X|xBvXI zV^6u@iz^R2^%qy1w*8sSuH;tA2qbv|V@wEs$FDy-1JAX$E}2g{hIAa|I%XlR5k`~?nsYHijEiY5z5soI zM6rshhGm_2{Xyi5@t3rLF&HLxaPfrT@p&wBuugEjhnrkLGqEs-vAi>)5{4$7nI>1O z(;;K2BF`wnGXh&0Zs^&yi#(GR9M2uADRLz1)Bhv@3{63?C}G=f$TxQe3|V|8{gLv} zlwFHuBgHHK(3Imdglv)k%oa+2{>}fq|M<1-tu5ucUasq0Ci;0m#yZ$*FJuW0oEMuJuQr3xEs569GBeRw7X% z<(UVsyW=l6*2*&?+U~^ZQDVxo4_tre?KjoRGdiVgyE8ob%*(s`pQ=?WJD%Cx=wFun zimF87Dv|36ilQ>6Y<=u6ciwi>^zQ9SECYLXk`Xbcs$g+NjZ}@O8jZVFw)_XqJbq0V zi&ku0a>zx=bQXYNYF52MZ7I!;-g(d~e8kClQR4 z6*#@m*LS@AameXk3VHfV1M%c&7vax>aNl`2{fhwQtc@Tbn*ssZB#4~rG(gBE?UY&9 zKrU^6C&Dg8$fl+1q?0malQtilvsH?uTAVbOv}u?tNeWCZOUS0cEP7_=B}=?JF+Q6BJmX)PU>5G+=jzW z<)(h$4WFMG+mTHo5{)libMy-j{UOSyx)!Zb6nb&XjoBm=MeSXC+=~zYNv-e7cJ?OI zxo7|JyVj)OhL&pW-2d=%4n6LiHHW@o#p?CX-hXW-ZVGM?#DOQgZR4?Luip6jm1{OU z^N-(V;wAx$S01utzausraeBwXRgd2Flb0U3DVyL84LIJL$t}!v_dWZMYg^;SlGR7% zM_(R(>49t#sn*W6?q$#3e_bYSELpv&IKF-8rTcB&CehZjJekfu_t5n|+qL9+a^1_G zy!V%xxM}suNF=^=^^q?;^oJN`x)!fvBwl#SlO|fSud${@yUCBk%=1wEMC5$T$r5Pc6T(MT)zH<=ePWc z)pinLQQumk^z~jGPyx-ydk6u?UjAxUm7N=KlJpF)U-g3xMuU~cW>Ekc` zwVWSqO$e(;Fhb5j0JkqRe49zVL+(LRzmR++=$4IH*Mz9)rGi3{0V~0|S%j>%hPS`Z@wRolgEF`Z}HbNi6HYz$AJ*JURUn z4VppkT|0GaoWQb9^h-H|Q(nqosdfxbp|=Br6CO#HWbvy9FkV1Bf=mJj)ahLYE#+ha zrn5C!1x#RzBK}tuv#Q8fQ8%!x6K^?^My3ODPGDIV{`Nc`+A3lyS`s*+P9HT`4dLhY z5Re95B5`Gmj~S?HXm7#AC(_W2SBITm4b0h6TiX*@)`5Pf?MvI7yFm_3_*=T_52b1M z+tg!6pT#9f1}3qr3xkvBlPtch9sOQ<&$Z-N?J4~4-$lLx0I`U&cFmgZ?yf?i_~Oei z%@#`Xc|Y$yfeeAZ4h&7v(snU0iDjMCKOtQHBl+mEE_G;%7G>(Mj2o`kjpU=tJJrEy zTGU#9Wz1OCf&NJ>YsbJ0>&A1uIM=MVo!c6lqTY7ldhe=5si7IRv`xG+T3?*i zUEf}@AU-tB`Z{RGn6|{tpQ4ou6N6LeZ4=vfRr@+Tnjf4%Z-=ed}V{nG`w($_(usBRnZ@U=q_OiZq49zG@+Dw_=)1pc0?GSdKoua-rF)&5F9m3`| z+0+|XbVo+=(IstS+s;a;xA=5rS;uP8vQ9QI!QGxUG_9;$5FeNlOS632?rKy2?+Evw zUKx4X(LaT`IrO%B<&?3=iyl^ASmyKOAS#CSl)Xs3y^=n6PGFHL!cI2x9U{cTN+Edc zSd#ikDc-n|7;DmG033h(r+8^6(g`FYIL4s&)X)l&A(#PCKm{IF#80DQQlO#% zz}t?Y#ccp{)_C%;CBbN}9BaWKYp(fF{RBB#N51zCty#<-@$X2lsW5SC{=Lh zGvdXaFq`iNk45mI(4GND?y46!DfL(bI}j4Krm->$n%<>V)`gOkAGgpO1-aW8xVTWeqcBXa?3U##x8b zkSig>fFl(g{sWUZ<3P%$P_Cg^!~Kf5G%9XV#i$UBix?MCE^1snN#g4Y|7Kk5Hc-)^ z8#r|XncU{a9IXyaN^Oy}WTz8=z`z7Rc52he)|m`w*x}sJq3;@Ay-fymKIydx3zTAE zJOlXy-n&9LEgAy|{bNoJVPFCTOqFonCVImmbjCrnq8lrF(38cou130QA&yy1ElCUn zBp(R)(vVLopROhwUOgar&OpEq2Lk%>d$Qb92m=#RyT%{{`h7XnXti*(VQHp+0)o)* zYDv|)n4W=rDnI@Ztt0(OV&A-+BviVv#DOl3 z42MpbBup}J0nI>70})O+fR5O&Az^TLlf9P@9u4^SuY0$s$rfo?%H7*TjkXA{Ddocu z8v67aMY!ANq@8lI@?|oYIAo`gciT^>+qfI*JO@8Wdl!QoLJvLmdAk?nADYIjB3P}vJQnuSMtU=_s~a|o8A&4#FfeYd$O9~T z=kCCSO-aDe1PC^_AtyQjFgRh4NLE?E;WKX61v!OHS~z>tng9kXSWYG_H|tw&Q=#))Ep{t272fF1E!tr!}&wPcUdWM2o@#Iin(O(a`_KBGTVA4DQy>w3k&m;l7!M8k^)C7&6Pd}(OB(H91smcr*V6AhV%yk6%@+dtOu zI-kYCJQf*{eMat^Uf*V3%?x;PjJX~n_hm`L4bLP`6ik<&x2IDrLk{0MJ6!TD#nnNp-M~ue&5v0@|oyNTRaw#|U zjSSw1puvFxd@LH#pb>C#9z;NsBG77= z+jv02F-ZeHO_E=7zrAFOk4y5%^gj7REj1R_E}v|n{u5f)gjcGdErj3h;W9M$lg4am zP%{%=%?n9#3e*zhOiivum_^3IdX{M7jX@7V^Y+TzLM@1ZY_jHsw}*~-DaD+v1NujW zfao6=4N1mBdZk~IG0&{G0Q$!QTAB#+cCY96j|KX|SfDqJhxJMkrW4r*CIX%|(WD;* zWeD1I!is#~++;x8)gGU& -#include "archutils/Win32/AppInstance.h" // used by SetWindowsHookEx -Aldo +#include #endif void ShutdownGame(); @@ -935,32 +934,6 @@ static void ApplyLogPreferences() static LocalizedString COULDNT_OPEN_LOADING_WINDOW( "StepMania", "Couldn't open any loading windows." ); -#if defined(WIN32) -// Low Level hooks go here, I only added Windows Key, but letting the player choose which system shortcuts -// wants to get disabled via PREFSMAN would be nice -Aldo -LRESULT CALLBACK SpecialKeysHook(int code,WPARAM wparam,LPARAM lparam) -{ - if( HOOKS->AppHasFocus() ) // only disable system shortcuts when the game has focus - { - PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam; - - switch(wparam) - { - case WM_KEYDOWN: - case WM_KEYUP: - case WM_SYSKEYDOWN: - case WM_SYSKEYUP: - if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN) - { - return 1; - } - } - } - - return CallNextHookEx(0,code,wparam,lparam); -} -#endif - int main(int argc, char* argv[]) { RageThreadRegister thread( "Main thread" ); @@ -1074,13 +1047,14 @@ int main(int argc, char* argv[]) GAMESTATE->m_bDopefish = true; { - /* Now that THEME is loaded, load the icon for the current theme into - * the loading window. */ + /* Now that THEME is loaded, load the icon and splash for the current + * theme into the loading window. */ RString sError; RageSurface *pIcon = RageSurfaceUtils::LoadFile( THEME->GetPathG( "Common", "window icon" ), sError ); if( pIcon ) pLoadingWindow->SetIcon( pIcon ); delete pIcon; + pLoadingWindow->SetSplash( THEME->GetPathG("Common","splash") ); } if( PREFSMAN->m_iSoundWriteAhead ) @@ -1151,23 +1125,6 @@ int main(int argc, char* argv[]) StoreActualGraphicOptions(); LOG->Info( "%s", GetActualGraphicOptionsString().c_str() ); -#if defined(WIN32) - // Apply Low Level hooks just after creating the display, so we have a valid - // HINSTANCE, rather than a NULL one -Aldo - AppInstance inst; - HHOOK hook; - hook = SetWindowsHookEx( - WH_KEYBOARD_LL, - SpecialKeysHook, - inst.Get(), - 0 - ); - if(!hook) - { - LOG->Warn("SetWindowsHookEx: Could not create hook (Error %d).", GetLastError()); - } -#endif - SONGMAN->PreloadSongImages(); /* Input handlers can have dependences on the video system so diff --git a/src/arch/LoadingWindow/LoadingWindow.h b/src/arch/LoadingWindow/LoadingWindow.h index 4cc23cd097..ec92728e1f 100644 --- a/src/arch/LoadingWindow/LoadingWindow.h +++ b/src/arch/LoadingWindow/LoadingWindow.h @@ -13,6 +13,7 @@ public: virtual void SetText( RString str ) = 0; virtual void SetIcon( const RageSurface *pIcon ) { } + virtual void SetSplash( const RString sPath ) { } virtual void SetProgress( const int progress ) { m_progress=progress; } virtual void SetTotalWork( const int totalWork ) { m_totalWork=totalWork; } virtual void SetIndeterminate( bool indeterminate ) { m_indeterminate=indeterminate; } diff --git a/src/arch/LoadingWindow/LoadingWindow_Gtk.h b/src/arch/LoadingWindow/LoadingWindow_Gtk.h index 6abeb87b4d..3ccca35841 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Gtk.h +++ b/src/arch/LoadingWindow/LoadingWindow_Gtk.h @@ -12,6 +12,7 @@ public: RString Init(); ~LoadingWindow_Gtk(); void SetText( RString str ); + void SetSplash( const RString str ) {} void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); diff --git a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h index 3a521a3170..37694a9a93 100644 --- a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h +++ b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h @@ -9,6 +9,7 @@ public: LoadingWindow_MacOSX(); ~LoadingWindow_MacOSX(); void SetText( RString str ); + void SetSplash( const RString path ) {} void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); diff --git a/src/arch/LoadingWindow/LoadingWindow_Null.h b/src/arch/LoadingWindow/LoadingWindow_Null.h index 1ca5d89341..4b470f80b2 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Null.h +++ b/src/arch/LoadingWindow/LoadingWindow_Null.h @@ -7,6 +7,7 @@ class LoadingWindow_Null: public LoadingWindow { public: void SetText( RString str ) { } + void SetSplash( RString str ) { } }; #define USE_LOADING_WINDOW_NULL diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index f152af9b2b..8412965205 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -20,8 +20,7 @@ static HBITMAP g_hBitmap = NULL; #pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") - -/* Load a RageSurface into a GDI surface. */ +// Load a RageSurface into a GDI surface. static HBITMAP LoadWin32Surface( RageSurface *&s ) { RageSurfaceUtils::ConvertSurface( s, s->w, s->h, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0 ); @@ -35,14 +34,14 @@ static HBITMAP LoadWin32Surface( RageSurface *&s ) HDC BitmapDC = CreateCompatibleDC( hScreen ); SelectObject( BitmapDC, bitmap ); - /* This is silly, but simple. We only do this once, on a small image. */ + // This is silly, but simple. We only do this once, on a small image. for( int y = 0; y < s->h; ++y ) { unsigned const char *line = ((unsigned char *) s->pixels) + (y * s->pitch); for( int x = 0; x < s->w; ++x ) { unsigned const char *data = line + (x*s->format->BytesPerPixel); - + SetPixelV( BitmapDC, x, y, RGB( data[3], data[2], data[1] ) ); } } @@ -62,7 +61,7 @@ static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) if( pSurface == NULL ) return NULL; - /* Resize the splash image to fit the dialog. Stretch to fit horizontally, + /* Resize the splash image to fit the dialog. Stretch to fit horizontally, * maintaining aspect ratio. */ { RECT r; @@ -82,7 +81,6 @@ static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { - LoadingWindow_Win32 *self; if(msg==WM_INITDIALOG) { @@ -136,7 +134,7 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) { - if( m_hIcon != NULL ) + if( g_hBitmap != NULL ) DestroyIcon( m_hIcon ); m_hIcon = IconFromSurface( pIcon ); @@ -144,6 +142,26 @@ void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); } +void LoadingWindow_Win32::SetSplash( const RString sPath ) +{ + if( g_hBitmap != NULL ) + { + DeleteObject( g_hBitmap ); + g_hBitmap = NULL; + } + + g_hBitmap = LoadWin32Surface( sPath, hwnd ); + if( g_hBitmap != NULL ) + { + SendDlgItemMessage( + hwnd, IDC_SPLASH, + STM_SETIMAGE, + (WPARAM) IMAGE_BITMAP, + (LPARAM) (HANDLE) g_hBitmap + ); + } +} + LoadingWindow_Win32::LoadingWindow_Win32() { INITCOMMONCONTROLSEX cceData; @@ -152,7 +170,7 @@ LoadingWindow_Win32::LoadingWindow_Win32() InitCommonControlsEx(&cceData); m_hIcon = NULL; - + runMessageLoop=true; guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.h b/src/arch/LoadingWindow/LoadingWindow_Win32.h index 3c45789779..3780c85178 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.h +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.h @@ -15,6 +15,7 @@ public: void SetText( RString sText ); void SetIcon( const RageSurface *pIcon ); + void SetSplash( const RString sPath ); void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); From d421211da4dac8726258d7e509d0a4beb0537d87 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:42:56 -0500 Subject: [PATCH 78/94] remove hardcoded bpmdisplay from net select music --- src/ScreenNetSelectMusic.cpp | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/ScreenNetSelectMusic.cpp b/src/ScreenNetSelectMusic.cpp index 3397ae997b..fe76ec4108 100644 --- a/src/ScreenNetSelectMusic.cpp +++ b/src/ScreenNetSelectMusic.cpp @@ -54,7 +54,7 @@ void ScreenNetSelectMusic::Init() m_StepsDisplays[p].SetName( ssprintf("StepsDisplayP%d",p+1) ); m_StepsDisplays[p].Load( "StepsDisplayNet", NULL ); - LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_StepsDisplays[p] ); + LOAD_ALL_COMMANDS_AND_SET_XY( m_StepsDisplays[p] ); this->AddChild( &m_StepsDisplays[p] ); } @@ -66,20 +66,13 @@ void ScreenNetSelectMusic::Init() this->AddChild( &m_MusicWheel ); this->MoveToHead( &m_MusicWheel ); - // todo: handle me theme-side -aj - m_BPMDisplay.SetName( "BPMDisplay" ); - m_BPMDisplay.LoadFromFont( THEME->GetPathF("BPMDisplay","bpm") ); - m_BPMDisplay.Load(); - LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_BPMDisplay ); - this->AddChild( &m_BPMDisplay ); - // todo: handle me theme-side -aj FOREACH_EnabledPlayer( p ) { m_ModIconRow[p].SetName( ssprintf("ModIconsP%d",p+1) ); m_ModIconRow[p].Load( "ModIconRowSelectMusic", p ); m_ModIconRow[p].SetFromGameState(); - LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_ModIconRow[p] ); + LOAD_ALL_COMMANDS_AND_SET_XY( m_ModIconRow[p] ); this->AddChild( &m_ModIconRow[p] ); } @@ -435,8 +428,6 @@ void ScreenNetSelectMusic::TweenOffScreen() OFF_COMMAND( m_MusicWheel ); - OFF_COMMAND( m_BPMDisplay ); - FOREACH_EnabledPlayer (pn) { OFF_COMMAND( m_StepsDisplays[pn] ); @@ -495,7 +486,6 @@ void ScreenNetSelectMusic::MusicChanged() { if( GAMESTATE->m_pCurSong == NULL ) { - m_BPMDisplay.NoBPM(); FOREACH_EnabledPlayer (pn) UpdateDifficulties( pn ); @@ -504,7 +494,6 @@ void ScreenNetSelectMusic::MusicChanged() // SOUND->PlayMusic( m_sSectionMusicPath, NULL, true, 0, -1 ); return; } - m_BPMDisplay.SetBpmFromSong( GAMESTATE->m_pCurSong ); FOREACH_EnabledPlayer (pn) { From 9f3a35cd6cab64f7c2c41b863b0736df23070c85 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:44:38 -0500 Subject: [PATCH 79/94] i hate this sometimes --- src/NotesLoaderKSF.cpp | 1600 ++++++++++++++++++++-------------------- 1 file changed, 800 insertions(+), 800 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index d950ea6220..c03538d661 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -1,800 +1,800 @@ -#include "global.h" -#include "NotesLoaderKSF.h" -#include "RageUtil_CharConversions.h" -#include "MsdFile.h" -#include "RageLog.h" -#include "RageUtil.h" -#include "NoteData.h" -#include "NoteTypes.h" -#include "Song.h" -#include "Steps.h" - -static void HandleBunki( TimingData &timing, const float fEarlyBPM, - const float fCurBPM, const float fGap, - const float fPos ) -{ - const float BeatsPerSecond = fEarlyBPM / 60.0f; - const float beat = (fPos + fGap) * BeatsPerSecond; - LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", - fEarlyBPM, BeatsPerSecond, fPos, beat ); - timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); -} - -static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) -{ - LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); - - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // this is the value we read for TICKCOUNT - int iTickCount = -1; - // used to adapt weird tickcounts - //float fScrollRatio = 1.0f; -- uncomment when ready to use. - vector vNoteRows; - - // According to Aldo_MX, there is a default BPM and it's 60. -aj - bool bDoublesChart = false; - - TimingData stepsTiming; - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - - for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); - return false; - } - stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); - } - - else if( sValueName=="DIFFICULTY" ) - { - out.SetMeter( max(StringToInt(sParams[1]), 0) ); - } - // new cases from Aldo_MX's fork: - else if( sValueName=="PLAYER" ) - { - RString sPlayer = sParams[1]; - sPlayer.MakeLower(); - if( sPlayer.find( "double" ) != string::npos ) - bDoublesChart = true; - } - // This should always be last. - else if( sValueName=="STEP" ) - { - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - } - - if( iTickCount == -1 ) - { - iTickCount = 4; - LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); - } - - // Prepare BPM stuff already if the file uses KSF syntax. - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - - NoteData notedata; // read it into here - - { - RString sDir, sFName, sExt; - splitpath( sPath, sDir, sFName, sExt ); - sFName.MakeLower(); - - out.SetDescription(sFName); - // Check another before anything else... is this okay? -DaisuMaster - if( sFName.find("another") != string::npos ) - { - out.SetDifficulty( Difficulty_Edit ); - if( !out.GetMeter() ) out.SetMeter( 25 ); - } - else if(sFName.find("wild") != string::npos || - sFName.find("wd") != string::npos || - sFName.find("crazy+") != string::npos || - sFName.find("cz+") != string::npos || - sFName.find("hardcore") != string::npos ) - { - out.SetDifficulty( Difficulty_Challenge ); - if( !out.GetMeter() ) out.SetMeter( 20 ); - } - else if(sFName.find("crazy") != string::npos || - sFName.find("cz") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("crazydouble") != string::npos ) - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. - } - else if(sFName.find("hard") != string::npos || - sFName.find("hd") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("fs") != string::npos || - sFName.find("double") != string::npos ) - { - out.SetDifficulty( Difficulty_Medium ); - if( !out.GetMeter() ) out.SetMeter( 8 ); - } - else if(sFName.find("easy") != string::npos || - sFName.find("ez") != string::npos || - sFName.find("normal") != string::npos ) - { - // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster - out.SetDifficulty( Difficulty_Easy ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else if(sFName.find("beginner") != string::npos || - sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) - { - out.SetDifficulty( Difficulty_Beginner ); - if( !out.GetMeter() ) out.SetMeter( 4 ); - } - else - { - out.SetDifficulty( Difficulty_Hard ); - if( !out.GetMeter() ) out.SetMeter( 10 ); - } - - out.m_StepsType = StepsType_pump_single; - - // Check for "halfdouble" before "double". - if(sFName.find("halfdouble") != string::npos || - sFName.find("half-double") != string::npos || - sFName.find("h_double") != string::npos || - sFName.find("hdb") != string::npos ) - out.m_StepsType = StepsType_pump_halfdouble; - // Handle bDoublesChart from above as well. -aj - else if(sFName.find("double") != string::npos || - sFName.find("nightmare") != string::npos || - sFName.find("freestyle") != string::npos || - sFName.find("db") != string::npos || - sFName.find("nm") != string::npos || - sFName.find("fs") != string::npos || bDoublesChart ) - out.m_StepsType = StepsType_pump_double; - else if( sFName.find("_1") != string::npos ) - out.m_StepsType = StepsType_pump_single; - else if( sFName.find("_2") != string::npos ) - out.m_StepsType = StepsType_pump_couple; - } - - switch( out.m_StepsType ) - { - case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; - case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; - case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? - case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; - default: FAIL_M( ssprintf("%i", out.m_StepsType) ); - } - - int t = 0; - int iHoldStartRow[13]; - for( t=0; t<13; t++ ) - iHoldStartRow[t] = -1; - - bool bTickChangeNeeded = false; - int newTick = -1; - float fCurBeat = 0.0f; - float prevBeat = 0.0f; // Used for hold tails. - - for( unsigned r=0; r(numTemp); - // I have been owned by the man -DaisuMaster - stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); - } - else if (BeginsWith(sRowString, "|B")) - { - // BPM - stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); - } - else if (BeginsWith(sRowString, "|E")) - { - // DelayBeat - float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; - fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|D")) - { - // Delays - float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); - fCurDelay += numTemp / 1000; - stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); - } - else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) - { - // multipliers/combo - stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); - } - else if (BeginsWith(sRowString, "|S")) - { - // speed segments - } - else if (BeginsWith(sRowString, "|F")) - { - // fakes - } - else if (BeginsWith(sRowString, "|X")) - { - // scroll segments - stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); - //return true; - } - - continue; - } - - // Half-doubles is offset; "0011111100000". - if( out.m_StepsType == StepsType_pump_halfdouble ) - sRowString.erase( 0, 2 ); - - // Update TICKCOUNT for Direct Move files. - if( bTickChangeNeeded ) - { - iTickCount = newTick; - bTickChangeNeeded = false; - } - - for( t=0; t < notedata.GetNumTracks(); t++ ) - { - if( sRowString[t] == '4' ) - { - /* Remember when each hold starts; ignore the middle. */ - if( iHoldStartRow[t] == -1 ) - iHoldStartRow[t] = BeatToNoteRow(fCurBeat); - continue; - } - - if( iHoldStartRow[t] != -1 ) // this ends the hold - { - int iEndRow = BeatToNoteRow(prevBeat); - if( iHoldStartRow[t] == iEndRow ) - notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); - else - { - //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); - notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); - } - iHoldStartRow[t] = -1; - } - - TapNote tap; - switch( sRowString[t] ) - { - case '0': tap = TAP_EMPTY; break; - case '1': tap = TAP_ORIGINAL_TAP; break; - //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster - case 'M': - case 'm': - tap = TAP_ORIGINAL_MINE; - break; - case 'F': - case 'f': - tap = TAP_ORIGINAL_FAKE; - break; - case 'L': - case 'l': - tap = TAP_ORIGINAL_LIFT; - break; - default: - LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", - sRowString.c_str() ); - //return false; - tap = TAP_EMPTY; - break; - } - - notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); - } - prevBeat = fCurBeat; - fCurBeat = prevBeat + 1.0f / iTickCount; - } - - out.SetNoteData( notedata ); - out.m_Timing = stepsTiming; - - out.TidyUpData(); - - out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved - - return true; -} - -static void LoadTags( const RString &str, Song &out ) -{ - /* str is either a #TITLE or a directory component. Fill in missing information. - * str is either "title", "artist - title", or "artist - title - difficulty". */ - vector asBits; - split( str, " - ", asBits, false ); - // Ignore the difficulty, since we get that elsewhere. - if( asBits.size() == 3 && ( - asBits[2].EqualsNoCase("double") || - asBits[2].EqualsNoCase("easy") || - asBits[2].EqualsNoCase("normal") || - asBits[2].EqualsNoCase("hard") || - asBits[2].EqualsNoCase("crazy") || - asBits[2].EqualsNoCase("nightmare")) - ) - { - asBits.erase( asBits.begin()+2, asBits.begin()+3 ); - } - - RString title, artist; - if( asBits.size() == 2 ) - { - artist = asBits[0]; - title = asBits[1]; - } - else if( asBits.size() == 1 ) - { - title = asBits[0]; - } - - // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). - if( !ConvertString( title, "korean" ) ) - title = ""; - if( !ConvertString( artist, "korean" ) ) - artist = ""; - - if( out.m_sMainTitle == "" ) - out.m_sMainTitle = title; - if( out.m_sArtist == "" ) - out.m_sArtist = artist; -} - -static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) -{ - /* TICKCOUNT will be used below if there are DM compliant BPM changes - * and stops. It will be called again in LoadFromKSFFile for the - * actual steps. */ - ticks = StringToInt( value ); - ticks = ticks > 0 ? ticks : 4; - // add a tickcount for those using the [Player] - // CheckpointsUseTimeSignatures metric. -aj - // It's not with timesigs now -DaisuMaster - TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); - timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); -} - -static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) -{ - MsdFile msd; - if( !msd.ReadFile( sPath, false ) ) // don't unescape - { - LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); - return false; - } - - // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster - // search for music with song in the file name - vector arrayPossibleMusic; - GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); - GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); - - if( !arrayPossibleMusic.empty() ) // we found a match - out.m_sMusicFile = arrayPossibleMusic[0]; - // ^this was below, at the end - - float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; - int iTickCount = -1; - bKIUCompliant = false; - vector vNoteRows; - - for( unsigned i=0; i < msd.GetNumValues(); i++ ) - { - const MsdFile::value_t &sParams = msd.GetValue(i); - RString sValueName = sParams[0]; - sValueName.MakeUpper(); - - // handle the data - if( sValueName=="TITLE" ) - LoadTags(sParams[1], out); - else if( sValueName=="BPM" ) - { - BPM1 = StringToFloat(sParams[1]); - out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); - } - else if( sValueName=="BPM2" ) - { - bKIUCompliant = true; - BPM2 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BPM3" ) - { - bKIUCompliant = true; - BPM3 = StringToFloat( sParams[1] ); - } - else if( sValueName=="BUNKI" ) - { - bKIUCompliant = true; - BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="BUNKI2" ) - { - bKIUCompliant = true; - BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; - } - else if( sValueName=="STARTTIME" ) - { - SMGap1 = -StringToFloat( sParams[1] )/100; - out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; - } - // This is currently required for more accurate KIU BPM changes. - else if( sValueName=="STARTTIME2" ) - { - bKIUCompliant = true; - SMGap2 = -StringToFloat( sParams[1] )/100; - } - else if ( sValueName=="STARTTIME3" ) - { - // STARTTIME3 only ensures this is a KIU compliant simfile. - //bKIUCompliant = true; - } - else if ( sValueName=="TICKCOUNT" ) - { - //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); - } - else if ( sValueName=="STEP" ) - { - /* STEP will always be the last header in a KSF file by design. Due to - * the Direct Move syntax, it is best to get the rows of notes here. */ - RString theSteps = sParams[1]; - TrimLeft( theSteps ); - split( theSteps, "\n", vNoteRows, true ); - } - else if( sValueName=="DIFFICULTY" || sValueName=="PLAYER" ) - { - /* DIFFICULTY and PLAYER are handled only in LoadFromKSFFile. - Ignore those here. */ - continue; - } - // New cases noted in Aldo_MX's code: - else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) - { - out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); - } - else if( sValueName=="TITLEFILE" ) - { - out.m_sBackgroundFile = sParams[1]; - } - else if( sValueName=="DISCFILE" ) - { - out.m_sBannerFile = sParams[1]; - } - else if( sValueName=="SONGFILE" ) - { - out.m_sMusicFile = sParams[1]; - } - //else if( sValueName=="INTROFILE" ) - //{ - // nothing to add... - //} - // end new cases - else - { - LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", - sValueName.c_str() ); - } - } - - //intro length in piu mixes is generally 7 seconds - out.m_fMusicSampleLengthSeconds = 7.0f; - - /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. - * Otherwise, the whole file has to be processed. Right now, this is only - * called once, for the initial file (often the Crazy steps). Hopefully that - * will end up changing soon. */ - if( bKIUCompliant ) - { - if( BPM2 > 0 && BPMPos2 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); - } - - if( BPM3 > 0 && BPMPos3 > 0 ) - { - HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); - } - } - else - { - float fCurBeat = 0.0f; - bool bDMRequired = false; - - for( unsigned i=0; i < vNoteRows.size(); ++i ) - { - RString& NoteRowString = vNoteRows[i]; - StripCrnl( NoteRowString ); - - if( NoteRowString == "" ) - continue; // ignore empty rows. - - if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. - { - if (!bDMRequired) - bKIUCompliant = true; - break; - } - - // This is where the DMRequired test will take place. - if ( BeginsWith( NoteRowString, "|" ) ) - { - // have a static timing for everything - bDMRequired = true; - continue; - } - else - { - // ignore whatever else... - //continue; - } - - fCurBeat += 1.0f / iTickCount; - } - } - - // Try to fill in missing bits of information from the pathname. - { - vector asBits; - split( sPath, "/", asBits, true); - - ASSERT( asBits.size() > 1 ); - LoadTags( asBits[asBits.size()-2], out ); - } - - return true; -} - -void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) -{ - GetDirListing( sPath + RString("*.ksf"), out ); -} - -bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) -{ - bool KIUCompliant = false; - Song dummy; - if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) - return false; - Steps *notes = dummy.CreateSteps(); - if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) - { - KIUCompliant = true; // yeah, reusing a variable. - out.SetNoteData(notes->GetNoteData()); - } - delete notes; - return KIUCompliant; -} - -bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) -{ - LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); - - vector arrayKSFFileNames; - GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); - - // We shouldn't have been called to begin with if there were no KSFs. - ASSERT( arrayKSFFileNames.size() ); - - bool bKIUCompliant = false; - /* With Split Timing, there has to be a backup Song Timing in case - * anything goes wrong. As these files are kept in alphabetical - * order (hopefully), it is best to use the LAST file for timing - * purposes, for that is the "normal", or easiest difficulty. - * Usually. */ - // Nevermind, kiu compilancy is screwing things up: - // IE, I have two simfiles, oh wich each have four ksf files, the first one has - // the first ksf with directmove timing changes, and the rest are not, everything - // goes fine. In the other hand I have my second simfile with the first ksf file - // without directmove timing changes and the rest have changes, changes are not - // loaded due to kiucompilancy in the first ksf file. - // About the "normal" thing, my simfiles' ksfs uses non-standard naming so - // the last chart is usually nightmare or normal, I use easy and normal - // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming - // for directmove though, and we're just gathering basic info anyway, and - // most of the time all the KSF files have the same info in the #TITLE:; section - unsigned files = arrayKSFFileNames.size(); - RString dir = out.GetSongDir(); - if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) - return false; - - out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; - // load the Steps from the rest of the KSF files - for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); - out.AddSteps( pNewNotes ); - } - out.TidyUpData(false, true); - - return true; -} - -/* - * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ +#include "global.h" +#include "NotesLoaderKSF.h" +#include "RageUtil_CharConversions.h" +#include "MsdFile.h" +#include "RageLog.h" +#include "RageUtil.h" +#include "NoteData.h" +#include "NoteTypes.h" +#include "Song.h" +#include "Steps.h" + +static void HandleBunki( TimingData &timing, const float fEarlyBPM, + const float fCurBPM, const float fGap, + const float fPos ) +{ + const float BeatsPerSecond = fEarlyBPM / 60.0f; + const float beat = (fPos + fGap) * BeatsPerSecond; + LOG->Trace( "BPM %f, BPS %f, BPMPos %f, beat %f", + fEarlyBPM, BeatsPerSecond, fPos, beat ); + timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); +} + +static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) +{ + LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); + + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // this is the value we read for TICKCOUNT + int iTickCount = -1; + // used to adapt weird tickcounts + //float fScrollRatio = 1.0f; -- uncomment when ready to use. + vector vNoteRows; + + // According to Aldo_MX, there is a default BPM and it's 60. -aj + bool bDoublesChart = false; + + TimingData stepsTiming; + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + + for( unsigned i=0; iUserLog( "Song file", sPath, "has an invalid tick count: %d.", iTickCount ); + return false; + } + stepsTiming.AddSegment( SEGMENT_TICKCOUNT, new TickcountSegment(0, iTickCount)); + } + + else if( sValueName=="DIFFICULTY" ) + { + out.SetMeter( max(StringToInt(sParams[1]), 0) ); + } + // new cases from Aldo_MX's fork: + else if( sValueName=="PLAYER" ) + { + RString sPlayer = sParams[1]; + sPlayer.MakeLower(); + if( sPlayer.find( "double" ) != string::npos ) + bDoublesChart = true; + } + // This should always be last. + else if( sValueName=="STEP" ) + { + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + } + + if( iTickCount == -1 ) + { + iTickCount = 4; + LOG->UserLog( "Song file", sPath, "doesn't have a TICKCOUNT. Defaulting to %i.", iTickCount ); + } + + // Prepare BPM stuff already if the file uses KSF syntax. + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( stepsTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( stepsTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + + NoteData notedata; // read it into here + + { + RString sDir, sFName, sExt; + splitpath( sPath, sDir, sFName, sExt ); + sFName.MakeLower(); + + out.SetDescription(sFName); + // Check another before anything else... is this okay? -DaisuMaster + if( sFName.find("another") != string::npos ) + { + out.SetDifficulty( Difficulty_Edit ); + if( !out.GetMeter() ) out.SetMeter( 25 ); + } + else if(sFName.find("wild") != string::npos || + sFName.find("wd") != string::npos || + sFName.find("crazy+") != string::npos || + sFName.find("cz+") != string::npos || + sFName.find("hardcore") != string::npos ) + { + out.SetDifficulty( Difficulty_Challenge ); + if( !out.GetMeter() ) out.SetMeter( 20 ); + } + else if(sFName.find("crazy") != string::npos || + sFName.find("cz") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("crazydouble") != string::npos ) + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 14 ); // Set the meters to the Pump scale, not DDR. + } + else if(sFName.find("hard") != string::npos || + sFName.find("hd") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("fs") != string::npos || + sFName.find("double") != string::npos ) + { + out.SetDifficulty( Difficulty_Medium ); + if( !out.GetMeter() ) out.SetMeter( 8 ); + } + else if(sFName.find("easy") != string::npos || + sFName.find("ez") != string::npos || + sFName.find("normal") != string::npos ) + { + // I wonder if I should leave easy fall into the Beginner difficulty... -DaisuMaster + out.SetDifficulty( Difficulty_Easy ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else if(sFName.find("beginner") != string::npos || + sFName.find("practice") != string::npos || sFName.find("pr") != string::npos ) + { + out.SetDifficulty( Difficulty_Beginner ); + if( !out.GetMeter() ) out.SetMeter( 4 ); + } + else + { + out.SetDifficulty( Difficulty_Hard ); + if( !out.GetMeter() ) out.SetMeter( 10 ); + } + + out.m_StepsType = StepsType_pump_single; + + // Check for "halfdouble" before "double". + if(sFName.find("halfdouble") != string::npos || + sFName.find("half-double") != string::npos || + sFName.find("h_double") != string::npos || + sFName.find("hdb") != string::npos ) + out.m_StepsType = StepsType_pump_halfdouble; + // Handle bDoublesChart from above as well. -aj + else if(sFName.find("double") != string::npos || + sFName.find("nightmare") != string::npos || + sFName.find("freestyle") != string::npos || + sFName.find("db") != string::npos || + sFName.find("nm") != string::npos || + sFName.find("fs") != string::npos || bDoublesChart ) + out.m_StepsType = StepsType_pump_double; + else if( sFName.find("_1") != string::npos ) + out.m_StepsType = StepsType_pump_single; + else if( sFName.find("_2") != string::npos ) + out.m_StepsType = StepsType_pump_couple; + } + + switch( out.m_StepsType ) + { + case StepsType_pump_single: notedata.SetNumTracks( 5 ); break; + case StepsType_pump_couple: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_double: notedata.SetNumTracks( 10 ); break; + case StepsType_pump_routine: notedata.SetNumTracks( 10 ); break; // future files may have this? + case StepsType_pump_halfdouble: notedata.SetNumTracks( 6 ); break; + default: FAIL_M( ssprintf("%i", out.m_StepsType) ); + } + + int t = 0; + int iHoldStartRow[13]; + for( t=0; t<13; t++ ) + iHoldStartRow[t] = -1; + + bool bTickChangeNeeded = false; + int newTick = -1; + float fCurBeat = 0.0f; + float prevBeat = 0.0f; // Used for hold tails. + + for( unsigned r=0; r(numTemp); + // I have been owned by the man -DaisuMaster + stepsTiming.SetTickcountAtBeat( fCurBeat, clamp(iTickCount, 0, ROWS_PER_BEAT) ); + } + else if (BeginsWith(sRowString, "|B")) + { + // BPM + stepsTiming.SetBPMAtBeat( fCurBeat, numTemp ); + } + else if (BeginsWith(sRowString, "|E")) + { + // DelayBeat + float fCurDelay = 60 / stepsTiming.GetBPMAtBeat(fCurBeat) * numTemp / iTickCount; + fCurDelay += stepsTiming.GetDelayAtRow(BeatToNoteRow(fCurBeat) ); + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|D")) + { + // Delays + float fCurDelay = stepsTiming.GetStopAtRow(BeatToNoteRow(fCurBeat) ); + fCurDelay += numTemp / 1000; + stepsTiming.SetStopAtBeat( fCurBeat, fCurDelay, true ); + } + else if (BeginsWith(sRowString, "|M") || BeginsWith(sRowString, "|C")) + { + // multipliers/combo + stepsTiming.SetHitComboAtBeat( fCurBeat, static_cast(numTemp) ); + } + else if (BeginsWith(sRowString, "|S")) + { + // speed segments + } + else if (BeginsWith(sRowString, "|F")) + { + // fakes + } + else if (BeginsWith(sRowString, "|X")) + { + // scroll segments + stepsTiming.SetScrollAtBeat( fCurBeat, numTemp ); + //return true; + } + + continue; + } + + // Half-doubles is offset; "0011111100000". + if( out.m_StepsType == StepsType_pump_halfdouble ) + sRowString.erase( 0, 2 ); + + // Update TICKCOUNT for Direct Move files. + if( bTickChangeNeeded ) + { + iTickCount = newTick; + bTickChangeNeeded = false; + } + + for( t=0; t < notedata.GetNumTracks(); t++ ) + { + if( sRowString[t] == '4' ) + { + /* Remember when each hold starts; ignore the middle. */ + if( iHoldStartRow[t] == -1 ) + iHoldStartRow[t] = BeatToNoteRow(fCurBeat); + continue; + } + + if( iHoldStartRow[t] != -1 ) // this ends the hold + { + int iEndRow = BeatToNoteRow(prevBeat); + if( iHoldStartRow[t] == iEndRow ) + notedata.SetTapNote( t, iHoldStartRow[t], TAP_ORIGINAL_TAP ); + else + { + //notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_PUMP_HEAD ); + notedata.AddHoldNote( t, iHoldStartRow[t], iEndRow , TAP_ORIGINAL_HOLD_HEAD ); + } + iHoldStartRow[t] = -1; + } + + TapNote tap; + switch( sRowString[t] ) + { + case '0': tap = TAP_EMPTY; break; + case '1': tap = TAP_ORIGINAL_TAP; break; + //allow setting more notetypes on ksf files, this may come in handy (it should) -DaisuMaster + case 'M': + case 'm': + tap = TAP_ORIGINAL_MINE; + break; + case 'F': + case 'f': + tap = TAP_ORIGINAL_FAKE; + break; + case 'L': + case 'l': + tap = TAP_ORIGINAL_LIFT; + break; + default: + LOG->UserLog( "Song file", sPath, "has an invalid row \"%s\"; corrupt notes ignored.", + sRowString.c_str() ); + //return false; + tap = TAP_EMPTY; + break; + } + + notedata.SetTapNote(t, BeatToNoteRow(fCurBeat), tap); + } + prevBeat = fCurBeat; + fCurBeat = prevBeat + 1.0f / iTickCount; + } + + out.SetNoteData( notedata ); + out.m_Timing = stepsTiming; + + out.TidyUpData(); + + out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved + + return true; +} + +static void LoadTags( const RString &str, Song &out ) +{ + /* str is either a #TITLE or a directory component. Fill in missing information. + * str is either "title", "artist - title", or "artist - title - difficulty". */ + vector asBits; + split( str, " - ", asBits, false ); + // Ignore the difficulty, since we get that elsewhere. + if( asBits.size() == 3 && ( + asBits[2].EqualsNoCase("double") || + asBits[2].EqualsNoCase("easy") || + asBits[2].EqualsNoCase("normal") || + asBits[2].EqualsNoCase("hard") || + asBits[2].EqualsNoCase("crazy") || + asBits[2].EqualsNoCase("nightmare")) + ) + { + asBits.erase( asBits.begin()+2, asBits.begin()+3 ); + } + + RString title, artist; + if( asBits.size() == 2 ) + { + artist = asBits[0]; + title = asBits[1]; + } + else if( asBits.size() == 1 ) + { + title = asBits[0]; + } + + // Convert, if possible. Most KSFs are in Korean encodings (CP942/EUC-KR). + if( !ConvertString( title, "korean" ) ) + title = ""; + if( !ConvertString( artist, "korean" ) ) + artist = ""; + + if( out.m_sMainTitle == "" ) + out.m_sMainTitle = title; + if( out.m_sArtist == "" ) + out.m_sArtist = artist; +} + +static void ProcessTickcounts( const RString & value, int & ticks, TimingData & timing ) +{ + /* TICKCOUNT will be used below if there are DM compliant BPM changes + * and stops. It will be called again in LoadFromKSFFile for the + * actual steps. */ + ticks = StringToInt( value ); + ticks = ticks > 0 ? ticks : 4; + // add a tickcount for those using the [Player] + // CheckpointsUseTimeSignatures metric. -aj + // It's not with timesigs now -DaisuMaster + TickcountSegment * tcs = new TickcountSegment(0, ticks > ROWS_PER_BEAT ? ROWS_PER_BEAT : ticks); + timing.AddSegment( SEGMENT_TICKCOUNT, tcs ); +} + +static bool LoadGlobalData( const RString &sPath, Song &out, bool &bKIUCompliant ) +{ + MsdFile msd; + if( !msd.ReadFile( sPath, false ) ) // don't unescape + { + LOG->UserLog( "Song file", sPath, "couldn't be opened: %s", msd.GetError().c_str() ); + return false; + } + + // changed up there in case of something is found inside the SONGFILE tag in the head ksf -DaisuMaster + // search for music with song in the file name + vector arrayPossibleMusic; + GetDirListing( out.GetSongDir() + RString("song.mp3"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.oga"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.ogg"), arrayPossibleMusic ); + GetDirListing( out.GetSongDir() + RString("song.wav"), arrayPossibleMusic ); + + if( !arrayPossibleMusic.empty() ) // we found a match + out.m_sMusicFile = arrayPossibleMusic[0]; + // ^this was below, at the end + + float SMGap1 = 0, SMGap2 = 0, BPM1 = -1, BPMPos2 = -1, BPM2 = -1, BPMPos3 = -1, BPM3 = -1; + int iTickCount = -1; + bKIUCompliant = false; + vector vNoteRows; + + for( unsigned i=0; i < msd.GetNumValues(); i++ ) + { + const MsdFile::value_t &sParams = msd.GetValue(i); + RString sValueName = sParams[0]; + sValueName.MakeUpper(); + + // handle the data + if( sValueName=="TITLE" ) + LoadTags(sParams[1], out); + else if( sValueName=="BPM" ) + { + BPM1 = StringToFloat(sParams[1]); + out.m_SongTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0, BPM1) ); + } + else if( sValueName=="BPM2" ) + { + bKIUCompliant = true; + BPM2 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BPM3" ) + { + bKIUCompliant = true; + BPM3 = StringToFloat( sParams[1] ); + } + else if( sValueName=="BUNKI" ) + { + bKIUCompliant = true; + BPMPos2 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="BUNKI2" ) + { + bKIUCompliant = true; + BPMPos3 = StringToFloat( sParams[1] ) / 100.0f; + } + else if( sValueName=="STARTTIME" ) + { + SMGap1 = -StringToFloat( sParams[1] )/100; + out.m_SongTiming.m_fBeat0OffsetInSeconds = SMGap1; + } + // This is currently required for more accurate KIU BPM changes. + else if( sValueName=="STARTTIME2" ) + { + bKIUCompliant = true; + SMGap2 = -StringToFloat( sParams[1] )/100; + } + else if ( sValueName=="STARTTIME3" ) + { + // STARTTIME3 only ensures this is a KIU compliant simfile. + //bKIUCompliant = true; + } + else if ( sValueName=="TICKCOUNT" ) + { + //ProcessTickcounts(sParams[1], iTickCount, out.m_SongTiming); + } + else if ( sValueName=="STEP" ) + { + /* STEP will always be the last header in a KSF file by design. Due to + * the Direct Move syntax, it is best to get the rows of notes here. */ + RString theSteps = sParams[1]; + TrimLeft( theSteps ); + split( theSteps, "\n", vNoteRows, true ); + } + else if( sValueName=="DIFFICULTY" || sValueName=="PLAYER" ) + { + /* DIFFICULTY and PLAYER are handled only in LoadFromKSFFile. + Ignore those here. */ + continue; + } + // New cases noted in Aldo_MX's code: + else if( sValueName=="MUSICINTRO" || sValueName=="INTRO" ) + { + out.m_fMusicSampleStartSeconds = HHMMSSToSeconds( sParams[1] ); + } + else if( sValueName=="TITLEFILE" ) + { + out.m_sBackgroundFile = sParams[1]; + } + else if( sValueName=="DISCFILE" ) + { + out.m_sBannerFile = sParams[1]; + } + else if( sValueName=="SONGFILE" ) + { + out.m_sMusicFile = sParams[1]; + } + //else if( sValueName=="INTROFILE" ) + //{ + // nothing to add... + //} + // end new cases + else + { + LOG->UserLog( "Song file", sPath, "has an unexpected value named \"%s\".", + sValueName.c_str() ); + } + } + + //intro length in piu mixes is generally 7 seconds + out.m_fMusicSampleLengthSeconds = 7.0f; + + /* BPM Change checks are done here. If bKIUCompliant, it's short and sweet. + * Otherwise, the whole file has to be processed. Right now, this is only + * called once, for the initial file (often the Crazy steps). Hopefully that + * will end up changing soon. */ + if( bKIUCompliant ) + { + if( BPM2 > 0 && BPMPos2 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM1, BPM2, SMGap1, BPMPos2 ); + } + + if( BPM3 > 0 && BPMPos3 > 0 ) + { + HandleBunki( out.m_SongTiming, BPM2, BPM3, SMGap2, BPMPos3 ); + } + } + else + { + float fCurBeat = 0.0f; + bool bDMRequired = false; + + for( unsigned i=0; i < vNoteRows.size(); ++i ) + { + RString& NoteRowString = vNoteRows[i]; + StripCrnl( NoteRowString ); + + if( NoteRowString == "" ) + continue; // ignore empty rows. + + if( NoteRowString == "2222222222222" ) // Row of 2s = end. Confirm KIUCompliency here. + { + if (!bDMRequired) + bKIUCompliant = true; + break; + } + + // This is where the DMRequired test will take place. + if ( BeginsWith( NoteRowString, "|" ) ) + { + // have a static timing for everything + bDMRequired = true; + continue; + } + else + { + // ignore whatever else... + //continue; + } + + fCurBeat += 1.0f / iTickCount; + } + } + + // Try to fill in missing bits of information from the pathname. + { + vector asBits; + split( sPath, "/", asBits, true); + + ASSERT( asBits.size() > 1 ); + LoadTags( asBits[asBits.size()-2], out ); + } + + return true; +} + +void KSFLoader::GetApplicableFiles( const RString &sPath, vector &out ) +{ + GetDirListing( sPath + RString("*.ksf"), out ); +} + +bool KSFLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps &out ) +{ + bool KIUCompliant = false; + Song dummy; + if (!LoadGlobalData(cachePath, dummy, KIUCompliant)) + return false; + Steps *notes = dummy.CreateSteps(); + if (LoadFromKSFFile(cachePath, *notes, dummy, KIUCompliant)) + { + KIUCompliant = true; // yeah, reusing a variable. + out.SetNoteData(notes->GetNoteData()); + } + delete notes; + return KIUCompliant; +} + +bool KSFLoader::LoadFromDir( const RString &sDir, Song &out ) +{ + LOG->Trace( "KSFLoader::LoadFromDir(%s)", sDir.c_str() ); + + vector arrayKSFFileNames; + GetDirListing( sDir + RString("*.ksf"), arrayKSFFileNames ); + + // We shouldn't have been called to begin with if there were no KSFs. + ASSERT( arrayKSFFileNames.size() ); + + bool bKIUCompliant = false; + /* With Split Timing, there has to be a backup Song Timing in case + * anything goes wrong. As these files are kept in alphabetical + * order (hopefully), it is best to use the LAST file for timing + * purposes, for that is the "normal", or easiest difficulty. + * Usually. */ + // Nevermind, kiu compilancy is screwing things up: + // IE, I have two simfiles, oh wich each have four ksf files, the first one has + // the first ksf with directmove timing changes, and the rest are not, everything + // goes fine. In the other hand I have my second simfile with the first ksf file + // without directmove timing changes and the rest have changes, changes are not + // loaded due to kiucompilancy in the first ksf file. + // About the "normal" thing, my simfiles' ksfs uses non-standard naming so + // the last chart is usually nightmare or normal, I use easy and normal + // indistinctly for SM so it shouldn't matter, I use piu fiesta/ex naming + // for directmove though, and we're just gathering basic info anyway, and + // most of the time all the KSF files have the same info in the #TITLE:; section + unsigned files = arrayKSFFileNames.size(); + RString dir = out.GetSongDir(); + if( !LoadGlobalData(dir + arrayKSFFileNames[files - 1], out, bKIUCompliant) ) + return false; + + out.m_sSongFileName = dir + arrayKSFFileNames[files - 1]; + // load the Steps from the rest of the KSF files + for( unsigned i=0; iSetFilename(dir + arrayKSFFileNames[i]); + out.AddSteps( pNewNotes ); + } + out.TidyUpData(false, true); + + return true; +} + +/* + * (c) 2001-2006 Chris Danford, Glenn Maynard, Jason Felds + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ From a9be18d57d9311a461cd0c6ea2f98bbb939a6efb Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:45:10 -0500 Subject: [PATCH 80/94] since ScreenOptionsExportPackage doesn't really export packages anyways, no one should mind me committing wip code that splits things up into pages --- src/ScreenOptionsExportPackage.cpp | 172 ++++++++++++++++++++++------- src/ScreenOptionsExportPackage.h | 22 ++++ 2 files changed, 154 insertions(+), 40 deletions(-) diff --git a/src/ScreenOptionsExportPackage.cpp b/src/ScreenOptionsExportPackage.cpp index 1ff29e1f0c..405ba4f786 100644 --- a/src/ScreenOptionsExportPackage.cpp +++ b/src/ScreenOptionsExportPackage.cpp @@ -11,7 +11,9 @@ #include "SpecialFiles.h" #include "SpecialFiles.h" #include "ScreenPrompt.h" +#include "SongManager.h" +// main page (type list) REGISTER_SCREEN_CLASS( ScreenOptionsExportPackage ); void ScreenOptionsExportPackage::Init() @@ -24,51 +26,130 @@ void ScreenOptionsExportPackage::Init() void ScreenOptionsExportPackage::BeginScreen() { - // Fill m_vsPossibleDirsToExport - // todo: Split these out over multiple screens so the scroller - // isn't so overloaded. (See ScreenOptionsToggleSongs) -freem + // Fill m_vsPackageTypes: + m_vsPackageTypes.push_back("Themes"); + m_vsPackageTypes.push_back("NoteSkins"); + m_vsPackageTypes.push_back("Courses"); + m_vsPackageTypes.push_back("Songs"); + // announcers, characters, others? + + vector OptionRowHandlers; + FOREACH_CONST( RString, m_vsPackageTypes, s ) { - // Add themes - { - GetDirListing( SpecialFiles::THEMES_DIR + "*", m_vsPossibleDirsToExport, true, true ); - } + OptionRowHandler *pHand = OptionRowHandlerUtil::MakeNull(); + OptionRowDefinition &def = pHand->m_Def; - // Add NoteSkins - { - vector vs; - GetDirListing( SpecialFiles::NOTESKINS_DIR + "*", vs, true, true ); - FOREACH_CONST( RString, vs, s ) - GetDirListing( *s + "*", m_vsPossibleDirsToExport, true, true ); - } + def.m_sName = *s; + def.m_bAllowExplanation = false; + //def.m_sExplanationName = "# files, # MB, # subdirs"; + def.m_bAllowThemeTitle = false; + def.m_bAllowThemeItems = false; + def.m_layoutType = LAYOUT_SHOW_ALL_IN_ROW; + def.m_bOneChoiceForAllPlayers = true; + def.m_vsChoices.clear(); + def.m_vsChoices.push_back( "" ); + OptionRowHandlers.push_back( pHand ); + } + ScreenOptions::InitMenu( OptionRowHandlers ); + ScreenOptions::BeginScreen(); +} + +void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) +{ + if( IsTransitioning() ) + return; + + // switch to the subpage with the specified type + //int iCurRow = m_iCurrentRow[GAMESTATE->GetMasterPlayerNumber()]; + int iRow = GetCurrentRow(); + if( m_pRows[iRow]->GetRowType() == OptionRow::RowType_Exit ) + { + ScreenOptions::ProcessMenuStart( input ); + return; + } + + ExportPackages::m_sPackageType = m_vsPackageTypes[iRow]; + SCREENMAN->SetNewScreen("ScreenOptionsExportPackageSubPage"); +} + +void ScreenOptionsExportPackage::ImportOptions( int iRow, const vector &vpns ) +{ + +} + +void ScreenOptionsExportPackage::ExportOptions( int iRow, const vector &vpns ) +{ + +} + + +// subpage (has all folders for the specified type) +REGISTER_SCREEN_CLASS( ScreenOptionsExportPackageSubPage ); +void ScreenOptionsExportPackageSubPage::Init() +{ + ScreenOptions::Init(); + + SetNavigation( NAV_THREE_KEY_MENU ); + SetInputMode( INPUTMODE_SHARE_CURSOR ); +} + +void ScreenOptionsExportPackageSubPage::BeginScreen() +{ + // Check type and fill m_vsPossibleDirsToExport + const RString *s_packageType = &ExportPackages::m_sPackageType; + if( *s_packageType == "Themes" ) + { + // add themes + GetDirListing( SpecialFiles::THEMES_DIR + "*", m_vsPossibleDirsToExport, true, true ); + } + else if( *s_packageType == "NoteSkins" ) + { + // add noteskins + vector vs; + GetDirListing( SpecialFiles::NOTESKINS_DIR + "*", vs, true, true ); + FOREACH_CONST( RString, vs, s ) + GetDirListing( *s + "*", m_vsPossibleDirsToExport, true, true ); + } + else if( *s_packageType == "Courses" ) + { // Add courses. Only support courses that are in a group folder. // Support for courses not in a group folder should be phased out. + vector vs; + GetDirListing( SpecialFiles::COURSES_DIR + "*", vs, true, true ); + StripCvsAndSvn( vs ); + StripMacResourceForks( vs ); + FOREACH_CONST( RString, vs, s ) { - vector vs; - GetDirListing( SpecialFiles::COURSES_DIR + "*", vs, true, true ); - StripCvsAndSvn( vs ); - StripMacResourceForks( vs ); - FOREACH_CONST( RString, vs, s ) - { - m_vsPossibleDirsToExport.push_back( *s ); - GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); - } + m_vsPossibleDirsToExport.push_back( *s ); + GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); } - - // Add songs - { - vector vs; - GetDirListing( SpecialFiles::SONGS_DIR + "*", vs, true, true ); - FOREACH_CONST( RString, vs, s ) - { - m_vsPossibleDirsToExport.push_back( *s ); - GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); - } - } - - StripCvsAndSvn( m_vsPossibleDirsToExport ); - StripMacResourceForks( m_vsPossibleDirsToExport ); } + else if( *s_packageType == "Songs" ) + { + // Add song groups + vector asAllGroups; + SONGMAN->GetSongGroupNames(asAllGroups); + FOREACH_CONST( RString, asAllGroups , s ) + { + m_vsPossibleDirsToExport.push_back(*s); + } + } + else if( *s_packageType == "SubGroup" ) + { + //ExportPackages::m_sFolder + /* + vector vs; + GetDirListing( SpecialFiles::SONGS_DIR + "*", vs, true, true ); + FOREACH_CONST( RString, vs, s ) + { + m_vsPossibleDirsToExport.push_back( *s ); + GetDirListing( *s + "/*", m_vsPossibleDirsToExport, true, true ); + } + */ + } + StripCvsAndSvn( m_vsPossibleDirsToExport ); + StripMacResourceForks( m_vsPossibleDirsToExport ); vector OptionRowHandlers; FOREACH_CONST( RString, m_vsPossibleDirsToExport, s ) @@ -142,7 +223,7 @@ static bool ExportPackage( RString sPackageName, RString sDirToExport, RString & return false; } -void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) +void ScreenOptionsExportPackageSubPage::ProcessMenuStart( const InputEventPlus &input ) { if( IsTransitioning() ) return; @@ -154,6 +235,17 @@ void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) return; } + if( ExportPackages::m_sPackageType == "Courses" + || ExportPackages::m_sPackageType == "NoteSkins" + || ExportPackages::m_sPackageType == "Songs" ) + { + // find folder name + ExportPackages::m_sPackageType = "SubGroup"; + ExportPackages::m_sFolder = m_vsPossibleDirsToExport[iCurRow]; + SCREENMAN->SetNewScreen("ScreenOptionsExportPackageSubPage"); + return; + } + RString sDirToExport = m_vsPossibleDirsToExport[ iCurRow ]; RString sPackageName = ReplaceInvalidFileNameChars( sDirToExport + ".smzip" ); @@ -164,12 +256,12 @@ void ScreenOptionsExportPackage::ProcessMenuStart( const InputEventPlus &input ) ScreenPrompt::Prompt( SM_None, ssprintf("Failed to export package: %s",sError.c_str()) ); } -void ScreenOptionsExportPackage::ImportOptions( int iRow, const vector &vpns ) +void ScreenOptionsExportPackageSubPage::ImportOptions( int iRow, const vector &vpns ) { } -void ScreenOptionsExportPackage::ExportOptions( int iRow, const vector &vpns ) +void ScreenOptionsExportPackageSubPage::ExportOptions( int iRow, const vector &vpns ) { } diff --git a/src/ScreenOptionsExportPackage.h b/src/ScreenOptionsExportPackage.h index 13952e1ff7..80e6c1059c 100644 --- a/src/ScreenOptionsExportPackage.h +++ b/src/ScreenOptionsExportPackage.h @@ -6,6 +6,13 @@ class Course; +// Can this be done any better? -aj +namespace ExportPackages +{ + RString m_sPackageType; + RString m_sFolder; // used for more subpages +} + /** @brief A menu for exporting packages. */ class ScreenOptionsExportPackage : public ScreenOptions { @@ -13,6 +20,21 @@ public: void Init(); virtual void BeginScreen(); +protected: + virtual void ImportOptions( int iRow, const vector &vpns ); + virtual void ExportOptions( int iRow, const vector &vpns ); + + virtual void ProcessMenuStart( const InputEventPlus &input ); + + vector m_vsPackageTypes; +}; + +class ScreenOptionsExportPackageSubPage : public ScreenOptions +{ +public: + void Init(); + virtual void BeginScreen(); + protected: virtual void ImportOptions( int iRow, const vector &vpns ); virtual void ExportOptions( int iRow, const vector &vpns ); From 99c91989715f9c010dc110e1f32e2fb8405c92e0 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Tue, 19 Jul 2011 22:53:13 -0400 Subject: [PATCH 81/94] Add pump-halfdouble medium chart. --- .../Mecha-Tribe Assault.ssc | 858 ++++++++++++++++-- 1 file changed, 758 insertions(+), 100 deletions(-) diff --git a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc index 366b79ad19..48cc7a4d43 100644 --- a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc +++ b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc @@ -1,4 +1,4 @@ -#VERSION:0.76; +#VERSION:0.77; #TITLE:Mecha-Tribe Assault; #SUBTITLE:; #ARTIST:Kommisar; @@ -22,9 +22,9 @@ #DELAYS:; #WARPS:; #TIMESIGNATURES:0.000000=4=4; -#TICKCOUNTS:0.000000=2; +#TICKCOUNTS:0.000000=4; #COMBOS:0.000000=1; -#SPEEDS:0.000000=1.000000=0.000000=0h; +#SPEEDS:0.000000=1.000000=0.000000=0; #SCROLLS:0.000000=1.000000; #LABELS:0.000000=Song Start, 16.000000=Verse 1A, @@ -52,7 +52,7 @@ //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -98,7 +98,7 @@ ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -1007,7 +1007,7 @@ M000 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -1053,7 +1053,7 @@ M000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -1854,7 +1854,7 @@ M100 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -1900,7 +1900,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -2525,7 +2525,7 @@ M100 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -2571,7 +2571,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -3108,7 +3108,7 @@ M100 //---------------dance-single - ---------------- #NOTEDATA:; -#CHARTNAME:Wyde: +#CHARTNAME:Wyde; #STEPSTYPE:dance-single; #DESCRIPTION:; #CHARTSTYLE:; @@ -3154,7 +3154,7 @@ M100 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 0000 0000 @@ -3543,7 +3543,7 @@ M00M //---------------dance-solo - ---------------- #NOTEDATA:; -#CHARTNAME:Hard: +#CHARTNAME:Hard; #STEPSTYPE:dance-solo; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -3590,7 +3590,7 @@ M00M ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 000000 000000 @@ -4411,7 +4411,7 @@ MMMMMM //---------------pump-single - ---------------- #NOTEDATA:; -#CHARTNAME:Vin.il: +#CHARTNAME:Vin.il; #STEPSTYPE:pump-single; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -4540,7 +4540,7 @@ MMMMMM ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::TIME=101.194664:LEN=7.000000:MODS=*0.2399996928003932 Reverse, Overhead; +#ATTACKS:TIME=101.194664:LEN=7.000000:MODS=*0.2399996928003932 Reverse, Overhead; #NOTES: 00000 00000 @@ -5465,7 +5465,7 @@ M0000 //---------------pump-single - ---------------- #NOTEDATA:; -#CHARTNAME:Vin.il: +#CHARTNAME:Vin.il; #STEPSTYPE:pump-single; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -5520,7 +5520,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 00000 00000 @@ -6337,7 +6337,7 @@ M0000 //---------------pump-single - ---------------- #NOTEDATA:; -#CHARTNAME:Vin.il: +#CHARTNAME:Vin.il; #STEPSTYPE:pump-single; #DESCRIPTION:; #CHARTSTYLE:Pad; @@ -6441,7 +6441,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 00000 00000 @@ -6998,7 +6998,7 @@ M0000 //---------------dance-couple - Simple Chart---------------- #NOTEDATA:; -#CHARTNAME:Small Tribe: +#CHARTNAME:Small Tribe; #STEPSTYPE:dance-couple; #DESCRIPTION:Simple Chart; #CHARTSTYLE:Pad; @@ -7044,7 +7044,7 @@ M0000 ,288.000000=Verse 9B ,304.000000=Fin ; -#ATTACKS::; +#ATTACKS:; #NOTES: 00000000 00000000 @@ -7438,7 +7438,7 @@ M0000 //---------------dance-threepanel - It's a 3 panel chart.---------------- #NOTEDATA:; -#CHARTNAME:Simple: +#CHARTNAME:Simple; #STEPSTYPE:dance-threepanel; #DESCRIPTION:It's a 3 panel chart.; #CHARTSTYLE:Pad; @@ -7486,384 +7486,1042 @@ M0000 ; #ATTACKS:; #NOTES: -// measure 0 000 000 000 000 -, // measure 1 +, 000 000 000 000 -, // measure 2 +, 000 000 000 000 -, // measure 3 +, 000 000 000 000 -, // measure 4 +, 100 000 000 000 -, // measure 5 +, 000 000 000 000 -, // measure 6 +, 001 000 000 000 -, // measure 7 +, 000 000 000 000 -, // measure 8 +, 010 000 000 000 -, // measure 9 +, 000 000 000 000 -, // measure 10 +, 001 000 000 000 -, // measure 11 +, 000 000 000 000 -, // measure 12 +, 100 000 000 000 -, // measure 13 +, 010 000 000 000 -, // measure 14 +, 001 000 000 000 -, // measure 15 +, 010 000 000 000 -, // measure 16 +, 100 000 000 000 -, // measure 17 +, 001 000 000 000 -, // measure 18 +, 010 000 000 000 -, // measure 19 +, 001 000 000 000 -, // measure 20 +, 101 000 000 000 -, // measure 21 +, 010 000 000 000 -, // measure 22 +, 100 000 000 000 -, // measure 23 +, 001 000 000 000 -, // measure 24 +, 010 000 000 000 -, // measure 25 +, 001 000 000 000 -, // measure 26 +, 100 000 000 000 -, // measure 27 +, 010 000 000 000 -, // measure 28 +, 101 000 100 000 -, // measure 29 +, 100 000 100 000 -, // measure 30 +, 100 000 000 000 -, // measure 31 +, 110 000 000 000 -, // measure 32 +, 001 000 001 000 -, // measure 33 +, 001 000 001 000 -, // measure 34 +, 001 000 000 000 -, // measure 35 +, 011 000 000 000 -, // measure 36 +, 100 000 010 000 -, // measure 37 +, 100 000 001 000 -, // measure 38 +, 100 000 000 000 -, // measure 39 +, 101 000 000 000 -, // measure 40 +, 001 000 010 000 -, // measure 41 +, 001 000 100 000 -, // measure 42 +, 001 000 000 000 -, // measure 43 +, 101 000 000 000 -, // measure 44 +, 010 000 001 000 -, // measure 45 +, 100 000 010 000 -, // measure 46 +, 100 000 001 000 -, // measure 47 +, 010 000 000 000 -, // measure 48 +, 010 000 100 000 -, // measure 49 +, 001 000 010 000 -, // measure 50 +, 001 000 100 000 -, // measure 51 +, 010 000 000 000 -, // measure 52 +, 011 000 000 000 -, // measure 53 +, 110 000 000 000 -, // measure 54 +, 101 000 101 000 -, // measure 55 +, 101 000 000 000 -, // measure 56 +, 010 000 000 001 -, // measure 57 +, 001 000 000 100 -, // measure 58 +, 100 000 000 010 -, // measure 59 +, 010 000 000 000 -, // measure 60 +, 100 000 000 001 -, // measure 61 +, 001 000 000 010 -, // measure 62 +, 010 000 000 001 -, // measure 63 +, 001 000 000 100 -, // measure 64 +, 100 000 001 000 -, // measure 65 +, 010 000 001 000 -, // measure 66 +, 100 000 010 000 -, // measure 67 +, 100 000 001 000 -, // measure 68 +, 010 000 000 000 -, // measure 69 +, 001 000 000 000 -, // measure 70 +, 100 000 000 010 -, // measure 71 +, 010 000 000 000 -, // measure 72 +, 100 000 000 000 -, // measure 73 +, 001 000 000 000 -, // measure 74 +, 010 000 000 000 -, // measure 75 +, 001 000 000 000 ; + +//---------------pump-halfdouble - Community Skype Chart---------------- +#NOTEDATA:; +#CHARTNAME:Steam Pump; +#STEPSTYPE:pump-halfdouble; +#DESCRIPTION:Community Skype Chart; +#CHARTSTYLE:Pad; +#DIFFICULTY:Medium; +#METER:11; +#RADARVALUES:0.589,0.891,0.400,0.610,0.019,333.000,42.000,64.000,0.000,0.000,0.000,6.000,0.000,0.589,0.891,0.400,0.610,0.019,333.000,42.000,64.000,0.000,0.000,0.000,6.000,0.000; +#CREDIT:Jason Felds; +#OFFSET:-0.028000; +#BPMS:0.000000=180.000000 +; +#STOPS:; +#DELAYS:; +#WARPS:; +#TIMESIGNATURES:0.000000=4=4 +; +#TICKCOUNTS:0.000000=4 +; +#COMBOS:0.000000=1 +; +#SPEEDS:0.000000=1.000000=0.000000=0 +; +#SCROLLS:0.000000=1.000000 +; +#FAKES:; +#LABELS:0.000000=Song Start +,16.000000=Verse 1A +,32.000000=Verse 1B +,48.000000=Verse 2A +,64.000000=Verse 2B +,80.000000=Verse 3A +,96.000000=Verse 3B +,112.000000=Verse 4A +,128.000000=Verse 4B +,144.000000=Verse 5A +,160.000000=Verse 5B +,176.000000=Verse 6A +,192.000000=Verse 6B +,208.000000=Verse 7A +,224.000000=Verse 7B +,240.000000=Verse 8A +,256.000000=Verse 8B +,272.000000=Verse 9A +,288.000000=Verse 9B +,304.000000=Fin +; +#ATTACKS:; +#NOTES: +// measure 0 +000000 +000000 +000000 +000000 +, // measure 1 +000000 +000000 +000000 +000000 +, // measure 2 +000000 +000000 +000000 +000000 +, // measure 3 +000000 +000000 +000000 +000000 +, // measure 4 +000100 +000000 +000000 +001000 +000000 +000000 +000010 +000000 +, // measure 5 +000100 +000000 +000000 +000001 +000000 +000000 +000010 +000000 +, // measure 6 +000100 +000000 +000000 +000001 +000000 +000000 +000100 +000000 +, // measure 7 +010000 +000000 +000000 +001000 +000000 +000000 +100000 +000000 +, // measure 8 +001000 +000000 +000000 +000010 +000000 +000000 +000001 +000000 +, // measure 9 +000100 +000000 +000000 +000010 +000000 +000000 +010000 +000000 +, // measure 10 +001000 +000000 +000000 +100000 +000000 +000000 +000100 +000000 +, // measure 11 +010000 +000000 +000000 +000010 +000000 +000000 +001000 +000000 +, // measure 12 +000100 +100000 +000000 +101000 +000000 +001000 +000000 +011000 +, // measure 13 +000000 +010000 +000000 +010010 +000000 +000010 +000100 +000001 +, // measure 14 +001000 +000010 +000000 +000110 +000000 +000100 +000000 +000101 +, // measure 15 +000000 +000001 +000000 +001001 +000000 +001000 +000100 +010000 +, // measure 16 +000010 +001000 +000000 +001100 +000000 +000100 +000000 +010100 +, // measure 17 +000000 +010000 +000000 +011000 +000000 +001000 +100000 +000100 +, // measure 18 +001000 +000010 +000000 +010000 +000000 +000001 +000000 +100000 +, // measure 19 +000010 +000000 +000000 +0100L0 +000000 +000000 +0L0010 +000000 +000000 +0100L0 +000000 +000000 +010010 +000000 +000000 +000000 +, // measure 20 +001000 +000001 +000000 +000101 +000000 +000100 +000000 +000110 +, // measure 21 +000000 +000010 +000000 +010010 +000000 +010000 +001000 +100000 +, // measure 22 +000100 +010000 +000000 +011000 +000000 +001000 +000000 +101000 +, // measure 23 +000000 +100000 +000000 +100100 +000000 +000100 +001000 +000010 +, // measure 24 +010000 +000100 +000000 +001100 +000000 +001000 +000000 +001010 +, // measure 25 +000000 +000010 +000000 +000110 +000000 +000100 +000001 +001000 +, // measure 26 +000100 +010000 +000000 +000010 +000000 +100000 +000000 +000001 +, // measure 27 +010000 +000000 +000000 +0L0010 +000000 +000000 +0100L0 +000000 +000000 +0L0010 +000000 +000000 +010010 +000000 +000000 +000000 +, // measure 28 +000100 +010000 +000010 +001000 +, // measure 29 +000001 +100000 +001000 +010000 +, // measure 30 +000100 +001000 +000010 +010000 +, // measure 31 +000001 +000010 +000100 +001000 +010000 +100000 +110000 +000000 +, // measure 32 +001000 +000010 +010000 +000100 +, // measure 33 +100000 +000001 +000100 +000010 +, // measure 34 +001000 +000100 +010000 +000010 +, // measure 35 +100000 +010000 +001000 +000100 +000010 +000001 +000011 +000000 +, // measure 36 +000002 +000100 +000003 +000002 +001000 +000003 +000002 +010000 +, // measure 37 +000003 +000002 +100000 +000003 +000001 +000100 +000010 +001000 +, // measure 38 +000100 +001000 +000000 +000010 +000100 +000000 +000001 +001000 +, // measure 39 +000010 +000100 +000001 +010000 +000100 +001000 +001010 +000000 +, // measure 40 +200000 +001000 +300000 +200000 +000100 +300000 +200000 +000010 +, // measure 41 +300000 +200000 +000001 +300000 +100000 +001000 +010000 +000100 +, // measure 42 +001000 +000100 +000000 +010000 +001000 +000000 +100000 +000100 +, // measure 43 +010000 +001000 +100000 +000010 +001000 +000100 +010100 +000000 +, // measure 44 +200000 +000000 +300200 +002300 +000000 +003020 +020030 +030002 +, // measure 45 +000023 +000000 +000230 +002300 +000000 +003020 +020030 +032000 +, // measure 46 +203000 +000000 +320000 +032000 +000000 +003200 +000320 +000032 +, // measure 47 +010003 +000010 +010000 +000010 +010000 +000010 +010010 +000000 +, // measure 48 +000002 +000000 +020003 +030020 +000000 +002030 +003200 +200300 +, // measure 49 +302000 +000000 +023000 +030020 +000000 +002030 +003200 +000320 +, // measure 50 +000032 +000000 +000203 +000320 +000000 +020030 +032000 +203000 +, // measure 51 +300100 +001000 +000100 +001000 +000100 +001000 +001100 +000000 +, // measure 52 +000002 +000000 +000000 +200003 +, // measure 53 +300200 +000000 +002300 +000000 +, // measure 54 +003010 +010000 +000010 +010000 +, // measure 55 +000100 +001000 +000100 +001000 +, // measure 56 +000020 +001030 +002000 +003100 +, // measure 57 +000200 +010300 +020000 +030001 +, // measure 58 +000002 +100003 +200000 +300100 +, // measure 59 +000200 +010300 +020000 +030010 +, // measure 60 +000020 +000000 +002030 +003200 +, // measure 61 +200300 +000000 +300020 +000230 +, // measure 62 +000301 +100000 +000010 +010000 +, // measure 63 +000100 +001000 +000010 +010000 +, // measure 64 +000001 +000011 +000010 +000110 +, // measure 65 +000100 +001100 +001000 +011000 +, // measure 66 +010000 +110000 +100000 +100001 +, // measure 67 +000100 +010100 +001000 +001010 +, // measure 68 +001100 +000000 +000000 +000100 +010000 +000000 +000000 +010000 +, // measure 69 +001000 +000000 +000000 +001000 +100000 +000000 +000000 +100000 +, // measure 70 +000001 +000000 +000000 +000001 +000100 +000000 +000010 +000000 +, // measure 71 +001000 +000100 +010000 +000010 +, // measure 72 +001100 +000000 +000000 +001000 +000010 +000000 +000000 +000010 +, // measure 73 +000100 +000000 +000000 +000100 +000001 +000000 +000000 +000001 +, // measure 74 +100000 +000000 +000000 +100000 +001000 +000000 +010000 +000000 +, // measure 75 +000100 +000000 +001000 +000000 +000010 +000000 +020000 +002000 +, // measure 76 +000000 +000000 +000000 +000000 +, // measure 77 +000000 +000000 +000000 +000000 +, // measure 78 +033000 +000000 +000000 +000000 +; From 3737b2eac695645d5adab922cdb00613747cb514 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 21:48:13 -0600 Subject: [PATCH 82/94] |B300| --- Songs/StepMania 5/ksf/easy.ksf | 1 + 1 file changed, 1 insertion(+) diff --git a/Songs/StepMania 5/ksf/easy.ksf b/Songs/StepMania 5/ksf/easy.ksf index d4353e9f65..8f27e79506 100644 --- a/Songs/StepMania 5/ksf/easy.ksf +++ b/Songs/StepMania 5/ksf/easy.ksf @@ -51,6 +51,7 @@ 0010000000000 0010000000000 0010000000000 +|B300| |T4| 1001000000000 0000000000000 From 516ea1abd967ccef81ee3d11e441a9daee840950 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 22:15:16 -0600 Subject: [PATCH 83/94] etc --- Songs/StepMania 5/ksf/easy.ksf | 384 --------------------------------- Songs/StepMania 5/ksf/song.ogg | Bin 220298 -> 0 bytes 2 files changed, 384 deletions(-) delete mode 100644 Songs/StepMania 5/ksf/easy.ksf delete mode 100644 Songs/StepMania 5/ksf/song.ogg diff --git a/Songs/StepMania 5/ksf/easy.ksf b/Songs/StepMania 5/ksf/easy.ksf deleted file mode 100644 index 8f27e79506..0000000000 --- a/Songs/StepMania 5/ksf/easy.ksf +++ /dev/null @@ -1,384 +0,0 @@ -#TITLE:?; -#BPM:150; -#STARTTIME:0; -#PLAYER:SINGLE; -#TICKCOUNT:4; -#SONGFILE:song.ogg; -#STEP: -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0100100000000 -0000000000000 -0000000000000 -0000000000000 -0010000000000 -0000000000000 -0000000000000 -0000000000000 -0010000000000 -0000000000000 -0000000000000 -0000000000000 -0010000000000 -0000000000000 -0000000000000 -0000000000000 -|T2| -1001000000000 -0000000000000 -0010000000000 -0000000000000 -0010000000000 -0000000000000 -0010000000000 -0000000000000 -|T1| -0100100000000 -0010000000000 -0010000000000 -0010000000000 -|B300| -|T4| -1001000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -0000000000000 -2222222222222 \ No newline at end of file diff --git a/Songs/StepMania 5/ksf/song.ogg b/Songs/StepMania 5/ksf/song.ogg deleted file mode 100644 index e8b8af412f2fe0182848fb6e23ebd0a3e01e4a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220298 zcmagG1z1+k(=dGKM!LIOI;Fewrn?(yX{4m38|m)u?vO4?l`cULgV67Qzkhts`(Dp` zJnXe+=bYKu*_qjy*}YY@vC#yefq$+j(!UkGVdq;YGAJ(>H*-7p$0jJL>VIDGhI*>B zL#aM~`S0uT%SXsa&Q>G_>!1JMH39P%(IawQyO*|Xs%|zEj&|nSPv|M+DLC2Lx!HL+ z1s<_M!To)iQ9@E13P1!~IFu+xg69$-0Du7irZkM`$=33WB`F0AJ{c);kF^o@sEm}T z5dw=?j?sS=6x^1$000XFGa$tm9mw0y2-pzN$GhbV*s1WBQ6NOCe-uC(yrHvjE^RJ# zaGqhLMMTqs13*rQ$x(*mXgn6?k(3bxVDW~;ZJe?!#|@dOJU;}PbDSbniSxKPSw--; zyeMAqgrRv(0)@4CK|zUQS=*wv2j0lveMaCg=br-UX&e+FEfVmAmKYL0R)4?1Y{F&S- z;(rR(zcmK{l_u;-CsWL0ImU8ARV0x9PVm1p#}#KRkz^u~MzN7bd4c8q6}Rd&_dK?= zI=8YWuF*WM=OUh!Ca=*VkJTc?YT3)`L#vfRTYz5cKMM0#ZFW{Y|4VZoRfI|)epfCD z_CK1F&k+BaKb~4XiAFDp&L_<#Dyt&%-El=B^8e5r+vu{4=(5P@!^n7ss5HB%tjdl; z$I05$&j08AZ_SZ)qXBPFbEMs9{!4TEIY=ZyZE9puzWzH#;dzju9@6;#JplmFpMa|P zWJlCBSeG?;mNi%*TEhRk#(>aeZskR8kg=%%KnMWT;3S7(M7t$OI1B3{avadW6$ro= z3=@QvVQ`@epiy}wh|>$VCkYIpUVqeJz?D)8jicp@r$8GlHI(1yM+D6tET9em!5rfp z!vt{DH=132MHRJ9Q!013Ib(0nll23q+ydB@VTKFj3p$RGmK*- zVbkLKIiYjn3;;mU4+Z{7FmPK+0~qwc$Cos-$=r%Kw2Ii$vp80(*vhM^-0!)0)U_Z} z*pOu{$OfJ=q?J|~TUq&=76e-wf(uzpQ--uS&2n3P(1L8?L6%#sHt+&<(mZ##l=Z;J z6%gvVnigQP;$)QZ4=QDxCse$U)m9#L4~RO%N>2--=Vhh$1ERAMpa?=Wl|SG@Agz!O zH%^eWfKMI}BOR*`KOlN|fd;GLpS}ltB6!5Sy6g!;%~q_;+B|m{?6U0a3(G6B7%D3( zDqEc@YikS&k17i*CmU@lYpW+4>#AxUPeEvHd1WI@WhF~hWA$An%V}$QWoOM~V|{jQ z)oJSm$`H$G=gZ34+N#F0M`&lw>8R^zC%bvXFVNm1oVFVoau z{bb|CY3K81PfB%&=T?f*t`0a3Cll{?20y|ZorL;o?j}J53qJ*BT}V2>&zhWx!M4$B zW>GW#_!65ekkZPU?8>UsMrY=s>Qf1INPtnQ)efJL9=`JqU%bI;Tw&!&C(~3f*b&F( zs0&FKJBiT-F9^tOtU(E|82^DZ>##BEdMCL1-Lt3;6>01(C>v0ZvVlD*RzS%N9n22} zz*8RLXksvpPH92jZ$dE%a7+IV=34&rYvY66qKkb zI25F;XgD;KE}5TG6yqt_v8F8O+gFS(>BnMPU~nE5Th7QMl{7yBKvakM#pn_WCB-<3 z3ar}Gpdc45h|5(JV`<7)w1B8eit!W`I9hQGoH@H z(iQthfPs_nN|w7q&B~HS90;&*>RHb6yZG10&Fxu7SIlc3J7;Q0O#(YVSl5pgNLerk zQ6*`_f?pUoc9f>sgMciJn3jWecSoM@OZwH1eJFw}g!|i$8*R|)1j7Jg!AMs5k0#_% zZN(!sX5{TK+@=MXkR+xB=qucmBp4YX)8dGf@NK~+Kk&Pxf71;|?hcXSCRLW>!3 z2F5To1t!LD3n%Be-Yr3b2i_#N!c=qJazm zOfNx?s9xRDJtQ$7w3*O=&!f#$5I`tMkzpLANJ-KFy90+*;f4zGZbbVLkfMJ^0g8qr zj~50gR-^io3N<6T4z-jeE9TWatDq3K9Ar5tfB=X09RRQihXB;W5KHsY6Cg2hTRsgU zm;z*DEJp;6c{ImijwB-ENCxQRloC9;9^fMT=zqk50Pt}X1PC0GJQg|b@&9p5{!>Hx zzYL-R^s_Lv!PR<{fEe+wS1yC~^l0JukCUG9_wm1c_WyYA|69$#p#~JW|1JQrK4b*o z4+62aEI%U=3d`ddG0;IrZzuz#7@jmNg7K(044j? zaKkWX!_$MmZ4#7CsQ5Y;EkYC?F$6*KyyNAVzjEX!K=DuJD17L)Wqb5e`qGDlJzAiKu z1au8e#}R^2wkJ;fyvtDZ(gVDI-Uqa1w$;v7KLiMpJDcKoXQLLH`@_LIGp| zkc37-MU^EGkN);q0!AWc5>_&H3Mjq+@DVEb84yeZ7a1989bYuG3qvDi8CE>J2TS_| zek>3X|As2CPxZecu^1SsK3?NI_M~= zso0+r6Z3Mlw>7n#rPg)#8m(T*<-vw=IJ0zM!6M2&wN2MQGl~l@9y5f^gl!XSYc8mVw(hQQcN&_T3WbRzr`3}>E_Mt zcA8eXfiedcMXR$`}eARqMeF;qXI?}_20{CWyjMT$l2=pwWK{P6^EIP0`k zcQr^vZcmB~^#g_ZHPd;2U43%vFpTJ^6D7;5LFqLVG1Q9?dAPZF9vl5E?X$`3>@0UC z^t#o(=ZTAHIe_73(Qa;D$eRWI67Pq81o;vFrwqH_kuZ$Cqgi1xtL{^o+LdP?*VBEI zUmr%;JH*S``suoPm~Aj#G|S<_s@YuVzVyFpF0NbATy&2D80kP^8 zTeCsyklCPXb3SQf!x0Mv9C(D^@7xk_ZX$n>;8r%Sk|FJVIHO56)-ud7mZ25Q`@+zZ zDuL_(dnZ)9gOk#f$id7cdS<@s>8cYW{)_3hg7g%zLkuc&y2@mZ)*CyZq(Q_fZD>6Q z!YtT>I)FeGVfm&-iASp5SJs`Kd2)Eg)mEyBx7wpy<>s8zgI?2atto(Blf;n}c|fvx z%?mk$2CCP}-{qkz>@_siJ%=H!gJ@?$J`k)YQ%&%5-RkYw9aLXo)#RJkJXT+OsfS-C zA^w@%Ho(%dMgD;+h}8AjoY6z#O{e;SQzf$(nshR9#BD&cw&%;u9iFrCL=D-u!!oGy zwq;+K*jf^{xo-7Tc^t-3Qdr@p!jsP2cB+flhXZl>}>k|N&{nDyUN?w@J z0OGaTc)I39AWc6jx}=H3U&8IvO9@YieQCq?^@BW9OWa5{qln6_6P8hG`7pe^8rPK; zQresS1MT^1wQDUn>|V=wG-}GZDGX@~BMT93ZS1dF3*`Oh$g#3CQaYt}qSOcIZ=yuC z7}Nr{3ecH%_hV^PFeO6wnk->)5YKBDGq%SrZ3^Y8#HM;KQbxQ`=2ub=AuhQvIrlyW zEqwytk)>-0DLep>?#>K8e&FLU9nqj%AFAk=_aZsg-9mVv-JO3Da%&lm{zL&q~Y;e z*x>tCldTX@hG$)te6@_|Z14l`I+loetz%rDke3++Lr9`9T1W1NM1;!OGw_pZ540{Nc(UY)-TMs(oDqWr-gaZ6JLVyE?D?;u3$pniS#YT zi*Xyz^Bzey%0(f`Q=LP8xWZR{_B2wDVG!f5pK6;p{Pn%HYL2V3y`fLd!61c|WNxv~ z?16DFQ>?GQOGC++S&+v$U*Ymu1eCFtAN9aMW2D zO!#VmWqR=P?VHHJU;XC;>|6Hg!hxR6cO;-^i1ZI5X)n(#<^xcS9ZwKM=da1S|y#SRS9nHJm`96P8hM1 z+3yeab~t6rbK>_Rv1QYuWdw&i4F)XRHrBwtMgtVhqxtB(eMSI$Y=b}=pZmpwE7zon z%nw?#s?6_XWFOU6dGby;WUF_gWLZ36Q)DV*8H%H}aA+ftcjbm-7ip5d5iA+S4_!3- zb@k9*yzC7X#d3&s2#={2UH&BtKo#>tdo6c<@qG(Fgg#=9GH~(h&ANWGNQRdFl>ohY zoi(rcLd2&RVS&&ppSXBhFomu^i#4n9T-l#Pzg^$@iC1e_iHg%oKTqg!B(`6hrX^!= zQ!;j;Ylr+uHpu2rU~Z>|X_iKx`7QLv;4eS?)*Zg8Mk3Bk~ueZ=<@ob z*Q9DZan;QI^@#($##IdCyjA*)$F(`PMQ?r3ehy(VX@V5-v=EK33!CRJua(($wYp8L zkXE}HjF_liGrc$Z+D*!6sj~9rqBf+EQfl3rvs$3n>R#}Dml^1BXy7Ue(HlrZWt`U| z1b)=fQRN9Y(L{4eVN250b6a#RA=hpRxww`iz=9si;F&1V!9zYN!HwKou{fcCkd{;y z3Hvk%t6F7+6)NRYF|i7Vix?M4g?Rx#>{r*Lohw= z!bk!brZ)~WcuVwr_=BM2f-RVZC?)0?qg9zV5vbf$i-UOWMsrl9kXn*NNam%sa@4LP*b|Zo927~OeG2j9;~Y>u8!iPttcW6`OjIT2eA0uJ9Eqr#T^x{sHg1W{X^y z1RdFS_&u0d041AU>@X=q?%1}uKrGIcF#V_V@(5}do7hpYtZaRkh-`@|`2=&iBbJDC z$VQKwTT%#|d8{vXGteYra2qYZ1iq-}kp26y?2DFcPJ5OT1H>BHR zYQ@gv|9Ho_jx^WnteBT7)1+U<1kL}A_>tW$%O>nVaE3M{Gvlb7p&v&!jyBplEmw88 z&wzt~y1O+|xXUz~Mcq1(?JdSQ^tEl)Lj2ET1`^@@{d(a;xYtlr7iHg*T*^2)(KbGi z`A4Tm7j9ie@U|k$yIp=io|8u6V6yvWU86+&un-gZ?%p2+Z|}Xjr!@6WRdS+qv5CnsnnI`E zw(>Xm+*a{A7%61EwerO|u^zZPgr1wT{t!?s(|YQNA((q(f3Xb3(x;cr9A@;n^0kM_ z4C+n4zr(3}M?8WCnu-^B=4IGwi+~aX5+%}2h*OvR85!J!b;9t4h+2PgPTqq;-dNQ7 zu$kAwci1oNcS2ffslQJc1}-KnQ9ZbXVKAVw?2qdj_z!;#aBf5gmYEzpBh1t7i>=eq zT6n>61H16k?v0#Djf~Emb<7%Er#bZmtrl*902&>z^0Ye2!vKiHFb&-qQchU#rg`ss zl%pG&1n_0Bzw@FK2hb!s52Q_Cgbz2Qp0^r#)3L$7jigbutLEq4So6#B(NE&tIl_>1 zxI{v5HP!yjZ4*l$-Xu0Lk#$EVEbwuax*sv?dm-N{hg`AVI_X{$^FYX^0PSVu;#BX4R1JA_Jk%~_Re z&MI^RAOlOVFh4e`@UU;%13PFg-#YfVg=x>$Hh%xZID+2k+U$&w7#3I$w+9P}%p`)c zAcAU-VZ!U?D}qKIc2_=$(wDvEHWuMuMP7m>{UKXkLCxZZMnL;AsE?rbydHVC78OUa z76G&SyKx{h+7fIB$^-?qrBb@-V)P`O4z}(4j_xUPwG^=_gZof~rAhduhZjv|fX8K- zTtDeXkZ630wV+Yc74C7>^s<7>k5~osyA386Nt1;y3KoXm`g}mF^E?k`FicFT_E>J2 z1!2WOI7jBh^NQ^O+h;yG#52dU<(XGdjbrFP6J*;(PDn`NxBPzF?#U&Nwp)o3VNiTq zp|0a)w1VmKM&gd&_501XFNZn$v35x;Snbd67vb-Ya2ePFp|vz(oIV4Hu-vIk&c$2X z$-{ztN;wa^f3AN91%(9po&~uM?Ra%L#5O$lZS~Yn=QINU<>HXwJxta@0o*A4asDXJ zu@d)of1mPl^8I!jxQ;w0kj-wZlA6>Xco}O7%E;V1N$bT7-AS3PZ zS{4l*UHTmHEdMf4c~G~u7I61wg8W*XCMtRr6>n0RqVjxNl)IeX|E;-o5>6dv!81R~ z29}L z8?uaQHqDZse~vM2GCg3&a$TgH^wsdgPg9-K7PFqcFPKepMydPNu;j*!oCEh_&iK4D zN!RDPE8=o)$ZJdQUqAF_*;t3(blz+Fm-_x3a4DL%;T}A@8mxqRT>8P#!3+?a%SbzH zW_zxV1B~aTL*0f`7Yp?isUlRRIT!Pl6-@Vk*sWtU9i9mHJHLY3rL%(}_aC_okP@Qm z{DtiH&A%*a@P;+ZQsz`;sF`!csI*YAi8lUyor9s0irPx~A1+Ft;|lVjieQEg=TN=L z@Mq0rXi6;CF7kwB)|9#t<{ooF(ai`-WThP~*wY1Ew;pze-Y+>&m$v+;Uv%!}XcN#$ zAO2=Ip825P2b1xaWHlgoZM1SFy`>Beu7BZ#^E#`#Z#$6>5g~J|cXb{exZu zX@+gSZ|Bd;OXS+v&rG^-Aq1WCZHUab`?Xh%iBTsBQ@>AN1j)~>Ai)@S^Km3vYOLNB zN0N%;xRY=D5!C&*i)Z>GuOS5Wb3SABMM}#LtQ{GN!iyds){j`ir^CKRl~d|AN$-wXVd8k$ zJ@Pn~aWK&=RK8O~ve$}(5(k-vMG+#dnPda$HPQ-vOYE{@y)WdxtSP~X7ovU2hE_bT zeVJ{`Q;B;5i~JZ)?}EY=Y!YYa24N{;02t(k=Y;<_ly2SW_(`GXJckrOYujezKoL?C zQt%(;PPJAr$L9N_%vrO{%99!8>kYEh#YSP!kQTeJenl6y%qa{Jp&Z!c=UjjcHF;Vo z)rK2Oqq6rEc2Zk}r55un@qJclpBT%|OD<>=Yc9sFc-2Q%o@}t}VTm+9-iYz6S7JZI z&pjt%<(E-Cr+jzUos;zj^OL8xKI-zwbzCiZ$metp z9I<2$7^5tnF9}I5tUG^7`P{!ialebqb=lo9@z-Jn)`K zK=wAKt{@?NRiB<@G!R;65 z*JHO_%o#pr)n6PcT(d*)ytRb2I4JAN-v*nvY@GwweX4M`)#OkwUOt*o(4_}$k(!SD z$Z&d`HV%;R-TFgtk_Ea6x`Oq>pHiugFLoG6`M%Y*H-&($9RPbapATynI>$|Y0A@{gwH+7j~2G=7vKGF7^(5l zH%uDRKaSC8c+tPi2tM)}bc?Z(0gM&x7Kq!o7p1^7%=0f}#*ig^@o7miC&D$dPVUh-N=cui zHhtiVaLl03K&UC&Mc{*LUdlGDU7F*>5DRDi<=i=8!eu3}#}l?lVX{O$Qvrm^?Njkw|XAG#lz4OtphootGS z3LZUwyEn2=Vj!uCNWZc6^T*M&C~I_BzRFz;R#E0RW(wz@f!@xVwEb%eo_1WsaA!4I zZ?@m@T|HO$ljF7V{w};uwK{;1#A+#Gz`>Wmx1IT|oSH*P1xNR6_SE}55s6Ogg1gW0 z0vfG*_WZ(pUDg6!Vcz@$5z&${cK7ii#(dC)w1)F@hPO#Z$({YIDYSz$r|} z4cqwBVewSz!h4dbm#-~qa}s&mQ*E+xtjm5;7+9Fq8_^;PIc*A;u8%)EaKZD+CRJCG1k`AUs3BZ(SWkyE# zBAF(jbH^fEr7?XJJ^tWA_DoMxGq|8QaDLc*WL1L=pJviXF5A#4;F&D?GWJMjhxnMV zDb^KbGVD8egsdv&eE)}gGNl-khoZbps@OA{XPG8msDAUcHJm37O?sknO!EPQ_aBv6 zM#@DarGTjJxl##!p6-rog{!LfV@!hk-|Hadrr~IGr?SeH@1Yt)J*`6VV!FnpPmlK< z@lS{l9~s@L`XnI`C4W7yENH+~e3Ouxhbg}dtvnYU>7?yC#zxY^W@L-*f(7Y_kqGUp zNKl`tDdiSHFw0F%giyuX0EfWg+iRDdt_mzmHKXAP$E~X5L63)@GBMun*qZ~w!BQL0IceCVGGhDr`w00vIFZ1_eUcN%_YFzv+t$K zl&jr}(x$m%uR>P82=oZ$5U^VXEjvZ1TO70bH0$Q^LNR2FN!|}wb~e?ja7xI+GosF2 zRv5KNp%*sWWv!YYP=6P9Mi5Vu>(}D+Z9*Fy939EAJlE2Qlrc8*e@ILD1*KRcBW~4U znz5qgpe;S*nL;yg&uT>?11Zi&x(<|^^K*1EjPXeFE+9r)p-hhjdN;LKgvS&Db5L+^-L6b~bEb|b5U#`IV0 zV1<@~{kX<52;*}j2dfdH6_-Ivn0v&gYgryDbWK6@tGdcll6A*4$cJ9_2Ip>p=nnaC z))9WFB~+UO^D-sbej{Fr)cipQZ-dhMmo}O6G;<;}jZV);sFlEo>3Xc9B8(%BBEApb zaewFy6%I*DLP05>A4AsbB>)V$V#}*t^{qxiDa2L0B$bADG>syT98k~ac}E6lrM19q zZS?uG59kR40XNDY<7xTunTi-~X7!#!+taVBYW(;kEh@hw5CZW+SDAd(q;uHl5#}|J zR1Y}w%Qn3a5hAajK|UX(^Wn`3vdWwPqe{3 zCTfoiyu1Yyzm@x+HNS~iaDS@*GD38{ZH9y$v*>6lt`pAnyLu@;x6x7>3T9x%%FozB%|NV7R zCmUCA09lPL(HqoZuQ+*vp2iw^_Rbf1zQd8CnWH=Wc1+!UL$9%L(--+dbgy#OnZM-s zU%)p0PAK@`PQRrLG2fQFDc<>Bh{{}Tz@t=Cjg?_kg-=nB_T`Ot{Wy9B+EvUuva0wT zlwF3EiKAun`|q2Mr6=r12qp)_lBxZV@enLVv5!@Y*$nYN zVIRBl2L6s!P*Od8PEfPWT3-kSh7m8ez&#={wQMcI5474s$bgtRyBl`SVIflT_UN~T z7QC}2r`%y5hFH~yi7zs-A}x;bL0r+Vzu~HztX_B<`!Gw`&4ukS@R+Ye$xWG#n0GS0 z30_`$#*OD%VC z;DReUsuU7fRNygpe5~jfGP_asjg=sLojRO*cIjp)aK6l^ncD9h>88Yb#l3P%F4OxI z-&A|1^ESUnT@IGUGOT16z%Ip33ZwLB*unyO?Nt8-*_J!4> zAB{VtA2;|!m#)!0rvE!Ko-aTFqJ|KT#DFqf7@+dO9uL;PbG&xhIM!-?kV?z{%nv(l z68`*5NwAGoQnkO!(@ZIAAusuN)cnxqOXhNOviRkpT6Wf-c4u*>2G)c)n_b=W<*dr@ zN!=n_7GBJXb=@7Jo<_)fyT4)jjv%JdHvz!G1O_`lQ$5Z4D`r? zu3t4b>rkr5mDz942#^^|qOyUL7e%uK~wgR^2;*j*FaE4{zbvXT`SqL03m^x`8W zqXQ>HOE({fZEia=HHhxoAgm-!fWntM^7$!6V9hNTo3Ow!CWCV19 zJ)=MgF~fD97*nNpPWnf^%Jq}aCwoY(@G$t`7rVkzmv>Ehdrii&SJwO7e;gG0d#ZM_ zB(U)Oaa6At^9{;fM8$mEjegoif3!IPb>@u9P!vrDpEbvRQDo#5SZ|S9n!%U+XpRz* zMdY~UOe8)#?i8hJ<%OLUnmtYS7;>{4bU>sYf z5-pv&4Oe}UU%l1`-_*16r6hY#F zuaBw`PTeZX{e$RDKZ>y>xd>scjm0HNNCU*E{5jR~sbRioBym%e_v~d}tn;>6dO<9QLCi)=osBZbZf;{=CT&{HhX*+I;3kY3qbCZ- zOb1buBMNilVkmH+3kLI{J9go2JVu`zWYwFru8g{EeK}X4i{mq9#(&ye+8hPLBfzXC zPfJ=aF{%`>_1-W=7Tvue@urygc(;n&&eCophU7w9S=eHGW7~-2RuI1(>h|-(7B-Vq(+jH1^4I@Zd?C%#9>iEuY}`1q_tvX_5HqEp`51e>wRXBbgsG@5Fu`-|h{t$!Tq8AOC%43Z zbo4GeLtsOpV|Vb~)8_P}{}P;E$<$ZrsD%Txe;{u(<6F^vPBgjHEMI4A{O9t|3Tb_4 z=HeBNH36Z_jY>SjHsJ6jL=bTl5zs0&KAAJ4$8rOnc(h%Tu& zV^TifLqY@i?uJiKgu8f$bjMHDL~GA!Q##i)@$m&$H9V7+YF_+V>U;mByVN!?A?+5rHiS{dW=@y zjJ`khIPpAuZo!D_)7opD^QMMoAp(96miQ}7f|(LEF!m5I?8p>!*zpJHlwzLy_(JGlJ!`~Sjux%z%y&}s&1=&h}?}2I|2r`OZ3X& zkEhoxLyo!BebKH%mpw!&a{Iy^sCBB8t$v@){yuwmH?})=n!zgKmz!PM_xnNmPizts z07gazk1-P%7;Wi@Lk;5db&SO75t_w_$ML$XHrkz zgwnI);APx9%m-gq5!Iym?OmHluJOp}{kT@X z%D${M@H4X3Qry%U^yq>EBdC9pj{J0i(yUz?I6x<*MMZrf8nprUptL{p!>A~_+9l6L z1>>}NCzU*`CS{co3rBF0mqc5|LG7KP&8Evzwo2h?>#o;Gj0Z=c)lJ*V;i4huA|dSn zeio|3Oq5-=Sm^7e9AO*I3e3A1eDqn217+D}So=2o^s^sI_6wdyF_iT`-R+d-CgkaL+<*!=Mh>IDW<0wmQ809Exzp}kv6oz`XvU>A0kCJXAUUP+5CH?N6eu2 z;ui-;1S4?966DWzl{caKZP!R#9#M52J6Q+ELQMtJe_xqiG9x~vP=UkOLr9sxt$s3qEG&!@z#2$+X9whJaZ1S)yx58sRW#O zg&8aJ#e?{`tuej&`ympATzmF7%qLT)57vjp(JBw)ZzCOcFOxp&k%uP|oLH_=9Zi;fwiDNMKEtMWybvz& zQkSh)V^V9JhkVRqQFreavf!Ilym}8e3-yDkX(=ey+G?}wV$=DRtw`DLCeqK7u*t@? zWKIpOP5?f1Lp7=t-C*SK&>>n1mr<9JU%uu7mj=bKXote(iVN=#2(tBa)ssaggT>3W zp69=~eL8Ahdzq&24(Rh}wVM%%=l(`?7sXRi1^6z#GwC zV@sC2`w~yi{WaORF&`HPWcFE9x0=(B7V+%2rA^oL6(UCVtMMehI^wkhz$GuWbHVL( z)k7L|S(8dx%)^FedLE`&7&9 z1mVflM$0_YjpDJB8wy_@2JduT1PLxfixti%G5ugwCSn{cry~fPF<28QkC6!%(#0qa7A8*+s_#&S~DdyT1@gJuETwGnNud1l#C!(P*WAvR~ zqwE}KB}3ivre0d^$#}9y_5K+Oum8;Y&avp1^9d;dW^DP70;lxX(C4r->z_=1ln*kk zGeQMWrg$Rww@aY4u>#*-i9r82a8i69Rii5mQ-@(G$M2y-E}c|@#7+Ie{+Se^0<`#~ zJmOepi<*s*8S4ojQ5thN*@W%eR{yEYZe3md(bT@{;R^fij-Q)xLiW7)--= z%kj}KO`DbY6<5NA|3>a@$;B_voaec9BFlR*L{o^`2X-t?oE

  • %kq5 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
    rJPKGV< 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

    B@$&cv!Eg5<-^2-&gNgV}hjSh6Ua{_r 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�kxW3R!%e6?yaXS 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

    l9vr1SZt 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 O5WTzpR`T)#kpCZ4z?mfg From f4f38ad12adf896b8d29d7bd56e9a41f978e881b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 00:18:14 -0400 Subject: [PATCH 84/94] Minor improvements with KSF loader. Cache version up to 196. --- src/NotesLoaderKSF.cpp | 9 ++++++++- src/Song.cpp | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/NotesLoaderKSF.cpp b/src/NotesLoaderKSF.cpp index aaedf69a9e..1d2735c8ad 100644 --- a/src/NotesLoaderKSF.cpp +++ b/src/NotesLoaderKSF.cpp @@ -20,7 +20,7 @@ static void HandleBunki( TimingData &timing, const float fEarlyBPM, timing.AddSegment( SEGMENT_BPM, new BPMSegment(beat, fCurBPM) ); } -static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, bool bKIUCompliant ) +static bool LoadFromKSFFile( const RString &sPath, Steps &out, Song &song, bool bKIUCompliant ) { LOG->Trace( "Steps::LoadFromKSFFile( '%s' )", sPath.c_str() ); @@ -308,6 +308,13 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, const Song &song, TAP_ORIGINAL_HOLD_HEAD ); } } + /* have this row be the last moment in the song, unless + * a future step ends later. */ + float curTime = stepsTiming.GetElapsedTimeFromBeat(fCurBeat); + if (curTime > song.GetSpecifiedLastSecond()) + { + song.SetSpecifiedLastSecond(curTime); + } break; } diff --git a/src/Song.cpp b/src/Song.cpp index da0b73bcfc..604953e83d 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 195; +const int FILE_CACHE_VERSION = 196; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; @@ -866,7 +866,8 @@ void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache) } } - this->firstSecond = localFirst; + // Yes, for some reason we can have freaky stuff take place here. + this->firstSecond = (localFirst < localLast) ? localFirst : 0; this->lastSecond = localLast; } From 3b475db699b67515a0fe95c7fcb9fb6383721793 Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Tue, 19 Jul 2011 23:42:32 -0600 Subject: [PATCH 85/94] why --- src/TimingData.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 0c8fbd69c5..8c3961c0ca 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -237,15 +237,19 @@ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) { LOG->Trace( "TimingData::SetTickcountAtRow( '%i' , '%i' )", iRow, iTicks ); - unsigned i; + unsigned i = 0; vector &ticks = this->allTimingSegments[SEGMENT_TICKCOUNT]; for( i=0; iGetRow() >= iRow ) break; + // this thing causes an invalid parameter crash TickcountSegment *ts = static_cast(ticks[i]); + LOG->Trace( "Done with that thing again" ); + if( i == ticks.size() || ts->GetRow() != iRow ) { + LOG->Trace( "New TickSegment" ); // No TickcountSegment here. Make a new segment if required. if (i == 0 || static_cast(ticks[i-1])->GetTicks() != iTicks ) @@ -253,12 +257,15 @@ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) } else // TickcountSegment being modified is m_TickcountSegments[i] { + LOG->Trace( "Editing TickSegment" ); if (i > 0 && static_cast(ticks[i-1])->GetTicks() == iTicks ) ticks.erase( ticks.begin()+i, ticks.begin()+i+1 ); else ts->SetTicks(iTicks); } + + LOG->Trace( "DONE" ); } void TimingData::SetComboAtRow( int iRow, int iCombo, int iMiss ) From 71b7dfa3fc57bbc8671af8b44722dacc3a0a4fde Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 10:13:33 -0400 Subject: [PATCH 86/94] Reset to old settings temporarily. --- .../project.pbxproj | 658 +++++++++++++++--- 1 file changed, 569 insertions(+), 89 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 0fae37cc54..36f73f5a4b 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -45,9 +45,9 @@ 2B17AB8A13980FF6001AE57D /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132113773C8E00CC8BBD /* pngwrite.c */; }; 2B17AB8B13980FF6001AE57D /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132213773C8E00CC8BBD /* pngwtran.c */; }; 2B17AB8C13980FF6001AE57D /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132313773C8E00CC8BBD /* pngwutil.c */; }; - 2B17AB9F13981271001AE57D /* libpng-1.5.1sm0.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */; }; + 2B17AB9F13981271001AE57D /* libpng-1.5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */; }; 2B17ABC51398153F001AE57D /* glew.c in Sources */ = {isa = PBXBuildFile; fileRef = EE879BAA132E06C50078FDDC /* glew.c */; }; - 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABC013981521001AE57D /* libglew.a */; }; + 2B17ABCF139815E0001AE57D /* libglew-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABC013981521001AE57D /* libglew-sm5.a */; }; 2B17ABE51398179E001AE57D /* chartables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7904AFD87300D02EE9 /* chartables.c */; }; 2B17ABE61398179E001AE57D /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; 2B17ABE71398179E001AE57D /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7B04AFD87300D02EE9 /* internal.h */; }; @@ -55,8 +55,8 @@ 2B17ABE91398179E001AE57D /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; 2B17ABEA1398179E001AE57D /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7E04AFD87300D02EE9 /* pcre.h */; }; 2B17ABEB1398179E001AE57D /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; - 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; }; - 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; }; + 2B17ABFC139817D5001AE57D /* libpcre-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; }; + 2B17ABFD139817D6001AE57D /* libpcre-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; }; 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; }; 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; }; 2B43509513949F37006FA051 /* TimingSegments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B43509313949F37006FA051 /* TimingSegments.h */; }; @@ -321,7 +321,6 @@ AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; - AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; @@ -535,7 +534,6 @@ AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */; }; AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E006A047711F3005F316C /* ScreenSelectMusic.h */; }; AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0070047711F3005F316C /* ScreenSongOptions.h */; }; - AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007A047711F3005F316C /* ScreenTestFonts.h */; }; AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007C047711F3005F316C /* ScreenTestSound.h */; }; AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007E047711F3005F316C /* ScreenTextEntry.h */; }; AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0080047711F3005F316C /* ScreenTitleMenu.h */; }; @@ -862,7 +860,6 @@ AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; }; AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; }; AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; }; - AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; }; AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; }; AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; }; AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; }; @@ -1142,8 +1139,8 @@ AA77E76508B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */; }; AA77E76708B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */; }; AA77E8B108B6ABD500FA24CA /* vecLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA77E8A108B6ABD500FA24CA /* vecLib.framework */; }; - AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; - AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; + AA7A2BB00AE09CF10054C5BA /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; AA7ADC27072CAB7F00C50A7F /* RageSoundReader_Chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */; }; AA7ADC29072CAB7F00C50A7F /* RageSoundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */; }; AA7C8AFC0B6744F700FD9940 /* bn_error.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A800B6744F600FD9940 /* bn_error.c */; }; @@ -1424,10 +1421,10 @@ AA7C8CF00B67467D00FD9940 /* sober128.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C520B67467D00FD9940 /* sober128.c */; }; AA7C8CF20B67467D00FD9940 /* sprng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C540B67467D00FD9940 /* sprng.c */; }; AA7C8CF30B67467D00FD9940 /* yarrow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C550B67467D00FD9940 /* yarrow.c */; }; - AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; - AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; - AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; }; - AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; }; + AA7C8D1F0B6748E300FD9940 /* libtommath-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; }; + AA7C8D200B6748E400FD9940 /* libtomcrypt-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; }; + AA7C8D430B674F4E00FD9940 /* libtommath-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; }; + AA7C8D440B674F4F00FD9940 /* libtomcrypt-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; }; AA7C8DAE0B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; AA7C8DAF0B68CB2200FD9940 /* GameplayAssist.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */; }; AA7C8DB00B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; }; @@ -1612,8 +1609,8 @@ AAE7804B060814AC0034E65F /* NetworkSyncManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */; }; AAE7808706081A000034E65F /* ezsockets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7808506081A000034E65F /* ezsockets.cpp */; }; AAE7812D0608249E0034E65F /* ActiveAttackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */; }; - AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; - AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; }; + AAE782030AC7E64D00AEFC64 /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; + AAE782040AC7E65200AEFC64 /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; }; AAEBC6CC07A20AFE00793F0E /* RageSurface_Save_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */; }; AAEBC6CE07A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */; }; AAEBC6D007A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */; }; @@ -1661,6 +1658,8 @@ AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; }; AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; + B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */; }; + B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */; }; B75CE3B5137963350076A82D /* SongPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = B75CE3B3137963350076A82D /* SongPosition.h */; }; B75CE3B6137963350076A82D /* SongPosition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B75CE3B4137963350076A82D /* SongPosition.cpp */; }; EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */; }; @@ -1824,9 +1823,9 @@ 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayNormal.h; path = ../src/ScreenGameplayNormal.h; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpng-1.5.1sm0.1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B17ABC013981521001AE57D /* libglew.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libglew.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B17ABE013981756001AE57D /* libpcre.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpcre.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpng-1.5.1-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17ABC013981521001AE57D /* libglew-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libglew-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17ABE013981756001AE57D /* libpcre-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpcre-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; }; 2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; }; 2B43509313949F37006FA051 /* TimingSegments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimingSegments.h; path = ../src/TimingSegments.h; sourceTree = SOURCE_ROOT; }; @@ -2020,7 +2019,7 @@ AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; }; AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; }; AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; }; - AA29CE580558741A00961A51 /* sm-ssc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sm-ssc.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA29CE580558741A00961A51 /* StepMania.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StepMania.app; sourceTree = BUILT_PRODUCTS_DIR; }; AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; }; AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; }; AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; }; @@ -2161,8 +2160,6 @@ AA6E006A047711F3005F316C /* ScreenSelectMusic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectMusic.h; path = ../src/ScreenSelectMusic.h; sourceTree = ""; }; AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSongOptions.cpp; path = ../src/ScreenSongOptions.cpp; sourceTree = ""; }; AA6E0070047711F3005F316C /* ScreenSongOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSongOptions.h; path = ../src/ScreenSongOptions.h; sourceTree = ""; }; - AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestFonts.cpp; path = ../src/ScreenTestFonts.cpp; sourceTree = ""; }; - AA6E007A047711F3005F316C /* ScreenTestFonts.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestFonts.h; path = ../src/ScreenTestFonts.h; sourceTree = ""; }; AA6E007B047711F3005F316C /* ScreenTestSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestSound.cpp; path = ../src/ScreenTestSound.cpp; sourceTree = ""; }; AA6E007C047711F3005F316C /* ScreenTestSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestSound.h; path = ../src/ScreenTestSound.h; sourceTree = ""; }; AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTextEntry.cpp; path = ../src/ScreenTextEntry.cpp; sourceTree = ""; }; @@ -2421,7 +2418,7 @@ AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Chain.h; path = ../src/RageSoundReader_Chain.h; sourceTree = ""; }; AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundUtil.cpp; path = ../src/RageSoundUtil.cpp; sourceTree = ""; }; AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundUtil.h; path = ../src/RageSoundUtil.h; sourceTree = ""; }; - AA7C895F0B67444700FD9940 /* libtommath.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtommath.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C895F0B67444700FD9940 /* libtommath-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libtommath-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AA7C8A800B6744F600FD9940 /* bn_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_error.c; sourceTree = ""; }; AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_invmod.c; sourceTree = ""; }; AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_montgomery_reduce.c; sourceTree = ""; }; @@ -2544,7 +2541,7 @@ AA7C8AF90B6744F700FD9940 /* tommath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath.h; sourceTree = ""; }; AA7C8AFA0B6744F700FD9940 /* tommath_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_class.h; sourceTree = ""; }; AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_superclass.h; sourceTree = ""; }; - AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtomcrypt.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libtomcrypt-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AA7C8B950B67467C00FD9940 /* aes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes.c; sourceTree = ""; }; AA7C8B960B67467C00FD9940 /* aes_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes_tab.c; sourceTree = ""; }; AA7C8B990B67467C00FD9940 /* hash_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash_memory.c; sourceTree = ""; }; @@ -2971,7 +2968,7 @@ AAE7808606081A000034E65F /* ezsockets.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ezsockets.h; path = ../src/ezsockets.h; sourceTree = ""; }; AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActiveAttackList.cpp; path = ../src/ActiveAttackList.cpp; sourceTree = ""; }; AAE7812C0608249E0034E65F /* ActiveAttackList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActiveAttackList.h; path = ../src/ActiveAttackList.h; sourceTree = ""; }; - AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Save_JPEG.cpp; path = ../src/RageSurface_Save_JPEG.cpp; sourceTree = ""; }; AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Save_JPEG.h; path = ../src/RageSurface_Save_JPEG.h; sourceTree = ""; }; AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Dither.cpp; path = ../src/RageSurfaceUtils_Dither.cpp; sourceTree = ""; }; @@ -3056,6 +3053,8 @@ AAFF55220549F43A00D02EE9 /* ComboGraph.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ComboGraph.h; path = ../src/ComboGraph.h; sourceTree = ""; }; AAFF5541054E736D00D02EE9 /* Attack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Attack.cpp; path = ../src/Attack.cpp; sourceTree = ""; }; AAFF5542054E736D00D02EE9 /* Attack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Attack.h; path = ../src/Attack.h; sourceTree = ""; }; + B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InGameLoadingWindow.cpp; path = ../src/InGameLoadingWindow.cpp; sourceTree = ""; }; + B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InGameLoadingWindow.h; path = ../src/InGameLoadingWindow.h; sourceTree = ""; }; B75CE3B3137963350076A82D /* SongPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SongPosition.h; path = ../src/SongPosition.h; sourceTree = SOURCE_ROOT; }; B75CE3B4137963350076A82D /* SongPosition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SongPosition.cpp; path = ../src/SongPosition.cpp; sourceTree = SOURCE_ROOT; }; EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderPMS.cpp; path = ../src/NotesLoaderPMS.cpp; sourceTree = SOURCE_ROOT; }; @@ -3117,15 +3116,15 @@ AA21E47B0A9826CD00684CEA /* libogg_link.a in Frameworks */, AA21E47D0A9826CD00684CEA /* libtheora_link.a in Frameworks */, AA21E47E0A9826CD00684CEA /* libvorbis_link.a in Frameworks */, - AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */, - AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */, - AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */, + AAE782030AC7E64D00AEFC64 /* liblua-5.1-sm5.a in Frameworks */, + AA7C8D200B6748E400FD9940 /* libtomcrypt-sm5.a in Frameworks */, + AA7C8D1F0B6748E300FD9940 /* libtommath-sm5.a in Frameworks */, AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */, AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, AAA071B40CE7C9C9005A3060 /* libmad-sm5.a in Frameworks */, - 2B17AB9F13981271001AE57D /* libpng-1.5.1sm0.1.a in Frameworks */, - 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */, - 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */, + 2B17AB9F13981271001AE57D /* libpng-1.5.1-sm5.a in Frameworks */, + 2B17ABCF139815E0001AE57D /* libglew-sm5.a in Frameworks */, + 2B17ABFC139817D5001AE57D /* libpcre-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3147,12 +3146,12 @@ AA21E4810A9826CD00684CEA /* libogg_link.a in Frameworks */, AA21E4830A9826CD00684CEA /* libtheora_link.a in Frameworks */, AA21E4840A9826CD00684CEA /* libvorbis_link.a in Frameworks */, - AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */, - AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */, - AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */, + AAE782040AC7E65200AEFC64 /* liblua-5.1-sm5.a in Frameworks */, + AA7C8D440B674F4F00FD9940 /* libtomcrypt-sm5.a in Frameworks */, + AA7C8D430B674F4E00FD9940 /* libtommath-sm5.a in Frameworks */, AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */, AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, - 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */, + 2B17ABFD139817D6001AE57D /* libpcre-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3160,7 +3159,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */, + AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3168,7 +3167,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */, + AA7A2BB00AE09CF10054C5BA /* liblua-5.1-sm5.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3233,17 +3232,17 @@ 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( - AA29CE580558741A00961A51 /* sm-ssc.app */, + AA29CE580558741A00961A51 /* StepMania.app */, AA40D52B09A08D660068C0D5 /* sm-ssc.app */, - AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */, + AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */, AA7A2B940AE09B520054C5BA /* lua */, AA7A2BAB0AE09CD50054C5BA /* luac */, - AA7C895F0B67444700FD9940 /* libtommath.a */, - AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */, + AA7C895F0B67444700FD9940 /* libtommath-sm5.a */, + AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */, AAA070A90CE7B0DF005A3060 /* libmad-sm5.a */, - 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */, - 2B17ABC013981521001AE57D /* libglew.a */, - 2B17ABE013981756001AE57D /* libpcre.a */, + 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */, + 2B17ABC013981521001AE57D /* libglew-sm5.a */, + 2B17ABE013981756001AE57D /* libpcre-sm5.a */, ); name = Products; sourceTree = ""; @@ -3536,8 +3535,6 @@ AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */, AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */, AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */, - AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */, - AA6E007A047711F3005F316C /* ScreenTestFonts.h */, AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */, AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */, AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */, @@ -4094,6 +4091,8 @@ AA6EFE9104770E7C005F316C /* GrooveRadar.h */, AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */, AA6EFE9504770E7C005F316C /* HelpDisplay.h */, + B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */, + B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */, AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */, AA729C470599B54D00779F33 /* MemoryCardDisplay.h */, AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */, @@ -5148,6 +5147,7 @@ 2B9C2E8E137A138B004C92F3 /* NotesLoaderJson.h in Headers */, 2B9C2E90137A138B004C92F3 /* NotesWriterJson.h in Headers */, 2B43509513949F37006FA051 /* TimingSegments.h in Headers */, + B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5276,7 +5276,6 @@ AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */, AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */, AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */, - AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */, AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */, AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */, AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */, @@ -5673,7 +5672,7 @@ ); name = png; productName = png; - productReference = 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */; + productReference = 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */; productType = "com.apple.product-type.library.static"; }; 2B17ABBF13981521001AE57D /* glew */ = { @@ -5690,7 +5689,7 @@ ); name = glew; productName = glew; - productReference = 2B17ABC013981521001AE57D /* libglew.a */; + productReference = 2B17ABC013981521001AE57D /* libglew-sm5.a */; productType = "com.apple.product-type.library.static"; }; 2B17ABDF13981756001AE57D /* pcre */ = { @@ -5707,7 +5706,7 @@ ); name = pcre; productName = pcre; - productReference = 2B17ABE013981756001AE57D /* libpcre.a */; + productReference = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; productType = "com.apple.product-type.library.static"; }; AA29CC240558741A00961A51 /* stepmania */ = { @@ -5737,7 +5736,7 @@ name = stepmania; productInstallPath = "$(HOME)/Applications"; productName = "SDL App"; - productReference = AA29CE580558741A00961A51 /* sm-ssc.app */; + productReference = AA29CE580558741A00961A51 /* StepMania.app */; productType = "com.apple.product-type.application"; }; AA40D1B409A08D650068C0D5 /* stepmania-bare */ = { @@ -5815,7 +5814,7 @@ ); name = tommath; productName = tommath; - productReference = AA7C895F0B67444700FD9940 /* libtommath.a */; + productReference = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; productType = "com.apple.product-type.library.static"; }; AA7C8B8A0B67460600FD9940 /* tomcrypt */ = { @@ -5832,7 +5831,7 @@ ); name = tomcrypt; productName = tomcrypt; - productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; + productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; productType = "com.apple.product-type.library.static"; }; AAA070A80CE7B0DF005A3060 /* mad */ = { @@ -5866,7 +5865,7 @@ ); name = "lua-5.1"; productName = "lua-5.1"; - productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; + productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -5874,7 +5873,7 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; - buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; compatibilityVersion = "Xcode 3.1"; developmentRegion = English; hasScannedForEncodings = 1; @@ -6200,7 +6199,6 @@ AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */, AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */, AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */, - AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */, AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */, AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */, AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */, @@ -6489,6 +6487,7 @@ 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */, 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */, 2B43509613949F37006FA051 /* TimingSegments.cpp in Sources */, + B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6607,7 +6606,6 @@ AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */, AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */, AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */, - AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */, AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */, AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */, AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */, @@ -7374,7 +7372,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; + PRODUCT_NAME = "png-1.5.1-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Native; @@ -7418,11 +7416,55 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; + PRODUCT_NAME = "png-1.5.1-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = PerformanceDebug; }; + 2B17AB7513980FE0001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/libpng/**"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "png-1.5.1-sm5"; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Universal; + }; 2B17AB7613980FE0001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7465,7 +7507,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1sm0.1"; + PRODUCT_NAME = "png-1.5.1-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Debug; @@ -7508,7 +7550,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = glew; + PRODUCT_NAME = "glew-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Native; @@ -7551,11 +7593,54 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = glew; + PRODUCT_NAME = "glew-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = PerformanceDebug; }; + 2B17ABC313981522001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "glew-sm5"; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Universal; + }; 2B17ABC413981522001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7597,7 +7682,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = glew; + PRODUCT_NAME = "glew-sm5"; USER_HEADER_SEARCH_PATHS = ""; }; name = Debug; @@ -7621,7 +7706,6 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7640,7 +7724,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = pcre; + PRODUCT_NAME = "pcre-sm5"; }; name = Native; }; @@ -7663,7 +7747,6 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7682,10 +7765,51 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = pcre; + PRODUCT_NAME = "pcre-sm5"; }; name = PerformanceDebug; }; + 2B17ABE313981757001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = ""; + GCC_PREFIX_HEADER = ""; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "pcre-sm5"; + }; + name = Universal; + }; 2B17ABE413981757001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7708,7 +7832,6 @@ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; GCC_WARN_ABOUT_RETURN_TYPE = NO; GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_CHECK_SWITCH_STATEMENTS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; GCC_WARN_MISSING_PARENTHESES = NO; @@ -7727,7 +7850,7 @@ INSTALL_PATH = /usr/local/lib; OTHER_LDFLAGS = ""; PREBINDING = NO; - PRODUCT_NAME = pcre; + PRODUCT_NAME = "pcre-sm5"; }; name = Debug; }; @@ -7739,7 +7862,6 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -7764,6 +7886,7 @@ buildSettings = { CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_AUTO_VECTORIZATION = NO; GCC_ENABLE_SSE3_EXTENSIONS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; @@ -7790,10 +7913,12 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", "-fconstant-cfstrings", "-fno-exceptions", + "-falign-loops=16", ); - PRODUCT_NAME = "$(value)"; + PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; }; @@ -7817,6 +7942,7 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -7847,10 +7973,14 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -7907,6 +8037,55 @@ }; name = Native; }; + AA40D52909A08D650068C0D5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", + ); + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NO_MP3_SUPPORT, + WITHOUT_NETWORKING, + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/Libraries", + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fsingle-precision-constant", + "-fno-exceptions", + ); + PRODUCT_NAME = "$(value)"; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -7977,6 +8156,25 @@ }; name = Native; }; + AA7A2B9B0AE09BA50054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + LUA_USE_MACOSX, + "$(value)", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = lua; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8012,6 +8210,22 @@ }; name = Native; }; + AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; + OBJROOT = "$(SRCROOT)/build"; + PRODUCT_NAME = luac; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8031,11 +8245,17 @@ AA7A2BBE0AE09D4E0054C5BA /* Native */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Native; }; + AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "all lua"; + }; + name = Universal; + }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8043,7 +8263,6 @@ GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = Debug; @@ -8059,11 +8278,27 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; + PRODUCT_NAME = "tommath-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Native; }; + AA7C89830B67447E00FD9940 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DYNAMIC_NO_PIC = YES; + GCC_MODEL_TUNING = G5; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + INSTALL_PATH = /usr/local/lib; + PRODUCT_NAME = "tommath-sm5"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8077,7 +8312,7 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; + PRODUCT_NAME = "tommath-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Debug; @@ -8095,12 +8330,12 @@ GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; + PRODUCT_NAME = "tomcrypt-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Native; }; - AA7C8B910B67464300FD9940 /* Debug */ = { + AA7C8B900B67464300FD9940 /* Universal */ = { isa = XCBuildConfiguration; buildSettings = { CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; @@ -8113,7 +8348,29 @@ GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; + PRODUCT_NAME = "tomcrypt-sm5"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; + AA7C8B910B67464300FD9940 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = NO; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_RTTI = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + LTC_NO_ROLC, + "DEBUG=1", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + INSTALL_PATH = /usr/local/lib; + KEEP_PRIVATE_EXTERNS = YES; + PRODUCT_NAME = "tomcrypt-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Debug; @@ -8192,6 +8449,43 @@ }; name = PerformanceDebug; }; + AAA070AC0CE7B0E2005A3060 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + FPM = ""; + "FPM[arch=i386]" = FPM_INTEL; + "FPM[arch=ppc]" = FPM_PPC; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PREPROCESSOR_DEFINITIONS = ( + "HAVE_ASSERT_H=1", + "HAVE_DLFCN_H=1", + "HAVE_ERRNO_H=1", + "HAVE_FORK=1", + "HAVE_INTTYPES_H=1", + "HAVE_LIMITS_H=1", + "HAVE_MEMORY_H=1", + "HAVE_WAITPID=1", + "SIZEOF_LONG=4", + "$(FPM)", + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; + INSTALL_PATH = /usr/local/lib; + PREBINDING = NO; + PRODUCT_NAME = "mad-sm5"; + }; + name = Universal; + }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8249,6 +8543,7 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8278,10 +8573,14 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8297,6 +8596,7 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = stabs; FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_AUTO_VECTORIZATION = NO; GCC_ENABLE_SSE3_EXTENSIONS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; @@ -8324,10 +8624,12 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", "-fconstant-cfstrings", "-fno-exceptions", + "-falign-loops=16", ); - PRODUCT_NAME = "$(value)"; + PRODUCT_NAME = StepMania; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; @@ -8342,7 +8644,6 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8431,7 +8732,7 @@ INSTALL_PATH = /usr/local/lib; OBJROOT = "$(SRCROOT)/build"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; + PRODUCT_NAME = "lua-5.1-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = PerformanceDebug; @@ -8474,7 +8775,6 @@ AABF4DC10CD37960005A3060 /* PerformanceDebug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; PRODUCT_NAME = "all lua"; }; name = PerformanceDebug; @@ -8490,7 +8790,7 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = tommath; + PRODUCT_NAME = "tommath-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = PerformanceDebug; @@ -8508,7 +8808,7 @@ GCC_WARN_PROTOTYPE_CONVERSION = NO; INSTALL_PATH = /usr/local/lib; KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = tomcrypt; + PRODUCT_NAME = "tomcrypt-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = PerformanceDebug; @@ -8521,7 +8821,6 @@ GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_SHADOW = NO; GCC_WARN_SIGN_COMPARE = YES; @@ -8546,7 +8845,9 @@ buildSettings = { CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; @@ -8570,10 +8871,12 @@ LINKER_DISPLAYS_MANGLED_NAMES = NO; OBJROOT = "$(SRCROOT)/build"; OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", "-fconstant-cfstrings", "-fno-exceptions", + "-falign-loops=16", ); - PRODUCT_NAME = "$(value)"; + PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; }; @@ -8596,6 +8899,7 @@ GCC_FAST_OBJC_DISPATCH = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 3; GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8625,10 +8929,14 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8636,6 +8944,138 @@ }; name = Native; }; + AAE44A2B0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PRODUCT_NAME = version; + ZERO_LINK = NO; + }; + name = Universal; + }; + AAE44A2C0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; + FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; + GCC_AUTO_VECTORIZATION = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = NO; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../src", + "$(SRCROOT)/../src/ffmpeg/include", + "$(SRCROOT)/../src/vorbis", + "$(SRCROOT)/../src/libjpeg", + "$(SRCROOT)/../src/libpng/include", + ); + INFOPLIST_FILE = "Info-StepMania.plist"; + INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; + INFOPLIST_PREPROCESS = YES; + INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/build/$(CONFIGURATION)", + "$(SRCROOT)/Libraries", + "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + OBJROOT = "$(SRCROOT)/build"; + OTHER_CPLUSPLUSFLAGS = ( + "-finline-limit=300", + "-fconstant-cfstrings", + "-fno-exceptions", + "-falign-loops=16", + ); + PRODUCT_NAME = StepMania; + SYMROOT = "$(SRCROOT)/.."; + WRAPPER_EXTENSION = app; + }; + name = Universal; + }; + AAE44A2D0965707500B025E5 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + BUILD_VARIANTS = normal; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.framework *.gch *.xcode* (*) CVS .svn .hg .git"; + GCC_ALTIVEC_EXTENSIONS = YES; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_STRICT_ALIASING = YES; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; + GCC_WARN_PROTOTYPE_CONVERSION = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LINKER_DISPLAYS_MANGLED_NAMES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; + MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; + ONLY_LINK_ESSENTIAL_SYMBOLS = YES; + PREBINDING = NO; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; + SDKROOT = macosx10.5; + SDKROOT_i386 = ""; + SDKROOT_ppc = ""; + SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; + USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include"; + }; + name = Universal; + }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8657,11 +9097,37 @@ INSTALL_PATH = /usr/local/lib; OBJROOT = "$(SRCROOT)/build"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; + PRODUCT_NAME = "lua-5.1-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Native; }; + AAE781810AC7E3BF00AEFC64 /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = YES; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(value)", + LUA_USE_MACOSX, + ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + INSTALL_PATH = /usr/local/lib; + OBJROOT = "$(SRCROOT)/build"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "lua-5.1-sm5"; + SYMROOT = "$(SRCROOT)/build"; + }; + name = Universal; + }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8683,7 +9149,7 @@ INSTALL_PATH = /usr/local/lib; OBJROOT = "$(SRCROOT)/build"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1"; + PRODUCT_NAME = "lua-5.1-sm5"; SYMROOT = "$(SRCROOT)/build"; }; name = Debug; @@ -8696,6 +9162,7 @@ buildConfigurations = ( 2B17AB7313980FE0001AE57D /* Native */, 2B17AB7413980FE0001AE57D /* PerformanceDebug */, + 2B17AB7513980FE0001AE57D /* Universal */, 2B17AB7613980FE0001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8706,6 +9173,7 @@ buildConfigurations = ( 2B17ABC113981522001AE57D /* Native */, 2B17ABC213981522001AE57D /* PerformanceDebug */, + 2B17ABC313981522001AE57D /* Universal */, 2B17ABC413981522001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8716,6 +9184,7 @@ buildConfigurations = ( 2B17ABE113981757001AE57D /* Native */, 2B17ABE213981757001AE57D /* PerformanceDebug */, + 2B17ABE313981757001AE57D /* Universal */, 2B17ABE413981757001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8726,6 +9195,7 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, + AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8736,6 +9206,7 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, + AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8746,6 +9217,7 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, + AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8756,6 +9228,7 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, + AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8766,6 +9239,7 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, + AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8776,6 +9250,7 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, + AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8786,6 +9261,7 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, + AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8796,6 +9272,7 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, + AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8806,16 +9283,18 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, + AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Native; }; - AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */ = { + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { isa = XCConfigurationList; buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, + AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -8826,6 +9305,7 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, + AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From 87c16e95619d73d9e4999bc2f719786bf3164187 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 10:23:40 -0400 Subject: [PATCH 87/94] [Xcode4] Fails to link. illegal text reloc. This is an architecture issue: i386 for RageUtil.o, random_access_iterator_tag. Some help is going to be needed. --- .../project.pbxproj | 472 +----------------- 1 file changed, 2 insertions(+), 470 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 36f73f5a4b..9c07554a6f 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -5873,7 +5873,7 @@ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; - buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */; + buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */; compatibilityVersion = "Xcode 3.1"; developmentRegion = English; hasScannedForEncodings = 1; @@ -7421,50 +7421,6 @@ }; name = PerformanceDebug; }; - 2B17AB7513980FE0001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/libpng/**"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "png-1.5.1-sm5"; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17AB7613980FE0001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7598,49 +7554,6 @@ }; name = PerformanceDebug; }; - 2B17ABC313981522001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "glew-sm5"; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Universal; - }; 2B17ABC413981522001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7769,47 +7682,6 @@ }; name = PerformanceDebug; }; - 2B17ABE313981757001AE57D /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PRECOMPILE_PREFIX_HEADER = ""; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_NEWLINE = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; - GCC_WARN_MISSING_PARENTHESES = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; - GCC_WARN_UNDECLARED_SELECTOR = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_VALUE = NO; - GCC_WARN_UNUSED_VARIABLE = NO; - INSTALL_PATH = /usr/local/lib; - OTHER_LDFLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = "pcre-sm5"; - }; - name = Universal; - }; 2B17ABE413981757001AE57D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -7974,13 +7846,11 @@ LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -8037,55 +7907,6 @@ }; name = Native; }; - AA40D52909A08D650068C0D5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SRCROOT)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks", - ); - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - NO_MP3_SUPPORT, - WITHOUT_NETWORKING, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/Frameworks/ffmpeg.framework/Headers", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - "$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/A/Headers", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/Libraries", - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fsingle-precision-constant", - "-fno-exceptions", - ); - PRODUCT_NAME = "$(value)"; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; AA40D52A09A08D660068C0D5 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; @@ -8156,25 +7977,6 @@ }; name = Native; }; - AA7A2B9B0AE09BA50054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - LUA_USE_MACOSX, - "$(value)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = lua; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2B9C0AE09BA50054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8210,22 +8012,6 @@ }; name = Native; }; - AA7A2BBB0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)"; - OBJROOT = "$(SRCROOT)/build"; - PRODUCT_NAME = luac; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7A2BBC0AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8249,13 +8035,6 @@ }; name = Native; }; - AA7A2BBF0AE09D4E0054C5BA /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "all lua"; - }; - name = Universal; - }; AA7A2BC00AE09D4E0054C5BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8283,22 +8062,6 @@ }; name = Native; }; - AA7C89830B67447E00FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DYNAMIC_NO_PIC = YES; - GCC_MODEL_TUNING = G5; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - PRODUCT_NAME = "tommath-sm5"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C89840B67447E00FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8335,24 +8098,6 @@ }; name = Native; }; - AA7C8B900B67464300FD9940 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - DEAD_CODE_STRIPPING = NO; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - INSTALL_PATH = /usr/local/lib; - KEEP_PRIVATE_EXTERNS = YES; - PRODUCT_NAME = "tomcrypt-sm5"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AA7C8B910B67464300FD9940 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8449,43 +8194,6 @@ }; name = PerformanceDebug; }; - AAA070AC0CE7B0E2005A3060 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - FPM = ""; - "FPM[arch=i386]" = FPM_INTEL; - "FPM[arch=ppc]" = FPM_PPC; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ( - "HAVE_ASSERT_H=1", - "HAVE_DLFCN_H=1", - "HAVE_ERRNO_H=1", - "HAVE_FORK=1", - "HAVE_INTTYPES_H=1", - "HAVE_LIMITS_H=1", - "HAVE_MEMORY_H=1", - "HAVE_WAITPID=1", - "SIZEOF_LONG=4", - "$(FPM)", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../src/mad-0.15.1b"; - INSTALL_PATH = /usr/local/lib; - PREBINDING = NO; - PRODUCT_NAME = "mad-sm5"; - }; - name = Universal; - }; AAA070AD0CE7B0E2005A3060 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8574,13 +8282,11 @@ LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8930,13 +8636,11 @@ LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; SDKROOT_i386 = ""; - SDKROOT_ppc = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8944,138 +8648,6 @@ }; name = Native; }; - AAE44A2B0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.5; - PRODUCT_NAME = version; - ZERO_LINK = NO; - }; - name = Universal; - }; - AAE44A2C0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA8B8C49091F48C000D14C5F /* product.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; - FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)"; - GCC_AUTO_VECTORIZATION = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_ENABLE_SSE3_EXTENSIONS = NO; - GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch"; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/../src", - "$(SRCROOT)/../src/ffmpeg/include", - "$(SRCROOT)/../src/vorbis", - "$(SRCROOT)/../src/libjpeg", - "$(SRCROOT)/../src/libpng/include", - ); - INFOPLIST_FILE = "Info-StepMania.plist"; - INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/../src/ProductInfo.h"; - INFOPLIST_PREPROCESS = YES; - INFOPLIST_PREPROCESSOR_DEFINITIONS = "EXECUTABLE_NAME=\"$(PRODUCT_NAME)\""; - LIBRARY_SEARCH_PATHS = ( - "$(SRCROOT)/build/$(CONFIGURATION)", - "$(SRCROOT)/Libraries", - "\"$(SRCROOT)/../extern/mad-0.15.1b/msvc++/Release\"", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build\""; - LINKER_DISPLAYS_MANGLED_NAMES = NO; - OBJROOT = "$(SRCROOT)/build"; - OTHER_CPLUSPLUSFLAGS = ( - "-finline-limit=300", - "-fconstant-cfstrings", - "-fno-exceptions", - "-falign-loops=16", - ); - PRODUCT_NAME = StepMania; - SYMROOT = "$(SRCROOT)/.."; - WRAPPER_EXTENSION = app; - }; - name = Universal; - }; - AAE44A2D0965707500B025E5 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - BUILD_VARIANTS = normal; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.framework *.gch *.xcode* (*) CVS .svn .hg .git"; - GCC_ALTIVEC_EXTENSIONS = YES; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_FAST_MATH = NO; - GCC_FAST_OBJC_DISPATCH = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_INLINES_ARE_PRIVATE_EXTERN = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_STRICT_ALIASING = YES; - GCC_UNROLL_LOOPS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PROTOTYPE_CONVERSION = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LINKER_DISPLAYS_MANGLED_NAMES = YES; - MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.5; - ONLY_LINK_ESSENTIAL_SYMBOLS = YES; - PREBINDING = NO; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; - SDKROOT = macosx10.5; - SDKROOT_i386 = ""; - SDKROOT_ppc = ""; - SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; - STRIP_INSTALLED_PRODUCT = YES; - STRIP_STYLE = "non-global"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include"; - }; - name = Universal; - }; AAE781800AC7E3BF00AEFC64 /* Native */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9102,32 +8674,6 @@ }; name = Native; }; - AAE781810AC7E3BF00AEFC64 /* Universal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = YES; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(value)", - LUA_USE_MACOSX, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = NO; - INSTALL_PATH = /usr/local/lib; - OBJROOT = "$(SRCROOT)/build"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "lua-5.1-sm5"; - SYMROOT = "$(SRCROOT)/build"; - }; - name = Universal; - }; AAE781820AC7E3BF00AEFC64 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9162,7 +8708,6 @@ buildConfigurations = ( 2B17AB7313980FE0001AE57D /* Native */, 2B17AB7413980FE0001AE57D /* PerformanceDebug */, - 2B17AB7513980FE0001AE57D /* Universal */, 2B17AB7613980FE0001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9173,7 +8718,6 @@ buildConfigurations = ( 2B17ABC113981522001AE57D /* Native */, 2B17ABC213981522001AE57D /* PerformanceDebug */, - 2B17ABC313981522001AE57D /* Universal */, 2B17ABC413981522001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9184,7 +8728,6 @@ buildConfigurations = ( 2B17ABE113981757001AE57D /* Native */, 2B17ABE213981757001AE57D /* PerformanceDebug */, - 2B17ABE313981757001AE57D /* Universal */, 2B17ABE413981757001AE57D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9195,7 +8738,6 @@ buildConfigurations = ( AA40D52809A08D650068C0D5 /* Native */, AABF4DBD0CD37960005A3060 /* PerformanceDebug */, - AA40D52909A08D650068C0D5 /* Universal */, AA40D52A09A08D660068C0D5 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9206,7 +8748,6 @@ buildConfigurations = ( AA7A2B9A0AE09BA50054C5BA /* Native */, AABF4DBF0CD37960005A3060 /* PerformanceDebug */, - AA7A2B9B0AE09BA50054C5BA /* Universal */, AA7A2B9C0AE09BA50054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9217,7 +8758,6 @@ buildConfigurations = ( AA7A2BBA0AE09D4E0054C5BA /* Native */, AABF4DC00CD37960005A3060 /* PerformanceDebug */, - AA7A2BBB0AE09D4E0054C5BA /* Universal */, AA7A2BBC0AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9228,7 +8768,6 @@ buildConfigurations = ( AA7A2BBE0AE09D4E0054C5BA /* Native */, AABF4DC10CD37960005A3060 /* PerformanceDebug */, - AA7A2BBF0AE09D4E0054C5BA /* Universal */, AA7A2BC00AE09D4E0054C5BA /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9239,7 +8778,6 @@ buildConfigurations = ( AA7C89820B67447E00FD9940 /* Native */, AABF4DC20CD37960005A3060 /* PerformanceDebug */, - AA7C89830B67447E00FD9940 /* Universal */, AA7C89840B67447E00FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9250,7 +8788,6 @@ buildConfigurations = ( AA7C8B8F0B67464300FD9940 /* Native */, AABF4DC30CD37960005A3060 /* PerformanceDebug */, - AA7C8B900B67464300FD9940 /* Universal */, AA7C8B910B67464300FD9940 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9261,7 +8798,6 @@ buildConfigurations = ( AAA070AA0CE7B0E2005A3060 /* Native */, AAA070AB0CE7B0E2005A3060 /* PerformanceDebug */, - AAA070AC0CE7B0E2005A3060 /* Universal */, AAA070AD0CE7B0E2005A3060 /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9272,7 +8808,6 @@ buildConfigurations = ( AAC8450D0856A19700A9FEAB /* Native */, AABF4DBC0CD37960005A3060 /* PerformanceDebug */, - AAE44A2B0965707500B025E5 /* Universal */, AA0AA8FE0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9283,18 +8818,16 @@ buildConfigurations = ( AAC845110856A19700A9FEAB /* Native */, AABF4DBB0CD37960005A3060 /* PerformanceDebug */, - AAE44A2C0965707500B025E5 /* Universal */, AA0AA8FF0963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Native; }; - AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */ = { + AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania_xcode4" */ = { isa = XCConfigurationList; buildConfigurations = ( AAC845150856A19700A9FEAB /* Native */, AABF4DBA0CD37960005A3060 /* PerformanceDebug */, - AAE44A2D0965707500B025E5 /* Universal */, AA0AA9000963CF7700427F4D /* Debug */, ); defaultConfigurationIsVisible = 0; @@ -9305,7 +8838,6 @@ buildConfigurations = ( AAE781800AC7E3BF00AEFC64 /* Native */, AABF4DBE0CD37960005A3060 /* PerformanceDebug */, - AAE781810AC7E3BF00AEFC64 /* Universal */, AAE781820AC7E3BF00AEFC64 /* Debug */, ); defaultConfigurationIsVisible = 0; From dbdab4759e29dbb65cabdf6bf08d74aa59844120 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 11:11:04 -0400 Subject: [PATCH 88/94] [Xcode4] May as well fix switch warnings. Still need some assistance for the linker error. --- src/Actor.cpp | 13 +- src/BGAnimationLayer.cpp | 10 +- src/Course.cpp | 10 +- src/DancingCharacters.cpp | 9 +- src/EditMenu.cpp | 8 +- src/GameCommand.cpp | 34 +- src/GameState.cpp | 35 +- src/Inventory.cpp | 19 +- src/LifeMeterBar.cpp | 13 +- src/MemoryCardManager.cpp | 62 ++-- src/MusicWheel.cpp | 344 +++++++++---------- src/NoteData.cpp | 10 +- src/NoteDataUtil.cpp | 20 +- src/NoteField.cpp | 1 + src/NotesLoaderBMS.cpp | 6 +- src/NotesLoaderJson.cpp | 1 + src/NotesLoaderMidi.cpp | 11 +- src/NotesWriterDWI.cpp | 7 +- src/OptionRow.cpp | 30 +- src/PaneDisplay.cpp | 124 +++---- src/Player.cpp | 60 ++-- src/PlayerStageStats.cpp | 25 +- src/RageDisplay_Legacy.cpp | 41 +-- src/RageSound.cpp | 19 +- src/RageSoundReader_FileReader.cpp | 21 +- src/RageSurface_Load.cpp | 19 +- src/ScoreKeeperRave.cpp | 5 +- src/Screen.cpp | 1 + src/ScreenAttract.cpp | 61 ++-- src/ScreenContinue.cpp | 27 +- src/ScreenDebugOverlay.cpp | 9 +- src/ScreenEdit.cpp | 1 + src/ScreenEditMenu.cpp | 43 +-- src/ScreenEnding.cpp | 16 +- src/ScreenEvaluation.cpp | 50 +-- src/ScreenGameplay.cpp | 530 +++++++++++++++-------------- src/ScreenJukebox.cpp | 10 +- src/ScreenOptions.cpp | 72 ++-- src/ScreenPrompt.cpp | 43 +-- src/ScreenRanking.cpp | 17 +- src/ScreenSelectCharacter.cpp | 52 +-- src/ScreenSelectMusic.cpp | 31 +- src/ScreenSyncOverlay.cpp | 60 ++-- src/ScreenTestInput.cpp | 17 +- src/ScreenTestLights.cpp | 13 +- src/ScreenTestSound.cpp | 87 ++--- src/ScreenTextEntry.cpp | 9 +- src/SongManager.cpp | 11 +- src/StageStats.cpp | 7 +- src/StepMania.cpp | 43 +-- src/UnlockManager.cpp | 25 +- 51 files changed, 1159 insertions(+), 1033 deletions(-) diff --git a/src/Actor.cpp b/src/Actor.cpp index d7e8f3f4b2..917f4cc45f 100644 --- a/src/Actor.cpp +++ b/src/Actor.cpp @@ -722,12 +722,13 @@ void Actor::UpdateInternal( float fDeltaTime ) // todo: account for SSC_FUTURES -aj switch( m_Effect ) { - case spin: - m_current.rotation += m_fEffectDelta*m_vEffectMagnitude; - wrap( m_current.rotation.x, 360 ); - wrap( m_current.rotation.y, 360 ); - wrap( m_current.rotation.z, 360 ); - break; + case spin: + m_current.rotation += m_fEffectDelta*m_vEffectMagnitude; + wrap( m_current.rotation.x, 360 ); + wrap( m_current.rotation.y, 360 ); + wrap( m_current.rotation.z, 360 ); + break; + default: break; } UpdateTweening( fDeltaTime ); diff --git a/src/BGAnimationLayer.cpp b/src/BGAnimationLayer.cpp index 42a09a5571..d7ff56ca07 100644 --- a/src/BGAnimationLayer.cpp +++ b/src/BGAnimationLayer.cpp @@ -189,11 +189,11 @@ void BGAnimationLayer::LoadFromAniLayerFile( const RString& sPath ) switch( effect ) { - case EFFECT_STRETCH_SCROLL_LEFT: m_fTexCoordVelocityX = +0.5f; m_fTexCoordVelocityY = 0; break; - case EFFECT_STRETCH_SCROLL_RIGHT: m_fTexCoordVelocityX = -0.5f; m_fTexCoordVelocityY = 0; break; - case EFFECT_STRETCH_SCROLL_UP: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = +0.5f; break; - case EFFECT_STRETCH_SCROLL_DOWN: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = -0.5f; break; - break; + case EFFECT_STRETCH_SCROLL_LEFT: m_fTexCoordVelocityX = +0.5f; m_fTexCoordVelocityY = 0; break; + case EFFECT_STRETCH_SCROLL_RIGHT: m_fTexCoordVelocityX = -0.5f; m_fTexCoordVelocityY = 0; break; + case EFFECT_STRETCH_SCROLL_UP: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = +0.5f; break; + case EFFECT_STRETCH_SCROLL_DOWN: m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = -0.5f; break; + default: break; } } break; diff --git a/src/Course.cpp b/src/Course.cpp index 8993e8b44b..bfe93c1e70 100644 --- a/src/Course.cpp +++ b/src/Course.cpp @@ -429,12 +429,14 @@ bool Course::GetTrailUnsorted( StepsType st, CourseDifficulty cd, Trail &trail ) { trail.Init(); + // XXX: Why are beginner and challenge excluded here? -Wolfman2000 switch( cd ) { - case Difficulty_Beginner: - return false; - case Difficulty_Challenge: - return false; + case Difficulty_Beginner: + return false; + case Difficulty_Challenge: + return false; + default: break; } // Construct a new Trail, add it to the cache, then return it. diff --git a/src/DancingCharacters.cpp b/src/DancingCharacters.cpp index 403277580c..6b2228e267 100644 --- a/src/DancingCharacters.cpp +++ b/src/DancingCharacters.cpp @@ -131,10 +131,11 @@ DancingCharacters::DancingCharacters(): m_bDrawDangerLight(false), switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - m_pCharacter[p]->SetRotationY( MODEL_ROTATIONY_TWO_PLAYERS[p] ); - break; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + m_pCharacter[p]->SetRotationY( MODEL_ROTATIONY_TWO_PLAYERS[p] ); + default: + break; } m_pCharacter[p]->LoadMilkshapeAscii( pChar->GetModelPath() ); diff --git a/src/EditMenu.cpp b/src/EditMenu.cpp index 274ff975b8..72076ba71b 100644 --- a/src/EditMenu.cpp +++ b/src/EditMenu.cpp @@ -275,12 +275,12 @@ bool EditMenu::RowIsSelectable( EditMenuRow row ) { switch( row ) { - case ROW_SOURCE_STEPS_TYPE: - case ROW_SOURCE_STEPS: - return false; + case ROW_SOURCE_STEPS_TYPE: + case ROW_SOURCE_STEPS: + return false; + default: return true; } } - return true; } diff --git a/src/GameCommand.cpp b/src/GameCommand.cpp index 0f6ac72104..a78091761e 100644 --- a/src/GameCommand.cpp +++ b/src/GameCommand.cpp @@ -465,22 +465,21 @@ static bool AreStyleAndPlayModeCompatible( const Style *style, PlayMode pm ) switch( pm ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - // Can't play rave if there isn't enough room for two players. - // This is correct for dance (ie, no rave for solo and doubles), - // and should be okay for pump.. not sure about other game types. - // Techno Motion scales down versus arrows, though, so allow this. - if( style->m_iColsPerPlayer >= 6 && RString(GAMESTATE->m_pCurGame->m_szName) != "techno" ) - return false; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + // Can't play rave if there isn't enough room for two players. + // This is correct for dance (ie, no rave for solo and doubles), + // and should be okay for pump.. not sure about other game types. + // Techno Motion scales down versus arrows, though, so allow this. + if( style->m_iColsPerPlayer >= 6 && RString(GAMESTATE->m_pCurGame->m_szName) != "techno" ) + return false; - // Don't allow battle modes if the style takes both sides. - if( style->m_StyleType==StyleType_OnePlayerTwoSides || - style->m_StyleType==StyleType_TwoPlayersSharedSides ) - return false; + // Don't allow battle modes if the style takes both sides. + if( style->m_StyleType==StyleType_OnePlayerTwoSides || + style->m_StyleType==StyleType_TwoPlayersSharedSides ) + return false; + default: return true; } - - return true; } bool GameCommand::IsPlayable( RString *why ) const @@ -500,9 +499,10 @@ bool GameCommand::IsPlayable( RString *why ) const switch( GAMESTATE->GetCoinMode() ) { - case CoinMode_Home: - case CoinMode_Free: - iCredits = NUM_PLAYERS; // not iNumCreditsPaid + case CoinMode_Home: + case CoinMode_Free: + iCredits = NUM_PLAYERS; // not iNumCreditsPaid + default: break; } /* With PREFSMAN->m_bDelayedCreditsReconcile disabled, enough credits must diff --git a/src/GameState.cpp b/src/GameState.cpp index 35d61decd0..ff265e5f5b 100644 --- a/src/GameState.cpp +++ b/src/GameState.cpp @@ -747,7 +747,9 @@ void GameState::CancelStage() { case PLAY_MODE_BATTLE: case PLAY_MODE_RAVE: - m_iPlayerStageTokens[p] = PREFSMAN->m_iSongsPerPlay; + m_iPlayerStageTokens[p] = PREFSMAN->m_iSongsPerPlay; + default: + break; } } @@ -1169,12 +1171,12 @@ bool GameState::IsPlayerEnabled( PlayerNumber pn ) const // In rave, all players are present. Non-human players are CPU controlled. switch( m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - return true; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + return true; + default: + return IsHumanPlayer(pn); } - - return IsHumanPlayer( pn ); } bool GameState::IsMultiPlayerEnabled( MultiPlayer mp ) const @@ -1346,16 +1348,17 @@ StageResult GameState::GetStageResult( PlayerNumber pn ) const { switch( m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - if( fabsf(m_fTugLifePercentP1 - 0.5f) < 0.0001f ) - return RESULT_DRAW; - switch( pn ) - { - case PLAYER_1: return (m_fTugLifePercentP1>=0.5f)?RESULT_WIN:RESULT_LOSE; - case PLAYER_2: return (m_fTugLifePercentP1<0.5f)?RESULT_WIN:RESULT_LOSE; - default: ASSERT(0); return RESULT_LOSE; - } + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + if( fabsf(m_fTugLifePercentP1 - 0.5f) < 0.0001f ) + return RESULT_DRAW; + switch( pn ) + { + case PLAYER_1: return (m_fTugLifePercentP1>=0.5f)?RESULT_WIN:RESULT_LOSE; + case PLAYER_2: return (m_fTugLifePercentP1<0.5f)?RESULT_WIN:RESULT_LOSE; + default: FAIL_M("Invalid player for battle! Aborting..."); return RESULT_LOSE; + } + default: break; } StageResult win = RESULT_WIN; diff --git a/src/Inventory.cpp b/src/Inventory.cpp index b45b779449..70928245c7 100644 --- a/src/Inventory.cpp +++ b/src/Inventory.cpp @@ -72,16 +72,19 @@ void Inventory::Load( PlayerState* pPlayerState ) // don't load battle sounds if they're not going to be used switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - m_soundAcquireItem.Load( THEME->GetPathS("Inventory","aquire item") ); - for( unsigned i=0; iLoad( THEME->GetPathS("Inventory",ssprintf("use item %u",i+1)) ); - m_vpSoundUseItem.push_back( pSound ); + m_soundAcquireItem.Load( THEME->GetPathS("Inventory","aquire item") ); + for( unsigned i=0; iLoad( THEME->GetPathS("Inventory",ssprintf("use item %u",i+1)) ); + m_vpSoundUseItem.push_back( pSound ); + } + m_soundItemEnding.Load( THEME->GetPathS("Inventory","item ending") ); + break; } - m_soundItemEnding.Load( THEME->GetPathS("Inventory","item ending") ); - break; + default: break; } } diff --git a/src/LifeMeterBar.cpp b/src/LifeMeterBar.cpp index bbc101058a..4c7eee2ed7 100644 --- a/src/LifeMeterBar.cpp +++ b/src/LifeMeterBar.cpp @@ -212,12 +212,13 @@ void LifeMeterBar::ChangeLife( float fDeltaLife ) switch( GAMESTATE->m_SongOptions.GetSong().m_DrainType ) { - case SongOptions::DRAIN_NORMAL: - case SongOptions::DRAIN_NO_RECOVER: - if( fDeltaLife > 0 ) - fDeltaLife *= m_fLifeDifficulty; - else - fDeltaLife /= m_fLifeDifficulty; + case SongOptions::DRAIN_NORMAL: + case SongOptions::DRAIN_NO_RECOVER: + if( fDeltaLife > 0 ) + fDeltaLife *= m_fLifeDifficulty; + else + fDeltaLife /= m_fLifeDifficulty; + default: break; } diff --git a/src/MemoryCardManager.cpp b/src/MemoryCardManager.cpp index 6a40d6ee6a..b3ddb9e87e 100644 --- a/src/MemoryCardManager.cpp +++ b/src/MemoryCardManager.cpp @@ -449,22 +449,23 @@ void MemoryCardManager::CheckStateChanges() { switch( new_device.m_State ) { - case UsbStorageDevice::STATE_NONE: - state = MemoryCardState_NoCard; - break; + case UsbStorageDevice::STATE_NONE: + state = MemoryCardState_NoCard; + break; - case UsbStorageDevice::STATE_CHECKING: - state = MemoryCardState_Checking; - break; + case UsbStorageDevice::STATE_CHECKING: + state = MemoryCardState_Checking; + break; - case UsbStorageDevice::STATE_ERROR: - state = MemoryCardState_Error; - sError = new_device.m_sError; - break; + case UsbStorageDevice::STATE_ERROR: + state = MemoryCardState_Error; + sError = new_device.m_sError; + break; - case UsbStorageDevice::STATE_READY: - state = MemoryCardState_Ready; - break; + case UsbStorageDevice::STATE_READY: + state = MemoryCardState_Ready; + break; + default: break; } } @@ -476,23 +477,24 @@ void MemoryCardManager::CheckStateChanges() params.m_bIsCriticalSound = true; switch( state ) { - case MemoryCardState_NoCard: - case MemoryCardState_Removed: - if( LastState == MemoryCardState_Ready ) - { - m_soundDisconnect.Play( ¶ms ); - MESSAGEMAN->Broadcast( (MessageID)(Message_CardRemovedP1+p) ); - } - break; - case MemoryCardState_Ready: - m_soundReady.Play( ¶ms ); - break; - case MemoryCardState_TooLate: - m_soundTooLate.Play( ¶ms ); - break; - case MemoryCardState_Error: - m_soundError.Play( ¶ms ); - break; + case MemoryCardState_NoCard: + case MemoryCardState_Removed: + if( LastState == MemoryCardState_Ready ) + { + m_soundDisconnect.Play( ¶ms ); + MESSAGEMAN->Broadcast( (MessageID)(Message_CardRemovedP1+p) ); + } + break; + case MemoryCardState_Ready: + m_soundReady.Play( ¶ms ); + break; + case MemoryCardState_TooLate: + m_soundTooLate.Play( ¶ms ); + break; + case MemoryCardState_Error: + m_soundError.Play( ¶ms ); + break; + default: break; } m_State[p] = state; diff --git a/src/MusicWheel.cpp b/src/MusicWheel.cpp index 5c7d9a6b6b..ebdb79338d 100644 --- a/src/MusicWheel.cpp +++ b/src/MusicWheel.cpp @@ -42,23 +42,23 @@ static SortOrder ForceAppropriateSort( PlayMode pm, SortOrder so ) { switch( pm ) { - // in course modes, force a particular sort - case PLAY_MODE_ONI: return SORT_ONI_COURSES; - case PLAY_MODE_NONSTOP: return SORT_NONSTOP_COURSES; - case PLAY_MODE_ENDLESS: return SORT_ENDLESS_COURSES; + // in course modes, force a particular sort + case PLAY_MODE_ONI: return SORT_ONI_COURSES; + case PLAY_MODE_NONSTOP: return SORT_NONSTOP_COURSES; + case PLAY_MODE_ENDLESS: return SORT_ENDLESS_COURSES; + default: break; } // If we're not in a course mode, don't start in a course sort. switch( so ) { - case SORT_ONI_COURSES: - case SORT_NONSTOP_COURSES: - case SORT_ENDLESS_COURSES: - so = SortOrder_Invalid; - break; + case SORT_ONI_COURSES: + case SORT_NONSTOP_COURSES: + case SORT_ENDLESS_COURSES: + so = SortOrder_Invalid; + default: + return so; } - - return so; } MusicWheelItem *MusicWheel::MakeItem() @@ -490,7 +490,7 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt { switch( so ) { - case SORT_MODE_MENU: + case SORT_MODE_MENU: { arrayWheelItemDatas.clear(); // clear out the previous wheel items vector vsNames; @@ -510,22 +510,22 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt } break; } - case SORT_PREFERRED: - case SORT_ROULETTE: - case SORT_GROUP: - case SORT_TITLE: - case SORT_BPM: - case SORT_POPULARITY: - case SORT_TOP_GRADES: - case SORT_ARTIST: - case SORT_GENRE: - case SORT_BEGINNER_METER: - case SORT_EASY_METER: - case SORT_MEDIUM_METER: - case SORT_HARD_METER: - case SORT_CHALLENGE_METER: - case SORT_LENGTH: - case SORT_RECENT: + case SORT_PREFERRED: + case SORT_ROULETTE: + case SORT_GROUP: + case SORT_TITLE: + case SORT_BPM: + case SORT_POPULARITY: + case SORT_TOP_GRADES: + case SORT_ARTIST: + case SORT_GENRE: + case SORT_BEGINNER_METER: + case SORT_EASY_METER: + case SORT_MEDIUM_METER: + case SORT_HARD_METER: + case SORT_CHALLENGE_METER: + case SORT_LENGTH: + case SORT_RECENT: { // Make an array of Song*, then sort them vector arraySongs; @@ -536,72 +536,72 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt // sort the songs switch( so ) { - case SORT_PREFERRED: - // obey order specified by the preferred sort list - break; - case SORT_ROULETTE: - { - StepsType st; - Difficulty dc; - SongUtil::GetStepsTypeAndDifficultyFromSortOrder( SORT_EASY_METER, st, dc ); - SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); - if( (bool)PREFSMAN->m_bPreferredSortUsesGroups ) - stable_sort( arraySongs.begin(), arraySongs.end(), SongUtil::CompareSongPointersByGroup ); - bUseSections = false; - break; - } - case SORT_GROUP: - SongUtil::SortSongPointerArrayByGroupAndTitle( arraySongs ); - if(USE_SECTIONS_WITH_PREFERRED_GROUP) - bUseSections = true; - else - bUseSections = GAMESTATE->m_sPreferredSongGroup == GROUP_ALL; - break; - case SORT_TITLE: - SongUtil::SortSongPointerArrayByTitle( arraySongs ); - break; - case SORT_BPM: - SongUtil::SortSongPointerArrayByBPM( arraySongs ); - break; - case SORT_POPULARITY: - if( (int) arraySongs.size() > MOST_PLAYED_SONGS_TO_SHOW ) - arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() ); - bUseSections = false; - break; - case SORT_TOP_GRADES: - SongUtil::SortSongPointerArrayByGrades( arraySongs, true ); - break; - case SORT_ARTIST: - SongUtil::SortSongPointerArrayByArtist( arraySongs ); - break; - case SORT_GENRE: - SongUtil::SortSongPointerArrayByGenre( arraySongs ); - break; - case SORT_LENGTH: - SongUtil::SortSongPointerArrayByLength( arraySongs ); - break; - case SORT_RECENT: - SongUtil::SortByMostRecentlyPlayedForMachine( arraySongs ); - if( (int) arraySongs.size() > RECENT_SONGS_TO_SHOW ) - arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() ); - bUseSections = false; - break; - case SORT_BEGINNER_METER: - case SORT_EASY_METER: - case SORT_MEDIUM_METER: - case SORT_HARD_METER: - case SORT_CHALLENGE_METER: - case SORT_DOUBLE_EASY_METER: - case SORT_DOUBLE_MEDIUM_METER: - case SORT_DOUBLE_HARD_METER: - case SORT_DOUBLE_CHALLENGE_METER: - StepsType st; - Difficulty dc; - SongUtil::GetStepsTypeAndDifficultyFromSortOrder( so, st, dc ); - SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); - break; - default: - ASSERT(0); // unhandled SortOrder + case SORT_PREFERRED: + // obey order specified by the preferred sort list + break; + case SORT_ROULETTE: + { + StepsType st; + Difficulty dc; + SongUtil::GetStepsTypeAndDifficultyFromSortOrder( SORT_EASY_METER, st, dc ); + SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); + if( (bool)PREFSMAN->m_bPreferredSortUsesGroups ) + stable_sort( arraySongs.begin(), arraySongs.end(), SongUtil::CompareSongPointersByGroup ); + bUseSections = false; + break; + } + case SORT_GROUP: + SongUtil::SortSongPointerArrayByGroupAndTitle( arraySongs ); + if(USE_SECTIONS_WITH_PREFERRED_GROUP) + bUseSections = true; + else + bUseSections = GAMESTATE->m_sPreferredSongGroup == GROUP_ALL; + break; + case SORT_TITLE: + SongUtil::SortSongPointerArrayByTitle( arraySongs ); + break; + case SORT_BPM: + SongUtil::SortSongPointerArrayByBPM( arraySongs ); + break; + case SORT_POPULARITY: + if( (int) arraySongs.size() > MOST_PLAYED_SONGS_TO_SHOW ) + arraySongs.erase( arraySongs.begin()+MOST_PLAYED_SONGS_TO_SHOW, arraySongs.end() ); + bUseSections = false; + break; + case SORT_TOP_GRADES: + SongUtil::SortSongPointerArrayByGrades( arraySongs, true ); + break; + case SORT_ARTIST: + SongUtil::SortSongPointerArrayByArtist( arraySongs ); + break; + case SORT_GENRE: + SongUtil::SortSongPointerArrayByGenre( arraySongs ); + break; + case SORT_LENGTH: + SongUtil::SortSongPointerArrayByLength( arraySongs ); + break; + case SORT_RECENT: + SongUtil::SortByMostRecentlyPlayedForMachine( arraySongs ); + if( (int) arraySongs.size() > RECENT_SONGS_TO_SHOW ) + arraySongs.erase( arraySongs.begin()+RECENT_SONGS_TO_SHOW, arraySongs.end() ); + bUseSections = false; + break; + case SORT_BEGINNER_METER: + case SORT_EASY_METER: + case SORT_MEDIUM_METER: + case SORT_HARD_METER: + case SORT_CHALLENGE_METER: + case SORT_DOUBLE_EASY_METER: + case SORT_DOUBLE_MEDIUM_METER: + case SORT_DOUBLE_HARD_METER: + case SORT_DOUBLE_CHALLENGE_METER: + StepsType st; + Difficulty dc; + SongUtil::GetStepsTypeAndDifficultyFromSortOrder( so, st, dc ); + SongUtil::SortSongPointerArrayByStepsTypeAndMeter( arraySongs, st, dc ); + break; + default: + FAIL_M("Unhandled sort order! Aborting..."); } // Build an array of WheelItemDatas from the sorted list of Song*'s @@ -610,13 +610,15 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt switch( PREFSMAN->m_MusicWheelUsesSections ) { - case MusicWheelUsesSections_NEVER: - bUseSections = false; - break; - case MusicWheelUsesSections_ABC_ONLY: - if( so != SORT_TITLE && so != SORT_GROUP ) + case MusicWheelUsesSections_NEVER: bUseSections = false; - break; + break; + case MusicWheelUsesSections_ABC_ONLY: + if( so != SORT_TITLE && so != SORT_GROUP ) + bUseSections = false; + break; + default: + break; } if( bUseSections ) @@ -630,13 +632,13 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt /* We're using sections, so use the section name as the top-level sort. */ switch( so ) { - case SORT_PREFERRED: - case SORT_TOP_GRADES: - case SORT_BPM: - break; // don't sort by section - default: - SongUtil::SortSongPointerArrayBySectionName(arraySongs, so); - break; + case SORT_PREFERRED: + case SORT_TOP_GRADES: + case SORT_BPM: + break; // don't sort by section + default: + SongUtil::SortSongPointerArrayBySectionName(arraySongs, so); + break; } } @@ -731,10 +733,10 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt } break; } - case SORT_ALL_COURSES: - case SORT_NONSTOP_COURSES: - case SORT_ONI_COURSES: - case SORT_ENDLESS_COURSES: + case SORT_ALL_COURSES: + case SORT_NONSTOP_COURSES: + case SORT_ONI_COURSES: + case SORT_ENDLESS_COURSES: { bool bOnlyPreferred = PREFSMAN->m_CourseSortOrder == COURSE_SORT_PREFERRED; @@ -769,21 +771,21 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt switch( PREFSMAN->m_CourseSortOrder ) { - case COURSE_SORT_SONGS: - CourseUtil::SortCoursePointerArrayByDifficulty( apCourses ); - break; - case COURSE_SORT_PREFERRED: - break; - case COURSE_SORT_METER: - CourseUtil::SortCoursePointerArrayByAvgDifficulty( apCourses ); - break; - case COURSE_SORT_METER_SUM: - CourseUtil::SortCoursePointerArrayByTotalDifficulty( apCourses ); - break; - case COURSE_SORT_RANK: - CourseUtil::SortCoursePointerArrayByRanking( apCourses ); - break; - default: ASSERT(0); + case COURSE_SORT_SONGS: + CourseUtil::SortCoursePointerArrayByDifficulty( apCourses ); + break; + case COURSE_SORT_PREFERRED: + break; + case COURSE_SORT_METER: + CourseUtil::SortCoursePointerArrayByAvgDifficulty( apCourses ); + break; + case COURSE_SORT_METER_SUM: + CourseUtil::SortCoursePointerArrayByTotalDifficulty( apCourses ); + break; + case COURSE_SORT_RANK: + CourseUtil::SortCoursePointerArrayByRanking( apCourses ); + break; + default: FAIL_M("Impossible to sort the courses! Aborting..."); } // since we can't agree, make it an option @@ -810,9 +812,10 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt { switch( pCourse->GetPlayMode() ) { - case PLAY_MODE_ONI: sThisSection = "Oni"; break; - case PLAY_MODE_NONSTOP: sThisSection = "Nonstop"; break; - case PLAY_MODE_ENDLESS: sThisSection = "Endless"; break; + case PLAY_MODE_ONI: sThisSection = "Oni"; break; + case PLAY_MODE_NONSTOP: sThisSection = "Nonstop"; break; + case PLAY_MODE_ENDLESS: sThisSection = "Endless"; break; + default: break; } } @@ -833,6 +836,8 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt } break; } + default: + break; } // init music status icons @@ -1227,23 +1232,24 @@ bool MusicWheel::Select() // return true if this selection ends the screen switch( m_WheelState ) { - case STATE_FLYING_OFF_BEFORE_NEXT_SORT: - case STATE_ROULETTE_SLOWING_DOWN: - return false; - case STATE_ROULETTE_SPINNING: - m_WheelState = STATE_ROULETTE_SLOWING_DOWN; - m_iSwitchesLeftInSpinDown = ROULETTE_SLOW_DOWN_SWITCHES/2+1 + RandomInt( ROULETTE_SLOW_DOWN_SWITCHES/2 ); - m_fTimeLeftInState = 0.1f; - return false; - case STATE_RANDOM_SPINNING: - m_fPositionOffsetFromSelection = max(m_fPositionOffsetFromSelection, 0.3f); - m_WheelState = STATE_LOCKED; - SCREENMAN->PlayStartSound(); - m_fLockedWheelVelocity = 0; - // Set m_Moving to zero to stop the sounds from playing. - m_Moving = 0; - SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); - return true; + case STATE_FLYING_OFF_BEFORE_NEXT_SORT: + case STATE_ROULETTE_SLOWING_DOWN: + return false; + case STATE_ROULETTE_SPINNING: + m_WheelState = STATE_ROULETTE_SLOWING_DOWN; + m_iSwitchesLeftInSpinDown = ROULETTE_SLOW_DOWN_SWITCHES/2+1 + RandomInt( ROULETTE_SLOW_DOWN_SWITCHES/2 ); + m_fTimeLeftInState = 0.1f; + return false; + case STATE_RANDOM_SPINNING: + m_fPositionOffsetFromSelection = max(m_fPositionOffsetFromSelection, 0.3f); + m_WheelState = STATE_LOCKED; + SCREENMAN->PlayStartSound(); + m_fLockedWheelVelocity = 0; + // Set m_Moving to zero to stop the sounds from playing. + m_Moving = 0; + SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); + return true; + default: break; } if( !WheelBase::Select() ) @@ -1251,29 +1257,25 @@ bool MusicWheel::Select() // return true if this selection ends the screen switch( m_CurWheelItemData[m_iSelection]->m_Type ) { - case TYPE_ROULETTE: - StartRoulette(); - return false; - case TYPE_RANDOM: - StartRandom(); - return false; - case TYPE_SONG: - case TYPE_COURSE: - case TYPE_PORTAL: - break; - case TYPE_SORT: - GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); - ChangeSort( GAMESTATE->m_PreferredSortOrder ); - m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_pAction->m_sName; - return false; - case TYPE_CUSTOM: - GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); - if( GetCurWheelItemData(m_iSelection)->m_pAction->m_sScreen != "" ) - return true; - else + case TYPE_ROULETTE: + StartRoulette(); return false; + case TYPE_RANDOM: + StartRandom(); + return false; + case TYPE_SORT: + GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); + ChangeSort( GAMESTATE->m_PreferredSortOrder ); + m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_pAction->m_sName; + return false; + case TYPE_CUSTOM: + GetCurWheelItemData(m_iSelection)->m_pAction->ApplyToAllPlayers(); + if( GetCurWheelItemData(m_iSelection)->m_pAction->m_sScreen != "" ) + return true; + else + return false; + default: return true; } - return true; } void MusicWheel::StartRoulette() @@ -1517,11 +1519,11 @@ Song* MusicWheel::GetSelectedSong() { switch( m_CurWheelItemData[m_iSelection]->m_Type ) { - case TYPE_PORTAL: - return GetPreferredSelectionForRandomOrPortal(); + case TYPE_PORTAL: + return GetPreferredSelectionForRandomOrPortal(); + default: + return GetCurWheelItemData(m_iSelection)->m_pSong; } - - return GetCurWheelItemData(m_iSelection)->m_pSong; } /* Find a random song. If possible, find one that has the preferred difficulties of diff --git a/src/NoteData.cpp b/src/NoteData.cpp index 78880dfbbe..91c83e7891 100644 --- a/src/NoteData.cpp +++ b/src/NoteData.cpp @@ -547,10 +547,12 @@ bool NoteData::RowNeedsAtLeastSimultaneousPresses( int iMinSimultaneousPresses, const TapNote &tn = GetTapNote(t, row); switch( tn.type ) { - case TapNote::mine: - case TapNote::empty: - case TapNote::fake: - continue; // skip these types - they don't count + case TapNote::mine: + case TapNote::empty: + case TapNote::fake: + case TapNote::lift: // you don't "press" on a lift. + continue; // skip these types - they don't count + default: break; } ++iNumNotesThisIndex; } diff --git a/src/NoteDataUtil.cpp b/src/NoteDataUtil.cpp index eff74fb0ae..924d7d1676 100644 --- a/src/NoteDataUtil.cpp +++ b/src/NoteDataUtil.cpp @@ -800,11 +800,12 @@ RadarStats CalculateRadarStatsFast( const NoteData &in, RadarStats &out ) const TapNote &tn = in.GetTapNote(t, r); switch( tn.type ) { - case TapNote::mine: - case TapNote::empty: - case TapNote::fake: - case TapNote::autoKeysound: - continue; // skip these types - they don't count + case TapNote::mine: + case TapNote::empty: + case TapNote::fake: + case TapNote::autoKeysound: + continue; // skip these types - they don't count + default: break; } if( (itr = simultaneousMap.find(r)) == simultaneousMap.end() ) @@ -830,10 +831,11 @@ RadarStats CalculateRadarStatsFast( const NoteData &in, RadarStats &out ) { switch( in.GetTapNote(t, rr).type ) { - case TapNote::mine: - case TapNote::empty: - case TapNote::fake: - continue; // skip these types - they don't count + case TapNote::mine: + case TapNote::empty: + case TapNote::fake: + continue; // skip these types - they don't count + default: break; } if( (itr = simultaneousMap.find(rr)) == simultaneousMap.end() ) simultaneousMap[rr] = 1; diff --git a/src/NoteField.cpp b/src/NoteField.cpp index e45ab8325a..c2f4885609 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -1265,6 +1265,7 @@ void NoteField::DrawPrimitives() //if (tn.subType == TapNote::hold_head_roll) continue; // skip } + default: break; } // Don't draw hidden (fully judged) steps. diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp index fdaf8ea92c..885b5df706 100644 --- a/src/NotesLoaderBMS.cpp +++ b/src/NotesLoaderBMS.cpp @@ -1111,9 +1111,9 @@ bool BMSLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps & out if( commonSubstring == "" ) { copy->SetDifficulty(Difficulty_Medium); - RString sTag; - if (GetTagFromMap(BMSData[0], "#title#", sTag)) - SearchForDifficulty(sTag, copy); + RString localTag; + if (GetTagFromMap(BMSData[0], "#title#", localTag)) + SearchForDifficulty(localTag, copy); } ReadGlobalTags( BMSData[0], dummy ); if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' ) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index 6865120fbc..4021b0e85e 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -35,6 +35,7 @@ static void Deserialize(TimingSegment &seg_, const Json::Value &root) static_cast(seg)->SetPause(fStop); break; } + default: break; // The rest are unused. } } diff --git a/src/NotesLoaderMidi.cpp b/src/NotesLoaderMidi.cpp index f356cdb3d6..2dfd891be7 100644 --- a/src/NotesLoaderMidi.cpp +++ b/src/NotesLoaderMidi.cpp @@ -817,8 +817,8 @@ skip_track: // Check for termination of a sustain note switch( midiEventType ) { - case note_off: - case note_on: + case note_off: + case note_on: if( bNonTerminatedNote ) { if( length >= 240 ) @@ -833,14 +833,15 @@ skip_track: bNonTerminatedNote = false; bNoteHandled = true; + break; } - break; + default: break; } switch( midiEventType ) { - case note_on: + case note_on: { TapNote tn = TAP_ORIGINAL_TAP; @@ -867,7 +868,9 @@ skip_track: bNonTerminatedNote = true; bNoteHandled = true; + break; } + default: break; } countOfLastNote = count; diff --git a/src/NotesWriterDWI.cpp b/src/NotesWriterDWI.cpp index e64ecd17cd..33809c357c 100644 --- a/src/NotesWriterDWI.cpp +++ b/src/NotesWriterDWI.cpp @@ -123,9 +123,10 @@ static RString NotesToDWIString( const TapNote tnCols[6] ) { switch( tnCols[col].type ) { - case TapNote::empty: - case TapNote::mine: - continue; + case TapNote::empty: + case TapNote::mine: + continue; + default: break; } if( tnCols[col].type == TapNote::hold_head ) diff --git a/src/OptionRow.cpp b/src/OptionRow.cpp index 4f50268542..472dc2a1e4 100644 --- a/src/OptionRow.cpp +++ b/src/OptionRow.cpp @@ -426,15 +426,18 @@ void OptionRow::AfterImportOptions( PlayerNumber pn ) switch( m_pHand->m_Def.m_selectType ) { - case SELECT_ONE: - // Make sure the row actually has a selection. - int iSelection = GetOneSelection(pn, true); - if( iSelection == -1 ) + case SELECT_ONE: { - ASSERT( !m_vbSelected[pn].empty() ); - m_vbSelected[pn][0] = true; + // Make sure the row actually has a selection. + int iSelection = GetOneSelection(pn, true); + if( iSelection == -1 ) + { + ASSERT( !m_vbSelected[pn].empty() ); + m_vbSelected[pn][0] = true; + } } - break; + default: + break; } ResetFocusFromSelection( pn ); @@ -503,7 +506,7 @@ void OptionRow::UpdateText( PlayerNumber p ) { switch( m_pHand->m_Def.m_layoutType ) { - case LAYOUT_SHOW_ONE_IN_ROW: + case LAYOUT_SHOW_ONE_IN_ROW: { unsigned pn = m_pHand->m_Def.m_bOneChoiceForAllPlayers ? 0 : p; int iChoiceWithFocus = m_iChoiceInRowWithFocus[pn]; @@ -519,7 +522,7 @@ void OptionRow::UpdateText( PlayerNumber p ) m_textItems[index]->SetText( sText ); } - break; + default: break; } } @@ -757,10 +760,11 @@ void OptionRow::ResetFocusFromSelection( PlayerNumber pn ) int iSelection = -1; switch( m_pHand->m_Def.m_selectType ) { - case SELECT_ONE: - // Import the focus from the selected option. - iSelection = GetOneSelection( pn, true ); - break; + case SELECT_ONE: + // Import the focus from the selected option. + iSelection = GetOneSelection( pn, true ); + default: + break; } // HACK: Set focus to one item in the row, which is "go down" diff --git a/src/PaneDisplay.cpp b/src/PaneDisplay.cpp index e812156cd3..0e3a82ca4c 100644 --- a/src/PaneDisplay.cpp +++ b/src/PaneDisplay.cpp @@ -137,13 +137,14 @@ void PaneDisplay::SetContent( PaneCategory c ) { switch( c ) { - case PaneCategory_MachineHighName: - str = EMPTY_MACHINE_HIGH_SCORE_NAME; - break; - case PaneCategory_MachineHighScore: - case PaneCategory_ProfileHighScore: - str = NOT_AVAILABLE; - break; + case PaneCategory_MachineHighName: + str = EMPTY_MACHINE_HIGH_SCORE_NAME; + break; + case PaneCategory_MachineHighScore: + case PaneCategory_ProfileHighScore: + str = NOT_AVAILABLE; + break; + default: break; } } @@ -157,13 +158,14 @@ void PaneDisplay::SetContent( PaneCategory c ) { switch( c ) { - case PaneCategory_MachineHighName: - str = EMPTY_MACHINE_HIGH_SCORE_NAME; - break; - case PaneCategory_MachineHighScore: - case PaneCategory_ProfileHighScore: - str = NOT_AVAILABLE; - break; + case PaneCategory_MachineHighName: + str = EMPTY_MACHINE_HIGH_SCORE_NAME; + break; + case PaneCategory_MachineHighScore: + case PaneCategory_ProfileHighScore: + str = NOT_AVAILABLE; + break; + default: break; } } @@ -184,8 +186,9 @@ void PaneDisplay::SetContent( PaneCategory c ) ProfileSlot slot = ProfileSlot_Machine; switch( c ) { - case PaneCategory_ProfileHighScore: - slot = (ProfileSlot) m_PlayerNumber; + case PaneCategory_ProfileHighScore: + slot = (ProfileSlot) m_PlayerNumber; + default: break; } if( pSteps ) @@ -201,55 +204,58 @@ void PaneDisplay::SetContent( PaneCategory c ) switch( c ) { - case PaneCategory_NumSteps: val = rv[RadarCategory_TapsAndHolds]; break; - case PaneCategory_Jumps: val = rv[RadarCategory_Jumps]; break; - case PaneCategory_Holds: val = rv[RadarCategory_Holds]; break; - case PaneCategory_Rolls: val = rv[RadarCategory_Rolls]; break; - case PaneCategory_Mines: val = rv[RadarCategory_Mines]; break; - case PaneCategory_Hands: val = rv[RadarCategory_Hands]; break; - case PaneCategory_Lifts: val = rv[RadarCategory_Lifts]; break; - case PaneCategory_Fakes: val = rv[RadarCategory_Fakes]; break; - case PaneCategory_ProfileHighScore: - case PaneCategory_MachineHighName: // set val for color - case PaneCategory_MachineHighScore: - CHECKPOINT; - val = pHSL->GetTopScore().GetPercentDP(); - break; + case PaneCategory_NumSteps: val = rv[RadarCategory_TapsAndHolds]; break; + case PaneCategory_Jumps: val = rv[RadarCategory_Jumps]; break; + case PaneCategory_Holds: val = rv[RadarCategory_Holds]; break; + case PaneCategory_Rolls: val = rv[RadarCategory_Rolls]; break; + case PaneCategory_Mines: val = rv[RadarCategory_Mines]; break; + case PaneCategory_Hands: val = rv[RadarCategory_Hands]; break; + case PaneCategory_Lifts: val = rv[RadarCategory_Lifts]; break; + case PaneCategory_Fakes: val = rv[RadarCategory_Fakes]; break; + case PaneCategory_ProfileHighScore: + case PaneCategory_MachineHighName: // set val for color + case PaneCategory_MachineHighScore: + CHECKPOINT; + val = pHSL->GetTopScore().GetPercentDP(); + break; + default: break; }; if( val != RADAR_VAL_UNKNOWN ) { switch( c ) { - case PaneCategory_MachineHighName: - if( pHSL->vHighScores.empty() ) - { - str = EMPTY_MACHINE_HIGH_SCORE_NAME; - } - else - { - str = pHSL->GetTopScore().GetName(); - if( str.empty() ) - str = "????"; - } - break; - case PaneCategory_MachineHighScore: - case PaneCategory_ProfileHighScore: - // Don't show or save machine high scores for edits loaded from a player profile. - if( bIsPlayerEdit ) - str = NOT_AVAILABLE; - else - str = PlayerStageStats::FormatPercentScore( val ); - break; - case PaneCategory_NumSteps: - case PaneCategory_Jumps: - case PaneCategory_Holds: - case PaneCategory_Rolls: - case PaneCategory_Mines: - case PaneCategory_Hands: - case PaneCategory_Lifts: - case PaneCategory_Fakes: - str = ssprintf( COUNT_FORMAT.GetValue(), val ); + case PaneCategory_MachineHighName: + if( pHSL->vHighScores.empty() ) + { + str = EMPTY_MACHINE_HIGH_SCORE_NAME; + } + else + { + str = pHSL->GetTopScore().GetName(); + if( str.empty() ) + str = "????"; + } + break; + case PaneCategory_MachineHighScore: + case PaneCategory_ProfileHighScore: + // Don't show or save machine high scores for edits loaded from a player profile. + if( bIsPlayerEdit ) + str = NOT_AVAILABLE; + else + str = PlayerStageStats::FormatPercentScore( val ); + break; + case PaneCategory_NumSteps: + case PaneCategory_Jumps: + case PaneCategory_Holds: + case PaneCategory_Rolls: + case PaneCategory_Mines: + case PaneCategory_Hands: + case PaneCategory_Lifts: + case PaneCategory_Fakes: + str = ssprintf( COUNT_FORMAT.GetValue(), val ); + break; + default: break; } } } diff --git a/src/Player.cpp b/src/Player.cpp index 77a2b73698..e4f53fea05 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -628,8 +628,8 @@ void Player::Load() switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_RAVE: - case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + case PLAY_MODE_BATTLE: { // ugly, ugly, ugly. Works only w/ dance. // Why does this work only with dance? - Steve @@ -659,8 +659,9 @@ void Player::Load() count++; count %= 4; } + break; } - break; + default: break; } int iDrawDistanceAfterTargetsPixels = GAMESTATE->IsEditing() ? -100 : DRAW_DISTANCE_AFTER_TARGET_PIXELS; @@ -2879,41 +2880,46 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) int iTrack = iter.Track(); switch( tn.type ) { - case TapNote::hold_head: - tn.HoldResult.fLife = INITIAL_HOLD_LIFE; - if( !REQUIRE_STEP_ON_HOLD_HEADS ) + case TapNote::hold_head: { + tn.HoldResult.fLife = INITIAL_HOLD_LIFE; + if( !REQUIRE_STEP_ON_HOLD_HEADS ) + { + PlayerNumber pn = m_pPlayerState->m_PlayerNumber; + GameInput GameI = GAMESTATE->GetCurrentStyle()->StyleInputToGameInput( iTrack, pn ); + if( PREFSMAN->m_fPadStickSeconds > 0.f ) + { + float fSecsHeld = INPUTMAPPER->GetSecsHeld( GameI, m_pPlayerState->m_mp ); + if( fSecsHeld >= PREFSMAN->m_fPadStickSeconds ) + Step( iTrack, -1, now - PREFSMAN->m_fPadStickSeconds, true, false ); + } + else if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) + { + Step( iTrack, -1, now, true, false ); + } + } + break; + } + case TapNote::mine: + { + // Hold the panel while crossing a mine will cause the mine to explode + // TODO: Remove use of PlayerNumber. PlayerNumber pn = m_pPlayerState->m_PlayerNumber; GameInput GameI = GAMESTATE->GetCurrentStyle()->StyleInputToGameInput( iTrack, pn ); - if( PREFSMAN->m_fPadStickSeconds > 0.f ) + if( PREFSMAN->m_fPadStickSeconds > 0 ) { float fSecsHeld = INPUTMAPPER->GetSecsHeld( GameI, m_pPlayerState->m_mp ); if( fSecsHeld >= PREFSMAN->m_fPadStickSeconds ) Step( iTrack, -1, now - PREFSMAN->m_fPadStickSeconds, true, false ); } - else if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) + else { - Step( iTrack, -1, now, true, false ); + if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) + Step( iTrack, iRow, now, true, false ); } + break; } - break; - case TapNote::mine: - // Hold the panel while crossing a mine will cause the mine to explode - // TODO: Remove use of PlayerNumber. - PlayerNumber pn = m_pPlayerState->m_PlayerNumber; - GameInput GameI = GAMESTATE->GetCurrentStyle()->StyleInputToGameInput( iTrack, pn ); - if( PREFSMAN->m_fPadStickSeconds > 0 ) - { - float fSecsHeld = INPUTMAPPER->GetSecsHeld( GameI, m_pPlayerState->m_mp ); - if( fSecsHeld >= PREFSMAN->m_fPadStickSeconds ) - Step( iTrack, -1, now - PREFSMAN->m_fPadStickSeconds, true, false ); - } - else - { - if( INPUTMAPPER->IsBeingPressed(GameI, m_pPlayerState->m_mp) ) - Step( iTrack, iRow, now, true, false ); - } - break; + default: break; } if( iRow != iLastSeenRow ) diff --git a/src/PlayerStageStats.cpp b/src/PlayerStageStats.cpp index e57682c843..4e8a0eb050 100644 --- a/src/PlayerStageStats.cpp +++ b/src/PlayerStageStats.cpp @@ -274,6 +274,7 @@ float PlayerStageStats::GetCurMaxPercentDancePoints() const return fCurMaxPercentDancePoints; } +// TODO: Make this use lua. Let more judgments be possible. -Wolfman2000 int PlayerStageStats::GetLessonScoreActual() const { int iScore = 0; @@ -282,14 +283,15 @@ int PlayerStageStats::GetLessonScoreActual() const { switch( tns ) { - case TNS_AvoidMine: - case TNS_W5: - case TNS_W4: - case TNS_W3: - case TNS_W2: - case TNS_W1: - iScore += m_iTapNoteScores[tns]; - break; + case TNS_AvoidMine: + case TNS_W5: + case TNS_W4: + case TNS_W3: + case TNS_W2: + case TNS_W1: + iScore += m_iTapNoteScores[tns]; + default: + break; } } @@ -297,9 +299,10 @@ int PlayerStageStats::GetLessonScoreActual() const { switch( hns ) { - case HNS_Held: - iScore += m_iHoldNoteScores[hns]; - break; + case HNS_Held: + iScore += m_iHoldNoteScores[hns]; + default: + break; } } diff --git a/src/RageDisplay_Legacy.cpp b/src/RageDisplay_Legacy.cpp index 2b664f2f5b..bedb5c7133 100644 --- a/src/RageDisplay_Legacy.cpp +++ b/src/RageDisplay_Legacy.cpp @@ -1625,6 +1625,7 @@ void RageDisplay_Legacy::SetTextureMode( TextureUnit tu, TextureMode tm ) glTexEnvi(GL_TEXTURE_ENV, GLenum(GL_OPERAND1_ALPHA_EXT), GL_SRC_ALPHA); glTexEnvi(GL_TEXTURE_ENV, GLenum(GL_SOURCE1_ALPHA_EXT), GL_TEXTURE); break; + default: break; } } @@ -1668,15 +1669,16 @@ void RageDisplay_Legacy::SetEffectMode( EffectMode effect ) GLhandleARB hShader = 0; switch (effect) { - case EffectMode_Normal: hShader = 0; break; - case EffectMode_Unpremultiply: hShader = g_bUnpremultiplyShader; break; - case EffectMode_ColorBurn: hShader = g_bColorBurnShader; break; - case EffectMode_ColorDodge: hShader = g_bColorDodgeShader; break; - case EffectMode_VividLight: hShader = g_bVividLightShader; break; - case EffectMode_HardMix: hShader = g_hHardMixShader; break; - case EffectMode_Overlay: hShader = g_hOverlayShader; break; - case EffectMode_Screen: hShader = g_hScreenShader; break; - case EffectMode_YUYV422: hShader = g_hYUYV422Shader; break; + case EffectMode_Normal: hShader = 0; break; + case EffectMode_Unpremultiply: hShader = g_bUnpremultiplyShader; break; + case EffectMode_ColorBurn: hShader = g_bColorBurnShader; break; + case EffectMode_ColorDodge: hShader = g_bColorDodgeShader; break; + case EffectMode_VividLight: hShader = g_bVividLightShader; break; + case EffectMode_HardMix: hShader = g_hHardMixShader; break; + case EffectMode_Overlay: hShader = g_hOverlayShader; break; + case EffectMode_Screen: hShader = g_hScreenShader; break; + case EffectMode_YUYV422: hShader = g_hYUYV422Shader; break; + default: break; } DebugFlushGLErrors(); @@ -1703,18 +1705,17 @@ bool RageDisplay_Legacy::IsEffectModeSupported( EffectMode effect ) { switch( effect ) { - case EffectMode_Normal: return true; - case EffectMode_Unpremultiply: return g_bUnpremultiplyShader != 0; - case EffectMode_ColorBurn: return g_bColorBurnShader != 0; - case EffectMode_ColorDodge: return g_bColorDodgeShader != 0; - case EffectMode_VividLight: return g_bVividLightShader != 0; - case EffectMode_HardMix: return g_hHardMixShader != 0; - case EffectMode_Overlay: return g_hOverlayShader != 0; - case EffectMode_Screen: return g_hScreenShader != 0; - case EffectMode_YUYV422: return g_hYUYV422Shader != 0; + case EffectMode_Normal: return true; + case EffectMode_Unpremultiply: return g_bUnpremultiplyShader != 0; + case EffectMode_ColorBurn: return g_bColorBurnShader != 0; + case EffectMode_ColorDodge: return g_bColorDodgeShader != 0; + case EffectMode_VividLight: return g_bVividLightShader != 0; + case EffectMode_HardMix: return g_hHardMixShader != 0; + case EffectMode_Overlay: return g_hOverlayShader != 0; + case EffectMode_Screen: return g_hScreenShader != 0; + case EffectMode_YUYV422: return g_hYUYV422Shader != 0; + default: return false; } - - return false; } void RageDisplay_Legacy::SetBlendMode( BlendMode mode ) diff --git a/src/RageSound.cpp b/src/RageSound.cpp index f114329fbc..0d0dc575b9 100644 --- a/src/RageSound.cpp +++ b/src/RageSound.cpp @@ -576,15 +576,16 @@ void RageSound::ApplyParams() switch( GetStopMode() ) { - case RageSoundParams::M_LOOP: - m_pSource->SetProperty( "Loop", 1.0f ); - break; - case RageSoundParams::M_STOP: - m_pSource->SetProperty( "Stop", 1.0f ); - break; - case RageSoundParams::M_CONTINUE: - m_pSource->SetProperty( "Continue", 1.0f ); - break; + case RageSoundParams::M_LOOP: + m_pSource->SetProperty( "Loop", 1.0f ); + break; + case RageSoundParams::M_STOP: + m_pSource->SetProperty( "Stop", 1.0f ); + break; + case RageSoundParams::M_CONTINUE: + m_pSource->SetProperty( "Continue", 1.0f ); + break; + default: break; } } diff --git a/src/RageSoundReader_FileReader.cpp b/src/RageSoundReader_FileReader.cpp index 85ff85346d..5c43fc080b 100644 --- a/src/RageSoundReader_FileReader.cpp +++ b/src/RageSoundReader_FileReader.cpp @@ -67,17 +67,18 @@ RageSoundReader_FileReader *RageSoundReader_FileReader::TryOpenFile( RageFileBas bKeepTrying = (ret != OPEN_FATAL_ERROR); switch( ret ) { - case OPEN_UNKNOWN_FILE_FORMAT: - bKeepTrying = true; - error = "Unknown file format"; - break; + case OPEN_UNKNOWN_FILE_FORMAT: + bKeepTrying = true; + error = "Unknown file format"; + break; - case OPEN_FATAL_ERROR: - /* The file matched, but failed to load. We know it's this type of data; - * don't bother trying the other file types. */ - bKeepTrying = false; - error = err; - break; + case OPEN_FATAL_ERROR: + /* The file matched, but failed to load. We know it's this type of data; + * don't bother trying the other file types. */ + bKeepTrying = false; + error = err; + break; + default: break; } return NULL; diff --git a/src/RageSurface_Load.cpp b/src/RageSurface_Load.cpp index 3d332a90c4..aa23902358 100644 --- a/src/RageSurface_Load.cpp +++ b/src/RageSurface_Load.cpp @@ -57,16 +57,17 @@ static RageSurface *TryOpenFile( RString sPath, bool bHeaderOnly, RString &error bKeepTrying = (result != RageSurfaceUtils::OPEN_FATAL_ERROR); switch( result ) { - case RageSurfaceUtils::OPEN_UNKNOWN_FILE_FORMAT: - bKeepTrying = true; - error = "Unknown file format"; - break; + case RageSurfaceUtils::OPEN_UNKNOWN_FILE_FORMAT: + bKeepTrying = true; + error = "Unknown file format"; + break; - case RageSurfaceUtils::OPEN_FATAL_ERROR: - /* The file matched, but failed to load. We know it's this type of data; - * don't bother trying the other file types. */ - bKeepTrying = false; - break; + case RageSurfaceUtils::OPEN_FATAL_ERROR: + /* The file matched, but failed to load. We know it's this type of data; + * don't bother trying the other file types. */ + bKeepTrying = false; + break; + default: break; } return NULL; diff --git a/src/ScoreKeeperRave.cpp b/src/ScoreKeeperRave.cpp index 6b3b68107b..22d2e82706 100644 --- a/src/ScoreKeeperRave.cpp +++ b/src/ScoreKeeperRave.cpp @@ -83,7 +83,10 @@ void ScoreKeeperRave::HandleHoldScore( const TapNote &tn ) float fPercentToMove = 0; switch( tapScore ) { - case TNS_HitMine: fPercentToMove = g_fSuperMeterPercentChange[SE_HitMine]; break; + case TNS_HitMine: + fPercentToMove = g_fSuperMeterPercentChange[SE_HitMine]; + default: + break; } AddSuperMeterDelta( fPercentToMove ); } diff --git a/src/Screen.cpp b/src/Screen.cpp index 80624afae2..ba91803110 100644 --- a/src/Screen.cpp +++ b/src/Screen.cpp @@ -226,6 +226,7 @@ void Screen::Input( const InputEventPlus &input ) case GAME_BUTTON_START: this->MenuStart ( input ); return; case GAME_BUTTON_SELECT:this->MenuSelect( input ); return; case GAME_BUTTON_COIN: this->MenuCoin ( input ); return; + default: return; } } diff --git a/src/ScreenAttract.cpp b/src/ScreenAttract.cpp index ac16f7a5fb..c5777804b8 100644 --- a/src/ScreenAttract.cpp +++ b/src/ScreenAttract.cpp @@ -75,34 +75,36 @@ void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuEle switch( input.MenuI ) { - case GAME_BUTTON_BACK: - if( !(bool)BACK_GOES_TO_START_SCREEN ) - break; - // fall through - case GAME_BUTTON_START: - case GAME_BUTTON_COIN: - switch( GAMESTATE->GetCoinMode() ) - { - case CoinMode_Pay: - LOG->Trace("ScreenAttract::AttractInput: COIN_PAY (%i/%i, %i)", GAMESTATE->m_iCoins.Get(), PREFSMAN->m_iCoinsPerCredit.Get(), GAMESTATE->GetNumSidesJoined() ); - if( GAMESTATE->m_iCoins < PREFSMAN->m_iCoinsPerCredit && GAMESTATE->GetNumSidesJoined() == 0 ) - break; // don't fall through + case GAME_BUTTON_BACK: + if( !BACK_GOES_TO_START_SCREEN ) + break; // fall through - case CoinMode_Home: - case CoinMode_Free: - if( pScreen->IsTransitioning() ) - return; + case GAME_BUTTON_START: + case GAME_BUTTON_COIN: + switch( GAMESTATE->GetCoinMode() ) + { + case CoinMode_Pay: + LOG->Trace("ScreenAttract::AttractInput: COIN_PAY (%i/%i, %i)", + GAMESTATE->m_iCoins.Get(), + PREFSMAN->m_iCoinsPerCredit.Get(), + GAMESTATE->GetNumSidesJoined() ); + if( GAMESTATE->m_iCoins < PREFSMAN->m_iCoinsPerCredit && GAMESTATE->GetNumSidesJoined() == 0 ) + break; // don't fall through + // fall through + case CoinMode_Home: + case CoinMode_Free: + if( pScreen->IsTransitioning() ) + return; - // HandleGlobalInputs() already played the coin sound. Don't play it again. - if( input.MenuI != GAME_BUTTON_COIN ) - SCREENMAN->PlayStartSound(); + // HandleGlobalInputs() already played the coin sound. Don't play it again. + if( input.MenuI != GAME_BUTTON_COIN ) + SCREENMAN->PlayStartSound(); - pScreen->Cancel( SM_GoToStartScreen ); - break; - default: - ASSERT(0); - } - break; + pScreen->Cancel( SM_GoToStartScreen ); + break; + default: FAIL_M("Invalid Coin Mode! Aborting..."); + } + default: break; } if( pScreen->IsTransitioning() ) @@ -110,10 +112,11 @@ void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuEle switch( input.MenuI ) { - case GAME_BUTTON_LEFT: - case GAME_BUTTON_RIGHT: - SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); - break; + case GAME_BUTTON_LEFT: + case GAME_BUTTON_RIGHT: + SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); + default: + break; } // Screen::Input( input ); diff --git a/src/ScreenContinue.cpp b/src/ScreenContinue.cpp index c9da2e45fa..4c8d0cbbfb 100644 --- a/src/ScreenContinue.cpp +++ b/src/ScreenContinue.cpp @@ -63,18 +63,21 @@ void ScreenContinue::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_START: - case GAME_BUTTON_UP: - case GAME_BUTTON_DOWN: - case GAME_BUTTON_LEFT: - case GAME_BUTTON_RIGHT: - float fSeconds = floorf(m_MenuTimer->GetSeconds()) - 0.0001f; - fSeconds = max( fSeconds, 0.0001f ); // don't set to 0 - m_MenuTimer->SetSeconds( fSeconds ); - Message msg("HurryTimer"); - msg.SetParam( "PlayerNumber", input.pn ); - this->HandleMessage( msg ); - return; // handled + case GAME_BUTTON_START: + case GAME_BUTTON_UP: + case GAME_BUTTON_DOWN: + case GAME_BUTTON_LEFT: + case GAME_BUTTON_RIGHT: + { + float fSeconds = floorf(m_MenuTimer->GetSeconds()) - 0.0001f; + fSeconds = max( fSeconds, 0.0001f ); // don't set to 0 + m_MenuTimer->SetSeconds( fSeconds ); + Message msg("HurryTimer"); + msg.SetParam( "PlayerNumber", input.pn ); + this->HandleMessage( msg ); + return; // handled + } + default: break; } } diff --git a/src/ScreenDebugOverlay.cpp b/src/ScreenDebugOverlay.cpp index e6c731fa2c..4b698123b7 100644 --- a/src/ScreenDebugOverlay.cpp +++ b/src/ScreenDebugOverlay.cpp @@ -813,12 +813,11 @@ class DebugLineProfileSlot : public IDebugLine { switch( g_ProfileSlot ) { - case ProfileSlot_Machine: return "Machine"; - case ProfileSlot_Player1: return "Player 1"; - case ProfileSlot_Player2: return "Player 2"; + case ProfileSlot_Machine: return "Machine"; + case ProfileSlot_Player1: return "Player 1"; + case ProfileSlot_Player2: return "Player 2"; + default: return RString(); } - - return RString(); } virtual bool IsEnabled() { return IsSelectProfilePersistent(); } virtual RString GetPageName() const { return "Profiles"; } diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 0f88bf0985..600dd013d1 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -4245,6 +4245,7 @@ void ScreenEdit::HandleAlterMenuChoice(AlterMenuChoice c, const vector &iAn } break; } + default: break; } } diff --git a/src/ScreenEditMenu.cpp b/src/ScreenEditMenu.cpp index 37aba49e5c..f11da45efd 100644 --- a/src/ScreenEditMenu.cpp +++ b/src/ScreenEditMenu.cpp @@ -193,33 +193,38 @@ void ScreenEditMenu::MenuStart( const InputEventPlus &input ) switch( m_Selector.EDIT_MODE ) { - case EditMode_Full: - { - RString sDir = pSong->GetSongDir(); - RString sTempFile = sDir + TEMP_FILE_NAME; - RageFile file; - if( !file.Open( sTempFile, RageFile::WRITE ) ) + case EditMode_Full: { - ScreenPrompt::Prompt( SM_None, SONG_DIR_READ_ONLY ); - return; - } + RString sDir = pSong->GetSongDir(); + RString sTempFile = sDir + TEMP_FILE_NAME; + RageFile file; + if( !file.Open( sTempFile, RageFile::WRITE ) ) + { + ScreenPrompt::Prompt( SM_None, SONG_DIR_READ_ONLY ); + return; + } - file.Close(); - FILEMAN->Remove( sTempFile ); - break; - } + file.Close(); + FILEMAN->Remove( sTempFile ); + break; + } + default: + break; } switch( action ) { - case EditMenuAction_Delete: - ASSERT( pSteps ); - if( pSteps->IsAutogen() ) + case EditMenuAction_Delete: { - SCREENMAN->PlayInvalidSound(); - SCREENMAN->SystemMessage( DELETED_AUTOGEN_STEPS.GetValue() ); - return; + ASSERT( pSteps ); + if( pSteps->IsAutogen() ) + { + SCREENMAN->PlayInvalidSound(); + SCREENMAN->SystemMessage( DELETED_AUTOGEN_STEPS.GetValue() ); + return; + } } + default: break; } // Do work diff --git a/src/ScreenEnding.cpp b/src/ScreenEnding.cpp index 18b37a5ca8..31b92250f0 100644 --- a/src/ScreenEnding.cpp +++ b/src/ScreenEnding.cpp @@ -93,10 +93,11 @@ void ScreenEnding::Init() m_sprRemoveMemoryCard[p].Load( THEME->GetPathG("ScreenEnding",ssprintf("remove card P%d",p+1)) ); switch( MEMCARDMAN->GetCardState(p) ) { - case MemoryCardState_Removed: - case MemoryCardState_NoCard: - m_sprRemoveMemoryCard[p].SetVisible( false ); - break; + case MemoryCardState_Removed: + case MemoryCardState_NoCard: + m_sprRemoveMemoryCard[p].SetVisible( false ); + default: + break; } LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_sprRemoveMemoryCard[p] ); this->AddChild( &m_sprRemoveMemoryCard[p] ); @@ -114,9 +115,10 @@ void ScreenEnding::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_START: - SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); - break; + case GAME_BUTTON_START: + SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); + default: + break; } } diff --git a/src/ScreenEvaluation.cpp b/src/ScreenEvaluation.cpp index 654f1d0bb5..8d3a55d541 100644 --- a/src/ScreenEvaluation.cpp +++ b/src/ScreenEvaluation.cpp @@ -182,25 +182,26 @@ void ScreenEvaluation::Init() { switch( rc ) { - case RadarCategory_Stream: - case RadarCategory_Voltage: - case RadarCategory_Air: - case RadarCategory_Freeze: - case RadarCategory_Chaos: - ss.m_player[p].m_radarPossible[rc] = randomf( 0, 1 ); - ss.m_player[p].m_radarActual[rc] = randomf( 0, ss.m_player[p].m_radarPossible[rc] ); - break; - case RadarCategory_TapsAndHolds: - case RadarCategory_Jumps: - case RadarCategory_Holds: - case RadarCategory_Mines: - case RadarCategory_Hands: - case RadarCategory_Rolls: - case RadarCategory_Lifts: - case RadarCategory_Fakes: - ss.m_player[p].m_radarPossible[rc] = 1 + (rand() % 200); - ss.m_player[p].m_radarActual[rc] = rand() % (int)(ss.m_player[p].m_radarPossible[rc]); - break; + case RadarCategory_Stream: + case RadarCategory_Voltage: + case RadarCategory_Air: + case RadarCategory_Freeze: + case RadarCategory_Chaos: + ss.m_player[p].m_radarPossible[rc] = randomf( 0, 1 ); + ss.m_player[p].m_radarActual[rc] = randomf( 0, ss.m_player[p].m_radarPossible[rc] ); + break; + case RadarCategory_TapsAndHolds: + case RadarCategory_Jumps: + case RadarCategory_Holds: + case RadarCategory_Mines: + case RadarCategory_Hands: + case RadarCategory_Rolls: + case RadarCategory_Lifts: + case RadarCategory_Fakes: + ss.m_player[p].m_radarPossible[rc] = 1 + (rand() % 200); + ss.m_player[p].m_radarActual[rc] = rand() % (int)(ss.m_player[p].m_radarPossible[rc]); + break; + default: break; } ; // filled in by ScreenGameplay on start of notes @@ -651,11 +652,12 @@ void ScreenEvaluation::Init() switch( best_grade ) { - case Grade_Tier01: - case Grade_Tier02: - case Grade_Tier03: - this->PostScreenMessage( SM_PlayCheer, CHEER_DELAY_SECONDS ); - break; + case Grade_Tier01: + case Grade_Tier02: + case Grade_Tier03: + this->PostScreenMessage( SM_PlayCheer, CHEER_DELAY_SECONDS ); + default: + break; } } diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index d0ac5a1cfd..5e9ddbf5db 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -151,10 +151,11 @@ void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, int switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_RAVE: - m_pSecondaryScoreDisplay = new ScoreDisplayRave; - m_pSecondaryScoreDisplay->SetName( "ScoreDisplayRave" ); - break; + case PLAY_MODE_RAVE: + m_pSecondaryScoreDisplay = new ScoreDisplayRave; + m_pSecondaryScoreDisplay->SetName( "ScoreDisplayRave" ); + default: + break; } if( m_pSecondaryScoreDisplay ) @@ -164,9 +165,10 @@ void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, int switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_RAVE: - m_pSecondaryScoreKeeper = new ScoreKeeperRave( pPlayerState, pPlayerStageStats ); - break; + case PLAY_MODE_RAVE: + m_pSecondaryScoreKeeper = new ScoreKeeperRave( pPlayerState, pPlayerStageStats ); + default: + break; } m_ptextPlayerOptions = NULL; @@ -522,13 +524,14 @@ void ScreenGameplay::Init() // Add combined life meter switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - m_pCombinedLifeMeter = new CombinedLifeMeterTug; - m_pCombinedLifeMeter->SetName( "CombinedLife" ); - LOAD_ALL_COMMANDS_AND_SET_XY( *m_pCombinedLifeMeter ); - this->AddChild( m_pCombinedLifeMeter ); - break; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + m_pCombinedLifeMeter = new CombinedLifeMeterTug; + m_pCombinedLifeMeter->SetName( "CombinedLife" ); + LOAD_ALL_COMMANDS_AND_SET_XY( *m_pCombinedLifeMeter ); + this->AddChild( m_pCombinedLifeMeter ); + default: + break; } // Before the lifemeter loads, if Networking is required @@ -541,25 +544,26 @@ void ScreenGameplay::Init() // Add individual life meter switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_REGULAR: - case PLAY_MODE_ONI: - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ENDLESS: - FOREACH_PlayerNumberInfo( m_vPlayerInfo, pi ) - { - if( !GAMESTATE->IsPlayerEnabled(pi->m_pn) && !SHOW_LIFE_METER_FOR_DISABLED_PLAYERS ) - continue; // skip + case PLAY_MODE_REGULAR: + case PLAY_MODE_ONI: + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ENDLESS: + FOREACH_PlayerNumberInfo( m_vPlayerInfo, pi ) + { + if( !GAMESTATE->IsPlayerEnabled(pi->m_pn) && !SHOW_LIFE_METER_FOR_DISABLED_PLAYERS ) + continue; // skip - pi->m_pLifeMeter = LifeMeter::MakeLifeMeter( GAMESTATE->m_SongOptions.GetStage().m_LifeType ); - pi->m_pLifeMeter->Load( pi->GetPlayerState(), pi->GetPlayerStageStats() ); - pi->m_pLifeMeter->SetName( ssprintf("Life%s",pi->GetName().c_str()) ); - LOAD_ALL_COMMANDS_AND_SET_XY( pi->m_pLifeMeter ); - this->AddChild( pi->m_pLifeMeter ); - } - break; - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - break; + pi->m_pLifeMeter = LifeMeter::MakeLifeMeter( GAMESTATE->m_SongOptions.GetStage().m_LifeType ); + pi->m_pLifeMeter->Load( pi->GetPlayerState(), pi->GetPlayerStageStats() ); + pi->m_pLifeMeter->SetName( ssprintf("Life%s",pi->GetName().c_str()) ); + LOAD_ALL_COMMANDS_AND_SET_XY( pi->m_pLifeMeter ); + this->AddChild( pi->m_pLifeMeter ); + } + break; + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + default: + break; } m_bShowScoreboard = false; @@ -718,11 +722,12 @@ void ScreenGameplay::Init() switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - m_soundBattleTrickLevel1.Load( THEME->GetPathS(m_sName,"battle trick level1"), true ); - m_soundBattleTrickLevel2.Load( THEME->GetPathS(m_sName,"battle trick level2"), true ); - m_soundBattleTrickLevel3.Load( THEME->GetPathS(m_sName,"battle trick level3"), true ); - break; + case PLAY_MODE_BATTLE: + m_soundBattleTrickLevel1.Load( THEME->GetPathS(m_sName,"battle trick level1"), true ); + m_soundBattleTrickLevel2.Load( THEME->GetPathS(m_sName,"battle trick level2"), true ); + m_soundBattleTrickLevel3.Load( THEME->GetPathS(m_sName,"battle trick level3"), true ); + default: + break; } } @@ -996,9 +1001,10 @@ void ScreenGameplay::SetupSong( int iSongIndex ) RString sType; switch( GAMESTATE->m_SongOptions.GetCurrent().m_SoundEffectType ) { - case SongOptions::SOUNDEFFECT_OFF: sType = "SoundEffectControl_Off"; break; - case SongOptions::SOUNDEFFECT_SPEED: sType = "SoundEffectControl_Speed"; break; - case SongOptions::SOUNDEFFECT_PITCH: sType = "SoundEffectControl_Pitch"; break; + case SongOptions::SOUNDEFFECT_OFF: sType = "SoundEffectControl_Off"; break; + case SongOptions::SOUNDEFFECT_SPEED: sType = "SoundEffectControl_Speed"; break; + case SongOptions::SOUNDEFFECT_PITCH: sType = "SoundEffectControl_Pitch"; break; + default: break; } pi->m_SoundEffectControl.Load( sType, pi->GetPlayerState(), &pi->m_NoteData ); @@ -1630,246 +1636,250 @@ void ScreenGameplay::Update( float fDeltaTime ) switch( m_DancingState ) { - case STATE_DANCING: - /* Set STATSMAN->m_CurStageStats.bFailed for failed players. In, FAIL_IMMEDIATE, send - * SM_BeginFailed if all players failed, and kill dead Oni players. */ - FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) + case STATE_DANCING: { - PlayerNumber pn = pi->GetStepsAndTrailIndex(); - - PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); - SongOptions::LifeType lt = GAMESTATE->m_SongOptions.GetCurrent().m_LifeType; - - if( ft == PlayerOptions::FAIL_OFF || ft == PlayerOptions::FAIL_AT_END ) - continue; - - // check for individual fail - if( pi->m_pLifeMeter == NULL || !pi->m_pLifeMeter->IsFailing() ) - continue; /* isn't failing */ - if( pi->GetPlayerStageStats()->m_bFailed ) - continue; /* failed and is already dead */ - - LOG->Trace("Player %d failed", (int)pn); - pi->GetPlayerStageStats()->m_bFailed = true; // fail - + /* Set STATSMAN->m_CurStageStats.bFailed for failed players. In, FAIL_IMMEDIATE, send + * SM_BeginFailed if all players failed, and kill dead Oni players. */ + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) { - Message msg("PlayerFailed"); - msg.SetParam( "PlayerNumber", pi->m_pn ); - MESSAGEMAN->Broadcast( msg ); - } + PlayerNumber pn = pi->GetStepsAndTrailIndex(); + + PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); + SongOptions::LifeType lt = GAMESTATE->m_SongOptions.GetCurrent().m_LifeType; + + if( ft == PlayerOptions::FAIL_OFF || ft == PlayerOptions::FAIL_AT_END ) + continue; + + // check for individual fail + if( pi->m_pLifeMeter == NULL || !pi->m_pLifeMeter->IsFailing() ) + continue; /* isn't failing */ + if( pi->GetPlayerStageStats()->m_bFailed ) + continue; /* failed and is already dead */ + + LOG->Trace("Player %d failed", (int)pn); + pi->GetPlayerStageStats()->m_bFailed = true; // fail - // Check for and do Oni die. - bool bAllowOniDie = false; - switch( lt ) - { - case SongOptions::LIFE_BATTERY: - bAllowOniDie = true; - break; - } - if( bAllowOniDie && ft == PlayerOptions::FAIL_IMMEDIATE ) - { - if( !STATSMAN->m_CurStageStats.AllFailed() ) // if not the last one to fail { - // kill them! - SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); - pi->ShowOniGameOver(); - pi->m_NoteData.Init(); // remove all notes and scoring - pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + Message msg("PlayerFailed"); + msg.SetParam( "PlayerNumber", pi->m_pn ); + MESSAGEMAN->Broadcast( msg ); + } + + // Check for and do Oni die. + bool bAllowOniDie = false; + switch( lt ) + { + case SongOptions::LIFE_BATTERY: + bAllowOniDie = true; + default: + break; + } + if( bAllowOniDie && ft == PlayerOptions::FAIL_IMMEDIATE ) + { + if( !STATSMAN->m_CurStageStats.AllFailed() ) // if not the last one to fail + { + // kill them! + SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); + pi->ShowOniGameOver(); + pi->m_NoteData.Init(); // remove all notes and scoring + pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + } } } - } - bool bAllFailed = true; - FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) - { - PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); - switch( ft ) + bool bAllFailed = true; + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) { - case PlayerOptions::FAIL_IMMEDIATE: - if( pi->m_pLifeMeter == NULL || (pi->m_pLifeMeter && !pi->m_pLifeMeter->IsFailing()) ) - bAllFailed = false; - break; - case PlayerOptions::FAIL_IMMEDIATE_CONTINUE: - case PlayerOptions::FAIL_AT_END: - bAllFailed = false; // wait until the end of the song to fail. - break; - case PlayerOptions::FAIL_OFF: - bAllFailed = false; // never fail. - break; - default: - ASSERT(0); - } - } - - if( bAllFailed ) - { - m_pSoundMusic->StopPlaying(); - SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); - // todo: stop lyrics (m_LyricDisplay) from animating -aj - } - - // Update living players' alive time - // HACK: Don't scale alive time when using tab/tilde. Instead of accumulating time from a timer, - // this time should instead be tied to the music position. - float fUnscaledDeltaTime = m_timerGameplaySeconds.GetDeltaTime(); - - FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) - if( !pi->GetPlayerStageStats()->m_bFailed ) - pi->GetPlayerStageStats()->m_fAliveSeconds += fUnscaledDeltaTime * GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; - - // update fGameplaySeconds - STATSMAN->m_CurStageStats.m_fGameplaySeconds += fUnscaledDeltaTime; - float curBeat = GAMESTATE->m_Position.m_fSongBeat; - Song &s = *GAMESTATE->m_pCurSong; - - if( curBeat >= s.GetFirstBeat() && curBeat < s.GetLastBeat() ) - { - STATSMAN->m_CurStageStats.m_fStepsSeconds += fUnscaledDeltaTime; - - if( GAMESTATE->m_SongOptions.GetCurrent().m_fHaste != 0.0f ) - { - float fHasteRate = GetHasteRate(); - GAMESTATE->m_fAccumulatedHasteSeconds += (fUnscaledDeltaTime * fHasteRate) - fUnscaledDeltaTime; - } - } - - // Check for end of song - { - float fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut; - GetMusicEndTiming( fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut ); - - bool bAllReallyFailed = STATSMAN->m_CurStageStats.AllFailed(); - if( bAllReallyFailed ) - fSecondsToStartTransitioningOut += BEGIN_FAILED_DELAY; - - if( GAMESTATE->m_Position.m_fMusicSeconds >= fSecondsToStartTransitioningOut && !m_NextSong.IsTransitioning() ) - this->PostScreenMessage( SM_NotesEnded, 0 ); - } - - // update 2d dancing characters - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - DancingCharacters *pCharacter = NULL; - if( m_pSongBackground ) - pCharacter = m_pSongBackground->GetDancingCharacters(); - if( pCharacter != NULL ) - { - TapNoteScore tns = pi->m_pPlayer->GetLastTapNoteScore(); - - ANIM_STATES_2D state = AS2D_MISS; - - switch( tns ) + PlayerOptions::FailType ft = GAMESTATE->GetPlayerFailType( pi->GetPlayerState() ); + switch( ft ) { - case TNS_W4: - case TNS_W3: - state = AS2D_GOOD; + case PlayerOptions::FAIL_IMMEDIATE: + if( pi->m_pLifeMeter == NULL || (pi->m_pLifeMeter && !pi->m_pLifeMeter->IsFailing()) ) + bAllFailed = false; break; - case TNS_W2: - case TNS_W1: - state = AS2D_GREAT; + case PlayerOptions::FAIL_IMMEDIATE_CONTINUE: + case PlayerOptions::FAIL_AT_END: + bAllFailed = false; // wait until the end of the song to fail. + break; + case PlayerOptions::FAIL_OFF: + bAllFailed = false; // never fail. break; default: - state = AS2D_MISS; - break; - } - - if( state == AS2D_GREAT && pi->GetPlayerState()->m_HealthState == HealthState_Hot ) - state = AS2D_FEVER; - - pCharacter->Change2DAnimState( pi->m_pn, state ); - } - } - - // Check for enemy death in enemy battle - static float fLastSeenEnemyHealth = 1; - if( fLastSeenEnemyHealth != GAMESTATE->m_fOpponentHealthPercent ) - { - fLastSeenEnemyHealth = GAMESTATE->m_fOpponentHealthPercent; - - if( GAMESTATE->m_fOpponentHealthPercent == 0 ) - { - // HACK: Load incorrect directory on purpose for now. - PlayAnnouncer( "gameplay battle damage level3", 0 ); - - GAMESTATE->RemoveAllActiveAttacks(); - - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - if( !GAMESTATE->IsCpuPlayer(pi->m_pn) ) - continue; - - SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); - pi->ShowOniGameOver(); - pi->m_NoteData.Init(); // remove all notes and scoring - pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + FAIL_M("Invalid fail type! Aborting..."); } } - } - // update give up - bool bGiveUpTimerFired = !m_GiveUpTimer.IsZero() && m_GiveUpTimer.Ago() > 2.5f; - - - bool bAllHumanHaveBigMissCombo = true; - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - if (pi->GetPlayerState()->m_PlayerOptions.GetCurrent().m_FailType == PlayerOptions::FAIL_OFF || - pi->GetPlayerState()->m_HealthState < HealthState_Dead ) - { - bAllHumanHaveBigMissCombo = false; - break; - } - } - if (bAllHumanHaveBigMissCombo) // possible to get in here. - { - bAllHumanHaveBigMissCombo = FAIL_ON_MISS_COMBO.GetValue() != -1 && STATSMAN->m_CurStageStats.GetMinimumMissCombo() >= FAIL_ON_MISS_COMBO; - } - if( bGiveUpTimerFired || bAllHumanHaveBigMissCombo ) - { - STATSMAN->m_CurStageStats.m_bGaveUp = true; - FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) - { - pi->GetPlayerStageStats()->m_bFailed |= bAllHumanHaveBigMissCombo; - pi->GetPlayerStageStats()->m_bDisqualified |= bGiveUpTimerFired; // Don't disqualify if failing for miss combo. The player should still be eligable for a high score on courses. - } - - AbortGiveUp( false ); - - if( GIVING_UP_GOES_TO_PREV_SCREEN ) - { - BeginBackingOutFromGameplay(); - } - else + if( bAllFailed ) { m_pSoundMusic->StopPlaying(); - this->PostScreenMessage( SM_NotesEnded, 0 ); + SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); + // todo: stop lyrics (m_LyricDisplay) from animating -aj } - return; - } - // Check to see if it's time to play a ScreenGameplay comment - m_fTimeSinceLastDancingComment += fDeltaTime; + // Update living players' alive time + // HACK: Don't scale alive time when using tab/tilde. Instead of accumulating time from a timer, + // this time should instead be tied to the music position. + float fUnscaledDeltaTime = m_timerGameplaySeconds.GetDeltaTime(); - switch( GAMESTATE->m_PlayMode ) - { - case PLAY_MODE_REGULAR: - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - if( GAMESTATE->OneIsHot() ) - PlayAnnouncer( "gameplay comment hot", SECONDS_BETWEEN_COMMENTS ); - else if( GAMESTATE->AllAreInDangerOrWorse() ) - PlayAnnouncer( "gameplay comment danger", SECONDS_BETWEEN_COMMENTS ); - else - PlayAnnouncer( "gameplay comment good", SECONDS_BETWEEN_COMMENTS ); - break; - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: - PlayAnnouncer( "gameplay comment oni", SECONDS_BETWEEN_COMMENTS ); - break; - default: - ASSERT(0); - } + FOREACH_EnabledPlayerInfo( m_vPlayerInfo, pi ) + if( !pi->GetPlayerStageStats()->m_bFailed ) + pi->GetPlayerStageStats()->m_fAliveSeconds += fUnscaledDeltaTime * GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate; + + // update fGameplaySeconds + STATSMAN->m_CurStageStats.m_fGameplaySeconds += fUnscaledDeltaTime; + float curBeat = GAMESTATE->m_Position.m_fSongBeat; + Song &s = *GAMESTATE->m_pCurSong; + + if( curBeat >= s.GetFirstBeat() && curBeat < s.GetLastBeat() ) + { + STATSMAN->m_CurStageStats.m_fStepsSeconds += fUnscaledDeltaTime; + + if( GAMESTATE->m_SongOptions.GetCurrent().m_fHaste != 0.0f ) + { + float fHasteRate = GetHasteRate(); + GAMESTATE->m_fAccumulatedHasteSeconds += (fUnscaledDeltaTime * fHasteRate) - fUnscaledDeltaTime; + } + } + + // Check for end of song + { + float fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut; + GetMusicEndTiming( fSecondsToStartFadingOutMusic, fSecondsToStartTransitioningOut ); + + bool bAllReallyFailed = STATSMAN->m_CurStageStats.AllFailed(); + if( bAllReallyFailed ) + fSecondsToStartTransitioningOut += BEGIN_FAILED_DELAY; + + if( GAMESTATE->m_Position.m_fMusicSeconds >= fSecondsToStartTransitioningOut && !m_NextSong.IsTransitioning() ) + this->PostScreenMessage( SM_NotesEnded, 0 ); + } + + // update 2d dancing characters + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + DancingCharacters *pCharacter = NULL; + if( m_pSongBackground ) + pCharacter = m_pSongBackground->GetDancingCharacters(); + if( pCharacter != NULL ) + { + TapNoteScore tns = pi->m_pPlayer->GetLastTapNoteScore(); + + ANIM_STATES_2D state = AS2D_MISS; + + switch( tns ) + { + case TNS_W4: + case TNS_W3: + state = AS2D_GOOD; + break; + case TNS_W2: + case TNS_W1: + state = AS2D_GREAT; + break; + default: + state = AS2D_MISS; + break; + } + + if( state == AS2D_GREAT && pi->GetPlayerState()->m_HealthState == HealthState_Hot ) + state = AS2D_FEVER; + + pCharacter->Change2DAnimState( pi->m_pn, state ); + } + } + + // Check for enemy death in enemy battle + static float fLastSeenEnemyHealth = 1; + if( fLastSeenEnemyHealth != GAMESTATE->m_fOpponentHealthPercent ) + { + fLastSeenEnemyHealth = GAMESTATE->m_fOpponentHealthPercent; + + if( GAMESTATE->m_fOpponentHealthPercent == 0 ) + { + // HACK: Load incorrect directory on purpose for now. + PlayAnnouncer( "gameplay battle damage level3", 0 ); + + GAMESTATE->RemoveAllActiveAttacks(); + + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + if( !GAMESTATE->IsCpuPlayer(pi->m_pn) ) + continue; + + SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") ); + pi->ShowOniGameOver(); + pi->m_NoteData.Init(); // remove all notes and scoring + pi->m_pPlayer->FadeToFail(); // tell the NoteField to fade to white + } + } + } + + // update give up + bool bGiveUpTimerFired = !m_GiveUpTimer.IsZero() && m_GiveUpTimer.Ago() > 2.5f; + + + bool bAllHumanHaveBigMissCombo = true; + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + if (pi->GetPlayerState()->m_PlayerOptions.GetCurrent().m_FailType == PlayerOptions::FAIL_OFF || + pi->GetPlayerState()->m_HealthState < HealthState_Dead ) + { + bAllHumanHaveBigMissCombo = false; + break; + } + } + if (bAllHumanHaveBigMissCombo) // possible to get in here. + { + bAllHumanHaveBigMissCombo = FAIL_ON_MISS_COMBO.GetValue() != -1 && STATSMAN->m_CurStageStats.GetMinimumMissCombo() >= FAIL_ON_MISS_COMBO; + } + if( bGiveUpTimerFired || bAllHumanHaveBigMissCombo ) + { + STATSMAN->m_CurStageStats.m_bGaveUp = true; + FOREACH_EnabledPlayerNumberInfo( m_vPlayerInfo, pi ) + { + pi->GetPlayerStageStats()->m_bFailed |= bAllHumanHaveBigMissCombo; + pi->GetPlayerStageStats()->m_bDisqualified |= bGiveUpTimerFired; // Don't disqualify if failing for miss combo. The player should still be eligable for a high score on courses. + } + + AbortGiveUp( false ); + + if( GIVING_UP_GOES_TO_PREV_SCREEN ) + { + BeginBackingOutFromGameplay(); + } + else + { + m_pSoundMusic->StopPlaying(); + this->PostScreenMessage( SM_NotesEnded, 0 ); + } + return; + } + + // Check to see if it's time to play a ScreenGameplay comment + m_fTimeSinceLastDancingComment += fDeltaTime; + + switch( GAMESTATE->m_PlayMode ) + { + case PLAY_MODE_REGULAR: + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + if( GAMESTATE->OneIsHot() ) + PlayAnnouncer( "gameplay comment hot", SECONDS_BETWEEN_COMMENTS ); + else if( GAMESTATE->AllAreInDangerOrWorse() ) + PlayAnnouncer( "gameplay comment danger", SECONDS_BETWEEN_COMMENTS ); + else + PlayAnnouncer( "gameplay comment good", SECONDS_BETWEEN_COMMENTS ); + break; + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ONI: + case PLAY_MODE_ENDLESS: + PlayAnnouncer( "gameplay comment oni", SECONDS_BETWEEN_COMMENTS ); + break; + default: + ASSERT(0); + } + } + default: break; } PlayTicks(); diff --git a/src/ScreenJukebox.cpp b/src/ScreenJukebox.cpp index 5059d2ecf1..233107b35b 100644 --- a/src/ScreenJukebox.cpp +++ b/src/ScreenJukebox.cpp @@ -248,10 +248,12 @@ void ScreenJukebox::Input( const InputEventPlus &input ) switch( input.MenuI ) { - case GAME_BUTTON_LEFT: - case GAME_BUTTON_RIGHT: - SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); - return; + case GAME_BUTTON_LEFT: + case GAME_BUTTON_RIGHT: + SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); + return; + default: + break; } ScreenAttract::AttractInput( input, this ); diff --git a/src/ScreenOptions.cpp b/src/ScreenOptions.cpp index 1afe97c5ee..d9bfc480da 100644 --- a/src/ScreenOptions.cpp +++ b/src/ScreenOptions.cpp @@ -465,12 +465,13 @@ void ScreenOptions::TweenCursor( PlayerNumber pn ) bool bCanGoRight = false; switch( row.GetRowDef().m_layoutType ) { - case LAYOUT_SHOW_ONE_IN_ROW: - bCanGoLeft = iChoiceWithFocus > 0; - bCanGoRight = iChoiceWithFocus >= 0 && iChoiceWithFocus < (int) row.GetRowDef().m_vsChoices.size()-1; - break; - case LAYOUT_SHOW_ALL_IN_ROW: - break; + case LAYOUT_SHOW_ONE_IN_ROW: + bCanGoLeft = iChoiceWithFocus > 0; + bCanGoRight = iChoiceWithFocus >= 0 && iChoiceWithFocus < (int) row.GetRowDef().m_vsChoices.size()-1; + break; + case LAYOUT_SHOW_ALL_IN_ROW: + break; + default: break; } cursor.SetCanGo( bCanGoLeft, bCanGoRight ); @@ -505,13 +506,15 @@ void ScreenOptions::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_START: - case GAME_BUTTON_SELECT: - case GAME_BUTTON_MENURIGHT: - case GAME_BUTTON_MENULEFT: - INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_START, input.pn ); - INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_RIGHT, input.pn ); - INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_LEFT, input.pn ); + case GAME_BUTTON_START: + case GAME_BUTTON_SELECT: + case GAME_BUTTON_MENURIGHT: + case GAME_BUTTON_MENULEFT: + INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_START, input.pn ); + INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_RIGHT, input.pn ); + INPUTMAPPER->ResetKeyRepeat( GAME_BUTTON_LEFT, input.pn ); + default: + break; } } @@ -736,12 +739,13 @@ void ScreenOptions::AfterChangeValueOrRow( PlayerNumber pn ) BitmapText *pText = NULL; switch( m_InputMode ) { - case INPUTMODE_INDIVIDUAL: - pText = &m_textExplanation[pn]; - break; - case INPUTMODE_SHARE_CURSOR: - pText = &m_textExplanationTogether; - break; + case INPUTMODE_INDIVIDUAL: + pText = &m_textExplanation[pn]; + break; + case INPUTMODE_SHARE_CURSOR: + pText = &m_textExplanationTogether; + break; + default: break; } if( pText->GetText() != text ) { @@ -787,8 +791,8 @@ void ScreenOptions::MenuStart( const InputEventPlus &input ) * GAME_BUTTON_RIGHT are being held. */ switch( m_OptionsNavigation ) { - case NAV_THREE_KEY: - case NAV_TOGGLE_THREE_KEY: + case NAV_THREE_KEY: + case NAV_TOGGLE_THREE_KEY: { bool bHoldingLeftAndRight = INPUTMAPPER->IsBeingPressed( GAME_BUTTON_RIGHT, pn ) && @@ -800,6 +804,7 @@ void ScreenOptions::MenuStart( const InputEventPlus &input ) return; } } + default: break; } this->ProcessMenuStart( input ); @@ -1170,23 +1175,26 @@ void ScreenOptions::AfterChangeRow( PlayerNumber pn ) OptionRow &row = *m_pRows[iRow]; switch( m_OptionsNavigation ) { - case NAV_TOGGLE_FIVE_KEY: - if( row.GetRowDef().m_layoutType != LAYOUT_SHOW_ONE_IN_ROW ) + case NAV_TOGGLE_FIVE_KEY: { - int iSelectionDist = -1; - for( unsigned i = 0; i < row.GetTextItemsSize(); ++i ) + if( row.GetRowDef().m_layoutType != LAYOUT_SHOW_ONE_IN_ROW ) { - int iWidth, iX, iY; - GetWidthXY( pn, m_iCurrentRow[pn], i, iWidth, iX, iY ); - const int iDist = abs( iX-m_iFocusX[pn] ); - if( iSelectionDist == -1 || iDist < iSelectionDist ) + int iSelectionDist = -1; + for( unsigned i = 0; i < row.GetTextItemsSize(); ++i ) { - iSelectionDist = iDist; - row.SetChoiceInRowWithFocus( pn, i ); + int iWidth, iX, iY; + GetWidthXY( pn, m_iCurrentRow[pn], i, iWidth, iX, iY ); + const int iDist = abs( iX-m_iFocusX[pn] ); + if( iSelectionDist == -1 || iDist < iSelectionDist ) + { + iSelectionDist = iDist; + row.SetChoiceInRowWithFocus( pn, i ); + } } } + break; } - break; + default: break; } if( row.GetFirstItemGoesDown() ) diff --git a/src/ScreenPrompt.cpp b/src/ScreenPrompt.cpp index bc617679c1..5ae2ed4505 100644 --- a/src/ScreenPrompt.cpp +++ b/src/ScreenPrompt.cpp @@ -118,12 +118,13 @@ void ScreenPrompt::Input( const InputEventPlus &input ) { switch( input.DeviceI.button ) { - case KEY_LEFT: - this->MenuLeft( input ); - return; - case KEY_RIGHT: - this->MenuRight( input ); - return; + case KEY_LEFT: + this->MenuLeft( input ); + return; + case KEY_RIGHT: + this->MenuRight( input ); + return; + default: break; } } @@ -198,12 +199,13 @@ void ScreenPrompt::End( bool bCancelled ) { switch( m_Answer ) { - case ANSWER_YES: - m_smSendOnPop = SM_Success; - break; - case ANSWER_NO: - m_smSendOnPop = SM_Failure; - break; + case ANSWER_YES: + m_smSendOnPop = SM_Success; + break; + case ANSWER_NO: + m_smSendOnPop = SM_Failure; + break; + default: break; } if( bCancelled ) @@ -218,14 +220,15 @@ void ScreenPrompt::End( bool bCancelled ) switch( m_Answer ) { - case ANSWER_YES: - if( g_pOnYes ) - g_pOnYes(g_pCallbackData); - break; - case ANSWER_NO: - if( g_pOnNo ) - g_pOnNo(g_pCallbackData); - break; + case ANSWER_YES: + if( g_pOnYes ) + g_pOnYes(g_pCallbackData); + break; + case ANSWER_NO: + if( g_pOnNo ) + g_pOnNo(g_pCallbackData); + break; + default: break; } s_LastAnswer = bCancelled ? ANSWER_CANCEL : m_Answer; diff --git a/src/ScreenRanking.cpp b/src/ScreenRanking.cpp index b3df65d662..af57adc86e 100644 --- a/src/ScreenRanking.cpp +++ b/src/ScreenRanking.cpp @@ -212,14 +212,15 @@ float ScreenRanking::SetPage( const PageToShow &pts ) bool bShowTime = false; switch( RANKING_TYPE ) { - case RankingType_Category: - bShowScores = true; - break; - case RankingType_SpecificTrail: - bShowScores = !pts.pCourse->IsOni(); - bShowPoints = pts.pCourse->IsOni(); - bShowTime = pts.pCourse->IsOni(); - break; + case RankingType_Category: + bShowScores = true; + break; + case RankingType_SpecificTrail: + bShowScores = !pts.pCourse->IsOni(); + bShowPoints = pts.pCourse->IsOni(); + bShowTime = pts.pCourse->IsOni(); + break; + default: break; } for( int l=0; l apCharacters; - CHARMAN->GetCharacters( apCharacters ); - m_iSelectedCharacter[pnAffected] += deltaValue; - wrap( m_iSelectedCharacter[pnAffected], apCharacters.size() ); - AfterValueChange(pn); - m_soundChange.Play(); - break; + case CHOOSING_CPU_CHARACTER: + case CHOOSING_HUMAN_CHARACTER: + { + vector apCharacters; + CHARMAN->GetCharacters( apCharacters ); + m_iSelectedCharacter[pnAffected] += deltaValue; + wrap( m_iSelectedCharacter[pnAffected], apCharacters.size() ); + AfterValueChange(pn); + m_soundChange.Play(); + break; + } + default: break; } } @@ -332,12 +337,13 @@ void ScreenSelectCharacter::MakeSelection( PlayerNumber pn ) BeforeRowChange(pn); switch( m_SelectionRow[pn] ) { - case CHOOSING_HUMAN_CHARACTER: - m_SelectionRow[pn] = GAMESTATE->AnyPlayersAreCpu() ? CHOOSING_CPU_CHARACTER : FINISHED_CHOOSING; - break; - case CHOOSING_CPU_CHARACTER: - m_SelectionRow[pn] = FINISHED_CHOOSING; - break; + case CHOOSING_HUMAN_CHARACTER: + m_SelectionRow[pn] = GAMESTATE->AnyPlayersAreCpu() ? CHOOSING_CPU_CHARACTER : FINISHED_CHOOSING; + break; + case CHOOSING_CPU_CHARACTER: + m_SelectionRow[pn] = FINISHED_CHOOSING; + break; + default: break; } AfterRowChange(pn); AfterValueChange(pn); diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index 4251ae73ab..dbf4882317 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -528,21 +528,22 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) { switch( input.MenuI ) { - case GAME_BUTTON_LEFT: - ChangeSteps( input.pn, -1 ); - m_bAcceptSelectRelease[input.pn] = false; - break; - case GAME_BUTTON_RIGHT: - ChangeSteps( input.pn, +1 ); - m_bAcceptSelectRelease[input.pn] = false; - break; - case GAME_BUTTON_START: - m_bAcceptSelectRelease[input.pn] = false; - if( MODE_MENU_AVAILABLE ) - m_MusicWheel.NextSort(); - else - m_soundLocked.Play(); - break; + case GAME_BUTTON_LEFT: + ChangeSteps( input.pn, -1 ); + m_bAcceptSelectRelease[input.pn] = false; + break; + case GAME_BUTTON_RIGHT: + ChangeSteps( input.pn, +1 ); + m_bAcceptSelectRelease[input.pn] = false; + break; + case GAME_BUTTON_START: + m_bAcceptSelectRelease[input.pn] = false; + if( MODE_MENU_AVAILABLE ) + m_MusicWheel.NextSort(); + else + m_soundLocked.Play(); + break; + default: break; } } else if( input.type == IET_FIRST_PRESS && input.MenuI != GAME_BUTTON_SELECT ) diff --git a/src/ScreenSyncOverlay.cpp b/src/ScreenSyncOverlay.cpp index a0d9f6c6a8..af5b52cf44 100644 --- a/src/ScreenSyncOverlay.cpp +++ b/src/ScreenSyncOverlay.cpp @@ -212,12 +212,16 @@ bool ScreenSyncOverlay::OverlayInput( const InputEventPlus &input ) } switch( input.type ) { - case IET_RELEASE: fDelta *= 0; break; - case IET_REPEAT: - if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) - fDelta *= 0; - else - fDelta *= 10; + case IET_RELEASE: fDelta *= 0; break; + case IET_REPEAT: + { + if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) + fDelta *= 0; + else + fDelta *= 10; + break; + } + default: break; } if( GAMESTATE->m_pCurSong != NULL ) { @@ -237,31 +241,39 @@ bool ScreenSyncOverlay::OverlayInput( const InputEventPlus &input ) } switch( input.type ) { - case IET_RELEASE: fDelta *= 0; break; - case IET_REPEAT: - if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) - fDelta *= 0; - else - fDelta *= 10; + case IET_RELEASE: fDelta *= 0; break; + case IET_REPEAT: + { + if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) + fDelta *= 0; + else + fDelta *= 10; + } + default: break; } switch( a ) { - case ChangeGlobalOffset: + case ChangeGlobalOffset: + { PREFSMAN->m_fGlobalOffsetSeconds.Set( PREFSMAN->m_fGlobalOffsetSeconds + fDelta ); break; - - case ChangeSongOffset: - if( GAMESTATE->m_pCurSong != NULL ) - { - GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += fDelta; - const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); - FOREACH( Steps*, const_cast&>(vpSteps), s ) - { - (*s)->m_Timing.m_fBeat0OffsetInSeconds += fDelta; - } } - break; + + case ChangeSongOffset: + { + if( GAMESTATE->m_pCurSong != NULL ) + { + GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += fDelta; + const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); + FOREACH( Steps*, const_cast&>(vpSteps), s ) + { + (*s)->m_Timing.m_fBeat0OffsetInSeconds += fDelta; + } + } + break; + } + default: break; } } break; diff --git a/src/ScreenTestInput.cpp b/src/ScreenTestInput.cpp index cabf9849ff..d0390babb1 100644 --- a/src/ScreenTestInput.cpp +++ b/src/ScreenTestInput.cpp @@ -95,14 +95,19 @@ void ScreenTestInput::Input( const InputEventPlus &input ) RString sMessage = input.DeviceI.ToString(); switch( input.type ) { - case IET_FIRST_PRESS: - case IET_RELEASE: - switch( input.type ) + case IET_FIRST_PRESS: + case IET_RELEASE: { - case IET_FIRST_PRESS: sMessage += "Pressed"; break; - case IET_RELEASE: sMessage += "Released"; break; + switch( input.type ) + { + case IET_FIRST_PRESS: sMessage += "Pressed"; break; + case IET_RELEASE: sMessage += "Released"; break; + default: break; + } + MESSAGEMAN->Broadcast( sMessage ); + break; } - MESSAGEMAN->Broadcast( sMessage ); + default: break; } Screen::Input( input ); // default handler diff --git a/src/ScreenTestLights.cpp b/src/ScreenTestLights.cpp index 87b0b0eb35..e83a11f6a5 100644 --- a/src/ScreenTestLights.cpp +++ b/src/ScreenTestLights.cpp @@ -59,12 +59,13 @@ void ScreenTestLights::Update( float fDeltaTime ) switch( LIGHTSMAN->GetLightsMode() ) { - case LIGHTSMODE_TEST_AUTO_CYCLE: - s += AUTO_CYCLE.GetValue()+"\n"; - break; - case LIGHTSMODE_TEST_MANUAL_CYCLE: - s += MANUAL_CYCLE.GetValue()+"\n"; - break; + case LIGHTSMODE_TEST_AUTO_CYCLE: + s += AUTO_CYCLE.GetValue()+"\n"; + break; + case LIGHTSMODE_TEST_MANUAL_CYCLE: + s += MANUAL_CYCLE.GetValue()+"\n"; + break; + default: break; } if( cl == CabinetLight_Invalid ) diff --git a/src/ScreenTestSound.cpp b/src/ScreenTestSound.cpp index 813f5cf6fa..9883f9fbec 100644 --- a/src/ScreenTestSound.cpp +++ b/src/ScreenTestSound.cpp @@ -137,68 +137,69 @@ void ScreenTestSound::Input( const InputEventPlus &input ) case DEVICE_KEYBOARD: switch( input.DeviceI.button ) { - case '1': - case '2': - case '3': - case '4': - case '5': selected = input.DeviceI.button - '0'-1; break; - case 'p': - { - /* We want to be able to read the position of copied sounds; if we let - * RageSound copy itself, then the copy will be owned by RageSoundManager - * and we won't be allowed to touch it. Copy it ourself. */ - RageSound *pCopy = new RageSound( s[selected].s ); - m_sSoundCopies[selected].push_back( pCopy ); - pCopy->Play(); - break; - } - case 's': - for( int i = 0; i < nsounds; ++i ) + case '1': + case '2': + case '3': + case '4': + case '5': selected = input.DeviceI.button - '0'-1; break; + case 'p': { - /* Stop copied sounds. */ - vector &snds = m_sSoundCopies[i]; - for( unsigned j = 0; j < snds.size(); ++j ) - snds[j]->Stop(); + /* We want to be able to read the position of copied sounds; if we let + * RageSound copy itself, then the copy will be owned by RageSoundManager + * and we won't be allowed to touch it. Copy it ourself. */ + RageSound *pCopy = new RageSound( s[selected].s ); + m_sSoundCopies[selected].push_back( pCopy ); + pCopy->Play(); + break; } - break; - case 'l': + case 's': + { + for( int i = 0; i < nsounds; ++i ) + { + /* Stop copied sounds. */ + vector &snds = m_sSoundCopies[i]; + for( unsigned j = 0; j < snds.size(); ++j ) + snds[j]->Stop(); + } + break; + } + case 'l': { RageSoundParams p = s[selected].s.GetParams(); p.StopMode = RageSoundParams::M_LOOP; s[selected].s.SetParams( p ); + break; } - - break; - case 'a': + case 'a': { RageSoundParams p = s[selected].s.GetParams(); p.StopMode = RageSoundParams::M_STOP; s[selected].s.SetParams( p ); + break; } - break; - case 'c': + case 'c': { RageSoundParams p = s[selected].s.GetParams(); p.StopMode = RageSoundParams::M_CONTINUE; s[selected].s.SetParams( p ); + break; } - break; - -/* case KEY_LEFT: - obj.SetX(obj.GetX() - 10); - break; - case KEY_RIGHT: - obj.SetX(obj.GetX() + 10); - break; - case KEY_UP: - obj.SetY(obj.GetY() - 10); - break; - case KEY_DOWN: - obj.SetY(obj.GetY() + 10); - break; +/* case KEY_LEFT: + obj.SetX(obj.GetX() - 10); + break; + case KEY_RIGHT: + obj.SetX(obj.GetX() + 10); + break; + case KEY_UP: + obj.SetY(obj.GetY() - 10); + break; + case KEY_DOWN: + obj.SetY(obj.GetY() + 10); + break; */ + default: break; } - + default: break; } } diff --git a/src/ScreenTextEntry.cpp b/src/ScreenTextEntry.cpp index ee5fa14164..620a0f7bcc 100644 --- a/src/ScreenTextEntry.cpp +++ b/src/ScreenTextEntry.cpp @@ -200,10 +200,11 @@ void ScreenTextEntry::Input( const InputEventPlus &input ) { switch( input.type ) { - case IET_FIRST_PRESS: - case IET_REPEAT: - BackspaceInAnswer(); - break; + case IET_FIRST_PRESS: + case IET_REPEAT: + BackspaceInAnswer(); + default: + break; } } else if( input.type == IET_FIRST_PRESS ) diff --git a/src/SongManager.cpp b/src/SongManager.cpp index 9550ae3c75..8fda712dff 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -497,7 +497,7 @@ RageColor SongManager::GetSongColor( const Song* pSong ) const int i = m_vPreferredSongSort.size(); return SONG_GROUP_COLOR.GetValue( i%NUM_SONG_GROUP_COLORS ); } - else + else // TODO: Have a better fallback plan with colors? { /* XXX: Previously, this matched all notes, which set a song to "extra" * if it had any 10-foot steps at all, even edits or doubles. @@ -516,9 +516,10 @@ RageColor SongManager::GetSongColor( const Song* pSong ) const const Steps* pSteps = vpSteps[i]; switch( pSteps->GetDifficulty() ) { - case Difficulty_Challenge: - case Difficulty_Edit: - continue; + case Difficulty_Challenge: + case Difficulty_Edit: + continue; + default: break; } //if(pSteps->m_StepsType != st) @@ -527,7 +528,7 @@ RageColor SongManager::GetSongColor( const Song* pSong ) const if( pSteps->GetMeter() >= EXTRA_COLOR_METER ) return (RageColor)EXTRA_COLOR; } - if( pSong->m_sMainTitle == "DVNO") + if( pSong->m_sMainTitle == "DVNO") // XXX: What IS this? An easter egg? -Wolfman2000 { return RageColor(1.0f,0.8f,0.0f,1.0f); } diff --git a/src/StageStats.cpp b/src/StageStats.cpp index d30e7bfe9f..28ac23f8b7 100644 --- a/src/StageStats.cpp +++ b/src/StageStats.cpp @@ -166,9 +166,10 @@ void StageStats::FinalizeScores( bool bSummary ) { switch( GAMESTATE->m_PlayMode ) { - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - return; // don't save scores in battle + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + return; // don't save scores in battle + default: break; } if( PREFSMAN->m_sTestInitialScreen.Get() != "" ) diff --git a/src/StepMania.cpp b/src/StepMania.cpp index 6d1c75ea19..b5622e36b4 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -1273,28 +1273,29 @@ bool HandleGlobalInputs( const InputEventPlus &input ) switch( input.MenuI ) { - case GAME_BUTTON_OPERATOR: - /* Global operator key, to get quick access to the options menu. Don't - * do this if we're on a "system menu", which includes the editor - * (to prevent quitting without storing changes). */ - if( SCREENMAN->AllowOperatorMenuButton() ) - { - SCREENMAN->SystemMessage( SERVICE_SWITCH_PRESSED ); - SCREENMAN->PopAllScreens(); - GAMESTATE->Reset(); - SCREENMAN->SetNewScreen( CommonMetrics::OPERATOR_MENU_SCREEN ); - } - return true; + case GAME_BUTTON_OPERATOR: + /* Global operator key, to get quick access to the options menu. Don't + * do this if we're on a "system menu", which includes the editor + * (to prevent quitting without storing changes). */ + if( SCREENMAN->AllowOperatorMenuButton() ) + { + SCREENMAN->SystemMessage( SERVICE_SWITCH_PRESSED ); + SCREENMAN->PopAllScreens(); + GAMESTATE->Reset(); + SCREENMAN->SetNewScreen( CommonMetrics::OPERATOR_MENU_SCREEN ); + } + return true; - case GAME_BUTTON_COIN: - // Handle a coin insertion. - if( GAMESTATE->IsEditing() ) // no coins while editing - { - LOG->Trace( "Ignored coin insertion (editing)" ); - break; - } - StepMania::InsertCoin(); - return false; // Attract needs to know because it goes to TitleMenu on > 1 credit + case GAME_BUTTON_COIN: + // Handle a coin insertion. + if( GAMESTATE->IsEditing() ) // no coins while editing + { + LOG->Trace( "Ignored coin insertion (editing)" ); + break; + } + StepMania::InsertCoin(); + return false; // Attract needs to know because it goes to TitleMenu on > 1 credit + default: break; } /* Re-added for StepMania 3.9 theming veterans, plus it's just faster than diff --git a/src/UnlockManager.cpp b/src/UnlockManager.cpp index b3d045d649..e8075bbb2c 100644 --- a/src/UnlockManager.cpp +++ b/src/UnlockManager.cpp @@ -268,18 +268,20 @@ static float GetArcadePoints( const Profile *pProfile ) { switch(pm) { - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: - fAP += pProfile->m_iNumSongsPlayedByPlayMode[pm]; - break; + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ONI: + case PLAY_MODE_ENDLESS: + { + fAP += pProfile->m_iNumSongsPlayedByPlayMode[pm]; + } + default: break; } - } return fAP; } +// TODO: Make this more flexible for games with many grade tiers. Lua-ize it? -Wolfman2000 static float GetSongPoints( const Profile *pProfile ) { float fSP = 0; @@ -297,6 +299,7 @@ static float GetSongPoints( const Profile *pProfile ) case Grade_Tier07:/*D*/ fSP += 1* pProfile->m_iNumStagesPassedByGrade[g]; break; case Grade_Failed: case Grade_NoData: + default: ; // no points break; } @@ -306,11 +309,13 @@ static float GetSongPoints( const Profile *pProfile ) { switch(pm) { - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ONI: + case PLAY_MODE_ENDLESS: + { fSP += pProfile->m_iNumSongsPlayedByPlayMode[pm]; - break; + } + default: break; } } From 6f5ebfddc112ca3b71f8fc2ba24fb90fbe1c61e2 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 11:23:49 -0400 Subject: [PATCH 89/94] [Xcode4] don't need these it seems. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 9c07554a6f..1b97027d6c 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7845,12 +7845,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = NO; STRIP_STYLE = "non-global"; @@ -8281,12 +8279,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; @@ -8635,12 +8631,10 @@ GCC_WARN_UNUSED_VARIABLE = YES; LINKER_DISPLAYS_MANGLED_NAMES = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.5; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; PREBINDING = NO; PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES; SDKROOT = macosx10.5; - SDKROOT_i386 = ""; SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)"; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; From 5eff51171f73175b56d993f28292eae12f4a03c6 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:15:49 -0400 Subject: [PATCH 90/94] [Xcode4] May as well put in better formatting. --- src/NoteTypes.h | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/NoteTypes.h b/src/NoteTypes.h index 795eef7131..7339ec1292 100644 --- a/src/NoteTypes.h +++ b/src/NoteTypes.h @@ -217,16 +217,26 @@ inline const RString TapNoteTypeToString( TapNote::Type tn ) { switch( tn ) { - case TapNote::empty: return RString("empty"); - case TapNote::tap: return RString("tap"); - case TapNote::hold_head: return RString("hold_head"); - case TapNote::hold_tail: return RString("hold_tail"); - case TapNote::mine: return RString("mine"); - case TapNote::lift: return RString("lift"); - case TapNote::attack: return RString("attack"); - case TapNote::autoKeysound: return RString("autoKeysound"); - case TapNote::fake: return RString("fake"); - default: return RString(); + case TapNote::empty: + return RString("empty"); + case TapNote::tap: + return RString("tap"); + case TapNote::hold_head: + return RString("hold_head"); + case TapNote::hold_tail: + return RString("hold_tail"); + case TapNote::mine: + return RString("mine"); + case TapNote::lift: + return RString("lift"); + case TapNote::attack: + return RString("attack"); + case TapNote::autoKeysound: + return RString("autoKeysound"); + case TapNote::fake: + return RString("fake"); + default: + return RString(""); } } From bf79c788d41b4f8096fecf8fd7c617e6b3263537 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:20:52 -0400 Subject: [PATCH 91/94] [Xcode4] Fix linking. --- Xcode/stepmania_xcode4.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj index 1b97027d6c..f828e54f60 100644 --- a/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj +++ b/Xcode/stepmania_xcode4.xcodeproj/project.pbxproj @@ -7790,6 +7790,10 @@ "-fno-exceptions", "-falign-loops=16", ); + OTHER_LDFLAGS = ( + "-read_only_relocs", + suppress, + ); PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; @@ -8331,6 +8335,10 @@ "-fno-exceptions", "-falign-loops=16", ); + OTHER_LDFLAGS = ( + "-read_only_relocs", + suppress, + ); PRODUCT_NAME = StepMania; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "$(SRCROOT)/.."; @@ -8578,6 +8586,10 @@ "-fno-exceptions", "-falign-loops=16", ); + OTHER_LDFLAGS = ( + "-read_only_relocs", + suppress, + ); PRODUCT_NAME = StepMania; SYMROOT = "$(SRCROOT)/.."; WRAPPER_EXTENSION = app; From d53d9156ad99d843b5aaa6deddab42396ed59dc7 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Wed, 20 Jul 2011 12:38:02 -0500 Subject: [PATCH 92/94] go away, warnings --- src/arch/LoadingWindow/LoadingWindow_Null.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arch/LoadingWindow/LoadingWindow_Null.h b/src/arch/LoadingWindow/LoadingWindow_Null.h index 4b470f80b2..6d8f48b664 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Null.h +++ b/src/arch/LoadingWindow/LoadingWindow_Null.h @@ -7,7 +7,7 @@ class LoadingWindow_Null: public LoadingWindow { public: void SetText( RString str ) { } - void SetSplash( RString str ) { } + void SetSplash( const RString str ) { } }; #define USE_LOADING_WINDOW_NULL From c039975cd4dc7760143ac7f4d4036d7b671ee5bf Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:42:49 -0400 Subject: [PATCH 93/94] ...why did we have this file? Remove it. --- Themes/_fallback/Languages/en.ini_ | 407 ----------------------------- 1 file changed, 407 deletions(-) delete mode 100644 Themes/_fallback/Languages/en.ini_ diff --git a/Themes/_fallback/Languages/en.ini_ b/Themes/_fallback/Languages/en.ini_ deleted file mode 100644 index 8a64fd7dcc..0000000000 --- a/Themes/_fallback/Languages/en.ini_ +++ /dev/null @@ -1,407 +0,0 @@ -# 01 # Global -# 02 # System -# 03 # Attract -# 04 # Base -# 05 # -# 06 # - -# 01 # -[ScreenDebugOverlay] -Debug Menu=Debug Menu - -Multitexture=Multitexture -Assist=Assist -Visual Delay Up=Visual Delay Up -Visual Delay Down=Visual Delay Down -Rendering Stats=Rendering Stats -Volume Up=Volume Up -Volume Down=Volume Down -Reload=Reload -Reload Theme and Textures=Reload Theme and Textures -Autosync=Autosync -Halt=Halt -Slow=Slow -Uptime=Uptime -Machine=Machine -Profile=Profile -CoinMode=CoinMode -Show Masks=Show Masks -Vsync=Vertical Sync -Write Preferences=Write Preferences -Monkey Input=Hampsterblade Mode -Send Off To Screen=Send Off To Screen -Send On To Screen=Send On To Screen -Write Profiles=Write Profiles -Lights Debug=Lights Debug -Fill Profile Stats=Fill Profile Stats -off=Off -Pull Back Camera=Pull Back Camera -Force Crash=Force Crash -Song=Song -Restart=Restart -on=On -Tempo=Tempo -Screen Test Mode=Screen Test Mode -AutoPlay=AutoPlay -Clear Profile Stats=Clear Profile Stats -Flush Log=Flush Log -%s in gameplay=%s in gameplay -Send Notes Ended=Send Notes Ended -or=or -CPU=CPU -Menu Timer=Menu Timer -# 02 # -[ScreenBookkeeping] -Coin Data by Day of Week, All-Time=Coin Data by Day of Week, All-Time -Coin Data of Last %d Weeks=Coin Data of Last %d Weeks -Coin Data of Last %d Days=Coin Data of Last %d Days -Coin Data by Hour of Day, All-Time=Coin Data by Hour of Day, All-Time -All-time Coin Total:=All-time Coin Total: -Total Song Plays: %d=Total Song Plays: %d -# 03 # - -# 04 # -[ScreenEdit] -%s notes=%s notes -Can't undo - no undo data.=Can't undo - no undo data. -Do you want to revert from disk?=Do you want to revert from disk? -Do you want to revert to your last save?=Do you want to revert to your last save? -Do you want to save changes before exiting?=Do you want to save changes before exiting? -Enter a new BPM value.=Enter a new BPM value. -Enter a new Stop value.=Enter a new Stop value. -Enter a new artist transliteration.=Enter a new artist transliteration. -Enter a new artist.=Enter a new artist. -Enter a new credit.=Enter a new credit. -Enter a new description.=Enter a new description. -Enter a new last beat hint.=Enter a new last beat hint. -Enter a new main title transliteration.=Enter a new main title transliteration. -Enter a new main title.=Enter a new main title. -Enter a new sub title transliteration.=Enter a new sub title transliteration. -Enter a new sub title.=Enter a new sub title. -More than %d notes per measure is not allowed. This change has been reverted.=More than %d notes per measure is not allowed. This change has been reverted. -No backgrounds available=No backgrounds available -EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nSpace bar:\n Set area\n marker\nEnter:\n Area Menu\nEscape:\n Main Menu\nF1:\n Show help\n -PlayRecordHelpText=Press START to end -Save successful.=Save successful. -Saved as SM and DWI.=Saved as SM and DWI. -Saved as SM.=Saved as SM. -Switched to=Switched to -The change has been reverted.=The change has been reverted. -This change creates more than %d notes in a measure.=This change creates more than %d notes in a measure. -This change creates notes past the end of the music and is not allowed.=This change creates notes past the end of the music and is not allowed. -This will destroy all unsaved changes.=This will destroy all unsaved changes. -Undo=Undo - -Current beat=Current beat -Current second=Current second -Snap to=Snap to -Selection beat=Selection beat -Difficulty=Difficulty -Description=Description -Main title=Main title -Subtitle=Subtitle -Tap Steps=Tap Steps -Jumps=Jumps -Hands=Hands -Holds=Holds -Mines=Mines -Rolls=Rolls -Beat 0 offset=Beat 0 offset -Preview Start=Preview Start -Preview Length=Preview Length -[ScreenEditMenu] -Continue with delete?=Continue with delete? -Enter a description for this edit.=Enter a description for this edit. -ExplanationAction=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationGroup=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSong=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSourceSteps=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSourceStepsType=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationSteps=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -ExplanationStepsType=In this mode, you can edit existing notes patterns, create note patterns, or synchronize notes with the music. -Profile name cannot be blank.=Profile name can not be blank. -The name you chose conflicts with another profile. Please use a different name.=The name you chose conflicts with another profile. Please use a different name. -These steps are produced by autogen. You do not need to delete them.=These steps are produced by autogen. You do not need to delete them. -These steps will be lost permanently.=These steps will be lost permanently. -This song is missing a music file and cannot be edited.=This song is missing a music file and can not be edited. -The song directory is read-only and cannot be edited.=The song directory is read-only and cannot be edited. -Blank=Blank -[ScreenMapControllers] -InvalidButton=That key can not be mapped. -%s slots=%s slots -[ScreenNetRoom] -Enter a description for the room:=Enter a description for the room: -Enter a password for the room (blank, no password):=Enter a password for the room (blank, no password): -Enter Room's Password:=Enter Room's Password: -[ScreenNetworkOptions] -Disconnected from server.=Disconnected from server. -Enter a network address.=Enter a network address. -Server failed: %s Code:%d=Server failed: %s Code:%d -Use 127.0.0.1 to connect to yourself.=Use 127.0.0.1 to connect to yourself. -Connect=Connect -Disconnect=Disconnect -ScoreOn=On -ScoreOff=Off -[ScreenOptionsCourseOverview] -Course saved successfully.=Course saved successfully. -Error saving course.=Error saving course. -Enter a name for the course.=Enter a name for the course. -Error saving workout.=Error saving workout. -Workout saved successfully.=Workout saved successfully. -Enter a name for the workout.=Enter a name for the workout. -[ScreenOptionsEditCourse] --Empty-=-Empty- -Song=Song -Steps=Steps -minutes=minutes -You must enable at least %d songs.=You must enable at least %d songs. -[ScreenOptionsManageCourses] -Error renaming file.=Error renameing file. -Continue with delete?=Continue with delete? -Enter a name for the course.=Enter a name for the course. -This course will be lost permanently.=This course will be lost permanently. -You have %d, the maximum number allowed.=You have %d, the maximum number allowed. -You must delete an existing before creating a new.=You must delete an existing before creating a new. -Error deleting the file '%s'.=Error deleting the file "%s". -[ScreenOptionsManageEditSteps] -Continue with delete?=Continue with delete? -Enter a name for these steps.=Enter a name for these steps. -These steps will be lost permanently.=These steps will be lost permanently. -You have %d step edits, the maximum number allowed.=You have %d step edits, the maximum number allowed. -You must delete an existing steps edit before creating a new steps edit.=You must delete an existing steps edit before creating a new steps edit. -[ScreenOptionsManageProfiles] -Are you sure you want to clear all data in the profile '%s'?=Are you sure you want to clear all data in the profile &oq;%s&cq;? -Are you sure you want to delete the profile '%s'?=Are you sure you want to delete the profile &oq;%s&cq;? -Enter a name for the profile.=Enter a -NewProfileDefaultName=New -[ScreenOptionsMasterPrefs] -Off=Off -[ScreenOptionsMemoryCard] -Error mounting card: %s=Error mounting card: %s -[ScreenPackages] -Download cancelled.=Download cancelled. -Enter URL=Enter URL -[ScreenSaveSync] -Choosing NO will discard your changes.=Choosing NO will discard your changes. -Would you like to save these changes?=Would you like to save these changes? -You have changed the timing of=You have changed the timing of -[ScreenServiceAction] -%d added=%d added -%d copied=%d copied -%d overwritten=%d overwritten -%d deleted=%d deleted -%d edits cleared, %d errors.=%d edits cleared, %d errors. -%d failed=%d failed -%d ignored=%d ignored -Bookkeeping data cleared.=Bookkeeping data cleared. -Copied from P%d card:=Copied from P%d card: -Copied to P%d card:=Copied to P%d card: -Edits not cleared - No memory cards ready.=Edits not cleared - No memory cards ready. -Edits not copied - No memory cards ready.=Edits not copied - No memory cards ready. -Error saving machine stats to P%d card.=Error saving machine stats to P%d card. -Machine stats cleared.=Machine stats cleared. -Machine stats loaded from P%d card.=Machine stats loaded from P%d card. -Machine stats saved to P%d card.=Machine stats saved to P%d card. -Preferences reset.=Preferences reset. -Stats not loaded - No memory cards ready.=Stats not loaded - No memory cards ready. -Stats not saved - No memory cards ready.=Stats not saved - No memory cards ready. -The profile on P%d card contains corrupt or tampered data.=The profile on P%d card contains corrupt or tampered data. -There is no machine profile on P%d card.=There is no machine profile on P%d card. -[ScreenSMOnlineLogin] -Each player needs a unique Profile.=Each player needs a unique Profile. -Enter your password.=Enter your password. -No Styles are selectable.=No Styles are selectable. -You are logging on as:=You are logging on as: -You must define a Profile.=You must define a Profile. -Depending on the server you're connected to, you may have to register for an account on their website.=Depending on the server you're connected to, you may have to register for an account on their website. -[ScreenSyncOverlay] -AutoPlay=AutoPlay -AutoPlayCPU=AutoPlayCPU -AutoSync Machine=AutoSync Machine -AutoSync Song=AutoSync Song -AutoSync Tempo=AutoSync Tempo -Can't sync while playing a course.=Can't sync while playing a course. -Sync changes reverted.=Sync changes reverted. -Revert sync changes=Revert sync changes -Current BPM - smaller/larger=Current BPM - smaller/larger -Song offset - notes earlier/later=Song offset - notes earlier/later -Machine offset - notes earlier/later=Machine offset - notes earlier/later -(hold Alt for smaller increment)=(hold Alt for smaller increment) -Old offset=Old offset -New offset=New offset -Collecting sample=Collecting sample -Standard deviation=Standard deviation -[ScreenSystemLayer] -CreditsCardChanged=CARD SWITCHED -CreditsCardChecking=CARD CHECK -CreditsCardMountFailed=CARD MOUNT ERROR -CreditsCardNoName=NoName -CreditsCardReady=READY -CreditsCardRemoved=CARD GONE -CreditsCardTestFailed=CARD WRITE ERROR -CreditsCardTooLate=CARD TOO LATE -CreditsCredits=CREDIT(S) -CreditsMax=(MAX) -CreditsFreePlay=FREE PLAY -CreditsInsertCard=INSERT CARD -CreditsLoadFailed=SIGNATURE FAILED -CreditsLoadedFromLastGoodAppend= (backup) -CreditsNotPresent=NOT PRESENT -CreditsPressStart=PRESS START -[ScreenTestFonts] -# W is annoying: -Text1=WWWWWWWWWWWW -# Realistic excerpt: -Text2=The argument goes something like this: &oq;I refuse to prove that I exist,&cq; says God, &oq;for proof denies faith, and without faith I am nothing.&cq;::::&oq;But,&cq; says Man, &oq;The Babel fish is a dead giveaway, isn't it? It could not have evolved by chance. It proves you exist, and so therefore, by your own arguments, you don't. QED.&cq;::::&oq;Oh dear,&cq; says God, &oq;I hadn't thought of that,&cq; and promptly vanished in a puff of logic. -# Numbers test: -Text3=01234567890 ::100.00% 12345% 9:00 50/100 -# General symbol test, and test alignment against another font. -Text4=$50% (Test) "test's" &oq;test's&cq;, #1! 1+2-3*4/5.6::3:00 a; b; 5<6 6>5 2^3=8 Why? test@example.com::[Foo] {bar} Press &START; 3|4 &oq;1_2_3&cq; -Text5= -[ScreenTestInput] -Controller=Controller -not mapped=not mapped -secondary=secondary -[ScreenTestLights] -Auto Cycle=Auto Cycle -Manual Cycle=Manual Cycle -cabinet light=cabinet light -controller light=controller light -[ScreenTextEntry] -Backspace=Backsp -Cancel=Cancel -Done=Done -HeaderText= -Space=Space -"%s" is an invalid floating point value.="%s" is an invalid floating point value. -[ScreenTitleMenu] -%d songs in %d groups=%d songs in %d groups -%d courses in %d groups=%d courses in %d groups -%d unlocks=%d unlocks -Gametype:=Gametype: -Difficulty:=Difficulty: -Announcer=Announcer -Play Online=Network Play -Edit/Share=Edit/Share -Exit=Exit -Game Start=Game Start -Jukebox=Jukebox -Select Game=Select Game -Theme=Theme -Credits=Credits -Options=Options -[AdjustSync] -%s BPM from %.3f BPM to %.3f BPM.=%s BPM from %.3f BPM to %.3f BPM. -Autosync Machine=Autosync Machine -Autosync Song=Autosync Song -Autosync Tempo=Autosync Tempo -Autosync: Correction NOT applied. Deviation too high.=Autosync: Correction NOT applied. Deviation too high. -Autosync: Correction applied.=Autosync: Correction applied. -Global Offset from %+.3f to %+.3f (notes %s)=Global Offset from %+.3f to %+.3f (notes %s) -Song offset from %+.3f to %+.3f (notes %s)=Song offset from %+.3f to %+.3f (notes %s) -The stop segment #%d changed from %+.3fs to %+.3fs (change of %+.3f).=The stop segment number #%d changed from %+.3fs to %+.3fs (change of %+.3f). -earlier=earlier -later=later -Average Error %.5fs=Average Error %.5fs -Etc.=Etc. -%d taps ignored.=%d taps ignored. -[Common] -WindowTitle=StepMania -StepMania=StepMania -[CourseUtil] -The course name cannot contain any of the following characters: %s=The course name cannot contain any of the following characters: %s -You must supply a name for your course.=You must supply a name for your course. -The name you chose conflicts with another course. Please use a different name.=The name you chose conflicts with another course. Please use a different name. -[GameCommand] -Could not launch web browser.=Could not launch web browser. -[NotesWriterSM] -Error renaming file. Destination file '%s' already exists.=Error renaming file. Destination file '%s' already exists. -Error writing file '%s'.=Error writing file '%s'. -[OptionRowHandler] -Off=Off -[RoomInfoDisplay] -Last Round Info:=Last Round Info: -Room Name:=Name: -Room Description:=Description: -Song Title:=Title: -Song Subtitle:=Subtitle: -Song Artist:=Artist: -Players=Players -[SongUtil] -You must supply a name for your new edit.=You must supply a name for your new edit. -The name you chose conflicts with another edit. Please use a different name.=The name you chose conflicts with another edit. Please use a different name. -The edit name cannot contain any of the following characters: %s=The edit name can not contain any of the following characters: %s -[Sort] -NotAvailable=N/A -Other=Other -[StepMania] -Announcer=Announcer -Couldn't open any loading windows.=Couldn't open any loading windows. -Fullscreen=Fullscreen -Initializing %s...=Initializing %s... -No video renderers attempted.=No video renderers attempted. -NoSmoothLines=NoSmoothLines -NoVsync=NoVsync -Please do not file this error as a bug! Use the web page below to troubleshoot this problem.=Please do not file this error as a bug! Use the web page below to troubleshoot this problem. -Service switch pressed=Service switch pressed -SmoothLines=SmoothLines -There was an error while initializing your video card.=There was an error while initializing your video card. -Unknown video renderer value: %s=Unknown video renderer value: %s -Video Driver: %s=Video Driver: %s -Vsync=Vsync -Windowed=Windowed -color=color -texture=texture -[DeviceButton] -Home=Home -End=End -Up=Up -Down=Down -Space=Space -Shift=Shift -Ctrl=Ctrl -Alt=Alt -Insert=Insert -Delete=Delete -PgUp=PgUp -PgDn=PgDn -Backslash=Backslash -[Arch] -Couldn't create a movie driver.=Couldn't create a movie driver. -Input Handlers cannot be empty.=Input Handlers can not be empty. -Movie Drivers cannot be empty.=Movie Drivers can not be empty. -Sound Drivers cannot be empty.=Sound Drivers can not be empty. -[LowLevelWindow_Win32] -OpenGL hardware acceleration is not available.=OpenGL hardware acceleration is not available. -[Dialog-Prompt] -Prompt=Prompt -OK=OK -&Don't display this message again=&Don't display this message again -Error=Error -[Dialog-Uninstall Old Packages] -Uninstall Old Packages=Uninstall Old Packages -&Yes=&Yes -&No=&No -Cancel=Cancel -The following packages are already installed. It is strongly recommended that they be deleted before installing this package.=The following packages are already installed. It is strongly recommended that they be deleted before installing this package. -Delete old packages?=Delete old packages? -[EditMenu] -Blank=Blank -[EditMenuRow] -Action=Action -Group=Group -Song=Song -SourceSteps=Fill Steps -SourceStepsType=Fill Type -Steps=Steps -StepsType=Type -[RoomWheel] -Enter room name=Enter room name -[RageDisplay_OGL] -Obtain an updated driver from your video card manufacturer.=Obtain an updated driver from your video card manufacturer. -GLDirect was detected. GLDirect is not compatible with this game and should be disabled.=GLDirect was detected. GLDirect is not compatible with this game and should be disabled. -[RageDisplay_D3D] -DirectX 8.1 or greater is not installed. You can download it from:=DirectX 8.1 or greater is not installed. You can download it from: -Your system is reporting that Direct3D hardware acceleration is not available. Please obtain an updated driver from your video card manufacturer.=Your system is reporting that Direct3D hardware acceleration is not available. Please obtain an updated driver from your video card manufacturer. -[RageDisplay] -SetVideoMode failed:=SetVideoMode failed: \ No newline at end of file From b581f12ad9d86dc6725856fad1dfab63f040e8e8 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Wed, 20 Jul 2011 13:49:26 -0400 Subject: [PATCH 94/94] Polish translation by John Reactor. --- Themes/_fallback/Languages/pl.ini | 2377 +++++++++++++++++++++++++++++ Themes/default/Languages/pl.ini | 183 +++ 2 files changed, 2560 insertions(+) create mode 100755 Themes/_fallback/Languages/pl.ini create mode 100755 Themes/default/Languages/pl.ini diff --git a/Themes/_fallback/Languages/pl.ini b/Themes/_fallback/Languages/pl.ini new file mode 100755 index 0000000000..639574ad01 --- /dev/null +++ b/Themes/_fallback/Languages/pl.ini @@ -0,0 +1,2377 @@ +[Common] +WindowTitle=StepMania PL +StepMania=StepMania PL + +[Arch] +Couldn't create a movie driver.=Nie udało się utworzyć sterownika filmów. +Input Handlers cannot be empty.=Handlery wejściowe nie mogą być puste. +Movie Drivers cannot be empty.=Sterowniki Filmów nie mogą być puste. +Sound Drivers cannot be empty.=Sterowniki Dźwięku nie mogą być puste. + +[ArchHooks_Unix] +Couldn't find 'Songs'=Nie udało się znaleźć 'Songs' + +[CSMPackageInstallDlg] +Could not open file '%s'.=Nie udało się otworzyć pliku '%s'. +Installing. Please wait...=Instalacja. Proszę czekać... +'%s' is not a valid zip archive.='%s' nie jest prawidłowym archiwum ZIP. +Error opening source file '%s': %s=Błąd przy otwarciu pliku źródłowego '%s': %s +Error opening destination file '%s': %s=Błąd przy otwieraniu pliku docelowego '%s': %s +Error copying file '%s': %s=Błąd podczas kopiowania pliku '%s': %s +No Installations found. Exiting.=Nie znaleziono instalatorów. Przerywam. +Package installed successfully!=Pakiet zainstalowano pomyślnie! + +[CSmpackageApp] +The file Stats.xml has not yet been created. It will be created once the game is run.=Plik Stats.xml nie był jeszcze tworzony. Zostanie utworzony po pierwszym uruchomieniu gry. +Failed to open '%s': %s=Nie udało się otworzyć '%s': %s +The file '%s' does not exist. Aborting installation.=Plik '%s' nie istnieje. Przerywam instalację. + +[CSmpackageExportDlg] +No items are checked.=Nie zaznaczono żadnej opcji. +Successfully exported package '%s' to your Desktop.Eksport pakietu '%s' na twój Pulpit zakończony powodzeniem. +The following packages failed to export:=Tych pakietów nie udało się wyeksportować: +The following packages were exported to your Desktop:=Te pakiety zostały wyeksportowane na twój Pulpit: + +[CatalogXml] +Saving %s ...=Zapis %s ... + +[CustomDifficulty] +Beginner=Początkujący +Easy=Łatwy +Medium=Normalny +Hard=Trudny +Challenge=Ekspert +Edit=Zmodyfikowany +Couple=Duet +Routine=Układ +# +Freestyle=Freestyle +Crazy=Szaleństwo +Nightmare=Koszmar +HalfDouble=Half-Double + +[CourseDifficulty] +Beginner=Początkujący +Challenge=Ekspert +Hard=Trudny +Easy=Łatwy +Edit=Zmodyfikowany +Medium=Normalny + +[CourseEntryType] +Best=Najczęściej Wybierane +Fixed=Piosenka Zdefiniowana +Random=Piosenka Losowa +RandomWithinGroup=Piosenka Losowa z Grupy +Worst=Najżadziej wybierane + +[CourseType] +Endless=Nieskończony +Nonstop=Nonstop +Oni=Oni +Survival=Surwiwal + +[EditInstallations] +You must type a program directory before clicking Add.=Należy podać ścieżkę do katalogu programu przed wciśnięciem Dodaj. +'%s' is not a valid installation directory.='%s' nie jest poprawnym katalogiem instalacyjnym. + +[EditMenuAction] +Create=Utwórz Nowy Układ +Delete=Skasuj Istniejący Układ +Edit=Edytuj Istniejący Układ +Practice=Test + +[EditMenu] +Blank=Nowy Układ + +[EditMenuRow] +Action=Akcja +Group=Grupa +Song=Piosenka +SourceSteps=Źródło Kroków Poziom +SourceStepsType=Źródło Kroków Typ +Steps=Poziom +StepsType=Typ Kroków + +[GameButton] +Back=Cofnij +Down=Dół +Center=Środek +DownLeft=DółLewo +DownRight=DółPrawo +Coin=Wrzuć Żeton +Left=Lewo +MenuDown=MenuDół +MenuLeft=MenuLewo +MenuRight=MenuPrawo +MenuUp=MenuGóra +Operator=Operator +EffectUp=EffectGóra +EffectDown=EffectDół +Right=Prawo +Select=Wybierz +Start=Start +Up=Góra +UpLeft=GóraLewo +UpRight=GóraPrawo +Key1=Klawisz 1 +Key2=Klawisz 2 +Key3=Klawisz 3 +Key4=Klawisz 4 +Key5=Klawisz 5 +Key6=Klawisz 6 +Key7=Klawisz 7 +Scratch up=Scratch góra +Scratch down=Scratch dół +Fret1=Próg 1 +Fret2=Próg 2 +Fret3=Próg 3 +Fret4=Próg 4 +Fret5=Próg 5 +StrumUp=Struna Góra +StrumDown=Struna Dół +Tilt=Przechył +FootUpLeft=StopaGóraLewo +FootUpRight=StopaGóraPrawo +FootDown=StopaDół +HandUpLeft=RękaGóraLewo +HandUpRight=RękaGóraPrawo +HandLrLeft=RękaNiższeLewo +HandLrRight=RękaNiższePrawo + +[GameCommand] +Could not launch web browser.=Nie udało się uruchomić przeglądarki internetowej. + +[GameState] +CPU=CPU +Player 1=Gracz 1 +Player 2=Gracz 2 + +[Headers] +Edit Courses=Edycja Maratonów +Edit Steps=Edycja Piosenek +Jukebox=Odtwarzacz +Log In=Logowanie +Theme Options=Opcje Theme`u +Network Options=Opcje Sieciowe +Export Packages=Eksport Pakietów +Select Character=Wybierz Postać Tancerza +Select Course=Wybierz Maraton +Select Difficulty=Wybierz Poziomu Trudności +Select Music=Wybierz Piosenkę +Select Style=Wybierz Tryb +Set Time=Ustaw Zegar +Summary=Podsumowanie +Test Input=Test Urządzeń Wejściowych +Results=Rezultaty + +[HoldNoteScore] +Held=OK +LetGo=ŹLE +None=None + +[InputMapper] +Connected=Podłączony +Disconnected=Rozłączony +Auto-mapping all joysticks.=Auto-mapowanie wszystkich kontrolerów. + +[Language] +Name=Polski + +[LanguagesDlg] +Error parsing file '%s'.=Błąd przetwarzania pliku '%s'. +Error reading '%s'.=Błąd podczas odczytu '%s'. +Error reading line '%s' from '%s': Each line must have either 3 or 4 values. This row has %d values.=Błąd podczas odczytu linii '%s' z '%s': Każda linia musi mieć 3 lub 4 wartości. Ta linia ma %d wartość(ci). +Error reading file '%s'.=Błąd odczytu pliku '%s'. +Exported to your Desktop as '%s'.=Wyeksportowane na pulpit jako '%s'. +Failed to save '%s'.=Nie udało się zapisać '%s'. +Imported %d strings into '%s'.\n - %d were added.\n - %d were modified\n - %d were unchanged\n - %d empty strings were ignored=Zaimportowano %d ciągów do '%s'.\n - %d zostało dodane.\n - %d zostało zmodyfikowanych\n - %d zostało zmienionych\n - %d pustych ciągów zignorowano. +Importing these strings will override all data in '%s'. Continue?=Import tych ciągów nadpisze wszystkie dane w '%s'. Kontynuować? +There are no strings to export for this language.=Brak ciągów do eksportu dla tego języka. +This will permanently delete '%s'. Continue?=Operacja skasuje całkowicie '%s'. Kontynuować? + +[LowLevelWindow_X11] +Failed to establish a connection with the X server=Nie udało się nawiązać połączeniem z serwerem X`ów. + +[MainMenuDlg] +'%s' cleared='%s' wyczyszczony +'%s' doesn't exist. It will be created next time you start the game.='%s' nie istnieje. Zostanie utworzony przy następnym uruchomieniu gry. +'%s' is already cleared.='%s' został już wyczyszczony. +Failed to copy music file '%s' to '%s': %s=Nie udało się skopiować pliku z muzyką '%s' do '%s': %s +Failed to create directory '%s': %s=Nie udało się utworzyć katalogu '%s': %s +Failed to create song directory '%s': %s=Nie udało się utworzyć katalogu piosenki '%s': %s +Failed to create the song file '%s'.=Nie udało się utworzyć pliku z piosenką '%s'. +Failed to delete file '%s'.=Nie udało się skasować pliku '%s'. +Failed to open '%s': %s=Nie udało się otworzyć '%s': %s +Music file=Plik z muzyką +Success. Created the song '%s'.=Sukces. Utworzono piosenkę '%s'. +The song directory '%s' already exists. You cannot override an existing song.=Katalog piosenki '%s' już istnieje. Nie można nadpisywać istniejących piosenek. + +[MultiPlayer] +P1=P1 +P2=P2 +P3=P3 +P4=P4 +P5=P5 +P6=P6 +P7=P7 +P8=P8 +P9=P9 +P10=P10 +P11=P11 +P12=P12 +P13=P13 +P14=P14 +P15=P15 +P16=P16 +P17=P17 +P18=P18 +P19=P19 +P20=P20 +P21=P21 +P22=P22 +P23=P23 +P24=P24 +P25=P25 +P26=P26 +P27=P27 +P28=P28 +P29=P29 +P30=P30 +P31=P31 +P32=P32 + +[MusicWheel] +ArtistText=Artysta +BpmText=BPM +EasyMeterText=Poziom Łatwy +GenreText=Gatunek +GroupText=Grupa +HardMeterText=Poziom Trudny +ChallengeMeterText=Poziom Ekspert +DoubleEasyMeterText=Poziom Łatwy (Double) +DoubleMediumMeterText=Poziom Normalny (Double) +DoubleHardMeterText=Poziom Trudny (Double) +DoubleChallengeMeterText=Poziom Ekspert (Double) +LengthText=Czas Utworu +MediumMeterText=Poziom Normalny +PopularityText=Najczęściej wybierane! +Portal=Portal +PreferredText=Preferowane +Random=Losowa +Roulette=Ruletka +TitleText=Tytuł +RecentText=Ostatnio Wybrane +TopGradesText=Najwyższa ocena +CoursesText=Maratony +AllCoursesText=Wszystkie Maratony +NonstopText=Maratony Nonstop +OniText=Maratony Oni +EndlessText=Maratony Nieskończone +SurvivalText=Maratony Surwiwal +NormalModeText=Tryb Normalny +BattleModeText=Tryb Bitwy (Wyłączone) + +[NetworkSyncManager] +Connection failed.=Połączenie nieudane. +Connection to '%s' successful.=Połączenie do '%s' udane. +Connection to server dropped.=Połączenie z serwerem porzucone. +Initializing Client Network...=Inicjalizowanie Sieci Klienckiej... +Not Supported=Tryb nie działa w trakcie gry sieciowej. + +[NoteType] +4th=4ek +8th=8ek +12th=12ek +16th=16ek +24th=24ek +32nd=32ek +48th=48ek +64th=64ek +192nd=192ek + +[OptionExplanations] +Accel=Przyśpieszanie, Spowolnienie lub innymi słowy ustawienie prędkości strzałek. +AllowExtraStage=Włączony (nawet w trybie Impreza), pozwala by gracz mógł zdobyć możliwośc zagrania dodatkowej piosenki po spełnieniu pewnych określonych wymagań. +AllowW1=Włącza/wyłącza ocenę Fantastic. NIGDY - ocena wyłączona w każdym trybie, TYLKO MARATONY - użycie tylko podczas maratonów, ZAWSZE - działa w każdym trybie gry. +Announcer=Umożliwia wybór Komentatora. +Appearance=Wygląd +Appearance Options=Zmiana/wybór motywu graficznego, komentatora, innych opcji stylu. +Theme Options=Zmiana opcji specyficznych dla danego motywu graficznego. +ArcadeOptionsNavigation=&oq;Styl SM&cq;: Klawisz start przesuwa na koniec, Góra/Dół przełącza pomiędzy opcjami. &oq;Tryb Automatowy&cq;: Start przesuwa kursor do następnej opcji (Góra/Dół ignorowane). +Assist=Asysta +Attacks=Decyduje czy ataki nie przypisane do maratonów będą pojawiać się podczas gry. +AttractSoundFrequency=Ustawiony na ZAWSZE odgrywa muzykę na każdym ekranie prezentacyjnym. Opcja ustawiona na N-RAZY odgrywa dźwięku tylko N razy. +AutoAdjust=AutoKorekta +AutoMapOnJoyChange=Jeśli ta opcja jest włączona &oq;On&cq;, gra przemapuje automatycznie wszystkie, nie podłączone wcześniej, joystiki. Włączenie Automatycznego Mapowanie nadpisze wszystkie ręcznie ustawione mapowania. +AutoPlay=Ta opcja może być użyteczna dla tych którzy z jakiegoś niezrozumiałego powodu chcą grać bez maty. W trybie AutoPlay nie da się zapisywać wyników ani zdobywać możliwości grania dodatkowych piosenek. +AutogenGroupCourses=Pokazuje Maratony wygenerowane przez opcję AutoGen w grupach NonStop i Nieskończone. +AutogenSteps=Automatyczne generowanie kroków dla innych typów gier nie uwzględnionych w stepchart`cie. +BGBrightness=Ustala poziom jasność filmów odtwarzanych w tle piosenki. Zmniejsz wartość opcji jeśli masz trudności z widzeniem strzałek. +Background=Zmienia opcje kontrolujące tła odtwarzanych w trakcie gry. +BarDrain=Zużycie Energii +BatLives=Ilość pasków baterii +Bookkeeping=Statystyka rzuconych żetonów/monet/kredytów. +Calibrate Machine Sync=Kalibracja synchronizacji dźwięku. +CelShadeModels=Decyduje czy Postacie Tańczące w tle są generowane z użyciem algorytmu Cel Shading. +Center Image=Centrowanie obrazu monitora. +Characters=Tańczące Postacie +Clear Bookkeeping Data=Zerowanie statystyk wrzuconych żetonów/monet/kredytów. +Clear Machine Edits=Usunięcie wszystkich edycji kroków wgranych na maszynę. +Clear USB edits=Zerowanie plików programu na pamięci USB +Clear Machine Stats=Usunięcie wszystkich statystyk zapisanych na maszynie. +CoinMode=&oq;DOM&cq;: Opcje dostępne na ekranie tytułowym. &oq;PŁATNY&cq;: Opcje są ukryte. By zagrać trzeba wrzucić kredyt. &oq;GRA DARMOWA&cq;: Opcje są ukryte. Nie trzeba wrzucać kredytu by zagrać. +CoinModeNoHome=Kiedy tryb jest ustawiony na PŁATNY by zagrać należy wrzucić kredyt. Kiedy tryb jest ustawinye na GRA DARMOWA można grać bez wrzucania kredytu. +CoinsPerCredit=Liczba kredytów które muszą być wrzucone by móc zagrać (w trakcie trybu PŁATNY) +Connection=Połącz z serwerem +CourseSortOrder=Określa sposób sortowania Maratonów. +CreateNew= +Create New Course=Utwórz nowy Maraton. +Create New Profile=Utwórz nowy profil gracza. +DancePointsForOni=Decyduje czy w trybie Oni wyświetlane są punkty czy procenty. +DefaultFailType=NATYCHMIAST przerywa grę kiedy graczowi skończy się energia. 30 MISS`ów przerywa grę po następujących po sobie 30 niezaliczonych strzałkach. NA KONIEC PIOSENKI przerywa grę dopiero po na koniec piosenki nawet jeśli graczowi skończy się wcześniej energia. OFF wyłącza przerywanie gry. +DefaultFailTypeNoOff=NATYCHMIAST przerywa grę kiedy graczowi skończy się energia. 30 MISS`ów przerywa grę po następujących po sobie 30 niezaliczonych strzałkach. NA KONIEC PIOSENKI przerywa grę dopiero po na koniec piosenki nawet jeśli graczowi skończy się wcześniej energia. +DefaultNoteSkin=Ustala domyślny wygląd strzałek używanych podczas gry. +DelayedBack=Jeśli jest &oq;On&cq;, do przerwania gry jest koniecznie przytrzymanie klawisza BACK na 0.5 sekundy. Użyteczne jeśli ktoś często przypadkowo naciska ten klawisz na swojej macie. +DelayedTextureDelete=Włączona opcja powoduje że tekstury zostaną zatrzymane w pamięci. To eliminuje czas potrzebny na załadowanie ich ponownie. Nie ustawiać jeśli komputer posiada mniej niż 128MB RAM. +Delete= +Difficulty= +DisplayAspectRatio=Pozwala na ustawienie proporcji ekranu zastosowanego w monitorze, w celu uniknięcia deformacji wyświetlanej grafiki. +DisplayColorDepth=Głębia odwzorowania przestrzeni kolorów. Może nie działać w trybie okienkowym. +DisplayResolution=Rozdzielczość ekranu. Wyższa rozdzielczość wyświetla dokładniejszy obraz, ale wymaga szybszej karty graficznej. +EasterEggs=Włącza lub wyłącza ukryte w programie niespodzianki. +Edit Courses=Edycja Maratonów +Edit Songs/Steps=Edycja Piosenek +Practice Songs/Steps=Testowanie Piosenek +EditorShowBGChangesPlay=Wyświetlanie tła piosenki podczas gry. +Effect=Efekt +EnableAttackSounds=Włączenie opcji spowoduje że w momencie ataku będzie odgrywany dźwięk. +EnableMineHitSound=Włączenie opcji spowoduje że w momencie nastąpienia na minę będzie odegrany dźwięk wybuchu. +EventMode=Włączona opcja spowoduje że będzie można grać w nieskończoność. Zaliczenie, bądź niezaliczenie piosenki, za każdym razem przeniesie na ekran wyboru piosenki. +Exit= +Fail=Porażka +FastLoad=Włączona opcja spowoduje przyśpieszenie wczytywania piosenek podczas startu programu, po przez pominięcie sprawdzania ew. zmian w plikach piosenki. Należy na to zwrócić uwagę w trakcie tworzenia nowych piosenek. +Fill Machine Stats= +Game=Zmiana aktualnego trybu gry. +GetRankingName=Decyduje czy ekran wpisu do tabeli z wynikami jest włączony i w jakich sytuacjach wyświetlany. +Graphics/Sound Options=Opcje pozwalające na zmianę rozdzielczości i trybu pracy ekranu oraz opcje dzwięku. +Group=Grupa +HiddenSongs=Niektóre piosenki są dostępne tylko podczas trybu Oni, Maratonów lub w trybie Ruletki. Ta opcja powinna być wyłączona jeśli gra ma zawsze wyświetlać wszystkie piosenki. +Hide=Ukryj +Holds=Holdy +Insert=Wstaw +Insert Credit=Wrzuć Kredyt +Key Joy Mappings=Mapowanie klawiszy i przyciski padów, mat, joystików do poszczególnych funkcji oferowanych przez grę. +Language=Wybierz język aplikacji. +LifeDifficulty=Zwiększenie tej wartości sprawia że pasek energii wyczerpuje się szybciej i wolniej regeneruje. +LifeType=Rodzaj licznika energii. +Advanced Options=Można tu zmienić zaawansowane opcje programu takie jak system naliczania punktów, dokładność oceniania i zużycia paska energii. +MasterVolume= +HighResolutionTextures=Decyduje o użyciu przez program tekstur o wyższej rozdzielczości. Ustawiony tryb Auto spowoduje włączenie tekstur o wysokiej rozdzielczości przy ustawieni rozdzielczości ekranu wyższej niż 480. +MaxTextureResolution=Ustawia wielkość użytych tekstur. Każde ustawienie poniżej 1024 spowoduje że tekstury będą rozmyte, ale dzięki temu można zwiększyć framerate. +MenuTimer=Włącznie uruchamia licznik czasu na podjęcie decyzji np. podczas wyboru piosenki. +Mines=Miny +MoveRandomToEnd=Określa czy Maratony z losowymi piosenkami będą wyświetlane na końcu koła wyboru. +MovieColorDepth=Ustawienie głębi odwzorowania koloru filmów. +MusicWheelSwitchSpeed=Regulacja prędkości obrotu koła wyboru piosenek. +MusicWheelUsesSections=&oq;Zawsze&cq; oznacza że koło używa podziału na Grupy + ABC; &oq;Nigdy&cq; brak podziału; &oq;Tylko Tytuły&cq; używa tylko alfabetycznego sortowania po tytułach piosenek. +Network Options=Podłączanie do serwera sieciowego lub zmiana jego opcji. +No Memory Card=Nie znaleziono żadnych kart USB. +NoteSkins=Wygląd Strzałek +NumBackgrounds=Określa maksymalną liczbę losowych teł które są ładowanych za jednym razem do pamięci. +OnlyDedicatedMenuButtons=Pozwala na ograniczenie nawigacji programem do zdefiniowanych przycisków z pominięciem maty. Przed włączeniem "tylko przyciski dedykowane" należy się upewnić, że wspomniane przyciski są już prawidłowo zmapowane. +OptionsRandomJukebox= +OsMountPlayer1= +OsMountPlayer2= +Persp=Perspective +Player1Profile= +Player2Profile= +PlayerAutoPlay=PlayerAutoPlay +PreloadSounds=Włączona opcja spowoduje załadowanie większości dźwięków naraz do pamięci. Użycie zwiększa czas ładowania i normalnie opcja powinna być wyłączona. +Premium=Ustawia rodzaj używanego bonusu (Tryb Płatny) +Profile= +Export Packages=Eksport zainstalowanych piosenek i dodatków do pakietu .smzip. +Profiles=Zarządzanie profilami graczy. +ProgressiveLifebar=Ustawienie to ma wpływ na to, czy pomyłka (boo/miss) będzie skutkowała coraz większymi spadkami energii. OFF - Standardowe ustawienie, 8 - każda pomyłka będzie karana zwielokrotnionym ubytkiem energii w stosunku do pierwszej pomyłki. +ProgressiveNonstopLifebar=Ustawienie to decyduje czy pasek energii będzie opadał szybciej wraz z kolejnymi etapami w trybie NonStop. +ProgressiveStageLifebar=Ustawienie to decyduje czy pasek energii będzie opadał szybciej wraz z kolejnymi zaliczanymi piosenkami. (Nie działa w trybie Impreza) +ProTiming=Alternatywny, do tradycyjnego 5-cio stopniowego, sposób wyświetlania dokładności trafienia. +RandomBackgroundMode=Sposób wyświetlania tła. &oq;Animacje&cq; używa losowych animacji z folderu BGAnimations; &oq;Losowe Filmy&cq; cyklicznie odtwarza filmy z folderu RandomMovies. +More Options=Dostęp do bardziej zaawansowanych opcji. +RandomModifiers= +Rate=Tempo +RefreshRate=Kontrola częstotliwości odświeżania ekranu. Działa tylko w trybie pełnoekranowym. +Reload Songs=Ponowne przeładowanie wszystkich piosenek i maratonów. +Remove=Ułatwienia piosenki usuwające strzałki. +Rename= +Reset To Defaults=Przywrócenie wartości domyślnych dla wszystkich opcji. +SaveScores=Zapis wyników. +SaveReplays=Włączenie zapisywania powtórek. +SaveStats=Włączenie lub wyłączenie zapisywania pliku Stats.xml +ScoreDisplay=Wyświetlanie wyników. +Scoreboard=Wyświetlanie listy najlepszych wyników. +ScoringType=Określenie metody naliczania punktów. +Scroll=Przesuwanie +Select Group=Wybór grupy piosenek +Select Profile=Wybór profilu +Server=Uruchomienie lokalnego serwera stepmanii +Servers=Serwery +ShowBanners=Zarządzanie wyświetlaniem bannerów piosenek. +ShowBeginnerHelper=Włączona opcja wyświetla podczas gry na poziomie Początkujący, demonstrującą podstawowe ruchy postać tancerza. +ShowCaution=Wyświetlanie ekranu z ostrzeżeniem przed każdym rozpoczęciem gry. +ShowDancingCharacters=Wyświetlanie tańczących postaci w tle piosenki. +ShowDanger=Wyświetlanie błyskającego w tle ekranu z ostrzeżeniem o niskim poziomie energii podczas gry. +ShowInstructions=Wyświetlanie ekranu z Instrukcjami +ShowLyrics=Wyświetlanie dołączonych do piosenek tekstów ze słowami. (pliki .LRC) +ShowNativeLanguage=Przełączanie trybu wyświetlania tytułów piosenek. W języku ojczystym (日本語) lub gdzie to możliwe po przez transliterację. +ShowSelectGroup=Włączenie wyświetlania ekranu wyboru grupy piosenek. +ShowSongOptions=Ustawienie dostępności ekranu z opcjami utworu. Pozycja HIDE, opcje niedostępne. Pozycja SHOW, opcje zawsze będą pokazywane. Pozycja ASK, niewidoczne, jednakże dostepne poprzez naciśniecie przycisku start w sekundę po ekranie z opcjami gracza. +ShowStats=Wyświetlanie Statystyk Wydajności w prawym górnym rogu ekranu. FPS = liczba klatek na sec. TPF = liczba trójkątów na klatkę. DPF = liczba linii na klatkę. +SmoothLines=Wygładzanie krawędzi wykresu Groove Radar. +Center1Player=Wyśrodkowanie strzałek podczas gry tylko jednego gracza. +SongsPerPlay=Liczba piosenek w trakcie normalnej gry (przy wyłączonym trybie Imprezy) +SoundEffect=Efekty dźwiękowe +SoundResampleQuality=Ustawienie jakości resampligu. +SoundVolume=Regulacja poziomu dźwięku w grze. +SoundVolumeAttract=Regulacja poziomu dźwięku w trybie demonstracji. +Speed=Prędkość. +StepMania Credits=Autorzy uczestniczący w tworzeniu programu. +Steps=Kroki +Style= +Test Input=Test poprawności połączenia i mapowania mat, padów, joystików. +Test Lights=Test poprawności podłączonych świateł. +TextureColorDepth=Wybór głębi odwzorowania kolorów tekstur. 32bitowe tekstry zużywają więcej pamięci, ale ładniej wyglądają. +Theme=Wybór motywu graficznego. +TimingWindowScale=Zwiększenie tej wartości spowoduje że program będzie bardziej wymagajacy wobec graczy podczas trafiania w strzałki. Im wyższa wartość tym mniejsza tolerancja na pomyłkę ze strony gracza (mniej czasu na naciśnięcie strzałki). +Toggle Song=Włączenie piosenek +Turn=Obrót +Transfer Edits to USB=Transfer Zmodyfikowanych Układów Kroków do pamięci USB +Transfer Edits from USB=Transfer Zmodyfikowanych Układów Kroków z pamięci USB +UseUnlockSystem=Włączenie systemu odblokowywania piosenek. +VisualDelaySeconds=Kalibracja opóźnienia ekranu. +Vsync=Blokowanie framerate do czasu odświeżania ekranu, w celu uzyskania płynniejszego obrazu. Działa tylko w trybie pełnoekranowym. +WideScreen16_9=Włączenie obsługi ekranów panoramicznych. +WideScreen16_10=Włączenie obsługi ekranów panoramicznych. +Windowed=Przełączanie pomiędzy trybem okienkowym a pełnoekranowym. + +# +UI Options=Ustawienia różnych opcji interfejsu użytkownika. +Input Options=Ustawienia opcji takich jak opóźnienie i prędkość. +Arcade Options=Ustawienia opcji Automatowych takich jak licznik czasu w menu. +Select Game=Wybór trybu gry. +System Direction=Najczęściej zmienianie ustawienia. + +# +OnlyPreferredDifficulties=Tylko wybrane poziomy trudności. + +# +PercentageScoring=Sposób wyświetlania wyników: punkty czy procenty. + +# course +Select Course=Edytuj ten maraton +Max Minutes=Jak długi powinien być maraton. +Choose Song=Wybierz piosenkę do tego gniazda. +Choose Steps=Wybierz typ kroków dla tej piosenki. + + +Play=Odtwórz maraton +Save=Zapisz maraton. +Edit Course=Modyfikuj zawartość maratonu +Shuffle=Przemieszaj piosenki. + +# +GamePrefDefaultFail=Natychmiastowy tryb przegranej spowoduje śmierć gracza w momencie kiedy pasek energii osiągnie 0. NatychmiastowyKontynuowany pozwoli mu na dalszą grę. +# +UserPrefScoringMode=Wybór preferowanej metody naliczania punktacji poza trybem maratonu. + +[OptionNames] +0=0 +0.25x=0.25x +0.3x=0.3x +0.4x=0.4x +0.5x=0.5x +0.6x=0.6x +0.7x=0.7x +0.75x=0.75x +0.8x=0.8x +0.9x=0.9x +1=1 +1.0x=1.0x +1.1x=1.1x +1.2x=1.2x +1.25x=1.25x +1.3x=1.3x +1.4x=1.4x +1.5x=1.5x +1.6x=1.6x +1.7x=1.7x +1.75x=1.75x +x1.75=1.75x +1.8x=1.8x +1.9x=1.9x +x2.25=2.25x +x2.5=2.5x +10=10 +11=11 +12=12 +12th=12ki +13=13 +16bit=16bit +16th=16ki +192nd=192ki +2=2 +2 Players for 1 Credit=2 graczy za 1 Kredyt +2 Times=2 razy +2.0x=2.0x +24th=24ki +3=3 +3 Times=3 razy +32bit=32bit +32nd=32ki +4=4 +4 Times=4 razy +48th=48ki +4th=4ki +5=5 +5 Times=5 razy +6=6 +64th=64ki +7=7 +8=8 +8th=8ki +9=9 +Actual=Aktualny +Add=Addatywny +All Music=Wszystkie Piosenki +AllDifficulties=Wszystkie Poziomy +AllGroups=Wszystkie Grupy +Alternate=Alternatywne +Always=Zawsze +Animations=Animacje +Arcade Style=Styl Automatowy +Ask=Pytaj +AttackMines=Miny +Auto=Auto +Autogen To Fill Width=Wypełnij Autogeneratorem. +AutosyncMachine=Autosynch. Maszyny +Average=Średnia +Average Feet=Średnia Stópek +Backwards=Do tyłu +Baked Random=Baked Random +Bar=Pasek +Battery=Bateria +Beat=Beat +Beats=Beaty +Big=Duże +Blind=Oślepienie +Blink=Miganie +BMRize=BMRize +Boomerang=Bumerang +Boost=Dopała +Both=Oba +Brake=Hamulec +Bumpy=Nierówny +C150=C150 +C300=C300 +CPU-Controlled=Kontrolowany przez komputer +Centered=Wyśrodkowany +Choose=Wybierz +Clap=Klaśnięcie +Clear Left=Wyczyść Lewą +Clear Right=Wyczyść Prawą +Collapse Left=Złącz do Lewej +Collapse To One=Złącz do jednego +Compress 2x=Kompresuj 2x +Compress 3->2=Kompresuj 3->2 +Compress 4->3=Kompresuj 4->3 +Confusion=Dezorientacja +Connect=Połącz... +Copy Left To Right=Kopiuj z Lewej do Prawej +Copy Right To Left=Kopiuj z Prawej do Lewej +Courses Only=Tylko Maratony +Create New=Stwórz Nowe +Cross=Krzyż +Custom=Użytkownika +Dance Points=Dance Points +Dark=Mrok +Default=Domyślny(e) +Default to Off=Domyślnie Wyłączone +Default to Random=Domyślnie Losowe +DifficultCourses=Trudność +Disconnect=Rozłącz +Distant=Daleki +Dizzy=Oszołomiony +Don'tSave=Nie Zapisuj +Double for 1 Credit=Double za 1 Kredyt +Drunk=Pijane +Dynamic Random=Losowe Dynamicznie +Echo=Echo +End of Song=Koniec Piosenki +FailAtEnd=Porażka na Końcu +EffectSpeed=Prędkość +EffectPitch=Wysokość tonu +Event=Tryb Imprezy +Exit=Wyjście +Expand=Rozszerz +Expand 2->3=Rozszerz 2->3 +Expand 2x=Rozszerz 2x +Expand 3->4=Rozszerz 3->4 +Fast=Szybko +Flat=Płasko +Flip=Przewrócone +Floored=Powalone +Free Play=Darmowa Gra +Force Off=Wymuś Wyłączenie +Force On=Wymuś Włączenie +Full Screen=Pełny Ekran +Global BGAnimation=BGAnimation Globalnie +Global Movie=Film Globalnie +Global Movie from Song Group=Film Globalnie z Grupy Piosenek +Global Movie from Song Group and Genre=Film Globalnie z Grupy Piosenek i Gatunku +HIDE=Ukryj +Hallway=Hol +Haste=Pośpiech +Hidden=Ukryte +HiddenOffset=Ukryty Offset +Hide=Schowane +High Quality=Wysoka Jakość +Hold=Hold +HoldsToRolls=Holdy na Rolle +Home=Dom +Immediate=Natychmiast +ImmediateContinue=Z opóźnieniem +Incoming=Nadciągające +Insanity=Obłęd +Insert Entry=Wstaw Wpis +Instant=Natychmiast +Invert=Odwrócone +Justice=Sprawiedliwie +Left=Lewo +LifeTime=Surwiwal +Little=Małe +Metronome=Metronom +Mines=Miny +Mini=Mini +Mirror=Lustro +N/A=N/D +Native Language=Język Ojczysty +Never=Nigdy +New=Nowy +NewEdit=-Nowa edycja- +No=Nie +NoAttacks=Bez Ataków +NoHands=Bez Rąk +NoHolds=Bez Holdów +NoJumps=Bez Skoków +NoMines=Bez Min +NoRolls=Bez Rolls +NoQuads=Bez Quadów +NoRecover=Bez Regeneracji +NoStretch=Bez Rozciągania +NoLifts=Bez Liftów +NoFakes=Bez Fakeów +None=Żaden +Normal=Normalny +Num Songs=Num Songs +Off=Wyłącz +Old=Stare +On=Włącz +On (recommended)=Włącz (zalecane) +Only Dedicated Buttons=Tylko Dedykowane Przyciski +Overhead=Standard +Pay=Płatny +Percent=Procent +Planted=Zagnieżdżone +Press Start=Naciśnij Start +Quick=Szybkie +R.Vanish=Los.Znik. +Random=Losowe +RandomAttacks=Losowe Ataki +RandomBG=Losowe Tła +Random Movies=Losowe Filmy +Ranking=Ranking +Ranking Songs=Piosenki Rankingowe +Really Fast=Naprawdę szybko +RegularCourses=Normalne +Remove=Usuń +Reverse=Odwrócenie +Right=Prawo +Roll=Roll +Romanization=Transliteracja +SHOW=Pokaż +Seconds=Sekundy +Select=Wybierz +Servers=Serwery +Shift Left=Przesunięcie w Lewo +Shift Right=Przesunięcie w Prawo +Show=Pokaż +Shuffle=Mieszanie +Silent=Bezgłośny +Skip=Pomiń +Skippy=Pomijacz +Slow=Wolno +SN2=Supernova 2 +SongAttacks=Ataki +StepAttacks=Ataki +Song BGAnimation=BGAnimation Piosenki +Song Bitmap=Bitmapa w Piosence +Song Movie=Film Piosenki +Space=Przestrzeń +Specified=Określony +Split=Podział +Standard=Standard +Start=Start +StaticBG=Statyczne Tło +Stealth=Ukryty +StepMania Style=Styl StepManii +Stomp=Krok +Stop=Stop +Subtract=Substraktywne +Sudden=Nagłe +SuddenDeath=Nagła Śmierć +SuddenOffset=Nagły Offset +SuperShuffle=Betoniarka +SoftShuffle=Lekkie Mieszanie +Swap Sides=Zamiana Stronami +Sync Machine=Synch. Maszyny +Sync Song=Synch. Piosenki +Sync Tempo=Synch. Tempa +Tiny=Mini +Tipsy=Podpite +Title Only=Tylko Tytuły +Tornado=Tornado +Total Feet=Total Feet +Twirl=Wir +Twister=Krętacz +Use Gameplay Buttons=Używaj Przycisków Kontrolera +Visible=Widoczne +Wave=Fala +Wide=Szeroko +Windowed=Okno +Yes=Tak +x0.25=x0.25 +x0.50=x0.50 +x0.75=x0.75 +x1=x1 +x1.5=x1.5 +x2=x2 +x3=x3 +x4=x4 +x5=x5 +x8=x8 +PercentageScoring=Punktacja Procentowa + +Tiny=Tycie +Bumpy=Nierówny +Beat=Beat +GKS=GKS +Cover=Pokrywa +XMode=XMode +[OptionRowHandler] +Off=Wyłączone + +[OptionTitles] +Accel=Przyśpieszenie +Add/Edit Background Change=Dodaj/Edytuj Zmianę Tła +Air=Skoki +AllowExtraStage=Pozwalaj na Dodatkową Piosenkę +AllowW1=Ocena Fantastic +Alter=Zmiana +Announcer=Komentator +Appearance=Wygląd +Appearance Options=Opcje Wyglądu +Theme Options=Opcje Theme`u +ArcadeOptionsNavigation=Nawigacja po opcjach +Artist=Artysta +Artist transliteration=Transliteracja pola Artysta +Assist=Asysta +Attacks=Ataki +AttractSoundFrequency=Częstotliwość dźwięku Ataku +AutoAdjust=Auto Korekta +AutoMapOnJoyChange=Automapowanie Joysticków +AutoPlay=AutoPlay +AutogenGroupCourses=Autogen. Grup Maratonów +AutogenSteps=Autogen. Kroków +BGBrightness=Jasność +Background=Tło +BarDrain=Zużycie Energii +BatLives=Ilość pasków Baterii +Base Difficulty=Podstawowy Poziom +Beat 0 Offset=Beat 0 Offset +Bookkeeping=Statystyka +Calibrate Machine Sync=Kalibracja Synchronizacji Dźwięku +CPUSkill=Poziom CPU +CelShadeModels=Cel-shadedowane Modele +Center Image=Centrowanie Obrazu +Chaos=Chaos +Characters=Tancerze +Chart Style=Styl Chart`a +Choose=Wybierz +Clear Bookkeeping Data=Czyść dane wyrzutnika monet +Clear Machine Edits=Czyść Zmodyfikowane Układy +Clear Machine Stats=Czyść dane statystyczne +Clear USB edits=Czyść Zmodyfikowane Układy na USB +Clear area=Czyść Pole +Clear clipboard=Czyść Schowek +CoinMode=Tryb Pracy +CoinModeNoHome=Tryb Płatny +CoinsPerCredit=Monet na Kredyt +Connection=Połączenie +Convert pause to beats=Zamień pauzy na beat`y +Convert delay to beats=Zamień opóźnienia na beaty`y +Convert selection to pause=Zmień zaznaczenie na pauzę +Convert selection to delay=Zmień zaznaczenie na opóźnienie +Convert selection to warp=Zmień zaznaczenie na Segment Warp +Convert selection to fake=Zmień zaznaczenie na Segment Fake +Copy=Kopiuj +Copy timing data=Kopiuj timing +CourseSortOrder=Sortowanie Maratonów +Create New=Stwórz Nowy +Create New Course=Stwórz Nowy +Create New Profile=Stwórz Nowy Profil +Credit=Kredyt +Cut=Wytnij +DancePointsForOni=Wyświetlanie Punktów w Oni +DefaultFailType=Domyślny tryb Fail`a +DefaultFailTypeNoOff=Domyślny tryb Fail`a +DefaultNoteSkin=Domyślny NoteSkin +DelayedBack=Opóźnienie Cofnięcia +DelayedTextureDelete=Trzymaj tekstury w pamięci +Delete=Skasuj +Delete beat and shift up=Skasuj beat i podnieś do góry +Description=Opis +Designate as Music Preview=Przypisz jako Pogląd Piosenki +Designate last second at current beat=Przypisz ostatnią sekundę na bieżącym beat`cie +Difficulty=Poziom Trudności +Display BPM=Pokaż BPM +DisplayAspectRatio=Proporcje Ekranu +DisplayColorDepth=Głębia Kolorów Ekranu +DisplayResolution=Rozdzielczość Ekranu +Duration seconds=okres sekund +EasterEggs=Niespodzianki +Edit Songs/Steps=Edycja Piosenek +Genre=Gatunek +Practice Songs/Steps=Testuj Piosenki +Edit Courses=Edycja Maratonów +Edit BPM change=Wprowadź zmianę BPM +Edit song info=Edycja informacji piosenki +Edit steps information=Edycja informacji o krokach +Exit Edit Mode=Wyjście +Edit stop=Modyfikacja Pauzy +Edit delay=Modyfikacja Opóźnienia +Edit Timing Data=Modyfikacja Timingu +Edit time signature=Modyfikacja sygnatury czasowej +Edit tickcount=Edycja tickcount +Edit combo=Edycja combo +Edit label=Edycja etykietki +Edit warp=Modyfikacja Warp`a +Edit speed (percent)=Edycja prędkości (procenty) +Edit speed (wait)=Edycja prędkości (długość) +Edit speed (mode)=Edycja prędkości (tryb) +Edit scrolling factor=Edycja parametru przesuwania +Edit fake=Modyfikacja segmentu Fake +Editor options=Opcje +EditorShowBGChangesPlay=Pokaż tła +Erase step timing=Skasuj timing +Effect=Efekt +EnableAttackSounds=Dźwięki Ataków +EnableMineHitSound=Dźwięki Min +Entry %d=Wpis %d +EventMode=Tryb Imprezy +Exit=Exit +Fail=Fail +FastLoad=Szybkie\nŁadowanie +File1 Global BGAnimation=Globalne BGAnimation Plik1 +File1 Global Movie=Globalny Film Plik1 +File1 Global Movie (Group + Genre)=Globalny Film Plik1 (Grupa + Gatunek) +File1 Global Movie (Group)=Globalny Film Plik1 (Grupa) +File1 Song BGAnimation=BGAnimation w Piosence Plik1 +File1 Song Movie=Film w Piosence Plik1 +File1 Song Still=Obrazek w Piosence Plik1 +File1 Type=Tekst Plik1 +File2 Global BGAnimation=Globalne BGAnimation Plik1 +File2 Global Movie=Globalny Film Plik1 +File2 Global Movie (Group + Genre)=Globalny Film Plik1 (Grupa + Gatunek) +File2 Global Movie (Group)=Globalny Film Plik1 (Grupa) +File2 Song BGAnimation=BGAnimation w Piosence Plik1 +File2 Song Movie=Film w Piosence Plik1 +File2 Song Still=Obrazek w Piosence Plik1 +File2 Type=Tekst Plik1 +Fill Machine Stats=Wypełnij Statystyki Maszyny +Force Color 1=Wymuś Kolor 1 +Force Color 2=Wymuś Kolor 2 +Force Effect=Wymuś Efekt +Force Transition=Wymuś Przejście +Freeze=Zatrzymanie +Game=Gra +GetRankingName=Pokaż Pole Wpisu +Graphics/Sound Options=Opcje Grafiki i Dźwięku +Group=Grupa +Hands=Ręce +HiddenSongs=Ukryte Piosenki +Hide=Ukryj +High Meter=High Meter +HighResolutionTextures=Tekstury wysokiej roz. +Holds=Holdy +Insert=Wstaw +Insert Credit=Wrzuć Kredyt +Insert beat and shift down=Wstaw Beat i przesuń w dół +Insert Entry=Wstaw Pole +Jumps=Skoki +Key Joy Mappings=Mapowanie Kontrolerów +Language=Język +Last second hint=Wskaźnik ostatniej sekundy +Layer=Warstwa +LifeDifficulty=Zużycie Energii +LifeType=Rodzaj Energii +Low Meter=Low Meter +Advanced Options=Opcje Zaawansowane +Main title=Tytuł +Main title transliteration=Transliteracja Tytułu +Max BPM=Maks. Określone BPM +MaxTextureResolution=Rozdzielczość Tekstur +MenuTimer=Licznik w Menu +Meter=Licznik +Min BPM=Min. Określone BPM +Mines=Miny +MoveRandomToEnd=Losowa na koniec +More Options=Więcej Opcji +MovieColorDepth=Głębia kolorów filmów +MusicWheelSwitchSpeed=Prędkość Koła +MusicWheelUsesSections=Sekcje Koła +Network Options=Opcje Sieciowe +No USB memory cards found=Nie znaleziono karty USB +NoteSkins=NoteSkiny +NumBackgrounds=Losowe Tła +OptionsRandomJukebox=Modyfikatory +OnlyDedicatedMenuButtons=Klawisze Menu +OsMountPlayer1=OS Mount Player1 +OsMountPlayer2=OS Mount Player2 +Paste at begin marker=Wklej na początku zaznaczenia +Paste at current beat=Wklej na bieżącym beat`cie +Paste timing data=Wklej timing +Persp=Widok +Play current beat to end=Odtwórz bieżący beat do końca +Play preview music=Odtwórz Podgląd Muzyki +Play whole song=Odtwórz całą piosenkę +Play mods from course=Odtwórz mody z maratonu +Play selection=Odtwórz Zaznaczenie +Player1Profile=Profil 1-go Gracza +Player2Profile=Profil 2-go Gracza +PlayerAutoPlay=AutoPlay +Predicted Meter=Przewidywany Poziom Trudności +Preferences=Ustawienia +PreloadSounds=Preload Dźwięków +Premium=Premium +Preview Length=Długość Podglądu +Preview Start=Początek Podglądu +Export Packages=Eksport Pakietów +Profile=Profil +Profiles=Profile +ProgressiveLifebar=Progresywny Pasek Energii +ProgressiveNonstopLifebar=Progresywny Pasek Energii w NonStop +ProgressiveStageLifebar=Progresywny Pasek Energii w Poziomie +ProTiming=Protiming +Quads=Quady +Quantize=Quantize +RandomBackgroundMode=Tryb Tła +RandomModifiers=Modyfikatory +Rate=Tempo +Record in selection=Nagraj w zaznaczeniu +RefreshRate=Częstotliwość odświeżania +Reload Songs=Przeładowanie Piosenek +Remove=Usuń +Remove Change=Usuń Zmianę +Rename=Zmień nazwę +Reset To Defaults=Zresetuj opcje do domyślnych wartości +Revert from disk=Przywróć z dysku +Revert to last save=Przywróć z Cache +Save=Zapisz +SaveScores=Zapisz Wyniki +SaveReplays=Zapisz Powtórki +SaveStats=Zapisz Statystyki +ScoreDisplay=Wyświetlanie Punków +Scoreboard=Wyniki na serwerze +ScoringType=Metoda Punktacji +Scroll=Przesuwanie +Secret=Sekret +Server=Serwer +Servers=Serwery +Set P1=Ustaw dla P1 +Set P2=Ustaw dla P2 +Set modifiers=Ustaw modyfikatory +Set Mods=Ustaw Mody +Set selection start=Ustaw początek zaznaczenia +Set selection end=Ustaw koniec zaznaczenia +Shift all timing changes down=Przesuń wszystkie zmiany timingów w dół +Shift all timing changes up=Przesuń wszystkie zmiany timingów w górę +ShowBanners=Pokaż Bannery +ShowBeginnerHelper=Pomoc dla Początkującego +ShowCaution=Ostrzeżenie +ShowDancingCharacters=Tańczące Postacie +ShowDanger=Uwaga +ShowInstructions=Instrukcje +ShowLyrics=Teksty piosenek +ShowNativeLanguage=Translacje +ShowSelectGroup=Wybór Grupy Piosenek +ShowSongOptions=Pokaż Opcje Piosenki +ShowStats=Pokaż Statystyki +SmoothLines=Wygładzanie krawędzi +SoundEffect=Efekty Dźwiękowe +StepMania Credits=Podziękowania +Center1Player=Centruj 1 Gracza +Song=Piosenka +Song Group=Grupa Piosenek +Song Options=Opcje Piosenki +SongsPerPlay=Piosenki Na Grę +Sort=Sortowanie +SoundResampleQuality=Jakość Resamplingu +SoundVolume=Poziom Dźwięku +SoundVolumeAttract=Poziom Dźwięku Demonstracji +Speed=Prędkość +Step Author=Autor Kroków +Steps=Kroki +Stream=Strumień +Style=Styl +Sub title=Podtytuł +Sub title transliteration=Transliteracja Podtytułu +SuperGrowth=Super Rozrost +Tap Steps=Ilość kroków +Tempo=Tempo +Test Input=Test Kontrolerów +Test Lights=Test Świateł +TextureColorDepth=Głębia Kolorów Tekstur +Theme=Theme +TimingWindowScale=Ocena Trafień +Transform=Transformacja +Transfer Edits to USB=Transfer Edycji do USB +Transfer Edits from USB=Transfer Edycji z USB +Type=Typ +Turn=Obrót +Undo=Cofnij +UseUnlockSystem=System Odblokowania +VisualDelaySeconds=Opóźnienie Obrazu +Voltage=Woltaż +Vsync=Synchronizacja Pionowa +WideScreen16_9=Ekran Panoramiczny +WideScreen16_10=Ekran Panoramiczny +Windowed=Tryb Wyświetlania + +# +UI Options=Opcje Interfejsu +Input Options=Opcje Kontrolerów +Arcade Options=Opcje Automatowe +Select Game=Wybór Rodzaju Gry +System Direction=Ustawienia Systemu + +# +OnlyPreferredDifficulties=Tylko Wybrane Poziomy +# +PercentageScoring=Punktacja Procentowa + +Max Minutes=Max Minut +Play=Odtwórz +Edit Course=Edycja Maratonu +Shuffle=Mieszaj +# +GamePrefDefaultFail=Domyślny Typ Fail`a +# +UserPrefScoringMode=Naliczanie Punktów +[PaneDisplay] +Steps=Kroki +Holds=Holdy +Jumps=Skoki +Mines=Miny +Rolls=Rolle +Hands=Ręce +MachineHigh=Naj. Wynik +EmptyMachineHighScoreName=Best +NotAvailable=N/D + +[PlayMode] +Battle=Bitwa +Endless=Nieskończony +Nonstop=Nonstop +Oni=Oni +Rave=Rave +Regular=Zwykły + +[AdjustSync] +%s BPM od %.3f BPM do %.3f BPM.=%s BPM od %.3f BPM do %.3f BPM. +Autosync Machine=Autosynch. Maszyny +Autosync Song=Autosynch. Piosenki +Autosync Tempo=Autosynch. Tempo +Autosync: Correction NOT applied. Deviation too high.=Autosynch.: Korekcja nienaniesiona. Zbyt duże odchylenie. +Autosync: Correction applied.=Autosynch.: Poprawka naniesiona. +Global Offset from %+.3f to %+.3f (notes %s)=Global Offset z %+.3f na %+.3f (nuty %s) +Song offset from %+.3f to %+.3f (notes %s)=Offset Piosenki z %+.3f na %+.3f (nuty %s) +The stop segment #%d changed from %+.3fs to %+.3fs (change of %+.3f).=Segment STOP o numerze #%d zmieniony z %+.3fs na %+.3fs (Zmiana %+.3f). +earlier=wcześniej +later=później +Average Error %.5fs=Średnia błędu %.5fs +Etc.=itp. +%d taps ignored.=%d uderzeń zignorowanych. + +[ProfileAction] +Clear=Czyść +Delete=Usuń +Edit=Modyfikuj +Rename=Zmień nazwę +SetDefaultP1=Ustaw dla P1 +SetDefaultP2=Ustaw dla P2 + +[RadarCategory] +Air=Skoki +Chaos=Chaos +Freeze=Zatrzymania +Hands=Ręce +Holds=Trzymania +Jumps=Skoki +Mines=Miny +Rolls=Rolle +Stream=Ciągłość +Taps=Kroki +TapsAndHolds=Kroki i Holdy +Voltage=Woltaż +MinMidiNote=MinMidiNote +MaxMidiNote=MaxMidiNote + +[RageSoundManager] +Couldn't find a sound driver that works=Nie udało się znaleźć działającego sterownika dźwięku + +[RageUtil] +NumNd=nd +NumPrefix= +NumRd=rd +NumSt=st +NumTh=th + +[RoomWheel] +Enter room name=Wprowadź nazwę pokoju + +[RoomInfoDisplay] +Last Round Info:=Ostatnia runda: +Room Name:=Nazwa: +Room Description:=Opis: +Song Title:=Tytuł: +Song Subtitle:=Podtytuł: +Song Artist:=Artysta: +Players=Gracze + +[SMPackageUtil] +Could not find '%s'.=Nie udało się znaleźć '%s'. +[Screen] +HeaderText= +[ScreenAppearanceOptions] +HeaderText=Wygląd +HeaderSubText=Dostosuj grę pod siebie + +[ScreenOptionsGraphicsSound] +HeaderText=Grafika / Dzwięk +HeaderSubText=Ustaw najlepszą wydajność + +[ScreenOptionsAdvanced] +HeaderText=Opcje Zaawansowane +HeaderSubText=Ustawienia przeznaczone dla zaawansowanych użytkowników + +[ScreenBookkeeping] +All-time Coin Total:=Suma Wszystkich Monet: +Total Song Plays: %d=Liczba Odegranych piosenek: %d +Coin Data by Day of Week, All-Time=Wszystkie Monety z podz. na dni tygodnia +Coin Data by Hour of Day, All-Time=Wszystkie Monety z podz. na godziny +Coin Data of Last %d Days=Monety z Ostatnich %d Dni +Coin Data of Last %d Weeks=Monety z Ostatnich %d Tygodni +HeaderText=Statystyki + +[ScreenCaution] +Caution=UWAGA! +CautionText=Zadbaj by mata taneczna znajdowała się w bezpiecznej odległości od monitora i mebli.\n\nZwraóć uwagę by podczas tańca nie skrzywdzić zwierząt, dzieci i obserwatorów + + +[ScreenDebugOverlay] +%s in gameplay=%s w trakcie gry +Assist=Asysta +AutoPlay=AutoPlay +Autosync=Autosynch. +CPU=CPU +Clear Profile Stats=Wyczyść Statystki Profilu +CoinMode=Tryb Pracy +Debug Menu=Debug Menu +Fill Profile Stats=Wypełnij Statystyki Profilu +Flush Log=Zapisz Log +Force Crash=Wymuś Crash +Halt=Zatrzymaj +Lights Debug=Sprawdź Światła +Machine=Maszyna +Menu Timer=Licznik Menu +Monkey Input=Sym. Małpy +Multitexture=Multitekstura +Profile=Profil +Pull Back Camera=Odsuń Kamerę +Restart=Restart +Reload=Przeładuj +Reload Theme and Textures=Przeładuj Theme i Tekstury +Rendering Stats=Statystki Renderowania +Screen Test Mode=Tryb Testu Ekranu +Send Off To Screen=Wyślij Off na Ekran +Send On To Screen=Wyślij On na Ekran +Send Notes Ended=Wyślij Notes Ended +Show Masks=Pokaż Maski +Slow=Zwolnienie +Song=Piosenka +Tempo=Tempo +Uptime=Czas Pracy +Visual Delay Down=Zmniejsz Opóźnienie Ekranu +Visual Delay Up=Zwiększ Opóźnienie Ekranu +Volume Down=Dźwięk Ciszej +Volume Up=Dźwięk Głośniej +Vsync=Synch. Pionowa +Write Preferences=Zapisz Ustawienia +Write Profiles=Zapisz Profile +off=wyłączone +on=włączone +or=lub + +[ScreenEdit] +%s notes=%s +Can't undo - no undo data.=Nie mogę cofnąć - brak wcześniejszych danych. +Do you want to revert from disk?=Czy chcesz przywrócić układ z dysku? +Do you want to revert to your last save?=Czy chcesz cofnąć się do ostatniego zapisu? +Do you want to save changes before exiting?=Czy chcesz zapisać przed wyjściem? +Enter a new BPM value.=Wpisz nową wartość BPM.\n\nWpisz poprzednią wartość by usunąć. +Enter a new Stop value.=Wpisz nową wartość STOP.\n\nWpisz "0" by usunąć. +Enter a new Delay value.=Wpisz nową wartość DELAY.\n\nWpisz "0" by usunąć. +Enter a new Time Signature.=Wpisz nowe metrum\nUżyj formatu "x/y".\nWpisz poprzednią wartość by usunąć. +Enter a new Tickcount value.=Wpisz nową wartość Tickcount.\n\nWpisz poprzednią wartość by usunąć. +Enter a new Combo value.=Wpisz nową wartość Combo.\n\nWpisz poprzednią wartość by usunąć. +Enter a new Label value.=Wpisz nazwę tej sekcji układu.\n\nWpisz poprzednią nazwę by usunąć. +Enter a new Warp value.=Wpisz liczbę beat`ów które przeWARPujesz.\n\nWpisz "0" by usunąć ten segment. +Enter a new Speed percent value.=Wpisz współczynnik prędkości przewijania.\nWpisz poprzednią wartość by usunąć.\nWartość "1" to przewijanie domyślne. +Enter a new Speed wait value.=Wpisz w sekundach/beatach jak długa ma być zmiana.\n\n0 - natychmiast. +Enter a new Speed mode value.=Wpisz jak segment ma być obsługiwany.\n\n Wpisz 0 dla beatów, 1 dla sekund. +Enter a new Scroll value.=Wpisz nową wartość Przewijania +Enter a new Fake value.=Wpisz liczbę beatów które nie będą podlegały ocenianiu.\n\nWpisz "0" by to usunąć. +Are you sure you want to erase this chart's timing data?=Czy jesteś pewien, że chcesz usunąć dane timingu tego układu? +Enter a new artist transliteration.=Wpisz transliterację pola Artysta. +Enter a new artist.=Wpisz Artystę. +Enter a new genre.=Wpisz Gatunek. +Enter a new credit.=Wpisz Podziękowania +Enter a new description.=Wpisz Opis +Enter a new chart style.=Wpisz przeznaczenie układu (np. "Mata", "Klawiatura") +Enter a new meter.=Wpisz ocenę poziomu trudności układu. +Enter the author who made this step pattern.=Wpisz autora układu kroków. +Enter the offset for the song.=Wpisz wartość offset dla tej piosenki. +Enter a new last second hint.=Wpisz wskaźnik ostatniej sekundy piosenki. +Enter a new main title transliteration.=Wpisz transliterację pola Tytuł. +Enter a new main title.=Wpisz Tytuł piosenki. +Enter a new sub title transliteration.=Wpisz transliterację pola Podtytuł +Enter a new sub title.=Wpisz Podtytuł piosenki. +Enter a new preview start.=Wpisz moment od którego ma się zaczynać podgląd piosenki. +Enter a new preview length.=Wpisz długość trwania podglądu piosenki. +Enter a new min BPM.=Wpisz minimalną wartość wyświetlaną przez licznik BPM +Enter a new max BPM.=Wpisz maksymalną wartość wyświetlaną przez licznik BPM +More than %d notes per measure is not allowed. This change has been reverted.=Nie można tworzyć więcej niż %d nut na pomiar. Zmiana cofnięta. +No backgrounds available=Brak dostępnych teł. +EditHelpText=Góra/Dół:\n zmiana beat`u\nPrawo/Lewo:\n zmiana skoku notacji\nKlawisze z cyframi:\n dodaj/usuń\n strzałkę/nutę\nklawisze N i M:\n zamiana rodzaju strzałek\nCtrl + N/M:\n zmiana rodzaju segmentu\nCtrl + ,/.:\n Poruszanie po segmentach\nTworzenie Hold`a:\n Wciśnij cyfrę\n i trzymając przeciągnij\n w Górę lub w Dół\nTworzenie Roll`a:\n Przytrzymaj Shift,\n a następnie utwórz\n hold`a.\nSpacja: Ustawianie\n rejonu zaznaczenia\nKlawisz T: Przełączanie Timingu\nEnter: Menu opcji zaznaczenia\nKlawisz A: Menu Modyfikacyjne\nEscape: Menu główne\nF4: Menu Timingu\nF1: Pokaż pomoc\n +PlayRecordHelpText=Naciśnij Start by zakończyć +Save successful.=Zapis zakończony powodzeniem. +Saved as SM and DWI.=Zapisano w formacie SM i DWI. +Saved as SM.=Zapisanow w formacie SM. +Switched to=Przełączono do +The change has been reverted.=Zmiana została cofnięta. +This change creates more than %d notes in a measure.=Ta zmiana tworzy więcej niż %d nut w pomiarze. +This change creates notes past the end of the music and is not allowed.=Ta zmiana tworzy nuty poza końcem muzyki i nie jest dozwolona. +This will destroy all unsaved changes.=Operacja zniszczy wszystkie niezapisane zmiany. +Undo=Cofnij +You must be in Song Timing Mode to edit BG Changes.=By móc modyfikować BG Changes należy przejść do tybu Timing`u. +You must have an area selected to enter the Alter Menu.=Musisz mieć jakiś zaznaczony fragment by móc wejść do Menu Modyfikacyjnego + +Current beat=Bieżący Beat +Current second=Bieżąca Sekunda +Snap to=Przyciągaj do +Selection beat=Beat Zaznaczenia +Difficulty=Poziom Trudności +Description=Opis +Chart Style=Styl Układu +Step Author=Autor Kroków +Main title=Tytuł piosenki +Subtitle=Podtytuł +Tap Note=Rodzaj Nuty +Segment=Segment +Tap Steps=Ilość strzałek +Jumps=Skoki +Hands=Handy +Holds=Holdy +Mines=Miny +Rolls=Rolle +Lifts=Lifty +Fakes=Fake`i +Timing Mode=Tryb Timingu +Step Timing=Timing Kroków +Song Timing=Timing Piosenki +Beat 0 offset=Offset +Preview Start=Początek Podglądu +Preview Length=Długość Podglądu +Help=Pomoc +Info=Informacja +Routine Player=Gracz + +[ScreenEditMenu] +HeaderText=Edycja Piosenki +HeaderSubText=Wypieść swoją piosenkę +Continue with delete?=Kontynuować usunięcie? +Enter a description for this edit.=Wpisz opis dla tej edycji. +ExplanationAction=W tym trybie możesz modyfikować istniejące układy strzałek, tworzyć nowe strzałki i synchronizować je z muzyką. +ExplanationGroup=W tym trybie możesz modyfikować istniejące układy strzałek, tworzyć nowe strzałki i synchronizować je z muzyką. +ExplanationSong=W tym trybie możesz modyfikować istniejące układy strzałek, tworzyć nowe strzałki i synchronizować je z muzyką. +ExplanationSourceSteps=W tym trybie możesz modyfikować istniejące układy strzałek, tworzyć nowe strzałki i synchronizować je z muzyką. +ExplanationSourceStepsType=W tym trybie możesz modyfikować istniejące układy strzałek, tworzyć nowe strzałki i synchronizować je z muzyką. +ExplanationSteps=W tym trybie możesz modyfikować istniejące układy strzałek, tworzyć nowe strzałki i synchronizować je z muzyką. +ExplanationStepsType=W tym trybie możesz modyfikować istniejące układy strzałek, tworzyć nowe strzałki i synchronizować je z muzyką. +Profile name cannot be blank.=Nazwa Profilu nie może być pusta. +The name you chose conflicts with another profile. Please use a different name.=Wybrana nazwa konfliktuje z już istniejącym profilem. Proszę użyć innej. +These steps are produced by autogen. You do not need to delete them.=Te kroki utworzył Autogenerator. Nie trzeba ich kasować. +These steps will be lost permanently.=Kroki zostaną całkowicie usunięte. +This song is missing a music file and cannot be edited.=Ta piosenka nie ma pliku z muzyką i nie może być edytowana. +The song directory is read-only and cannot be edited.=Ten katalog piosenki jest w trybie "tylko do odczytu" i nie może być edytowany. +Blank=Pusty + +[ScreenPracticeMenu] +HeaderText=Sprawdź Piosenki + +ExplanationGroup=Wybierz Grupę piosenek. +ExplanationSong=Wybierz piosenkę którą chcesz sprawdzić. +ExplanationAction=Naciśnij START by zacząć. +ExplanationStepsType=Wybierz typ kroków który chcesz sprawdzić. +ExplanationSteps=Wybierz układ kroków. + +[ScreenEvaluation] +HeaderText=Twoje Wyniki +HeaderSubText=Twój taniec był wspaniały! +[ScreenEvaluationSummary] +HeaderText=Ostateczne Wyniki +[ScreenGameplay] +GiveUpAbortedText=Nie poddawaj się! +GiveUpStartText=Trzymaj dalej &START; by się poddać +GiveUpBackText=Trzymaj dalej &START; by się poddać + +[ScreenGameplaySyncMachine] +Standard deviation=Odchylenie standardowe +New offset=Nowy offset +Old offset=Stary offset +Collecting sample=Zebrane próbki + +[ScreenInstructions] +PlayMode_Regular title=Jak Grać +PlayMode_Regular instructions=W trakcie gry należy uważać na Hold`y i Miny. +PlayMode_Nonstop title=Tryb Nonstop +PlayMode_Nonstop instructions=Tryb Nonstop pozwala na granie kilku piosenek pod rząd, (zazwyczaj 4, czasami więcej), przy użyciu zasad normalnego trybu gry. +PlayMode_Oni title=Tryb Oni +PlayMode_Oni instructions=Tryb Oni pozwala na grę wg. dwóch zestawów zasad.\nW pierwszym pasek energii zastępuje bateria z ograniczoną ilością żyć (standardowo 4). Każde niezaliczenie strzałki rozładowuje jeden pasek baterii.\nW drugim trybie należy przejść piosenkę w określonym czasie. +PlayMode_Endless title=Tryb Nieskończony +PlayMode_Endless instructions=Tryb Nieskończony polega na przechodzeniu jednej piosenki za drugą bez opcji przerwy. Gra kończy się w momencie utraty całej energii. +PlayMode_Rave title=Tryb Rave +PlayMode_Rave instructions= +PlayMode_Battle title=Tryb Bitwy +PlayMode_Battle instructions= +Hold instructions=Strzałki typu Hold by zostały zaliczone, muszą być przytrzymane przez określony czas. Poprawnie zaliczona strzałka da ocenę OK. Nieprawidłowo - NG. +Mine instructions=Miny wybuchają i obniżają poziom energii. Zdecydowanie należny ich unikać. Włączą się, jeśli pozostawi się nogę na przycisku, kiedy przelatują + +[ScreenLegal] +Warning=Ostrzeżenie +BodyText=Kod źródłowy programu Stepmania jest objęty licencją open-source\n\nNazwa i logo "Stepmania" są chronionymi znakami towarowymi.\n\nDOMYŚLNE DZWIĘKI SCHEMATU WYGLĄDU STEPMANII SĄ WŁASNOŚCIĄ ICH TWÓRCÓW. INNE ELEMENTY SCHEMATU WYGLĄDU SĄ OBJĘTE LICENCJĄ STEPMANII.\n\nZe szczegółami proszę zapoznać się w pliku license.txt + + +[ScreenMapControllers] +HeaderText=Mapowanie Kontrolerów +InvalidButton=Ten klawisz nie może zostać zmapowany +%s slots=Strona gracza %s + +[ScreenNetRoom] +Enter a description for the room:=Utwórz opis pokoju: +Enter a password for the room (blank, no password):=Utwórz hasło dla Pokoju (puste, brak hasła): +Enter Room's Password:=Wpisz Hasło do Pokoju: +HeaderText=StepMania Online +HeaderSubText=Wybór Pokoju +HelpText=Ctrl+ENTER Wybiera &BACK; Wyjście &MENULEFT;&MENURIGHT; Poruszanie + +[ScreenNetSelectMusic] +HeaderText=Wybierz Muzykę do Gry Sieciowej. +HeaderSubText=Wybór piosenki +HelpText=Ctrl+ENTER Zatwierdź &BACK; Wyjście &MENULEFT;&MENURIGHT; Wybierz::&MENUUP; Opcje Gracza &MENUDOWN; Zmiana Poziomu Trud. + +[ScreenNetworkOptions] +Disconnected from server.=Odłączony od serwera. +Enter a network address.=Wpisz adres sieciowy. +Server failed: %s Code:%d=Błąd Serwera: %s Kod:%d +Use 127.0.0.1 to connect to yourself.=Użyj 127.0.0.1 do połączenia ze samym sobą. +Connect=Połącz +Disconnect=Odłącz +ScoreOn=Włącz +ScoreOff=Wyłącz +HeaderText=Opcje Sieciowe +HeaderSubText=Konfiguracja gry sieciowej + +[ScreenOptionsEditCourse] +The maximum number of entries per course is %d. This course already has %d entries.=Maksymalna liczba wpisów na maraton: %d. Ten maraton już ma %d wpisów. +You cannot delete the last entry in a course.=Nie można kasować ostatniego wpisu w maratonie. + +[ScreenOptionsEditCourseEntry] +No songs loaded.=Nie załadowano żadnych piosenek. + +[ScreenOptionsManageCourses] +Continue with delete?=Kontynuować i usunąć? +Enter a name for the course.=Wpisz nazwę maratonu +You have %d, the maximum number allowed.=Istniej już %d. To jest maksymalna dozwolona liczba. +You must delete an existing before creating a new.=Trzeba skasować istniejący nim utworzy się nowy. +Error renaming file.=Błąd podczas zmiany nazwy pliku. +This course will be lost permanently.=Ten maraton zostanie całkowicie usunięty. +Error deleting the file '%s'.=Błąd podczas kasowania pliku '%s'. + +[ScreenOptionsManageEditSteps] +Enter a name for these steps.=Wprowadź nazwę dla tych kroków. +These steps will be lost permanently.=Kroki zostaną całkowicie usunięte. +You have %d step edits, the maximum number allowed.=Istnieje już %d edycji. Jest to maksymalna dozwolona liczba. +You must delete an existing steps edit before creating a new steps edit.=Należy usunąć istniejące kroki przed utworzeniem nowych. +Continue with delete?=Kontynuować i usunąć? + +[ScreenOptionsCourseOverview] +Error saving course.=Błąd podczas zapisu maratonu. +Course saved successfully.=Maraton poprawnie zapisany. +Enter a name for the course.= +Enter a name for the course.Wpisz nazwę maratonu. +This course will be lost permanently.=Ten maraton zostanie całkowicie usunięty. +Continue with delete?=Kontynuować i usunąć? +Error deleting the file '%s'.=Błąd podczas usuwania pliku "%s". + +[NotesWriterSM] +Error renaming file. Destination file '%s' already exists.=Błąd podczas zmiany nazwy pliku. Docelowy plik '%s' już isnieje. +Error writing file '%s'.=Błąd podczas zapisu pliku '%s'. + +[NotesWriterSSC] +Error renaming file. Destination file '%s' already exists.=Błąd podczas zmiany nazwy pliku. Docelowy plik '%s' już isnieje. +Error writing file '%s'.=Błąd podczas zapisu pliku '%s'. + +[ScreenOptionsManageProfiles] +Are you sure you want to clear all data in the profile '%s'?=Czy na pewno chcesz wyczyścić wszystkie dane z profilu &oq;%s&cq;? +Are you sure you want to delete the profile '%s'?=Czy na pewno chcesz skasować profil &oq;%s&cq;? +Enter a name for the profile.=Wpisz nazwę profilu +NewProfileDefaultName=Nowy + +[ScreenOptionsMaster] +Exit=Wyjście + +[ScreenOptionsMasterPrefs] +Off=Wyłącz + +[ScreenOptionsMemoryCard] +Error mounting card: %s=Błąd podłączania karty: %s +(no label)=(brak nazwy) +size ???=rozmiar ??? +%dMB=%dMB + +[ScreenOptionsService] +HeaderText=Opcje +HeaderSubText=Tu można skonfigurować grę. + +[ScreenPackages] +DL @ %d KB/s=DL @ %d KB/s +Download cancelled.=Pobieranie przerwane. +Enter URL=Podaj URL +Failed.=Niepowodzenie. +Failed to connect.=Nie udało się nawiązać połączenia. +File Already Exists=Plik Już Istnieje +Header Sent.=Wysłano Nagłówek. +Invalid URL.=Nieprawidłowy URL. +VisitURL=--Odwiedź URL-- +Waiting for header.=Oczekiwanie na nagłówek. + +[ScreenPrompt] +OK=OK +No=NIE +Yes=TAK +Cancel=PRZERWIJ + +[ScreenRanking] + +[ScreenSMOnlineLogin] +Each player needs a unique Profile.=Każdy gracz potrzebuje unikalnego Profilu. +Enter your password.=Podaj hasło. +No Styles are selectable.=Nie można wybrać żadnego Stylu. +You are logging on as:=Logujesz się jako: +You must define a Profile.=Musisz określić Profil. +HeaderText=Logowanie Do Serwera +HeaderSubText=Wybierz profil do logowania. +Depending on the server you're connected to, you may have to register for an account on their website.=W zależności od serwera z którym się łączysz, może być wymagana rejestracja na ich portalu. + +[ScreenSaveSync] +Choosing NO will discard your changes.=Wybranie NIE anuluje zmiany. +Would you like to save these changes?=Czy chciałbyś zapiać te zmiany? +You have changed the timing of=Zmieniłeś timing + +[ScreenWithMenuElements] +; Put all help text in this one group and have metrics look up the strings here. That will help make sure +; that strings are in a consistent style and that strings aren't duplicated. +HelpTextNormal=Użyj &MENULEFT;&MENURIGHT; by wybrać, i naciśnij &START; +HelpTextSelectMusic=Użyj &MENULEFT;&MENURIGHT; by wybrać, i naciśnij &START; +HelpTextDifficultyPart=&UP;&UP; łatwiejszy poziom &DOWN;&DOWN; trudniejszy poziom +HelpTextOptions=&MENUUP;&MENUDOWN; wiersz &MENULEFT;&MENURIGHT; zmień &START; zatwierdź +HelpTextOptionsAndBack=&MENUUP;&MENUDOWN; wiersz &MENULEFT;&MENURIGHT; zmień &START; zatwierdź &BACK; cofnij +HelpTextOptionsSimple=&MENUUP;&MENUDOWN; zmień &START; zatwierdź +HelpTextOptionsSimpleAndBack=&MENUUP;&MENUDOWN; wiersz &START; zatwierdź &BACK; cofnij +HelpTextSort=&UP;&DOWN;&UP;&DOWN; zmiana sortowania +HelpTextContinue=Naciśnij dowolny klawisz. Naciśnij ESCAPE by zakończyć. +HelpTextEvaluation=Naciśnij &START; by kontynuować +HelpTextScreenshot=Naciśnij &SELECT; by zapisać ekran. +HelpTextTestInput=Naciśnij dowolny klawisz. Naciśnij ESCAPE by zakończyć. +HelpTextTestLights=Naciśnij &MENULEFT;&MENURIGHT; by zmienić światła. Naciśnij ESCAPE by zakończyć. +HelpTextTextEntry=Wpisz wartość przy użyciu klawiatury. Naciśnij Enter by zakończyć. +HelpTextMapControllers=Użyj klawiszy strzałek do nawigacji, ENTER by przydzielić, SPACJĘ by wyczyścić pole::Naciśnij ESCAPE by zakończyć. +HelpTextOnline=setepmaniaonline.eu by połączyć sięz oficjalnym Europejskim Serwerem Stepmania Online.:: Sprawdź www.stepmaniaonline.eu w celu rejestracji konta. +HelpTextNetSelectMusic=Ctrl + Enter by wybrać pokój/piosenkę::&UP; Opcje Gracza +HelpTextBookkeeping=Naciśnij &MENULEFT;&MENURIGHT; by przeglądać dane. Naciśnij ESCAPE by zakończyć. + +[ScreenSelectGame] +HeaderText=Wybierz Grę +HeaderSubText=Dla każdego coś miłego. + +[ScreenSelectGroup] +ALL MUSIC=CAŁA MUZYKA + +[ScreenSelectMusic] +HeaderText=Wybierz Muzykę +HeaderSubText=Nie ma czego się bać. Wybierz to co Ci się podoba. + +[ScreenSelectCourse] +HeaderText=Wybierz Maraton + +[ScreenSelectGroup] +HeaderText=Wybierz Grupę + +[ScreenSelectStyle] +HeaderText=Wybierz Styl +HeaderSubText=Pokaż w czym jesteś dobry. + +[ScreenSelectPlayMode] +NormalExplanation=WYBIERZ SWOJE\nULUBIONE PIOSENKI +NonstopExplanation=PRZEJDŹ PIOSENKI\nOD POCZĄTKU DO KOŃCA +ChallengeExplanation=NIE ZGUB\nZBYT WIELU KROKÓW +SurvivalExplanation=POKONAJ LICZNIK\nBY WYGRAĆ +EndlessExplanation=TAŃCZ\nAŻ PADNIESZ +HeaderText=Wybierz Tryb +HeaderSubText=Zaczynajmy. Na pewno dasz radę. + +[ScreenServiceAction] +%d added=%d dodano +%d copied=%d skopiowano +%d overwritten=%d nadpisano +%d deleted=%d skasowano +%d edits cleared, %d errors.=%d edycji wyczyszczono, %d błędów. +%d failed=%d niewczytano +%d ignored=%d zignowowano +Bookkeeping data cleared.=Statystyki wyczyszczone. +Copied from P%d card:=Skopiowane z karty P%d: +Copied to P%d card:=Skopiowane na kartę P%d: +Edits not cleared - No memory cards ready.=Edycje nieusunięte - Brak karty. +Edits not copied - No memory cards ready.=Edycje nieskopiowane - Brak karty. +Error saving machine stats to P%d card.=Błąd podczas zapisu statystyk na kartę P%d. +Machine stats cleared.=Statystyki maszyny usunięte. +Machine stats loaded from P%d card.=Statystyki maszyny wczytane z karty P%d. +Machine stats saved to P%d card.=Statystyki maszyny zapisane na kartę P%d. +Preferences reset.=Zresetowano ustawienia. +Stats not loaded - No memory cards ready.=Statystyki niewczytane - Brak karty. +Stats not saved - No memory cards ready.=Statystyki niezapisane - Brak karty. +The profile on P%d card contains corrupt or tampered data.=Profil na karcie P%d zawiera uszkodzone lub modyfikowane ręcznie dane. +There is no machine profile on P%d card.=Na karcie P%d nie ma żadnych profili maszyny. + +[ScreenSyncOverlay] +AutoPlay=AutoPlay +AutoPlayCPU=AutoPlayCPU +AutoSync Machine=AutoSync. Machine +AutoSync Song=AutoSync. Song +AutoSync Tempo=AutoSync. Tempo +Can't sync while playing a course.=Nie można synchronizować podczas maratonu. +Sync changes reverted.=Przywrócono stare ustawienia synchronizacji. +Revert sync changes=Przywróć stare ustawienia synchronizacji +Current BPM - smaller/larger=Bieżące BPM - większe/mniejsze +Song offset - notes earlier/later=Offset Piosenki - strzałki wcześniej/później +Machine offset - notes earlier/later=Offset Maszyny - strzałki wcześniej/później +(hold Alt for smaller increment)=(przytrzymaj Alt by zmniejszyć przyrost wartości) +Old offset=Stary offset +New offset=Nowy offset +Collecting sample=Zbierane próbki +Standard deviation=Odchylenie standardowe + +[ScreenSystemLayer] +CreditsCardChanged=PODMIENIONA KARTA +CreditsCardChecking=SPRAWDZANIE KARTY +CreditsCardMountFailed=BŁĄD PODŁĄCZENIA +CreditsCardNoName=Anonim +CreditsCardReady=GOTOWE +CreditsCardRemoved=KARTA WYJĘTA +CreditsCardTestFailed=BŁĄD ZAPISU +CreditsCardTooLate=ZA PÓŹNO WŁOŻONA +CreditsCredits=KREDYT(Y) +CreditsMax=(MAX) +CreditsFreePlay=DARMOWA GRA +CreditsInsertCard=WŁÓŻ KARTĘ +CreditsLoadFailed=BŁĄD PODPISU +CreditsLoadedFromLastGoodAppend= (backup) +CreditsNotPresent=NIEOBECNY +CreditsPressStart=NACIŚNIJ START + +[ScreenTestFonts] +# W is annoying: +Text1=WWWWWWWWWWWW +# Realistic excerpt: +Text2=Ta dyskusja przebiegała mniej więcej tak: &oq;Odmawiam udowodnienia, że istnieję&oq; mówi Bóg, &oq; dowód niszczy wiarę, a bez wiary nie istnieję.&cq;::::&oq;Ale,&cq; mówi Człowiek, &oq; Rybka Babel to niezły dowód, prawda? Nie mogła wyewoluować przypadkiem. Dowodzi, że istniejesz i cytując twój argument, więc ty nie. QED.&cq;::::&oq;No masz,&cq; mówi Bóg, &oq; Nie pomyślałem o tym&cq; i szybko znikną w pufnięciu logiki. + +# Numbers test: +Text3=01234567890 ::100.00% 12345% 9:00 50/100 +# General symbol test, and test alignment against another font. +Text4=$50% (Test) "test's" &oq;test's&cq;, #1! 1+2-3*4/5.6::3:00 a; b; 5<6 6>5 2^3=8 Czemu? test@example.com::[Foo] {bar} Naciśnij &START; 3|4 &oq;1_2_3&cq; +Text5= + +[ScreenTestInput] +Controller=Kontroler +not mapped=niezmapowany +secondary=drugorzędne + +[ScreenTestLights] +Auto Cycle=Automatyczne Zapalanie +Manual Cycle=Ręczne Zapalanie +cabinet light=światła automatu +controller light=światłą mat + +[ScreenTextEntry] +Backspace=Backsp +Cancel=Cofnij +Done=Gotowe +HeaderText= +Space=Spacja +"%s" is an invalid floating point value.="%s" jest nieprawidłową wartością zmiennoprzecinkową. +AnswerCaret=_ +AnswerBlank= + +[ScreenTitleMenu] +%d songs in %d groups=%d piosenek w %d grupach +%d courses in %d groups=%d maratonów w %d grupach +%d unlocks=%d odblokowane +Gametype:=Rodzaj Gry: +Difficulty:=Poziom Trudności: +Announcer=Komentator +Play Online=Gra Sieciowa +Edit/Share=Edycja +Exit=Wyjście +Game Start=Start +Jukebox=Odtwarzacz +Select Game=Wybór trybu gry +Theme=Motyw graficzny +Credits=Autorzy +Options=Opcje +Setup=Szybka konfiguracja + +[SmpackageExportDlg] +Error adding file '%s'.=Błąd podczas dodawania pliku '%s'. + +[SongManager] +Loading courses...=Ładowanie maratonów... +Loading songs...=Ładowanie piosenek... +Reloading...=Przeładowanie... +Unloading songs...=Wyładowanie piosenek... +Unloading courses...=Wyładowanie maratonów... +The folder "%s" appears to be a song folder. All song folders must reside in a group folder. For example, "Songs/Originals/My Song".=Katalog "%s" wygląda jak katalog piosenki. Wszystkie katalogi z piosenkami muszą się znajdować w kataogu Grupy. Np.: Dopiero "Songs/Moje/Moja Piosenka" może zawierać pliki muzyczne (mp3, ogg...), pliki kroków (.ssc, .sm, .dwi, .kfs) i inne powiązane pliki. + +[SongUtil] +You must supply a name for your new edit.=Musisz podać nazwę dla nowej edycji. +The name you chose conflicts with another edit. Please use a different name.=Wybrana nazwa konfliktuje z już istniejącą edycją. Proszę podać nową. +The edit name cannot contain any of the following characters: %s=Nazwa edycji nie może zawierać znaków: %s +The step author's name cannot contain any of the following characters: %s=Pole Autor Kroków nie może zawierać znaków: %s + +[SongSort] +FewestPlays=Najrzadziej Wybierane +LowestGrades=Najniższe Oceny +MostPlays=Najczęściej Wybierane +Randomize=Losuj +TopGrades=Najwyższe Oceny + +[Sort] +NotAvailable=N/D +Other=Inne + +[SortOrder] +AllCourses=Wszystkie Maratony +Artist=Artysta +BPM=BPM +Endless=Nieskończony +Genre=Gatunek +Group=Grupa +ModeMenu=Tryby Sortowania +Nonstop=Nonstop +Oni=Oni +Popularity=Najczęściej Wybierane +Preferred=Preferowane +Title=Tytuł +TopGrades=Najwyższa Ocena +Roulette=Ruletka +Length=Czas Utworu +Recent=Ostatnio Wybrane +BeginnerMeter=Poziom Początkujący +EasyMeter=Poziom Łatwy +MediumMeter=Poziom Normalny +HardMeter=Poziom Trudny +ChallengeMeter=Poziom Ekspert +DoubleEasyMeter=Poziom Łatwy (Double) +DoubleMediumMeter=Poziom Normalny (Double) +DoubleHardMeter=Poziom Trudny (Double) +DoubleChallengeMeter=Poziom Ekspert (Double) + +[StepMania] +Announcer=Komentator +Couldn't open any loading windows.=Nie udało się otworzyć żadnego okna ładowania. +Fullscreen=Pełny Ekran +Initializing %s...=Inicjalizacja %s... +No video renderers attempted.=Nie podjęto próby inicjalizacji rendererów wideo. +NoSmoothLines=Brak wygładzania krawędzi. +NoVsync=Brak synchronizacji pionowej (Vsynch) +Please do not file this error as a bug! Use the web page below to troubleshoot this problem.=Proszę nie zgłaszać tego problemu jako błąd. Użyj informacji ze strony www by rozwiązać problem. +Service switch pressed=Naciśnięto przycisk serwisowy. +SmoothLines=Gładkie krawędzie. +There was an error while initializing your video card.=Zaistniał błąd podczas inicjalizacji twojej karty graficznej. +Unknown video renderer value: %s=Nieznana wartość renderera wideo: %s +Video Driver: %s=Sterownik Obrazu: %s +Vsync=Synchronizacja pionowa (Vsync) +Windowed=Tryb Okienkowy +color=kolor +texture=tekstura + +[StepsType] +dance-couple=couple +dance-double=double +dance-single=single +dance-solo=solo +dance-threepanel=3panel +dance-routine=routine +lights-cabinet=Lights +# SSC +Dance_Single=Single +Dance_Double=Double +Dance_Threepanel=3 Panels + +[TapNoteScore] +AvoidMine=Uniknięta Miny +HitMine=Trafiona Miny +Miss=Puszczona +CheckpointMiss=Puszczony Hold +CheckpointHit=Trafiony Hold +None=Żadna +W1=Flawless +W2=Perfect +W3=Great +W4=Good +W5=Boo + +[ThemeManager] +Reloaded metrics=Przeładowano parametry +Reloaded metrics and textures=Przeładowano parametry i tekstury +Reloaded scripts=Przeładowano skrypty +Reloaded overlay screens=Przeładowano ekrany nakładki + +[WorkoutManager] +You must supply a name for your workout.=Musisz nadać nazwę dla treningu. +The name you chose conflicts with another workout. Please use a different name.=Wybrana nazwa konfliktuje z już istniejącą. Proszę podać inną. +The workout name cannot contain any of the following characters: %s=Nazwa treningu nie może zawierać znaków: %s +%d/%d songs enabled=%d/%d włączonych piosenek + +[Dialog-Add A Comment] +Add A Comment=Dodaj Komentarz +Cancel=Przerwij +OK=OK +Package Comment=Komentarz Pakietu +You can add a message to display before a user installs your package.=Możesz dodać wiadomość, która się wyświetli dla użytkownika przed instalacją pakietu. +Show a comment=Pokaż komentarz +Don't display this dialog in the future=Nie pokazuj więcej tego komunikatu + +[Dialog-Change Game Settings] +Cancel=Przerwij +Change Game Settings=Zmień Ustawienia Gry +Default (recommended)=Domyślne (zalecane) +Direct3D=Direct3D +DirectSound Hardware=Sprzęt DirectSound +DirectSound Software=Oprogramowanie DirectSound +Graphics API=API Grafiki +Log to Disk=Loguj na dysk +Other=Inne +Force 60Hz Refresh=Wymuś 60Hz Odświeżanie +Null (no sound)=Null (bez dźwięku) +OK=OK +OpenGL=OpenGL +Show Log Window=Pokaż okno log`a +Sound API=API Dźwięku +Tip: Change these only if you experience problems when using the default settings.=Sugestia: Te opcje zmieniaj tylko jeśli wystąpią problemy z domyślnymi ustawieniami. +WaveOut=WaveOut + +[Dialog-Create Language] +Cancel=Przerwij +Choose a language=Wybierz język +Create Language=Stwórz język +OK=OK + +[Dialog-Edit Installations] +Add=Dodaj +Add New Installation=Dodaj nową Instalację +Cancel=Przerwij +Current Installations=Bieżące Instalacje +Current Installations (the top installation is the default)=Bieżące Instalacje (najwyższa instalacja jest domyślna) +Edit Installations=Edytuj Instalacje +Enter the complete path to a StepMania or DWI installation\ne.g. "C:\Program Files\StepMania"=Podaj kompletną ścieżkę do zainstalowanej instancji Stepmanii lub DWI, np.: "C:\Program Files\StepMania" +Make Default=Ustaw jako domyślny +OK=OK +Remove=Usuń +The top installation is the default.=Najwyższa instalacja jest domyślna. + +[Dialog-Export Packages] +Close=Zamknij +Edit Installations=Edytuj Instalacje +Export As Individual=Eksportuj Pojedynczo +Export As One=Eksportuj do Jednego Pakietu +Export Packages=Eksportuj Pakiety +Installation=Instalacja +Launch Game=Uruchom Grę +Open Program Folder=Otwórz Folder Programu +Select Installation:=Wybierz Instalację: +Tree2=Drzewo2 + +[Dialog-Language Translations] +1) Create a new language\n2) Export the theme strings to a CSV\n3) Edit the CSV using Excel or a text editor\n4) Import the CSV file back into the same language=1) Stwórz nowy język\n2) Wyeksportuj ciągi z Theme`u do CSV\n3)Edytuj CSV przy pomocy Excel`a lub edytora tekstu\n4) Zaimportuj plik CSV do języka +Check Language=Sprawdź Język +Close=Zamknij +Create Language=Stwórz Język +Delete Language=Skasuj Język +Export CSV=Eksport do CSV +Export already translated strings=Eksportuj już przetłumaczone ciągi +Import CSV=Import z CSV +Language Translations=Przetłumaczone Języki +Languages=Języki +Need translation:=Potrzebne tłumaczenie: +Selection details=Szczegóły zaznaczenia +Themes=Theme`y +Total Strings:=Wszystkie Ciągi: + +[Dialog-StepMania Tools] +Close=Zamknij +Export As Individual=Eksportuj Pojedynczo +Export As One=Eksportuj do Jednego Pakietu +Export Packages=Eksportuj Pakiety +Launch Game=Uruchom Grę +Open Program Folder=Otwórz Folder Programu +Select Installation:=Wybierz Instalację: +StepMania Tools=Narzędzia Stepmanii +Tree2=Drzewo2 + +[Dialog-StepMania Tools Main Menu] +Change Preferences=Zmień Ustawienia +Change the graphics API, sound API, and other settings that the game will use.=Zmień API Graficzne, API Dźwiękowe i inne ustawienia używane przez grę. +Clear Mappings=Wyczyść Mapowanie +Clear Preferences=Wyczyść Ustawienia +Clear all preferences if you've made changes and the game won't start.=Przywraca wszystkie ustawienia jeśli po wprowadzonych zmianach gra nie startuje. +Create .smzip package files to share with other users.=Tworzy pakiet .smzip do wymiany z innymi użytkownikami. +Create .smzip package files to share with other users. Packages can contain songs, courses, themes, backgrounds, and more.=Tworzy pakiet .smzip do wymiany z innymi użytkownikami. Pakiety mogą zawierać piosenki, maratony, theme`y, tła, itp. +Create Song=Utwórz Piosenkę +Create a new or manage existing language translations.=Tworzy nowe lub zarządza istniejącymi tłumaczeniami. +Create a new song in from your favorite mp3 or ogg music file.=Tworzy nową piosenkę z pliku mp3 lub ogg. +Create and Share=Tworzenie i Wymiana +Edit Installations=Edycja Instalacji +Erase all of your keyboard and joystick mappings if you've made a mistake.=Wymazanie wszystkich ustawień i mapowań joystików, padów i mat. +Exit=Wyjście +Export Packages=Eksport Pakietów +Installation=Instalacja +Languages=Języki +Launch Game=Uruchom Grę +Open Preferences=Otwórz Ustawienia +Open the preferences file to make changes by hand.=Otwiera plik z ustawieniami, które można nanieść ręcznie. +StepMania Tools Main Menu=Narzędzia Stepmanii Menu Główne +Troubleshooting=Rozwiązywanie Problemów + +[ChangeGameSettings] +Error writing file '%s': %s=Błąd podczas zapisu pliku '%s': %s + +[Dialog-Name Your Package] +Name Your Package=Nazwij swój pakiet +Enter a name for your new package:=Wprowadź nazwę nowego pakietu: +OK=OK +Cancel=Przerwij +Note: leave off the ".smzip" extention=Uwaga: wpisz bez rozszerzenia ".smzip" + +[Dialog-Install a package] +Finish >=Zakończ > +Cancel=Przerwij +< Back=< Cofnij +Install a package=Instaluj pakiet +Edit Installations=Edytuj Instalacje +You have chosen to install the package:=Wybrałeś do zainstalowania pakiet: +This package contains the following files:=Ten pakiet zawiera następujące pliki: +The package will be installed in the following program folder:=Pakiet zostanie zainstalowany do folderu: + +[PlayerNumber] +P1=P1 +P2=P2 + +[UnlockRewardType] +Song=Piosenka +Steps=Kroki +StepsType=TypKroków +Course=Maraton +Modifier=Modyfikator + +[RageDisplay_Legacy] +Obtain an updated driver from your video card manufacturer.=Zdobądź aktualny sterownik od producenta twojej karty graficznej. +GLDirect was detected. GLDirect is not compatible with this game and should be disabled.=Wykryto GLDirect. GLDirect nie jest kompatybilny z tą grą i powinien zostać wyłączony. + +[RageDisplay_D3D] +DirectX 8.1 or greater is not installed. You can download it from:=Brak zainstalowanego DirectX 8.1 (lub wyższego). Można go pobrać z: +Your system is reporting that Direct3D hardware acceleration is not available. Please obtain an updated driver from your video card manufacturer.=Twój system raportuje brak dostępnej akceleracji Direct3D. Zdobądź aktualny sterownik od producenta twojej karty graficznej. + +[RageDisplay] +SetVideoMode failed:=SetVideoMode nie udane: + +[Dialog-Prompt] +Prompt=Linia poleceń +OK=OK +&Don't display this message again=&Nie wyświetlaj tej informacji ponownie +Error=Błąd + +[Dialog-Uninstall Old Packages] +Uninstall Old Packages=Odinstaluj Stare Pakiety +&Yes=&Tak +&No=&Nie +Cancel=Przerwij +The following packages are already installed. It is strongly recommended that they be deleted before installing this package.=Poniższe pakiety są już zainstalowane. Mocno zalecane jest ich wcześniejsze skasowanie przed instalacja tego pakietu. +Delete old packages?=Skasować stare pakiety? + +[DeviceButton] +Home=Home +End=End +Up=Góra +Down=Dół +Space=Spacja +Shift=Shift +Ctrl=Ctrl +Alt=Alt +Insert=Insert +Delete=Delete +PgUp=PgUp +PgDn=PgDn +Backslash=Backslash + +[EditHelpDescription] +Move cursor=Przesuwanie kursora +Jump measure=Przeskocz pomiar +Select region=Zaznacz region +Jump to first/last beat=Skocz do pierwszego/ostatniego beat`u +Change zoom=Zmień powiększenie +Play=Odtwórz +Play current beat to end=Odtwórz od bieżącego beat`u do końca +Play whole song=Odtwórz całą piosenkę +Record=Nagraj +Set selection=Ustaw zaznaczenie +Toggle assist tick=Włącz tyknięcie pomocnicze +Next/prev steps of same StepsType=Następne/Poprzednie kroki tego samego Typu +Decrease/increase BPM at cur beat=Zmniejsz/Zwiększ BPM na bieżącym beat`cie +Decrease/increase stop at cur beat=Zmniejsz/Zwiększ Pauzę na bieżącym beat`cie +Decrease/increase music offset=Zmniejsz/Zwiększ Offset +Decrease/increase sample music start=Zmniejsz/Zwiększ początek podglądu +Decrease/increase sample music length=Zmniejsz/Zwiększ długość podglądu +Play sample music=Odtwórz podgląd +Add/Edit Background Change=Dodaj/Edytuj Zmianę Tła (Tylko w trybie Timing Piosenki) +Insert beat and shift down=Wstaw beat i przesuń w dół. +Shift BPM changes and stops down one beat=Przesuń zmiany BPM i przesuń w dół o jeden beat +Delete beat and shift up=Skasuj beat i przesuń w górę +Shift BPM changes and stops up one beat=Przesuń zmiany BPM i przesuń w górę o jeden beat +Cycle between tap notes=Przełącz rodzaj nuty +Lay mine=Stwórz minę +Lay lift=Stwórz lift +Add to/remove from right half=Dodaj/Usuń z prawej połowy +Switch Timing=Przełącz Timing +Switch player (Routine only)=Przełącz gracza (tylko w trybie Routine) + +[Grade] +Tier01=AAAA +Tier02=AAA +Tier03=AA +Tier04=A +Tier05=B +Tier06=C +Tier07=D +Tier08=D +Failed=F +None= + +[ScreenOptionsEditCourse] +-Empty-=-Puste- +Song=Piosenka +Steps=Kroki +minutes=minuty +You must enable at least %d songs.=Musisz włączyć przynajmniej %d piosenki. + +[LowLevelWindow_Win32] +OpenGL hardware acceleration is not available.=Sprzętowe przyspieszenie OpenGL niedostępne. + +[Premium] +Off=Wyłącz +DoubleFor1Credit=Double za 1 kredyt +2PlayersFor1Credit=2 Graczy z 1 kredyt + +[Stage] +1st=1sza +2nd=2ga +3rd=3cia +4th=4ta +5th=5ta +6th=6ta +Next=Następna +Final=Finał +Extra1=Ekstra +Extra2=Dodatkowa +Nonstop=Nonstop +Oni=Oni +Endless=Nieskończony +Event=Impreza +Demo=Demonstracja + +[JudgmentLine] +W1=Flawless +W2=Perfect +W3=Great +W4=Good +W5=Boo +Held=Held +MaxCombo=Max Combo +Miss=Miss + +[NativeLanguageNames] +Afar=Afar +Abkhazian=????? ?????? +Afrikaans=Afrikaans +Amharic=Amharic +Arabic=??????? +Assamese=Assamese +Aymara=Aymara +Azerbaijani=az?rbaycan +Bashkir=Bashkir +Byelorussian=?????????? +Bulgarian=????????? +Bihari=Bihari +Bislama=Bislama +Bengali=Bengali +Tibetan=Tibetan +Breton=Breton +Catalan=Catala +Corsican=Corsican +Czech=čeština +Welsh=Cymraeg +Danish=Dansk +German=Deutsch +Bhutani=Bhutani +Greek=???????? +English=English +Esperanto=Esperanto +Spanish=Espanol +Estonian=Eesti +Basque=euskera +Persian=????? +Finnish=Suomi +Fiji=Fiji +Faeroese=Faeroese +French=Français +Frisian=Frisian +Irish=Gaeilge +Gaelic=Gaelic +Galician=Galego +Guarani=Guarani +Gujarati=Gujarati +Hausa=Hausa +Hebrew=????? +Hindi=????? +Croatian=Hrvatski +Hungarian=Magyar +Armenian=??????? +Interlingua=Interlingua +Indonesian=Bahasa indonesia +Interlingue=Interlingue +Inupiak=Inupiak +Indonesian=Bahasa indonesia +Icelandic=Íslenska +Italian=Italiano +Hebrew=????? +Japanese=??? +Yiddish=Yiddish +Javanese=Javanese +Georgian=Georgian +Kazakh=????? +Greenlandic=Greenlandic +Cambodian=Cambodian +Kannada=????? +Korean=??? +Kashmiri=Kashmiri +Kurdish=Kurdish +Kirghiz=?????? +Latin=Latin +Lingala=Lingala +Laothian=Laothian +Lithuanian=Lietuviškai +Latvian=Latviešu +Malagasy=Malagasy +Maori=Maori +Macedonian=?????????? +Malayalam=Malayalam +Mongolian=Mongolian +Moldavian=Moldavian +Marathi=Marathi +Malay=Bahasa melayu +Maltese=Malti +Burmese=Burmese +Nauru=Nauru +Nepali=Nepali +Dutch=Nederlands +Norwegian=Norsk +Occitan=Occitan +Oromo=Oromo +Oriya=Oriya +Punjabi=Punjabi +Polish=Polski +Pashto=???? +Portuguese=portugues +Quechua=Quechua +Rhaeto-Romance=Rhaeto-Romance +Kirundi=Kirundi +Romanian=Română +Russian=Pycc??? +Kinyarwanda=Kinyarwanda +Sanskrit=Sanskrit +Sindhi=Sindhi +Sangro=Sangro +Serbo-Croatian=Serbo-Croatian +Singhalese=Singhalese +Slovak=Slovenčina +Slovenian=Slovenščina +Samoan=Samoan +Shona=Shona +Somali=Somali +Albanian=Shqip +Serbian=Srpski +Siswati=Siswati +Sesotho=Sesotho +Sudanese=Sudanese +Swedish=svenska +Swahili=Kiswahili +Tamil=Tamil +Tegulu=?????? +Tajik=Tajik +Thai=??????? +Tigrinya=Tigrinya +Turkmen=Turkmen +Tagalog=Tagalog +Setswana=Setswana +Tonga=Tonga +Turkish=T?rkçe +Tsonga=Tsonga +Tatar=Tatar +Twi=Twi +Ukrainian=?????????? +Urdu=???? +Uzbek=o'zbek +Vietnamese=Tie´ng Vie?t +Volapuk=Volapuk +Wolof=Wolof +Xhosa=isiXhosa +Yiddish=Yiddish +Yoruba=Yorubá +Chinese=?? +Zulu=isiZulu + +[ScreenPlayerOptions] +HeaderText=Wybierz modyfikatory +HeaderSubText=Utrudnij grę by sprawdzić swoje umiejętności! + +[ScreenSongOptions] +HeaderText=Opcje piosenki +HeaderSubText=Wybrałeś świetną piosenkę... teraz zatańczmy! + +[StageAward] +FullComboW3=Pełne Combo! +SingleDigitW3=Pojedyncza Cyfra\nGreat`ów! +OneW3=Jeden Great! +FullComboW2=Pełne Combo\nna Perfect`ach!! +SingleDigitW2=Pojedyncza Cyfra\nPerfectów`ów! +OneW2=Jeden Perfect!! +FullComboW1=Pełne Combo\nna Fantastic`ach !!! +80PercentW3=80% Great`ów! +90PercentW3=90% Great`ów!! +100PercentW3=100% Great`ów!!! + +[PeakComboAward] +1000=Szczytowe Combo 1000! +2000=Szczytowe Combo 2000! +3000=Szczytowe Combo 3000! +4000=Szczytowe Combo 4000! +5000=Szczytowe Combo 5000!! +6000=Szczytowe Combo 6000!! +7000=Szczytowe Combo 7000!! +8000=Szczytowe Combo 8000!! +9000=Szczytowe Combo 9000!! +10000=Szczytowe Combo 10000!!! + +[ScreenOptionsExportPackage] +HeaderText=Eksport Pakietów +HeaderSubText=Podziel się swoją twórczością z innymi + +[ScreenOptionsEdit] +HeaderText=Edycja Piosenek +HeaderSubText=Pokaż swoja kreatywność + +[ScreenMiniMenuEditHelp] +HeaderText=Pomoc do Edycji + +[ScreenMiniMenuMainMenu] +HeaderText=Menu Główne + +[ScreenMiniMenuAreaMenu] +HeaderText=Menu Zaznaczenia + +[ScreenMiniMenuStepsInformation] +HeaderText=Informacje o krokach + +[ScreenMiniMenuSongInformation] +HeaderText=Informacji Piosenki + +[ScreenMiniMenuBackgroundChange] +HeaderText=Zmiana Tła + +[ScreenMiniMenuInsertTapAttack] +HeaderText=Wstaw Atak + +[ScreenMiniMenuInsertCourseAttack] +HeaderText=Wstaw Atak + +[ScreenMiniMenuCourseDisplay] +HeaderText=Wyświetl Maratony + +[CourseUtil] +You must supply a name for your course.=Musisz nadać nazwę dla maratonu +The course name cannot contain any of the following characters: %s=Nazwa maratonu nie może zawierać znaków: %s +The name you chose conflicts with another course. Please use a different name.=Podana nazwa konfliktuje z już istniejącą. Proszę podać inną. +[ScreenProfileSave] +HeaderText= +[ScreenTestInput] +HeaderText=Test Kontrolerów +[ScreenMiniMenuContext] +HeaderText=! +[ScreenOptionsManageProfiles] +HeaderText=Profile +[ScreenOptionsSystemDirection] +HeaderText=Ustawienia Systemu +[ScreenOptionsUI] +HeaderText=Ustawienia Interfejsu +[ScreenOptionsArcade] +HeaderText=Opcje Automatowe +[ScreenOptionsInput] +HeaderText=Opcje Wejścia +[ScreenOptionsTheme] +HeaderText=Opcje Motywu Graficznego +[ScreenOptionsManageCourses] +HeaderText=Maratony +[ScreenEditOptions] +HeaderText= +[ScreenOptionsEditCourse] +HeaderText=Edycja Maratonów +HelpText=&MENUUP;&MENUDOWN; Poruszanie &MENULEFT;&MENURIGHT; Zmiana wartości +[ScreenOptionsCourseOverview] +HeaderText=Przegląd Maratonów +[ScreenSelectProfile] +HeaderText=Wybierz Profil +[ScreenSelectPlayStyle] +HeaderText=Wybierz Styl +[ScreenGameInformation] +HeaderText=Informacje +[StepsDisplay StepsType] +Dance_Single=Single +Dance_Double=Double +Dance_Couple=Couple +Dance_Solo=Solo +Dance_Routine=Routine +Dance_Threepanel=3 Panels +Pump_Single=Single +Pump_Double=Double +Pump_Halfdouble=Half-Double +Pump_Couple=Couple +Pump_Routine=Routine +Kb7_Single=KB7 +Ez2_Single=Single +Ez2_Double=Double +Ez2_Real=Real +Para_Single=Single +Ds3ddx_Single=Single +Bm_Single5=5 Klawiszy +Bm_Double5=10 Klawiszy +Bm_Single7=7 Klawiszy +Bm_Double7=14 Klawiszy +Maniax_Single=Single +Maniax_Double=Double +Techno_Single4=Single 4 +Techno_Single5=Single 5 +Techno_Single8=Single 8 +Techno_Double4=Double 4 +Techno_Double5=Double 5 +Pnm_Five=5 Przycisków +Pnm_Nine=9 Przycisków +Guitar_Five=5 Progów +Karaoke=Karaoke +Lights_Cabinet=Światła +[StepsListDisplayRow StepsType] +Dance_Single=Single +Dance_Double=Double +Dance_Couple=Couple +Dance_Solo=Solo +Dance_Routine=Routine +Dance_Threepanel=3panel +Pump_Single=Single +Pump_Double=Double +Pump_Halfdouble=Half-Double +Pump_Couple=Couple +Pump_Routine=Routine +Kb7_Single=KB7 +Ez2_Single=Single +Ez2_Double=Double +Ez2_Real=Real +Para_Single=Single +Ds3ddx_Single=Single +Bm_Single5=5 Keys +Bm_Double5=10 Keys +Bm_Single7=7 Keys +Bm_Double7=14 Keys +Maniax_Single=Single +Maniax_Double=Double +Techno_Single4=Single 4 +Techno_Single5=Single 5 +Techno_Single8=Single 8 +Techno_Double4=Double 4 +Techno_Double5=Double 5 +Pnm_Five=5 Button +Pnm_Nine=9 Button +Guitar_Five=5 Frets +Karaoke=Karaoke +Lights_Cabinet=Światła + +[ScreenHowToInstallSongs] +HeaderText=Instalowanie Piosenek + +[ThemePrefs] +IniFileMissing=Brak pliku ini. Nie mogę czytać ani zapisywać na dysk :( +UnknownPreference=Nieznane ustawienie "%s" + +[ThemePrefsRows] +ChoicesSizeMismatch=Opcje i Wartości mają różne rozmiary (%d, %d) +NoDefaultInValues=Ustawienie "%s" nie posiada wartości odpowiadającej domyślnej. +TypeMismatch=Niezgodność typów pomiędzy domyślną (%s) i wartością %d (%s) +>>>>>>> inne \ No newline at end of file diff --git a/Themes/default/Languages/pl.ini b/Themes/default/Languages/pl.ini new file mode 100755 index 0000000000..1416b30994 --- /dev/null +++ b/Themes/default/Languages/pl.ini @@ -0,0 +1,183 @@ +[Screen] +HelpText=&BACK; Wyjście &START; Zatwierdź &SELECT; Opcje &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; Wybierz + +[ScreenWithMenuElements] +HelpText=&BACK; Wyjście &START; Zatwierdź &MENULEFT;&MENURIGHT; Wybierz + +[ScreenTitleMenu] +HelpText=&BACK; Wyjście &START; Zatwierdź &MENUUP;&MENUDOWN; Wybierz +Network OK=Sieć OK +Offline=Brak połączenia +Connected to %s=Podłączony do %s +CurrentGametype=Tryb gry: %s +LifeDifficulty=Zużycie energii: %s +TimingDifficulty=Ocena trafień: %s + +[ScreenTitleJoin] +HelpText=Naciśnij &START; by rozpocząć grę +HelpTextJoin=Naciśnij &START; by rozpocząć grę +HelpTextWait=Wrzuć żeton... +EventMode=Tryb Imprezy +JointPremiumMain=Premia Łączona +JointPremiumSecondary=Dwóch graczy może grac za jeden kredyt! +DoublesPremiumMain=Podwójna Premia +DoublesPremiumSecondary=Graj w trybie Double za jeden kredyt! + +[ScreenDemonstration] +Demonstration=Demonstracja + +[ScreenQuickSetupOverview] +Explanation=Podstawowe ustawienia umożliwiają szybkie skonfigurowanie najczęściej używanych opcji + +[ScreenProfileLoad] +HelpText=... Ładowanie profili, proszę czekać ... + +[ScreenSelectProfile] +HelpText=&MENUUP;&MENUDOWN; Zmień profil &START; Wybierz/Dołącz &BACK; Odznacz + +[ScreenSelectMaster] +HelpText=&BACK; Wyjście &START; Zatwierdź / Dołącz &MENULEFT;&MENURIGHT; Wybierz + +[ScreenSelectPlayMode] +HelpText=&BACK; Wyjście &START; Zatwierdź / Dołącz &MENULEFT;&MENURIGHT; Wybierz +EasyExplanation=Tryb dla początkujących +HardExplanation=Dla ekspertów. +OldNormalExplanation=Nie za łatwo, nie za trudno. +NormalExplanation=Graj w swoje ulubione piosenki! +RaveExplanation=Bitwa dwóch graczy przeciwko sobie. +ExtendedExplanation=Kilka piosenek pod rząd. +OniExplanation=Prawdziwy test umiejętności. +EndlessExplanation=Tańcz aż padniesz. + +[ScreenSelectPlayStyle] +HelpText=&BACK; Wyjście &START; Zatwierdź &MENULEFT;&MENURIGHT; Wybierz + +[ScreenGameInformation] +HelpText=&BACK; Wyjście &START; Pomiń + +[ScreenSelectMusic] +HelpText=&BACK; Wyjście &START; Zatwierdź / Dołącz &SELECT; Magiczne kody &MENULEFT;&MENURIGHT; Wybierz::&AUXWHITE;+[LITERA] Sortowanie wg. [LITERY] +AlternateHelpText=&SELECT;+&MENULEFT;&MENURIGHT; Zmiana poziomu trudności &SELECT;+&START; Wybór trybu sortowania + +[ScreenSelectCourse] +HelpText=&BACK; Wyjście &START; Zatwierdź / Dołącz &SELECT; Magiczne kody &MENULEFT;&MENURIGHT; Sekwencja ::&UP;&DOWN;&UP;&DOWN; - inne tryby maratonu. + +[ScreenOptions] +HelpText=&BACK; Wyjście &START; Zatwierdź &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; Wybierz + +[ScreenStageInformation] +HelpText= + +[ScreenGameplay] +HelpText= + +[ScreenEvaluation] +HelpText=&BACK; Wyjście &START; Dalej &MENULEFT;+&MENURIGHT; or &SELECT; Screenshot +LifeDifficulty=Zużycie energii: %s +TimingDifficulty=Ocena trafień: %s + +[OptionTitles] +UserPrefAutoSetStyle=Automatycznie Ustaw Styl +UserPrefNotePosition=Pozycja Strzałek +UserPrefComboOnRolls=Narastające combo w Rolls +UserPrefComboUnderField=Combo Pod Strzałkami + +UserPrefGameplayShowScore=Pokazuj wyniki +UserPrefGameplayShowStepsDisplay=Pokazuj Kroki +UserPrefShowLotsaOptions=Ilość opcji +UserPrefLongFail=Tryb Fail`a +UserPrefFlashyCombo=Błyskające Combo +UserPrefGameplayFooter=Stopka Na Ekranie Gry + +[OptionExplanations] +UserPrefAutoSetStyle=Pozwala grze jednoczesne wyświetlenie trybów dla dwóch graczy a nie tylko dla jednego. Wprowadzenie zmiany możne wymagać restartu Stepmanii (lub naciśnięcia klawisza F2) +UserPrefNotePosition=Określa pozycje receptorów strzałek podczas gry. +UserPrefComboOnRolls=Włącza naliczanie licznika Combo w sposób narastający dla strzałek typu ROLL. +UserPrefComboUnderField=Określa czy wskaźnik Combo powinien być wyświetlany nad czy pod strzałkami. + + +UserPrefGameplayShowScore=Wyświetla lub ukrywa licznik punktów podczas gry. +UserPrefGameplayShowStepsDisplay=Wyświetla lub ukrywa statystykę strzałek podczas gry. +UserPrefShowLotsaOptions=Określa jak dużo modyfikatorów wyświetlić na ekranie opcji piosenki. +UserPrefLongFail=Określa długość czasu animacji ogrywanej po niezaliczanej piosence. Oryginalny (Długi) z SM-SSC, nowy (Krotki) +UserPrefFlashyCombo=Określa czy licznik Combo może błyskać czy nie. +UserPrefGameplayFooter=Włączona opcja wyświetla, ograniczająca widoczność nadlatujących strzałek, stopkę u dołu ekranu. + +ScoringType=Opcja pozwala na określenie metody naliczania punktacji. +Speed=Regulacja prędkości nadlatujących strzałek. +Accel=Zmiana ścieżki trasy która lecą strzałki. +Effect=Zmiana rozmiaru lub rodzaju ruchu strzałek lub ich receptorów/celów. +Appearance=Kontrola widoczności strzałek. +Turn=Zmiana choreografii stepchart`a po przez modyfikacje pozycji istniejących strzałek. +Insert=Zmiana choreografii stepchart`a po przez proceduralne dodanie nowych strzałek. +Holds=Zmienia cześć strzałki w HOLD`y +Mines=Dodanie lub usuniecie min. +PlayerAutoPlay=Program odgrywa piosenkę automatycznie +ScoreDisplay=Zmiana sposobu wyświetlania punktacji. +ProTiming=Zmiana sposobu wyświetlania dokładności trafienia w strzałkę. +Scroll=Modyfikacje kierunku ruchu strzałek. +NoteSkins=Wybór wyglądu grafiki strzałek/nut. +Remove=Usuwanie strzałek ze stepchart`a. Opcje ułatwiające ukończenie piosenki. Użycie dyskwalifikuje z rankingu. +Hide=Modyfikacja widoczności receptorów/strzałek celu +Persp=Tryby widoku nadlatujących strzałek. +Steps=Ustawienie poziomu trudności piosenki. +Characters=Wybór modelu tańczącej postaci w tle. +SaveToProfileHelp=Wymaga włączonego profilu, karty pamięci lub pendrive`a. +MusicRateHelp=Prędkość odtwarzania muzyki. +Attacks=Określa czy podczas gry będą użyte, nie będące częścią Maratonu, zdefiniowane w piosence, Ataki Modyfikatorowe. + +[StepsListDisplayRow StepsType] +Dance_Single=4 +Dance_Double=8 +Dance_Couple=8 +Dance_Solo=6 +Dance_Routine=8 +Dance_Threepanel=3 +Pump_Single=5 +Pump_Double=10 +Pump_Halfdouble=6 +Pump_Couple=5 +Pump_Routine=10 +Kb7_Single=7 +Ez2_Single=ES +Ez2_Double=ED +Ez2_Real=ER +Para_Single=PS +Ds3ddx_Single=XS +Bm_Single5=5 +Bm_Double5=10 +Bm_Single7=7 +Bm_Double7=14 +Maniax_Single=MS +Maniax_Double=MD +Techno_Single4=4 +Techno_Single5=5 +Techno_Single8=8 +Techno_Double4=D4 +Techno_Double5=D5 +Pnm_Five=5 +Pnm_Nine=9 +Guitar_Five=5 +Karaoke=V +Lights_Cabinet=! + +[ScreenHowToInstallSongs] +BodyHeader=Jak Zdobyć i Zainstalować Piosenki do Stepmanii +Finding Songs=Gdzie Znaleźć Piosenki +Installing Songs=Jak Zainstalować Piosenki +Importing Songs=Importowanie piosenek z zainstalowanych wcześniej wersji Stepmanii +Reload Songs=Przeładowanie Piosenek +Exit=Powrót do Ekranu Startowego + + +Explanation-WhereToFind=Uruchamia stronę www z informacja miejscach i sposobach na znalezienie piosenek. +Explanation-HowToInstall=Uruchamia stronę www z instrukcja instalacji piosenek. +Explanation-AdditionalFolders=Jeśli masz zainstalowane inne instancje Stepmanii, możesz użyć opcji AdditionalFolder z pliku ustawień by załadować je bez konieczności ich kopiowania. +Explanation-ReloadSongs=Ta czynność jest konieczna jeśli dodano/zmieniono/osunięto piosenki w trakcie pracy programu. +Explanation-Exit=Powrót do Ekranu Startowego. + +[OptionNames] +Custom=Specjalny + +[ScreenTestInput] +HelpText=Przytrzymaj &BACK; lub &START; aby wyjść. \ No newline at end of file