Merge pull request #1 from stepmania/master

Update
This commit is contained in:
Jonathan Berney
2014-10-30 14:26:45 -07:00
46 changed files with 2380 additions and 1768 deletions
+95 -81
View File
@@ -1,49 +1,67 @@
.dirstamp
.deps
*.orig
*.rej
*~
# Traditional Compilation File Stuff.
*.o
tests/*.err
ffmpeg-*
*.ncb
*.suo
*.tlog
*.lastbuildstate
*.unsuccessfulbuild
*.log
*.ipch
*.obj
*.app
*.dep
*.idb
*.pdb
*.exp
*.dmg
*.orig
*.sdf
*.opensdf
# Text Editor Based Items
___*
*~
*.log
*.sublime-project
*.sublime-workspace
*.old
# Repository Files
*.orig
.git
.hg
.hgignore
.hgtags
.svn
.cvsignore
.DS_Store
*.diff
*.patch
Thumbs.db
GameData.smzip
config.log
config.status
# Mac Programming Files
*.pbxuser
*.user
*.mode1v3
PBProject/build
Xcode/build
Xcode/*.xcodeproj/xcuserdata/
*.xcodeproj/xcuserdata
*.xcodeproj/project.xcworkspace
*.xcscheme
WorkspaceSettings.xcsettings
UserInterfaceState.xcuserstate
*.xccheckout
contents.xcworkspacedata
xcschememanagement.plist
PBProject/Hardware.plist
lib*_link.a
# Mac General Files
*.app
*.dmg
.DS_Store
# Visual Studio
*.pdb
*.sdf
*.opensdf
*.suo
*.exp
*.ilk
# Windows General Files
Thumbs.db
*.exe
*.vdi
*.dll
nsis_strings_temp.inc
# Linux General Files
.dirstamp
Makefile
stepmania
Makefile.in
config.status
_build/*
aclocal.m4
autoconf/*
@@ -54,33 +72,22 @@ src/Makefile
src/config.h
src/config.h.in
src/stamp-h1
Docs/doxygen
PBProject/build
Xcode/build
Xcode/*.xcodeproj/xcuserdata/
*.xcodeproj/xcuserdata
*.xcodeproj/project.xcworkspace
src/build-*
src/Release-*
src/libtomcrypt/build-*
src/libtomcrypt/Release-*
src/libtomcrypt/Debug
src/libtommath/build-*
src/libtommath/Release-*
src/libtommath/Debug
src/*.old
*/.deps
*/.dirstamp
src/*.a
src/*.so
GtkModule.so
# StepMania Specific
*.smzip
ver.cpp
lib*_link.a
Cache/
Save/
Logs/
Songs/*
Screenshots/
portable.ini
Docs/doxygen
Data/UserPrefs
Data/uPrefs
Data/GamePrefs/*.cfg
Data/Static.ini
PBProject/Hardware.plist
Themes/pump
Themes/pump-*
Themes/optical-release
@@ -89,35 +96,6 @@ Themes/ultralight
Themes/test
src/version.bin
src/verstub.cpp
Songs/*
*.dmg
.git
*.smzip
nsis_strings_temp.inc
Data/SpeedMods.txt
Program/StepMania*.lib
crashinfo.txt
Utils/temp*
*.lnk
BuildLog.htm
*.pch
Cache/
Save/
Logs/
Screenshots/
portable.ini
*.sublime-project
*.sublime-workspace
*.xcscheme
WorkspaceSettings.xcsettings
UserInterfaceState.xcuserstate
*.xccheckout
contents.xcworkspacedata
xcschememanagement.plist
*.swp
*.pc
*.dll
*.d
bundle/ffmpeg/.config
bundle/ffmpeg/.version
bundle/ffmpeg/config.*
@@ -131,3 +109,39 @@ bundle/ffmpeg/*/*.def
bundle/ffmpeg/*/*.orig.def
bundle/ffmpeg/*/*.dll.a
bundle/ffmpeg/*/*.lib
src/build-*
src/Release-*
src/libtomcrypt/build-*
src/libtomcrypt/Release-*
src/libtomcrypt/Debug
src/libtommath/build-*
src/libtommath/Release-*
src/libtommath/Debug
src/*.a
src/*.so
ffmpeg-*
Data/SpeedMods.txt
crashinfo.txt
Utils/temp*
Program/StepMania*.lib
# Unknown File Types
.deps
*.rej
tests/*.err
*.ncb
*.tlog
*.lastbuildstate
*.unsuccessfulbuild
*.ipch
*.dep
*.idb
*.user
*.mode1v3
*.vdi
*.lnk
BuildLog.htm
*.pch
*.swp
*.pc
*.d
+1 -1
View File
@@ -1,7 +1,7 @@
local Color1 = color(Var "Color1");
local a = LoadActor(Var "File1") .. {
OnCommand=cmd(cropto,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color1;effectclock,"music");
OnCommand=cmd(cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;effectclock,"music");
GainFocusCommand=cmd(play);
LoseFocusCommand=cmd(pause);
};
+2 -2
View File
@@ -2,12 +2,12 @@ local Color1 = color(Var "Color1");
local Color2 = color(Var "Color2");
local a1 = LoadActor(Var "File1") .. {
OnCommand=cmd(cropto,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color1;effectclock,"music");
OnCommand=cmd(cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;effectclock,"music");
GainFocusCommand=cmd(play);
LoseFocusCommand=cmd(pause);
};
local a2 = LoadActor(Var "File2") .. {
OnCommand=cmd(cropto,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;diffuse,Color2;effectclock,"music");
OnCommand=cmd(cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color2;effectclock,"music");
GainFocusCommand=cmd(play);
LoseFocusCommand=cmd(pause);
};
+4 -4
View File
@@ -3,10 +3,10 @@ local Color2 = color(Var "Color2");
-- Alternating files being played back at once
local t = Def.ActorFrame {
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color2;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;rate,0.25) };
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color2;rate,0.25) };
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color2;rate,0.25) };
LoadActor(Var "File2") .. { OnCommand=cmd(x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color1;rate,0.25) };
LoadActor(Var "File1") .. { OnCommand=cmd(x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);cropto,SCREEN_WIDTH/2,SCREEN_HEIGHT/2;diffuse,Color2;rate,0.25) };
};
return t
+11 -1
View File
@@ -2,7 +2,17 @@ local Color1 = color(Var "Color1");
local t = Def.ActorFrame {
LoadActor(Var "File1") .. {
OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;scale_or_crop_background;diffuse,Color1;loop,false;effectclock,"music");
OnCommand=function(self)
self:xy(SCREEN_CENTER_X,SCREEN_CENTER_Y)
self:scale_or_crop_background()
self:diffuse(Color1)
if self.loop ~= nil then
self:loop(false)
-- make videos start at beginning to prevent sticking on last frame
self:position(0)
end
self:effectclock("music")
end;
GainFocusCommand=cmd(play);
LoseFocusCommand=cmd(pause);
};
+9 -1
View File
@@ -2,7 +2,15 @@ local Color1 = color(Var "Color1");
local t = Def.ActorFrame {
LoadActor(Var "File1") .. {
OnCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;scale_or_crop_background;diffuse,Color1;position,0;effectclock,"music");
OnCommand=function(self)
self:xy(SCREEN_CENTER_X,SCREEN_CENTER_Y)
self:scale_or_crop_background()
self:diffuse(Color1)
if self.position ~= nil then
self:position(0)
end
self:effectclock("music")
end;
GainFocusCommand=cmd(play);
LoseFocusCommand=cmd(pause);
};
+29
View File
@@ -4,6 +4,35 @@ The StepMania 5 Changelog covers all post-sm-ssc changes. For a list of changes
from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt.
________________________________________________________________________________
2014/10/23
----------
* [Global] approach, multiapproach, lerp, and lerp_color lua functions added.
2014/10/20
----------
* [StageStats] GetStepsSeconds function added.
* [Steps] If an unrecognized step type is saved, preserve that step instead of
deleting it. A warning will be placed in the log file during song load.
================================================================================
StepMania 5.0 beta 4a | 20141015
--------------------------------------------------------------------------------
2014/10/19
----------
* [BackgroundEffects] Fixed errors in StretchNoLoop and StretchRewind.
2014/10/13
----------
* [NoteDisplay] Var Player and Var Controller work for non-receptor arrows. [hanubeki]
* [Mac OS X] Allow StepMania to be built and run in Yosemite.
2014/10/11
----------
* [NoteDisplay] Add two noteskin metrics, {PartName}NoteColorType and
{PartName}NoteColorCount. View https://github.com/stepmania/stepmania/pull/328
for more information. [hanubeki]
================================================================================
StepMania 5.0 beta 4 | 20140930
--------------------------------------------------------------------------------
+5
View File
@@ -203,6 +203,7 @@
<Function name='WriteGamePrefToFile'/>
<Function name='WritePrefToFile'/>
<Function name='Year'/>
<Function name='approach'/>
<Function name='assert'/>
<Function name='clamp'/>
<Function name='class'/>
@@ -219,11 +220,14 @@
<Function name='ipairs'/>
<Function name='ivalues'/>
<Function name='join'/>
<Function name='lerp'/>
<Function name='lerp_color'/>
<Function name='load'/>
<Function name='loadfile'/>
<Function name='loadstring'/>
<Function name='mbstrlen'/>
<Function name='module'/>
<Function name='multiapproach'/>
<Function name='newproxy'/>
<Function name='next'/>
<Function name='pairs'/>
@@ -1584,6 +1588,7 @@
<Function name='GetPossibleSongs'/>
<Function name='GetStage'/>
<Function name='GetStageIndex'/>
<Function name='GetStepsSeconds'/>
<Function name='OnePassed'/>
<Function name='PlayerHasHighScore'/>
</Class>
+26 -8
View File
@@ -31,6 +31,10 @@ save yourself some time, copy this for undocumented things:
<Function name='Alpha' theme='_fallback' return='color' arguments='color c, float percent'>
[02 Colors.lua] Returns a <code>color</code> with the specified alpha.
</Function>
<Function name='approach' return='float' arguments='float current, float goal, float speed'>
Use this to make a current value approach a goal value at the given speed. Speed must not be negative. The value will not overshoot the goal.<br />
Note: When you see the error "approach: speed 1 is negative." it means that the speed value passed was negative. The 1 is there because approach and multiapproach use the same internal function and can be ignored when using approach.
</Function>
<Function name='ArbitrarySpeedMods' theme='_fallback' return='LuaOptionRow' arguments=''>
[03 CustomSpeedMods.lua]
</Function>
@@ -136,7 +140,7 @@ save yourself some time, copy this for undocumented things:
[03 Gameplay.lua]
</Function>
<Function name='fapproach' theme='_fallback' return='float' arguments='float val, float other_val, float to_move'>
[02 Utilities.lua]
[02 Utilities.lua] Old name for approach.
</Function>
<Function name='FindSelection' theme='_fallback' return='int' arguments='table list'>
[02 Utilities.lua] Return the index of a true value in <code>list</code>.
@@ -327,6 +331,12 @@ save yourself some time, copy this for undocumented things:
<Function name='JudgmentLineToStrokeColor' theme='_fallback' return='color' arguments='JudgmentLine jl'>
[02 Colors.lua]
</Function>
<Function name='lerp' return='float' arguments='float percent, float start, float end'>
Returns a number linearly interpolated between start and end by percent.
</Function>
<Function name='lerp_color' return='color' arguments='float percent, color start, color end'>
Same as lerp, but for colors. All channels will reach the end of the interpolation at the same time.
</Function>
<Function name='LoadActor' return='ActorDef' arguments='string sPath, ...'>
Returns an Actor definition for the actor at <code>sPath</code>. If <code>sPath</code> points to a Lua file, any additional arguments will be passed to that script.
</Function>
@@ -369,6 +379,11 @@ save yourself some time, copy this for undocumented things:
<Function name='MonthToString' return='string' arguments='Month m'>
Returns Month <code>m</code> as a string.
</Function>
<Function name='multiapproach' return='table' arguments='table currents, table goals, table speeds'>
Similar to approach, but operates on tables of values instead of single values. This will modify the contents of <code>currents</code> in place, as well as returning <code>currents</code>.<br />
<code>currents</code>, <code>goals</code>, and <code>speeds</code> must all be the same size and contain only numbers.<br />
Note: When you see the error "approach: speed 1 is negative." it means that a speed value passed was negative. The 1 tells you which entry in the table was invalid.
</Function>
<Function name='next' return='void' arguments='table t, int index'>
"Allows a program to traverse all fields of a table. Its first argument is a
table and its second argument is an index in this table.
@@ -969,7 +984,7 @@ save yourself some time, copy this for undocumented things:
Sets the Actor's alpha level to <code>fAlpha</code>, where <code>fAlpha</code> is in the range 0..1.
</Function>
<Function name='diffuseblink' return='void' arguments=''>
Makes the Actor switch between two colors immediately.
Makes the Actor switch between two colors immediately. See Themerdocs/effect_colors.txt for an example.
</Function>
<Function name='diffusebottomedge' return='void' arguments=''>
Sets the Actor's bottom edge color to <code>c</code>.
@@ -987,13 +1002,13 @@ save yourself some time, copy this for undocumented things:
Sets the Actor's lower right corner color to <code>c</code>.
</Function>
<Function name='diffuseramp' return='void' arguments=''>
Makes the Actor switch between two colors, jumping back to the first after reaching the second.
Makes the Actor switch between two colors, jumping back to the first after reaching the second. See Themerdocs/effect_colors.txt for an example.
</Function>
<Function name='diffuserightedge' return='void' arguments='color c'>
Sets the Actor's right edge color to <code>c</code>.
</Function>
<Function name='diffuseshift' return='void' arguments=''>
Makes the Actor shift between two colors smoothly.
Makes the Actor shift between two colors smoothly. See Themerdocs/effect_colors.txt for an example.
</Function>
<Function name='diffusetopedge' return='void' arguments='color c'>
Sets the Actor's top edge color to <code>c</code>.
@@ -1129,13 +1144,13 @@ save yourself some time, copy this for undocumented things:
Sets the Actor's glow color.
</Function>
<Function name='glowblink' return='void' arguments=''>
Makes the Actor glow between two colors immediately.
Makes the Actor glow between two colors immediately. See Themerdocs/effect_colors.txt for an example.
</Function>
<Function name='glowramp' return='void' arguments=''>
Makes the Actor glow between two colors smoothly, jumping back to the first at the end.
Makes the Actor glow between two colors smoothly, jumping back to the first at the end. See Themerdocs/effect_colors.txt for an example.
</Function>
<Function name='glowshift' return='void' arguments=''>
Makes the Actor glow between two colors smoothly.
Makes the Actor glow between two colors smoothly. See Themerdocs/effect_colors.txt for an example.
</Function>
<Function name='halign' return='void' arguments='float fAlign'>
Set the fractional horizontal alignment of the Actor according to <code>fAlign</code> which should be a float in the range 0..1. An alignment of 0 is left aligned while an alignment of 1 is right aligned. See <Link function='horizalign' /> for the common case.
@@ -1192,7 +1207,7 @@ save yourself some time, copy this for undocumented things:
Basically creates a command named <code>!sMessageName</code> (Note the ! at the beginning. The source code says this: "Hack: use "!" as a marker to broadcast a command, instead of playing a command, so we don't have to add yet another element to every tween state for this rarely-used command.")
</Function>
<Function name='rainbow' return='void' arguments=''>
Makes the Actor change colors continually using colors of the rainbow.
Makes the Actor change colors continually using colors of the rainbow. Each channel follows a cosine wave, red starts at 0, green starts at 2pi/3, and blue starts at 4pi/3.
</Function>
<Function name='roll' return='void' arguments='float fRoll'>
Sets the roll of this Actor to <code>fRoll</code>.
@@ -2464,6 +2479,9 @@ save yourself some time, copy this for undocumented things:
<Function name='GetStageIndex' return='int' arguments=''>
Returns the current stage index.
</Function>
<Function name='GetStepsSeconds' return='float' arguments=''>
Returns the current StepsSeconds, which is the time value used to set the samples in a player's life record.
</Function>
<Function name='GetStageSeed' return='int' arguments=''>
Return the random seed for the current stage.
</Function>
+16
View File
@@ -0,0 +1,16 @@
General note on functions that use effect colors:
diffuseblink, diffuseramp, diffuseshift, glowblink, glowramp, and glowshift all use the two effect colors.
They set the effect colors to white when called, so you should call effectcolor1 and effectcolor2 afterwards to set the effect colors to the colors you want.
You should also call effectperiod to set the effect period if you don't want the default of 1.
Example:
Def.Quad{
Name= "glow quad test", InitCommand= function(self)
self:setsize(40, 40)
self:glowshift()
self:effectcolor1(color("#dc322f"))
self:effectcolor2(color("#2aa198"))
self:effectperiod(4)
self:xy(_screen.cx, _screen.cy)
end
}
+12 -15
View File
@@ -1,23 +1,18 @@
Stepmania 5系本体用 日本語化セット10(2012/04/22)
Stepmania 5系本体用 日本語化セット15(2014/10/01)
作者:ナイラー
-----------
Stepmania5系本体では従来の日本語テーマ、および日本語ランゲージファイルが使用できなくなっています。
個人的に日本語が見えているほうが安心できるので、とりあえずファイルを製作してみました。
-----------
以下のファイルが同梱されています。
・fallbackja.ini(_fallbackテーマ用日本語ランゲージファイル) Ver 1.06-E
themeja.ini(デフォルトテーマ用日本語ランゲージファイル) Ver 1.04-B
・fallback20141002.ini(_fallbackテーマ用日本語ランゲージファイルVer 2)
default20141002.ini(デフォルトテーマ用日本語ランゲージファイルVer 2)
-----------
今回の更新点
☆今回からalpha 2対応。むしろalpha 1a以下非対応のほうが正確か
fallbackja.iniに対して
エディット画面の左ペインを書き換え
 ・Vキーでお邪魔設定に入ることはできなくなった模様
・グルーブレーダーの各要素の日本語を書き換え。
・その他、エディット関連をわかりやすい日本語に変えたつもり。
themeja.iniに対して
・バージョンアップなし。
(Stepmania用小夏、今回はなし。パッケージングするには重い。)
・beta 4での追加オプションを補完
 (おじゃま周りとプロファイル周りはまだ手が回ってないです)
Speedmodの新仕様に対応しました
・その他、一部のおかしかった部分を修正したり
-----------
それぞれのファイルは、次の場所に配置してください。
@@ -40,6 +35,7 @@ themeja.ini
----------
For international Stepmania distributors and players:
My Japanese language pack (means "fallbackja.ini" and "themeja.ini") has no interception for your use.
You can redistribute these or remake from these two file(Included in Themes or Stepmania(s) is also OK).
If you made a bit change at least,you can redistribute them fixed files on your own license(s).
@@ -48,8 +44,9 @@ If not,you must keep their original license(redistributable,remakable) when you
Sorry for my POOR English X(
----------
何かありましたらTwitterの@Niler_jp
何かありましたらhttp://alumivision.blog.shinobi.jp/
またはniler_jpn@live.jpまで。
You can contact me on twitter(@Niler_jp),
or my mail-address:niler_jpn@live.jp.
You can contact me on http://alumivision.blog.shinobi.jp/,
or my mail-address:niler_jpn@live.jp.
+18
View File
@@ -25,38 +25,56 @@ TapNoteAdditionTextureCoordOffsetX=0
TapNoteAdditionTextureCoordOffsetY=0
TapNoteNoteColorTextureCoordSpacingX=0
TapNoteNoteColorTextureCoordSpacingY=0
TapNoteNoteColorCount=8
TapNoteNoteColorType=Denominator
TapMineAdditionTextureCoordOffsetX=0
TapMineAdditionTextureCoordOffsetY=0
TapMineNoteColorTextureCoordSpacingX=0
TapMineNoteColorTextureCoordSpacingY=0
TapMineNoteColorCount=8
TapMineNoteColorType=Denominator
TapLiftAdditionTextureCoordOffsetX=0
TapLiftAdditionTextureCoordOffsetY=0
TapLiftNoteColorTextureCoordSpacingX=0
TapLiftNoteColorTextureCoordSpacingY=0
TapLiftNoteColorCount=8
TapLiftNoteColorType=Denominator
TapFakeAdditionTextureCoordOffsetX=0
TapFakeAdditionTextureCoordOffsetY=0
TapFakeNoteColorTextureCoordSpacingX=0
TapFakeNoteColorTextureCoordSpacingY=0
TapFakeNoteColorCount=8
TapFakeNoteColorType=Denominator
HoldHeadAdditionTextureCoordOffsetX=0
HoldHeadAdditionTextureCoordOffsetY=0
HoldHeadNoteColorTextureCoordSpacingX=0
HoldHeadNoteColorTextureCoordSpacingY=0
HoldHeadNoteColorCount=8
HoldHeadNoteColorType=Denominator
HoldTopCapAdditionTextureCoordOffsetX=0
HoldTopCapAdditionTextureCoordOffsetY=0
HoldTopCapNoteColorTextureCoordSpacingX=0
HoldTopCapNoteColorTextureCoordSpacingY=0
HoldTopCapNoteColorCount=8
HoldTopCapNoteColorType=Denominator
HoldBodyAdditionTextureCoordOffsetX=0
HoldBodyAdditionTextureCoordOffsetY=0
HoldBodyNoteColorTextureCoordSpacingX=0
HoldBodyNoteColorTextureCoordSpacingY=0
HoldBodyNoteColorCount=8
HoldBodyNoteColorType=Denominator
HoldBottomCapAdditionTextureCoordOffsetX=0
HoldBottomCapAdditionTextureCoordOffsetY=0
HoldBottomCapNoteColorTextureCoordSpacingX=0
HoldBottomCapNoteColorTextureCoordSpacingY=0
HoldBottomCapNoteColorCount=8
HoldBottomCapNoteColorType=Denominator
HoldTailAdditionTextureCoordOffsetX=0
HoldTailAdditionTextureCoordOffsetY=0
HoldTailNoteColorTextureCoordSpacingX=0
HoldTailNoteColorTextureCoordSpacingY=0
HoldTailNoteColorCount=8
HoldTailNoteColorType=Denominator
StartDrawingHoldBodyOffsetFromHead=0
+1 -1
View File
@@ -1 +1 @@
Common Normal
_open sans semibold 24px
File diff suppressed because it is too large Load Diff
+1 -23
View File
@@ -191,8 +191,6 @@ end
-- ColorToHex(c)
-- Takes in a normal color("") and returns the hex representation.
-- Adapted from code in LuaBit (http://luaforge.net/projects/bit/),
-- which is MIT licensed and copyright (C) 2006~2007 hanzhao.
function ColorToHex(c)
local r = c[1]
local g = c[2]
@@ -200,27 +198,7 @@ function ColorToHex(c)
local a = HasAlpha(c)
local function hex(value)
value = math.ceil(value)
local hexVals = { 'A', 'B', 'C', 'D', 'E', 'F' }
local out = ""
local last = 0
while(value ~= 0) do
last = math.mod(value, 16)
if(last < 10) then
out = tostring(last) .. out
else
out = hexVals[(last-10)+1] .. out
end
value = math.floor(value/16)
end
if(out == "") then
return "00"
end
return string.format( "%02X", tonumber(out,16) )
return ("%02X"):format(value)
end
local rX = hex( scale(r, 0, 1, 0, 255) )
@@ -66,6 +66,8 @@ function wrap(val,n)
end
function fapproach(val, other_val, to_move)
-- This does not use the (faster) C++ side version of approach because I
-- don't want to find out how many themes pass a negative speed. -Kyz
if val == other_val then
return val -- already done!
end
+2 -2
View File
@@ -706,7 +706,7 @@ PercentUseRemainder=false
ApplyScoreDisplayOptions=true
DancePointsDigits=5
#
Format="%2d"
Format=FormatPercentScore
#
RemainderFormat=
#
@@ -1399,7 +1399,7 @@ DancePointsDigits=1
PercentUseRemainder=true
ApplyScoreDisplayOptions=false
FormatPercentScore=FormatPercentScore
Format=
Format=FormatPercentScore
[SoundEffectControl]
LockToHold=false
+135 -135
View File
@@ -1,82 +1,84 @@
;Stepmania 5.0系本体default用日本語化ファイル Ver 1.04-B
// Stepmania用日本語言語パック(defaultテーマ用) Ver.2-20141002
//一部プレイオプションに手を入れています
[Screen]
HelpText=&BACK; 戻る &START; 決定 &SELECT; オプション &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; 選択
HelpText=&BACK; 戻る &START; 決定 &SELECT; オプション &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; カーソル移動
[ScreenWithMenuElements]
HelpText=&BACK; 戻る &START; 決定 &MENULEFT;&MENURIGHT; 選択
HelpText=&BACK; 戻る &START; 決定 &MENULEFT;&MENURIGHT; カーソル移動
StageCounter=%s Stage
EventStageCounter=Stage %03i
[ScreenTitleMenu]
HelpText=&BACK; 戻る &START; 決定 &MENUUP;&MENUDOWN; 選択
HelpText=&BACK; 戻る &START; 決定 &MENUUP;&MENUDOWN; カーソル移動
Network OK=オンライン
Offline=オフライン
Connected to %s=%s に接続しました
CurrentGametype=現在シミュレート中のゲーム: %s
LifeDifficulty=ゲージの厳しさ: %s
TimingDifficulty=判定の厳しさ: %s
%i Songs (%i Groups), %i Courses=プレイアブル%i 曲 (%i グループ), %i コース
Connected to %s=接続先: %s
CurrentGametype=ゲームタイプ: %s
LifeDifficulty=ライフレベル: %s
TimingDifficulty=判定レベル: %s
%i Songs (%i Groups), %i Courses=%i 曲 (%i グループ), %i コース
[ScreenTitleJoin]
HelpText=&START; プレイ
HelpTextJoin=&START; プレイ
HelpText=Press &START; to Play
HelpTextJoin=Press &START; to Play
HelpTextWait=Insert Credit(s)
EventMode=イベントモード
JointPremiumMain=ジョイントプレミアム!!
JointPremiumSecondary=1クレジットで2人遊べます
DoublesPremiumMain=ダブルプレミアム!
DoublesPremiumSecondary=1クレジットでダブルプレーができます
JointPremiumMain=Joint Premium!
JointPremiumSecondary=ただいま1クレジットで2人プレイができます
DoublesPremiumMain=Doubles Premium!
DoublesPremiumSecondary=ただいま1クレジットでダブルプレーができます
[ScreenDemonstration]
Demonstration=Demonstration
%s - %s [from %s]=%s - %s\n[from %s]
[ScreenQuickSetupOverview]
Explanation=よく使う設定項目をまとめています。「MORE OPTION」で細かいオプションを変更できます。
Explanation=よく使うオプションをまとめています。
[ScreenProfileLoad]
HelpText=プロファイルデータを読み込んでいます。
HelpText=プロファイル読み込み中、しばらくお待ちください …
[ScreenSelectProfile]
%d Song Played=%d曲プレイ済み
%d Songs Played=%d曲プレイ済み
PressStart=&START; 参加
HelpText=&MENUUP;&MENUDOWN; プロファイルを切り替える &START; 決定 / 参加 &BACK; キャンセル
%d Song Played=プレイ済み:%d曲
%d Songs Played=プレイ済み:%d曲
PressStart=&START;を押すと\nエントリーします
HelpText=&MENUUP;&MENUDOWN; プロファイル選択 &START; 決定/エントリー &BACK; キャンセル/戻る
[ScreenSelectMaster]
HelpText=&BACK; 戻る &START; 決定 / 参加 &MENULEFT;&MENURIGHT; 選択
HelpText=&BACK; 戻る &START; 選択 / エントリー &MENULEFT;&MENURIGHT; カーソル移動
[ScreenSelectPlayMode]
HelpText=&BACK; 戻る &START; 決定 / 参加 &MENULEFT;&MENURIGHT; 選択
EasyExplanation=初心者向けモードです。まずはプレイしてみよう。
OldNormalExplanation=中級者向けモードです。十分に慣れてきたならこちら。
HardExplanation=上級者向けのモードです。音感冴えわたるあなたに
NormalExplanation=1曲ずつ選択してプレイするモードです。
RaveExplanation=対戦モードです。相手の邪魔にめげずノリ続けてください
NonstopExplanation=何曲かを連続してプレイするモードです。
OniExplanation=譜面処理力を問う、オプションが使用できないコースです。
EndlessExplanation=ゲージが尽きるまで、ひたすらプレイするモードです。
HelpText=&BACK; 戻る &START; 選択 / エントリー &MENULEFT;&MENURIGHT; カーソル移動
EasyExplanation=初心者向けモードです。
HardExplanation=上級者向けモードです。
OldNormalExplanation=中級者向けモードです。
NormalExplanation=一曲ずつ選択してステージクリアを目指す通常モードです
RaveExplanation=おじゃまを送り付けながら対戦相手と競うモードです。
NonstopExplanation=何曲かを1セットにしてプレイする上級者モードです。
OniExplanation=ライフ制で1セットの曲をプレイする超上級者用モードです
EndlessExplanation=ゲームオーバーまでひたすらプレイし続けるモードです。
[ScreenSelectPlayStyle]
HelpText=&BACK; 戻る &START; 決定 &MENULEFT;&MENURIGHT; 選択
HelpText=&BACK; 戻る &START; 決定 &MENULEFT;&MENURIGHT; カーソル移動
[ScreenGameInformation]
HelpText=&BACK; 戻る &START; スキップ
[ScreenSelectMusic]
NEW!=NEW!
Press Start For Options=&START;プレイオプション選択画面へ
Entering Options=プレイオプション選択
HelpText=&BACK; 戻る &START; 選択 / 参加 &SELECT; パスコード &MENULEFT;&MENURIGHT; 選択::&UP;&DOWN;&UP;&DOWN; ソート画面呼び出し
AlternateHelpText=&SELECT;+&MENULEFT;&MENURIGHT; 譜面難度変更 &SELECT;+&START; クイックソート
Press Start For Options=&START;を押すとプレイオプション画面へ移行します
Entering Options=Entering Options
HelpText=&BACK; 戻る &START; 決定 / エントリー &SELECT; ショートカット::&MENUUP;か&MENUDOWN;の二回押し 譜面選択&MENULEFT;&MENURIGHT; 選択::&UP;&DOWN;&UP;&DOWN; ソート切り替え &AUXWHITE;+[キーボード] 曲名ソートにしてその文字のフォルダを開く
AlternateHelpText=&SELECT;+&MENULEFT;&MENURIGHT; 譜面選択 &SELECT;+&START; クイックソート
[ScreenSelectCourse]
HelpText=&BACK; 戻る &START; 決定 / 参加 &SELECT; パスコード &MENULEFT;&MENURIGHT; 選択::&UP;&DOWN;&UP;&DOWN; ソート画面呼び出し
HelpText=&BACK; 戻る &START; 決定 / エントリー &SELECT; ショートカット &MENULEFT;&MENURIGHT; コース選択::&UP;&DOWN;&UP;&DOWN; ソート切り替え
[ScreenOptions]
HelpText=&BACK; 戻る &START; 決定 &SELECT;&MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; 選択
HelpText=&BACK; 戻る &START; 選択 &SELECT; 前の項目に戻る &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; カーソル移動
Disqualified=スコア集計対象外になるオプションが選択されています
[ScreenStageInformation]
HelpText=
@@ -85,87 +87,66 @@ HelpText=
HelpText=
[ScreenEvaluation]
HelpText=&BACK; 戻る &START; Move On &MENULEFT;+&MENURIGHT; or &SELECT; スクリーンショット
LifeDifficulty=ゲージの厳しさ: %s
TimingDifficulty=判定の厳しさ: %s
MachineRecord=筐体中 %i!
PersonalRecord=セルフレコード %i!
HelpText=&BACK; 戻る &START; 次へ &MENULEFT;+&MENURIGHT;または&SELECT; スクリーンショット
LifeDifficulty=ライフレベル: %s
TimingDifficulty=判定レベル: %s
MachineRecord=Machine Record #%i!
PersonalRecord=Personal Record #%i!
ITG DP:=ITG DP:
MIGS DP:=MIGS DP:
[OptionTitles]
AutoSetStyle=プレイスタイル\n選択の省略
ComboOnRolls=ロールの判定
ComboUnderField=コンボ表示の\n優先度
FancyUIBG=背景の追加\nオブジェクト
FlashyCombo=50コンボの演出
GameplayFooter=フッター表示
GameplayShowScore=スコア表示
GameplayShowStepsDisplay=譜面表示
LongFail=プレイ失敗時の\n動作
NotePosition=譜面の位置
ShowLotsaOptions=プレイオプション\nの個数
TimingDisplay=曲位置メーターの\n区切り
UserPrefThemes=テーマ
AutoSetStyle=Auto Set Style
NotePosition=Note Positions
ComboOnRolls=Rolls Increment Combo
ComboUnderField=Combo Under Field
GameplayShowScore=Show Score
GameplayShowStepsDisplay=Show Steps
ShowLotsaOptions=Options Density
LongFail=Fail Length
FlashyCombo=Flashy Combo
GameplayFooter=Gameplay Footer
FancyUIBG=Fancy UI Background
TimingDisplay=Timing Display
[OptionExplanations]
Announcer=プレイ中のアナウンサーを選択します。\n「Announcer」フォルダに必要なファイルが存在する必要があります。
AutoSetStyle=ゲームスタート後のスタイル選択を省略し、ミュージックホイールで\n全スタイルの全難易度が選択できるようになります。(要再起動)
BeginnerHelper=Onにしてかつ専用ファイルが存在すると、\n難易度Beginnerでダンサーがお手本を見せてくれます。
Brightness=背景の明度を設定します。
NotePosition=プレイ中の判定ゾーンの位置を設定します。。
Center1Player=Onにすると、1人プレイ時に\n判定ゾーンとオブジェが中央寄りになります。
ComboOnRolls=ロールでコンボが増加するかどうかを設定します。
ComboUnderField=「Yes」にするとオブジェがコンボ表示の\n上を通過するようになります。
DancingCharacters=ダンサーの表示設定です。\n「Character」フォルダに必要なファイルが存在する必要があります。
FancyUIBG=Onにするとテーマ中の画像エフェクトが有効になります。\nもたつく場合は"Off"に設定してください。
FlashyCombo=50コンボで発生する演出を表示するかどうかを決めます。
GameplayFooter=ONにすると、プレイ中に上か下かに黒い帯が表示されます。\n使用中の設定などは見やすくなりますが、その分譜面が隠されます。
GameplayShowScore=プレイ中スコアを表示するかどうかを設定します。
GameplayShowStepsDisplay=曲選択中に譜面情報を表示するかどうかを設定します。
Language=使用言語を設定します。現在は「日本語」です。
LongFail=プレイに失敗したときの演出の長さを決めます。
Theme=使用するテーマを設定します。動作するのはStepmania5系用のテーマ、\nまたはStepmania4 alphaのテーマをportkit-sm4を利用して移植したものです。
MenuTimer=Onにすると選択するシーンに時間制限が付きます。
Mode=背景の設定です。Off以外では専用ファイルを用意する必要があります。
OniScoreDisplay=ONIモードでのスコア表示形式を設定します。
PercentageScoring=スコアの代わりに譜面のクリア率をパーセントで表示します。
RandomBackGrounds=ランダム背景使用時、1ステージで使用する画像数を設定します。
ShowLotsaOptions=選択可能なプレイオプションを&oq;Few&cq;で最低限に、\n&oq;Many&cq;で最大限に表示します。
TimingDisplay=Onにすると、曲の現在位置を示すメーターが区切られます。
AutoSetStyle=ミュージックホイールで全スタイルの譜面が選択できるようになります。\n設定後Stepmaniaの再起動かShift+F2キーを押す必要があります。
NotePosition=ノーツを描画するレイヤーの階層を選択します。
ComboOnRolls=ロールの判定をコンボに含めるかどうかを選択します。\n設定後Stepmaniaの再起動かShift+F2キーを押す必要があります。
ComboUnderField=コンボ数を描画するレイヤーの階層を選択します。
GameplayShowScore=プレイ中のスコア表示の有無を設定します。
GameplayShowStepsDisplay=プレイ中の譜面情報表示の有無を設定します。
ShowLotsaOptions=&oq;Few&cq;を選択するとプレイオプションの項目は最小限になります。 &oq;Many&cq;を選択するとすべての項目を表示します。
LongFail=ゲージ切れが起きた際の演出のパターンを選択します。
FlashyCombo=この項目をOnに設定すると、50コンボごとに画面に光の輪が描画されます。
GameplayFooter=プレイ中のスコアフレーム表示の有無を設定します。
FancyUIBG=背景を派手にします。マシンパワーが低い場合はOffに設定することを推奨します。\n変更はタイトル画面で有効になります。
TimingDisplay=プレイ中の楽曲の現在位置を確認できるバーの表示の有無を設定します。
;以下プレイオプション
Accel=オブジェの判定ゾーンへの接近のしかたを設定します。「Boost」は加速、「Brake」は減速します。\n「Wave」はオブジェが揺れ、「Expand」はオブジェがふわりと動きます。\n「Boomerang」はオブジェが判定ゾーンの逆から現れ、再び判定ゾーンに向かいます。
Appearance=オブジェの出現のしかたを設定します。\n「Hidden」は途中から消え、「Sudden」は途中から現れます。\n「Stealth」は常に消え、「Blink」は常に点滅します。
Attacks=おじゃまの有無を設定します。「On」で譜面通りに、「Random&nbsp;Attacks」でランダムに発生します。\n「Off」で発生しなくなります。
AutoAdjust=曲の再生ズレ補正をします。「Sync&nbsp;Song」で曲のオフセットを、\n「Sync&nbsp;Machine」でグローバルオフセットを、「Sync&nbsp;Tempo」で曲のBPM変化を調節します。\nなおあまりにズレが大きい曲、および総オブジェ数が24以下の曲は補正できません。
Assist=リズムキープ用の補助音の設定をします。「Clap」でオブジェ到達時に、\n「Metronome」で1小節ごとにハンドクラップが鳴ります。\n「Both」でその両方の状態で鳴ります。
BackGround=背景を設定します。「Random Background」はランダム背景用ファイルが必要です。
BarDrain=ライフゲージの減り方を設定します。\n「No&nbsp;Recover」でゲージが回復しなくなります。\n「Sudden&nbsp;Death」では一度でもミスをするとゲームオーバーになります。
BatLives=ライフバッテリーの数を設定します。
Characters=CGキャラクターを選択します。
DefaultFailType=ゲームオーバーの設定をします。
Effect=「Drunk」でレーンが揺らぎ、「Dizzy」でオブジェが回転します。「Twirl」で画面の垂直方向に、\n「Roll」で鉛直方向に回転します。「Beat」は一拍ごとにレーンが振動し、「Tipsy」でレーンが上下に\n揺らぎます。「Tornado」でレーンがねじれ、「Bumpy」でオブジェに落ち着きがなくなります。
EffectsReceptor=オブジェと判定ゾーンの特殊表示です。「Confusion」で回転します。「Invert」で反時計回りに90度、\n「Flip」で180度回転します。「Mini」で表示が小さく、「Big」で大きくなります。\n「Xmode」でレーンが斜めになります。
Handicap=オブジェを削除する規則を設定します。OFF以外ではハイスコアを出しても記録されません。
Hide=画面要素の表示の設定です。「Dark」で判定ゾーンは表示されなくなります。\n「Blind」でコンボ表示がされなくなります。「Cover」は「Blind」から判定表示を復活させたものです。
Holds=ロングノートを追加します。なお「No&nbsp;Holds」でロングノートは削除されます。「Planted」で交互押し、\n「Twister」で左右ゆさぶりするように通常オブジェをロングオブジェに変化させます。\n「Holds&nbsp;To&nbsp;Rolls」でロングオブジェをロールに変化させます。
Insert=オブジェを追加します。「Wide」で左右ゆさぶり、「Big」で両手交互押し、\n「Quick」で刻み、「BMRize」でリズム主体、「Skippy」でシンコペーション、\n「Echo」で連打、「Stomp」で同時押し主体な譜面になります。
LifeType=ライフ形式を選択します。「Bar」は回復しますが、「Battery」は回復しません。
Mines=地雷の設定をします。「Off」で地雷が削除されます。「On」は譜面通りに地雷が現れます。\n「Additive」で通常オブジェが地雷に変化します。\n「AttackMines」で地雷を踏んだ時におじゃまが発生します。
MusicRateHelp=曲そのものを変速してプレイします。
NoteSkins=オブジェのスキンを変更します。必ずプレイモードに対応したスキンを使用してください。
Persp=譜面の流れ方の立体感を設定します。通常は「Overhead」です。\n「Incoming」は判定ゾーンが手前に、「Space」は奥に配置されます。\n「Hallway」「Distant」は遠近感がさらに激しくなります。
ProTiming=「On」にすると、ジャストタイミングからの入力の離れを表示するようになります。
PlayerAutoPlay=OnにするとCPUが代わりにプレイします。スコアは加算も集計もされません。
Rate=曲自体の速度の設定をします。「Haste」では微小な加減速を行い続けます。
SaveScores=スコア保存の設定をします。
SaveToProfileHelp=プレイ結果を保存するプロファイル及びメモリーカードを設定します。
ScoreDisplay=スコアの表示形式を設定します。
Scroll=シーケンスのスクロール方向を設定します。「Reverse」は上から下、「Split」は右半分だけが上から下、\n「Alternate」は左から偶数番目が上から下、「Cross」は中央が上から下に流れます。\n「Centered」は判定ゾーンが縦方向の中心に移動します。
Speed=譜面の流れる速度を調整します。\n「x」は速度をその数値倍、「C」は速度をそのBPMに対応した速度で固定、\n「m」は最大速度をそのBPMに対応した速度に抑制します。
Steps=譜面難易度を選択します。
Turn=譜面を変形する規則を設定します。\n「Mirror」は180度、「Left」は90度左、「Right」は90度右、\n「Shuffle」「Soft Shuffle」「Cement Mixer」はそれぞれ規則の違うランダムです。
ScoringType=使用するスコアタイプを設定します。\nSpecialを選択した場合はTheme OptionsでSpecial Score Optionの項目の設定をしてください。
Speed=Xmodは譜面の流れる速度を何倍かします。Cmodは譜面の流れる速度を固定します。\nMmodは譜面の流れる速度の上限を制限します。使用したいハイスピードの種類を選択してから、\n数字を選択して速度調節してください。
Accel=ノートのレセプターへの近づき方を変更します。\nこのオプションは複数同時選択できます。
Effect=ノートやレセプターの大きさや動き方を変更します。\nこのオプションは複数同時選択できます。
Appearance=ノートの可視範囲を変更します。\nこのオプションは複数同時選択できます。
Turn=ノーツ配置を入れ替えます。\nこのオプションは複数同時選択できます。
Insert=基本のノート配置にノートを追加します。\nこのオプションは複数同時選択できます。
Holds=通常のノートをロングノートに変化させます。\nこのオプションは複数同時選択できます。
Mines=マインノートを追加、あるいは削除します。
PlayerAutoPlay=この項目をOnにすると、オートプレイになります。
ScoreDisplay=スコア表示を変更します。
ProTiming=Onにすると、ノートの判定がジャストタイミングからどれだけずれているか表示されるようになります。
Scroll=ノートの移動方向を変更します。\nこのオプションは複数同時選択できます。
NoteSkins=プレイに使用するノートスキンを変更します。\n必ず現在のゲームモードに対応したスキンを使用してください。
Handicap=ノートを削除します。このオプションは複数同時選択できます。\nこのオプションを有効にして出したスコアはランキングに集計されません。
Hide=Darkはレセプターを描画しません。Blindは判定を描画しません。Coverは背景を描画しません。\nこのオプションは複数同時に有効にできます。
Persp=ノートが流れる平面を見る角度を変更します。
Steps=プレイする譜面を選択します。
Characters=プレイ中に表示するダンサーを設定します。
SaveToProfileHelp=プレイ結果の保存をメモリーカードに行います。
MusicRateHelp=楽曲自体を設定値倍の速度で再生しながらプレイします。
[StepsListDisplayRow StepsType]
Dance_Single=4
@@ -204,36 +185,55 @@ Karaoke=V
Lights_Cabinet=!
[ScreenHowToInstallSongs]
BodyHeader=Stepmaniaに曲を探してインストールする方法
Finding Songs=曲の探しかた
Installing Songs=曲のインストールのしかた
Importing Songs=すでにあるStepmaniaから曲をインポートする
Reload Songs=曲のリロード
Exit=タイトルメニューへ
BodyHeader=楽曲が1曲もありません!
Finding Songs=曲の探し
Installing Songs=楽曲追加のしかた
Importing Songs=他のStepmaniaから曲を追加する
Reload Songs=リロード
Exit=タイトル画面に戻る
Explanation-WhereToFind=検索サイトで「Stepmania&nbsp;Simfile」などで譜面を探すことができます。\nなお著作権法に違反するファイルダウンロードしないよう強くお願いします
Explanation-HowToInstall=本体「Songs」フォルダ内にグループフォルダを作り、\nそこに見つけた曲をフォルダのまま入れてください。\n.smzip形式であれば自動でインストールしてくれます。
Explanation-AdditionalFolders=AdditionalFolders機能を使って、\n他のStepmaniaにインストールされている曲をインポートできます。
Explanation-ReloadSongs=Stepmaniaの起動中に曲を追加したとき、\nまたはエディットを使わずに譜面を編集したときは\nオプションからのリロードが必要になります
Explanation-Exit=タイトルメニューへ戻ります。
Explanation-WhereToFind=検索エンジンで「Stepmania 譜面」で検索したり、パッケージサイトを活用してみてください。\nなお著作権を侵害するファイルが含まれた譜面をダウンロードしないようお願いします
Explanation-HowToInstall=&START; を押すと、公式サイトの「楽曲追加のしかた」(英文)が表示されます。
Explanation-AdditionalFolders=すでに別のStepmaniaをインストールしているなら、\n「Additional Folders」を利用することでフォルダ構造を変えることなく楽曲を追加できます。
Explanation-ReloadSongs=タイトル画面の「Options」から「Reload Songs/Courses」を選択します。\nStepmania外で譜面が変更された場合はリロードしてキャッシュを削除し再読み込みしないと変更が反映されません
Explanation-Exit=タイトル画面に戻ります。
[OptionNames]
Custom=Special
Many=Many
Few=Few
Normal=Normal
Lower=Lower
Short=Short
Long=Long
[ScreenTestInput]
HelpText= &BACK; or &START; 押しっぱなしで戻る
HelpText=&BACK;を押しっぱなしにするか&START; 終了
[PaneDisplay]
Taps=オブジェ
Jumps=2つ押し
Holds=フリーズ
Mines=地雷
Hands=3つ以上
Rolls=ロール
Lifts=リフト
Fakes=フェイク
Taps=Taps
Jumps=Jumps
Holds=Holds
Mines=Mines
Hands=Hands
Rolls=Rolls
Lifts=Lifts
Fakes=Fakes
S=S
V=V
A=A
F=F
C=C
C=C
[ScreenMapControllers]
Exit=Exit
[ScreenGameOver]
GAME OVER=GAME OVER
Play again soon!=Play again soon!
[ScreenHowToPlay]
How To Play StepMania=How To Play StepMania
[Protiming]
MS=MS
-2
View File
@@ -140,8 +140,6 @@ NumLivesP2OnCommand=zoomx,-1
NumLivesP2LoseLifeCommand=zoomx,-1.5;zoomy,1.5;linear,0.15;zoomx,-1;zoomy,1
[LifeMeterBattery Percent]
# still asking for this even though it's in fallback... -aj
Format=
#
PercentP2OnCommand=zoom,0.7;zoomx,-0.7;shadowlength,0;diffuse,PlayerColor(PLAYER_2)
DancePointsP2OnCommand=zoom,0.7;zoomx,-0.7;shadowlength,0;diffuse,PlayerColor(PLAYER_2)
+26 -7
View File
@@ -1757,6 +1757,7 @@
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 */; };
F8FFD97A19E909ED00AEAA69 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8FFD97919E909ED00AEAA69 /* Accelerate.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -3249,6 +3250,8 @@
EE9D33F414B81BE80098EB9C /* jutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = ../extern/libjpeg/jutils.c; sourceTree = SOURCE_ROOT; };
EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StepsDisplay.cpp; path = ../src/StepsDisplay.cpp; sourceTree = "<group>"; };
EEC7863E0E58208B00F559BC /* StepsDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StepsDisplay.h; path = ../src/StepsDisplay.h; sourceTree = "<group>"; };
F8FFD97719E907BA00AEAA69 /* vecLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vecLib.framework; path = ../../../../../System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework; sourceTree = "<group>"; };
F8FFD97919E909ED00AEAA69 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -3284,6 +3287,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F8FFD97A19E909ED00AEAA69 /* Accelerate.framework in Frameworks */,
AA29CE3C0558741A00961A51 /* Cocoa.framework in Frameworks */,
AA29CE3D0558741A00961A51 /* Carbon.framework in Frameworks */,
AA29CE3E0558741A00961A51 /* IOKit.framework in Frameworks */,
@@ -3506,6 +3510,8 @@
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
F8FFD97919E909ED00AEAA69 /* Accelerate.framework */,
F8FFD97719E907BA00AEAA69 /* vecLib.framework */,
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
@@ -6264,7 +6270,7 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 0460;
LastUpgradeCheck = 0610;
};
buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */;
compatibilityVersion = "Xcode 3.2";
@@ -8317,6 +8323,10 @@
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SYSTEM_LIBRARY_DIR)/Frameworks/Accelerate.framework/Versions/A/Frameworks",
);
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
@@ -8388,8 +8398,9 @@
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/Libraries";
LINKER_DISPLAYS_MANGLED_NAMES = YES;
MACOSX_DEPLOYMENT_TARGET = 10.6;
ONLY_ACTIVE_ARCH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
SDKROOT = macosx10.6;
SDKROOT = macosx;
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
STRIP_INSTALLED_PRODUCT = NO;
STRIP_STYLE = "non-global";
@@ -8661,7 +8672,7 @@
"HAVE_MEMORY_H=1",
"HAVE_WAITPID=1",
"SIZEOF_LONG=4",
"FPM_INTEL=1",
"FPM_64BIT=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
@@ -8691,7 +8702,7 @@
"HAVE_MEMORY_H=1",
"HAVE_WAITPID=1",
"SIZEOF_LONG=4",
"FPM_INTEL=1",
"FPM_64BIT=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
@@ -8722,7 +8733,7 @@
"HAVE_MEMORY_H=1",
"HAVE_WAITPID=1",
"SIZEOF_LONG=4",
"FPM_INTEL=1",
"FPM_64BIT=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
@@ -8770,7 +8781,7 @@
LINKER_DISPLAYS_MANGLED_NAMES = YES;
MACOSX_DEPLOYMENT_TARGET = 10.6;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
SDKROOT = macosx10.6;
SDKROOT = macosx;
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
STRIP_STYLE = "non-global";
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include $(PROJECT_DIR)/../extern/vorbis";
@@ -8785,6 +8796,10 @@
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = stabs;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SYSTEM_LIBRARY_DIR)/Frameworks/Accelerate.framework/Versions/A/Frameworks",
);
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
@@ -9007,6 +9022,10 @@
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SYSTEM_LIBRARY_DIR)/Frameworks/Accelerate.framework/Versions/A/Frameworks",
);
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
GCC_PREPROCESSOR_DEFINITIONS = _XOPEN_SOURCE;
@@ -9075,7 +9094,7 @@
LINKER_DISPLAYS_MANGLED_NAMES = YES;
MACOSX_DEPLOYMENT_TARGET = 10.6;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
SDKROOT = macosx10.6;
SDKROOT = macosx;
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
STRIP_STYLE = "non-global";
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include $(PROJECT_DIR)/../extern/vorbis";
+1 -1
View File
@@ -101,7 +101,7 @@ dnl Make the binary find our bundled libs
LDFLAGS="$LDFLAGS -Wl,-rpath=$ffmpeg_rpath"
fi
dnl Classic autoconf. This CANNOT be broken across multiple lines.
VIDEO_LIBS="-L$PWD/bundle/ffmpeg/libavutil -lavutil -L$PWD/bundle/ffmpeg/libavformat -lavformat -L$PWD/bundle/ffmpeg/libavcodec -lavcodec -L$PWD/bundle/ffmpeg/libswscale -lswscale"
VIDEO_LIBS="-L$PWD/bundle/ffmpeg/libavformat -lavformat -L$PWD/bundle/ffmpeg/libavcodec -lavcodec -L$PWD/bundle/ffmpeg/libswscale -lswscale -L$PWD/bundle/ffmpeg/libavutil -lavutil"
have_ffmpeg=yes
fi
fi
+12 -8
View File
@@ -785,7 +785,7 @@ RString Actor::GetLineage() const
if( m_pParent )
sPath = m_pParent->GetLineage() + '/';
sPath += ssprintf( "<%s> %s", typeid(*this).name(), m_sName.c_str() );
sPath += ssprintf( "<type %s> %s", typeid(*this).name(), m_sName.c_str() );
return sPath;
}
@@ -889,7 +889,7 @@ void Actor::ScaleTo( const RectF &rect, StretchType st )
void Actor::SetEffectClockString( const RString &s )
{
if (s.EqualsNoCase("timer")) this->SetEffectClock( CLOCK_TIMER );
if (s.EqualsNoCase("timerglobal")) this->SetEffectClock( CLOCK_TIMER_GLOBAL );
else if(s.EqualsNoCase("timerglobal")) this->SetEffectClock( CLOCK_TIMER_GLOBAL );
else if(s.EqualsNoCase("beat")) this->SetEffectClock( CLOCK_BGM_BEAT );
else if(s.EqualsNoCase("music")) this->SetEffectClock( CLOCK_BGM_TIME );
else if(s.EqualsNoCase("bgm")) this->SetEffectClock( CLOCK_BGM_BEAT ); // compat, deprecated
@@ -899,9 +899,13 @@ void Actor::SetEffectClockString( const RString &s )
{
CabinetLight cl = StringToCabinetLight( s );
if( cl == CabinetLight_Invalid )
FAIL_M(ssprintf("Invalid cabinet light: %s", s.c_str()));
this->SetEffectClock( (EffectClock) (cl + CLOCK_LIGHT_1) );
{
LuaHelpers::ReportScriptErrorFmt("String '%s' is not an effect clock string or the name of a cabinet light.", s.c_str());
}
else
{
this->SetEffectClock(static_cast<EffectClock>(cl + CLOCK_LIGHT_1));
}
}
}
@@ -1130,7 +1134,7 @@ void Actor::RunCommands( const LuaReference& cmds, const LuaReference *pParamTab
{
if( !cmds.IsSet() || cmds.IsNil() )
{
LuaHelpers::ReportScriptError("RunCommands: command is unset or nil");
LuaHelpers::ReportScriptErrorFmt("RunCommands: commands for %s are unset or nil", GetLineage().c_str());
return;
}
@@ -1140,7 +1144,7 @@ void Actor::RunCommands( const LuaReference& cmds, const LuaReference *pParamTab
cmds.PushSelf( L );
if( lua_isnil(L, -1) )
{
LuaHelpers::ReportScriptError("Error compiling commands");
LuaHelpers::ReportScriptErrorFmt("RunCommands: Error compiling commands for %s", GetLineage().c_str());
LUA->Release(L);
return;
}
@@ -1155,7 +1159,7 @@ void Actor::RunCommands( const LuaReference& cmds, const LuaReference *pParamTab
pParamTable->PushSelf( L );
// call function with 2 arguments and 0 results
RString Error= "Error playing command: ";
RString Error= "Error playing command:";
LuaHelpers::RunScriptOnStack(L, Error, 2, 0, true);
LUA->Release(L);
+5
View File
@@ -266,6 +266,11 @@ void LuaFunc_Register_##func( lua_State *L ); \
void LuaFunc_Register_##func( lua_State *L ) { lua_register( L, #func, LuaFunc_##func ); } \
REGISTER_WITH_LUA_FUNCTION( LuaFunc_Register_##func );
#define LUAFUNC_REGISTER_COMMON(func_name) \
void LuaFunc_Register_##func_name(lua_State* L); \
void LuaFunc_Register_##func_name(lua_State* L) { lua_register(L, #func_name, LuaFunc_##func_name); } \
REGISTER_WITH_LUA_FUNCTION(LuaFunc_Register_##func_name);
#endif
/*
+75 -23
View File
@@ -32,6 +32,14 @@ static const char *NotePartNames[] = {
XToString( NotePart );
LuaXType( NotePart );
static const char *NoteColorTypeNames[] = {
"Denominator",
"Progress",
};
XToString( NoteColorType );
StringToX( NoteColorType );
LuaXType( NoteColorType );
static bool IsVectorZero( const RageVector2 &v )
{
return v.x == 0 && v.y == 0;
@@ -53,6 +61,9 @@ struct NoteMetricCache_t
RageVector2 m_fAdditionTextureCoordOffset[NUM_NotePart];
RageVector2 m_fNoteColorTextureCoordSpacing[NUM_NotePart];
int m_iNoteColorCount[NUM_NotePart];
NoteColorType m_NoteColorType[NUM_NotePart];
//For animation based on beats or seconds -DaisuMaster
bool m_bAnimationBasedOnBeats;
bool m_bHoldHeadIsAboveWavyParts;
@@ -82,6 +93,10 @@ void NoteMetricCache_t::Load( const RString &sButton )
m_fAdditionTextureCoordOffset[p].y = NOTESKIN->GetMetricF(sButton,s+"AdditionTextureCoordOffsetY");
m_fNoteColorTextureCoordSpacing[p].x = NOTESKIN->GetMetricF(sButton,s+"NoteColorTextureCoordSpacingX");
m_fNoteColorTextureCoordSpacing[p].y = NOTESKIN->GetMetricF(sButton,s+"NoteColorTextureCoordSpacingY");
m_iNoteColorCount[p] = NOTESKIN->GetMetricI(sButton,s+"NoteColorCount");
RString ct = NOTESKIN->GetMetric(sButton,s+"NoteColorType");
m_NoteColorType[p] = StringToNoteColorType(ct);
}
//I was here -DaisuMaster
m_bAnimationBasedOnBeats = NOTESKIN->GetMetricB(sButton,"AnimationIsBeatBased");
@@ -99,18 +114,43 @@ void NoteMetricCache_t::Load( const RString &sButton )
struct NoteSkinAndPath
{
NoteSkinAndPath( const RString sNoteSkin_, const RString sPath_ ) : sNoteSkin(sNoteSkin_), sPath(sPath_) { }
NoteSkinAndPath( const RString sNoteSkin_, const RString sPath_, const PlayerNumber pn_, const GameController gc_ ) : sNoteSkin(sNoteSkin_), sPath(sPath_), pn(pn_), gc(gc_) { }
RString sNoteSkin;
RString sPath;
PlayerNumber pn;
GameController gc;
bool operator<( const NoteSkinAndPath &other ) const
{
int cmp = strcmp(sNoteSkin, other.sNoteSkin);
if( cmp < 0 )
{
return true;
}
else if( cmp == 0 )
return sPath < other.sPath;
{
if( sPath < other.sPath )
{
return true;
}
else if( sPath == other.sPath )
{
if ( pn < other.pn )
return true;
else if ( pn == other.pn )
return gc < other.gc;
else
return false;
}
else
{
return false;
}
}
else
{
return false;
}
}
};
@@ -134,16 +174,19 @@ struct NoteResource
static map<NoteSkinAndPath, NoteResource *> g_NoteResource;
static NoteResource *MakeNoteResource( const RString &sButton, const RString &sElement, bool bSpriteOnly )
static NoteResource *MakeNoteResource( const RString &sButton, const RString &sElement, PlayerNumber pn, GameController gc, bool bSpriteOnly )
{
RString sElementAndType = ssprintf( "%s, %s", sButton.c_str(), sElement.c_str() );
NoteSkinAndPath nsap( NOTESKIN->GetCurrentNoteSkin(), sElementAndType );
NoteSkinAndPath nsap( NOTESKIN->GetCurrentNoteSkin(), sElementAndType, pn, gc );
map<NoteSkinAndPath, NoteResource *>::iterator it = g_NoteResource.find( nsap );
if( it == g_NoteResource.end() )
{
NoteResource *pRes = new NoteResource( nsap );
NOTESKIN->SetPlayerNumber( pn );
NOTESKIN->SetGameController( gc );
pRes->m_pActor = NOTESKIN->LoadActor( sButton, sElement, NULL, bSpriteOnly );
ASSERT( pRes->m_pActor != NULL );
@@ -182,9 +225,9 @@ NoteColorActor::~NoteColorActor()
DeleteNoteResource( m_p );
}
void NoteColorActor::Load( const RString &sButton, const RString &sElement )
void NoteColorActor::Load( const RString &sButton, const RString &sElement, PlayerNumber pn, GameController gc )
{
m_p = MakeNoteResource( sButton, sElement, false );
m_p = MakeNoteResource( sButton, sElement, pn, gc, false );
}
@@ -206,9 +249,9 @@ NoteColorSprite::~NoteColorSprite()
DeleteNoteResource( m_p );
}
void NoteColorSprite::Load( const RString &sButton, const RString &sElement )
void NoteColorSprite::Load( const RString &sButton, const RString &sElement, PlayerNumber pn, GameController gc )
{
m_p = MakeNoteResource( sButton, sElement, true );
m_p = MakeNoteResource( sButton, sElement, pn, gc, true );
}
Sprite *NoteColorSprite::Get()
@@ -248,30 +291,28 @@ void NoteDisplay::Load( int iColNum, const PlayerState* pPlayerState, float fYRe
const PlayerNumber pn = m_pPlayerState->m_PlayerNumber;
const GameInput GameI = GAMESTATE->GetCurrentStyle()->StyleInputToGameInput( iColNum, pn );
NOTESKIN->SetPlayerNumber( pn );
NOTESKIN->SetGameController( GameI.controller );
const RString &sButton = GAMESTATE->GetCurrentStyle()->ColToButtonName( iColNum );
cache->Load( sButton );
// "normal" note types
m_TapNote.Load( sButton, "Tap Note" );
//m_TapAdd.Load( sButton, "Tap Addition" );
m_TapMine.Load( sButton, "Tap Mine" );
m_TapLift.Load( sButton, "Tap Lift" );
m_TapFake.Load( sButton, "Tap Fake" );
m_TapNote.Load( sButton, "Tap Note", pn, GameI.controller );
//m_TapAdd.Load( sButton, "Tap Addition", pn, GameI.controller );
m_TapMine.Load( sButton, "Tap Mine", pn, GameI.controller );
m_TapLift.Load( sButton, "Tap Lift", pn, GameI.controller );
m_TapFake.Load( sButton, "Tap Fake", pn, GameI.controller );
// hold types
FOREACH_HoldType( ht )
{
FOREACH_ActiveType( at )
{
m_HoldHead[ht][at].Load( sButton, HoldTypeToString(ht)+" Head "+ActiveTypeToString(at) );
m_HoldTopCap[ht][at].Load( sButton, HoldTypeToString(ht)+" Topcap "+ActiveTypeToString(at) );
m_HoldBody[ht][at].Load( sButton, HoldTypeToString(ht)+" Body "+ActiveTypeToString(at) );
m_HoldBottomCap[ht][at].Load( sButton, HoldTypeToString(ht)+" Bottomcap "+ActiveTypeToString(at) );
m_HoldTail[ht][at].Load( sButton, HoldTypeToString(ht)+" Tail "+ActiveTypeToString(at) );
m_HoldHead[ht][at].Load( sButton, HoldTypeToString(ht)+" Head "+ActiveTypeToString(at), pn, GameI.controller );
m_HoldTopCap[ht][at].Load( sButton, HoldTypeToString(ht)+" Topcap "+ActiveTypeToString(at), pn, GameI.controller );
m_HoldBody[ht][at].Load( sButton, HoldTypeToString(ht)+" Body "+ActiveTypeToString(at), pn, GameI.controller );
m_HoldBottomCap[ht][at].Load( sButton, HoldTypeToString(ht)+" Bottomcap "+ActiveTypeToString(at), pn, GameI.controller );
m_HoldTail[ht][at].Load( sButton, HoldTypeToString(ht)+" Tail "+ActiveTypeToString(at), pn, GameI.controller );
}
}
}
@@ -728,9 +769,20 @@ void NoteDisplay::DrawActor( const TapNote& tn, Actor* pActor, NotePart part, in
if( bNeedsTranslate )
{
DISPLAY->TexturePushMatrix();
NoteType nt = BeatToNoteType( fBeat );
ENUM_CLAMP( nt, (NoteType)0, MAX_DISPLAY_NOTE_TYPE );
DISPLAY->TextureTranslate( (bIsAddition ? cache->m_fAdditionTextureCoordOffset[part] : RageVector2(0,0)) + cache->m_fNoteColorTextureCoordSpacing[part]*(float)nt );
float color = 0.0f;
switch( cache->m_NoteColorType[part] )
{
case NoteColorType_Denominator:
color = float( BeatToNoteType( fBeat ) );
color = clamp( color, 0, (cache->m_iNoteColorCount[part]-1) );
break;
case NoteColorType_Progress:
color = fmodf( ceilf( fBeat * cache->m_iNoteColorCount[part] ), (float)cache->m_iNoteColorCount[part] );
break;
default:
FAIL_M(ssprintf("Invalid NoteColorType: %i", cache->m_NoteColorType[part]));
}
DISPLAY->TextureTranslate( (bIsAddition ? cache->m_fAdditionTextureCoordOffset[part] : RageVector2(0,0)) + cache->m_fNoteColorTextureCoordSpacing[part]*color );
}
pActor->Draw();
+16 -2
View File
@@ -1,6 +1,9 @@
#ifndef NOTE_DISPLAY_H
#define NOTE_DISPLAY_H
#include "PlayerNumber.h"
#include "GameInput.h"
class Actor;
class Sprite;
class Model;
@@ -24,13 +27,24 @@ enum NotePart
NotePart_Invalid
};
/** @brief the color type of a Note. */
enum NoteColorType
{
NoteColorType_Denominator, /**< Color by note type. */
NoteColorType_Progress, /**< Color by progress. */
NUM_NoteColorType,
NoteColorType_Invalid
};
const RString& NoteColorTypeToString( NoteColorType nct );
NoteColorType StringToNoteColorType( const RString& s );
struct NoteResource;
struct NoteColorActor
{
NoteColorActor();
~NoteColorActor();
void Load( const RString &sButton, const RString &sElement );
void Load( const RString &sButton, const RString &sElement, PlayerNumber, GameController );
Actor *Get();
private:
NoteResource *m_p;
@@ -40,7 +54,7 @@ struct NoteColorSprite
{
NoteColorSprite();
~NoteColorSprite();
void Load( const RString &sButton, const RString &sElement );
void Load( const RString &sButton, const RString &sElement, PlayerNumber, GameController );
Sprite *Get();
private:
NoteResource *m_p;
+2 -1
View File
@@ -73,7 +73,7 @@ void SMLoader::LoadFromTokens(
Trim( sDifficulty );
Trim( sNoteData );
// LOG->Trace( "Steps::LoadFromTokens()" );
// LOG->Trace( "Steps::LoadFromTokens(), %s", sStepsType.c_str() );
// backwards compatibility hacks:
// HACK: We eliminated "ez2-single-hard", but we should still handle it.
@@ -85,6 +85,7 @@ void SMLoader::LoadFromTokens(
sStepsType = "para-single";
out.m_StepsType = GAMEMAN->StringToStepsType( sStepsType );
out.m_StepsTypeStr = sStepsType;
out.SetDescription( sDescription );
out.SetCredit( sDescription ); // this is often used for both.
out.SetChartName(sDescription); // yeah, one more for good measure.
+2
View File
@@ -643,6 +643,7 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach
if( sValueName=="STEPSTYPE" )
{
pNewNotes->m_StepsType = GAMEMAN->StringToStepsType( sParams[1] );
pNewNotes->m_StepsTypeStr= sParams[1];
}
else if( sValueName=="CHARTSTYLE" )
@@ -965,6 +966,7 @@ bool SSCLoader::LoadEditFromMsd(const MsdFile &msd,
if( sValueName=="STEPSTYPE" )
{
pNewNotes->m_StepsType = GAMEMAN->StringToStepsType( sParams[1] );
pNewNotes->m_StepsTypeStr= sParams[1];
bSSCFormat = true;
}
+2 -2
View File
@@ -206,9 +206,9 @@ static RString GetSMNotesTag( const Song &song, const Steps &in )
lines.push_back( "" );
// Escape to prevent some clown from making a comment of "\r\n;"
lines.push_back( ssprintf("//---------------%s - %s----------------",
GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName, SmEscape(in.GetDescription()).c_str()) );
in.m_StepsTypeStr.c_str(), SmEscape(in.GetDescription()).c_str()) );
lines.push_back( song.m_vsKeysoundFile.empty() ? "#NOTES:" : "#NOTES2:" );
lines.push_back( ssprintf( " %s:", GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName ) );
lines.push_back( ssprintf( " %s:", in.m_StepsTypeStr.c_str() ) );
RString desc = (USE_CREDIT ? in.GetCredit() : in.GetChartName());
lines.push_back( ssprintf( " %s:", SmEscape(desc).c_str() ) );
lines.push_back( ssprintf( " %s:", DifficultyToString(in.GetDifficulty()).c_str() ) );
+2 -2
View File
@@ -349,10 +349,10 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa
lines.push_back( "" );
// Escape to prevent some clown from making a comment of "\r\n;"
lines.push_back( ssprintf("//---------------%s - %s----------------",
GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName, SmEscape(in.GetDescription()).c_str()) );
in.m_StepsTypeStr.c_str(), 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( "#STEPSTYPE:%s;", GAMEMAN->GetStepsTypeInfo(in.m_StepsType).szName ) );
lines.push_back( ssprintf( "#STEPSTYPE:%s;", in.m_StepsTypeStr.c_str() ) );
lines.push_back( ssprintf( "#DESCRIPTION:%s;", SmEscape(in.GetDescription()).c_str() ) );
lines.push_back( ssprintf( "#CHARTSTYLE:%s;", SmEscape(in.GetChartStyle()).c_str() ) );
lines.push_back( ssprintf( "#DIFFICULTY:%s;", DifficultyToString(in.GetDifficulty()).c_str() ) );
+28 -11
View File
@@ -33,10 +33,22 @@ void PercentageDisplay::LoadFromNode( const XNode* pNode )
pNode->GetAttrValue( "AutoRefresh", m_bAutoRefresh );
{
Lua *L = LUA->Get();
if( pNode->PushAttrValue(L, "FormatPercentScore") )
if(pNode->PushAttrValue(L, "FormatPercentScore"))
{
m_FormatPercentScore.SetFromStack( L );
if(m_FormatPercentScore.GetLuaType() != LUA_TFUNCTION)
{
// Not reported as an error because _fallback and default provided bad
// examples in their [LifeMeterBattery Percent]:Format metric and nobody
// realized it was supposed to be set to a function. -Kyz
LOG->Trace("Format attribute for PercentageDisplay named '%s' is not a function. Defaulting to 'FormatPercentScore'.", GetName().c_str());
m_FormatPercentScore.SetFromExpression("FormatPercentScore");
}
}
else
{
lua_pop(L, 1);
}
LUA->Release(L);
}
@@ -86,9 +98,12 @@ void PercentageDisplay::Load( const PlayerState *pPlayerState, const PlayerStage
m_sPercentFormat = THEME->GetMetric( sMetricsGroup, "PercentFormat" );
m_sRemainderFormat = THEME->GetMetric( sMetricsGroup, "RemainderFormat" );
if( m_FormatPercentScore.IsNil() )
if(m_FormatPercentScore.GetLuaType() != LUA_TFUNCTION)
{
LOG->Trace( "Format is nil in [%s]. Defaulting to 'FormatPercentScore'.", sMetricsGroup.c_str() );
// Not reported as an error because _fallback and default provided bad
// examples in their [LifeMeterBattery Percent]:Format metric and nobody
// realized it was supposed to be set to a function. -Kyz
LOG->Trace("Format metric is not a function in [%s]. Defaulting to 'FormatPercentScore'.", sMetricsGroup.c_str());
m_FormatPercentScore.SetFromExpression( "FormatPercentScore" );
}
@@ -157,14 +172,16 @@ void PercentageDisplay::Refresh()
}
else
{
Lua *L = LUA->Get();
m_FormatPercentScore.PushSelf( L );
ASSERT( !lua_isnil(L, -1) );
LuaHelpers::Push( L, fPercentDancePoints );
RString Error= "Error running FormatPercentScore: ";
LuaHelpers::RunScriptOnStack(L, Error, 1, 1, true); // 1 arg, 1 result
LuaHelpers::Pop( L, sNumToDisplay );
LUA->Release(L);
if(m_FormatPercentScore.GetLuaType() == LUA_TFUNCTION)
{
Lua *L = LUA->Get();
m_FormatPercentScore.PushSelf( L );
LuaHelpers::Push( L, fPercentDancePoints );
RString Error= "Error running FormatPercentScore: ";
LuaHelpers::RunScriptOnStack(L, Error, 1, 1, true); // 1 arg, 1 result
LuaHelpers::Pop( L, sNumToDisplay );
LUA->Release(L);
}
// HACK: Use the last frame in the numbers texture as '-'
sNumToDisplay.Replace('-','x');
+64 -44
View File
@@ -11,6 +11,29 @@ struct TapScoreDistribution
{
float fPercent[NUM_TapNoteScore];
void ChangeWeightsToPercents()
{
float sum= 0;
for(int i= 0; i < NUM_TapNoteScore; ++i)
{
sum+= fPercent[i];
}
for(int i= 0; i < NUM_TapNoteScore; ++i)
{
fPercent[i]/= sum;
}
}
void SetDefaultWeights()
{
fPercent[TNS_None] = 0;
fPercent[TNS_Miss] = 1;
fPercent[TNS_W5] = 0;
fPercent[TNS_W4] = 0;
fPercent[TNS_W3] = 0;
fPercent[TNS_W2] = 0;
fPercent[TNS_W1] = 0;
}
TapNoteScore GetTapNoteScore()
{
float fRand = randomf(0,1);
@@ -31,57 +54,54 @@ static TapScoreDistribution g_Distributions[NUM_SKILL_LEVELS];
void PlayerAI::InitFromDisk()
{
bool bSuccess;
IniFile ini;
bSuccess = ini.ReadFile( AI_PATH );
ASSERT( bSuccess );
for( int i=0; i<NUM_SKILL_LEVELS; i++ )
bool bSuccess = ini.ReadFile( AI_PATH );
if(!bSuccess)
{
RString sKey = ssprintf("Skill%d", i);
XNode* pNode = ini.GetChild(sKey);
TapScoreDistribution& dist = g_Distributions[i];
if( pNode == NULL )
LuaHelpers::ReportScriptErrorFmt("Error trying to read \"%s\" to load AI player skill settings.", AI_PATH);
for(int i= 0; i < NUM_SKILL_LEVELS; ++i)
{
LuaHelpers::ReportScriptErrorFmt("AI.ini: \"%s\" doesn't exist.", sKey.c_str());
dist.fPercent[TNS_None] = 0;
dist.fPercent[TNS_Miss] = 1;
dist.fPercent[TNS_W5] = 0;
dist.fPercent[TNS_W4] = 0;
dist.fPercent[TNS_W3] = 0;
dist.fPercent[TNS_W2] = 0;
dist.fPercent[TNS_W1] = 0;
g_Distributions[i].SetDefaultWeights();
g_Distributions[i].ChangeWeightsToPercents();
}
else
}
else
{
for( int i=0; i<NUM_SKILL_LEVELS; i++ )
{
#define SET_MALF_IF(condition, tns) \
if(condition) \
{ \
LuaHelpers::ReportScriptError("AI weight for " #tns " not set."); \
dist.fPercent[tns]= 0; \
RString sKey = ssprintf("Skill%d", i);
XNode* pNode = ini.GetChild(sKey);
TapScoreDistribution& dist = g_Distributions[i];
if( pNode == NULL )
{
LuaHelpers::ReportScriptErrorFmt("AI.ini: \"%s\" section doesn't exist.", sKey.c_str());
dist.SetDefaultWeights();
}
dist.fPercent[TNS_None] = 0;
bSuccess = pNode->GetAttrValue( "WeightMiss", dist.fPercent[TNS_Miss] );
SET_MALF_IF(!bSuccess, TNS_Miss);
bSuccess = pNode->GetAttrValue( "WeightW5", dist.fPercent[TNS_W5] );
SET_MALF_IF(!bSuccess, TNS_W5);
bSuccess = pNode->GetAttrValue( "WeightW4", dist.fPercent[TNS_W4] );
SET_MALF_IF(!bSuccess, TNS_W4);
bSuccess = pNode->GetAttrValue( "WeightW3", dist.fPercent[TNS_W3] );
SET_MALF_IF(!bSuccess, TNS_W3);
bSuccess = pNode->GetAttrValue( "WeightW2", dist.fPercent[TNS_W2] );
SET_MALF_IF(!bSuccess, TNS_W2);
bSuccess = pNode->GetAttrValue( "WeightW1", dist.fPercent[TNS_W1] );
SET_MALF_IF(!bSuccess, TNS_W1);
#undef SET_MALF_IF
else
{
#define SET_MALF_IF(condition, tns) \
if(condition) \
{ \
LuaHelpers::ReportScriptErrorFmt("AI weight for " #tns " in \"%s\" section not set.", sKey.c_str()); \
dist.fPercent[tns]= 0; \
}
dist.fPercent[TNS_None] = 0;
bSuccess = pNode->GetAttrValue( "WeightMiss", dist.fPercent[TNS_Miss] );
SET_MALF_IF(!bSuccess, TNS_Miss);
bSuccess = pNode->GetAttrValue( "WeightW5", dist.fPercent[TNS_W5] );
SET_MALF_IF(!bSuccess, TNS_W5);
bSuccess = pNode->GetAttrValue( "WeightW4", dist.fPercent[TNS_W4] );
SET_MALF_IF(!bSuccess, TNS_W4);
bSuccess = pNode->GetAttrValue( "WeightW3", dist.fPercent[TNS_W3] );
SET_MALF_IF(!bSuccess, TNS_W3);
bSuccess = pNode->GetAttrValue( "WeightW2", dist.fPercent[TNS_W2] );
SET_MALF_IF(!bSuccess, TNS_W2);
bSuccess = pNode->GetAttrValue( "WeightW1", dist.fPercent[TNS_W1] );
SET_MALF_IF(!bSuccess, TNS_W1);
#undef SET_MALF_IF
}
dist.ChangeWeightsToPercents();
}
float fSum = 0;
for( int j=0; j<NUM_TapNoteScore; j++ )
fSum += dist.fPercent[j];
for( int j=0; j<NUM_TapNoteScore; j++ )
dist.fPercent[j] /= fSum;
}
}
+1 -1
View File
@@ -30,7 +30,7 @@
* </li></ul>
*/
#ifndef PRODUCT_VER_BARE
#define PRODUCT_VER_BARE v5.0 beta 4
#define PRODUCT_VER_BARE v5.0 beta 4a
#endif
/**
+1 -1
View File
@@ -7,7 +7,7 @@
; PRODUCT_ID must NOT be "StepMania" unless you want people to uninstall 3.9
; when they install StepMania 5. (not recommended)
!define PRODUCT_ID "StepMania 5"
!define PRODUCT_VER "v5.0 beta 4"
!define PRODUCT_VER "v5.0 beta 4a"
!define PRODUCT_DISPLAY "${PRODUCT_FAMILY} ${PRODUCT_VER}"
!define PRODUCT_BITMAP "sm5"
+23 -2
View File
@@ -74,6 +74,14 @@ RString RageColor::NormalizeColorString( RString sColor )
return c.ToString();
}
void lerp_rage_color(RageColor& out, RageColor const& a, RageColor const& b, float t)
{
out.b= lerp(t, a.b, b.b);
out.g= lerp(t, a.g, b.g);
out.r= lerp(t, a.r, b.r);
out.a= lerp(t, a.a, b.a);
}
void WeightedAvergeOfRSVs(RageSpriteVertex& average_out, RageSpriteVertex const& rsv1, RageSpriteVertex const& rsv2, float percent_between)
{
average_out.p= lerp(percent_between, rsv1.p, rsv2.p);
@@ -207,8 +215,21 @@ int LuaFunc_color( lua_State *L )
c.PushTable( L );
return 1;
}
void LuaFunc_Register_color( lua_State *L ) { lua_register( L, "color", LuaFunc_color ); }
REGISTER_WITH_LUA_FUNCTION( LuaFunc_Register_color );
LUAFUNC_REGISTER_COMMON(color);
int LuaFunc_lerp_color(lua_State *L)
{
// Args: percent, color, color
// Returns: color
float percent= FArg(1);
RageColor a, b, c;
a.FromStack(L, 2);
b.FromStack(L, 3);
lerp_rage_color(c, a, b, percent);
c.PushTable(L);
return 1;
}
LUAFUNC_REGISTER_COMMON(lerp_color);
/*
* Copyright (c) 2006 Glenn Maynard
+1
View File
@@ -342,6 +342,7 @@ struct RageSpriteVertex // has color
RageVector2 t; // texture coordinates
};
void lerp_rage_color(RageColor& out, RageColor const& a, RageColor const& b, float t);
void WeightedAvergeOfRSVs(RageSpriteVertex& average_out, RageSpriteVertex const& rsv1, RageSpriteVertex const& rsv2, float percent_between);
struct RageModelVertex // doesn't have color. Relies on material color
+70
View File
@@ -2329,6 +2329,76 @@ LuaFunction( PrettyPercent, PrettyPercent( FArg(1), FArg(2) ) );
//LuaFunction( IsHexVal, IsHexVal( SArg(1) ) );
static bool UndocumentedFeature( RString s ){ sm_crash(s); return true; }
LuaFunction( UndocumentedFeature, UndocumentedFeature(SArg(1)) );
LuaFunction( lerp, lerp(FArg(1), FArg(2), FArg(3)) );
void luafunc_approach_internal(lua_State* L, int valind, int goalind, int speedind);
void luafunc_approach_internal(lua_State* L, int valind, int goalind, int speedind, int process_index)
{
#define TONUMBER_NICE(dest, num_name, index) \
if(!lua_isnumber(L, index)) \
{ \
luaL_error(L, "approach: " #num_name " for approach %d is not a number.", process_index); \
} \
dest= lua_tonumber(L, index);
float val= 0;
float goal= 0;
float speed= 0;
TONUMBER_NICE(val, current, valind);
TONUMBER_NICE(goal, goal, goalind);
TONUMBER_NICE(speed, speed, speedind);
#undef TONUMBER_NICE
if(speed < 0)
{
luaL_error(L, "approach: speed %d is negative.", process_index);
}
fapproach(val, goal, speed);
lua_pushnumber(L, val);
}
int LuaFunc_approach(lua_State* L);
int LuaFunc_approach(lua_State* L)
{
// Args: current, goal, speed
// Returns: new_current
luafunc_approach_internal(L, 1, 2, 3, 1);
return 1;
}
LUAFUNC_REGISTER_COMMON(approach);
int LuaFunc_multiapproach(lua_State* L);
int LuaFunc_multiapproach(lua_State* L)
{
// Args: {currents}, {goals}, {speeds}
// Returns: {currents}
// Modifies the values in {currents} in place.
if(lua_gettop(L) != 3)
{
luaL_error(L, "multiapproach: A table of current values, a table of goal values, and a table of speeds must be passed.");
}
size_t currents_len= lua_objlen(L, 1);
size_t goals_len= lua_objlen(L, 2);
size_t speeds_len= lua_objlen(L, 3);
if(currents_len != goals_len || currents_len != speeds_len)
{
luaL_error(L, "multiapproach: There must be the same number of current values, goal values, and speeds.");
}
if(!lua_istable(L, 1) || !lua_istable(L, 2) || !lua_istable(L, 3))
{
luaL_error(L, "multiapproach: current, goal, and speed must all be tables.");
}
for(size_t i= 1; i <= currents_len; ++i)
{
lua_rawgeti(L, 1, i);
lua_rawgeti(L, 2, i);
lua_rawgeti(L, 3, i);
luafunc_approach_internal(L, -3, -2, -1, i);
lua_rawseti(L, 1, i);
lua_pop(L, 3);
}
lua_pushvalue(L, 1);
return 1;
}
LUAFUNC_REGISTER_COMMON(multiapproach);
/*
* Copyright (c) 2001-2005 Chris Danford, Glenn Maynard
+1 -1
View File
@@ -2369,7 +2369,7 @@ bool ScreenGameplay::Input( const InputEventPlus &input )
{
AbortGiveUp( true );
if( GamePreferences::m_AutoPlay == PC_HUMAN && GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.GetCurrent().m_fPlayerAutoPlay == 0 )
if( GamePreferences::m_AutoPlay == PC_HUMAN && GAMESTATE->m_pPlayerState[input.pn]->m_PlayerOptions.GetCurrent().m_fPlayerAutoPlay == 0 )
{
PlayerInfo& pi = GetPlayerInfoForInput( input );
+33 -4
View File
@@ -42,7 +42,7 @@
* @brief The internal version of the cache for StepMania.
*
* Increment this value to invalidate the current cache. */
const int FILE_CACHE_VERSION = 217;
const int FILE_CACHE_VERSION = 221;
/** @brief How long does a song sample last by default? */
const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f;
@@ -89,6 +89,11 @@ Song::~Song()
FOREACH( Steps*, m_vpSteps, s )
SAFE_DELETE( *s );
m_vpSteps.clear();
FOREACH(Steps*, m_UnknownStyleSteps, s)
{
SAFE_DELETE(*s);
}
m_UnknownStyleSteps.clear();
// It's the responsibility of the owner of this Song to make sure
// that all pointers to this Song and its Steps are invalidated.
@@ -99,6 +104,7 @@ void Song::DetachSteps()
m_vpSteps.clear();
FOREACH_ENUM( StepsType, st )
m_vpStepsByType[st].clear();
m_UnknownStyleSteps.clear();
}
float Song::GetFirstSecond() const
@@ -154,6 +160,11 @@ void Song::Reset()
m_vpSteps.clear();
FOREACH_ENUM( StepsType, st )
m_vpStepsByType[st].clear();
FOREACH(Steps*, m_UnknownStyleSteps, s)
{
SAFE_DELETE(*s);
}
m_UnknownStyleSteps.clear();
Song empty;
*this = empty;
@@ -1023,6 +1034,10 @@ bool Song::SaveToSMFile()
vpStepsToSave.push_back( pSteps );
}
FOREACH_CONST(Steps*, m_UnknownStyleSteps, s)
{
vpStepsToSave.push_back(*s);
}
return NotesWriterSM::Write( sPath, *this, vpStepsToSave );
@@ -1055,6 +1070,10 @@ bool Song::SaveToSSCFile( RString sPath, bool bSavingCache )
pSteps->SetFilename(path);
vpStepsToSave.push_back( pSteps );
}
FOREACH_CONST(Steps*, m_UnknownStyleSteps, s)
{
vpStepsToSave.push_back(*s);
}
if (bSavingCache)
{
@@ -1504,9 +1523,19 @@ RString Song::GetTranslitFullTitle() const
void Song::AddSteps( Steps* pSteps )
{
m_vpSteps.push_back( pSteps );
ASSERT_M( pSteps->m_StepsType < NUM_StepsType, ssprintf("%i", pSteps->m_StepsType) );
m_vpStepsByType[pSteps->m_StepsType].push_back( pSteps );
// Songs of unknown stepstype are saved as a forwards compatibility feature
// so that editing a simfile made by a future version that has a new style
// won't delete those steps. -Kyz
if(pSteps->m_StepsType != StepsType_Invalid)
{
m_vpSteps.push_back( pSteps );
ASSERT_M( pSteps->m_StepsType < NUM_StepsType, ssprintf("%i", pSteps->m_StepsType) );
m_vpStepsByType[pSteps->m_StepsType].push_back( pSteps );
}
else
{
m_UnknownStyleSteps.push_back(pSteps);
}
}
void Song::DeleteSteps( const Steps* pSteps, bool bReAutoGen )
+2
View File
@@ -447,6 +447,8 @@ private:
vector<Steps*> m_vpSteps;
/** @brief the Steps of a particular StepsType that belong to this Song. */
vector<Steps*> m_vpStepsByType[NUM_StepsType];
/** @brief the Steps that are of unrecognized Styles. */
vector<Steps*> m_UnknownStyleSteps;
};
#endif
+2
View File
@@ -377,6 +377,7 @@ public:
static int AllFailed( T* p, lua_State *L ) { lua_pushboolean(L, p->AllFailed()); return 1; }
static int GetStage( T* p, lua_State *L ) { LuaHelpers::Push( L, p->m_Stage ); return 1; }
DEFINE_METHOD( GetStageIndex, m_iStageIndex )
DEFINE_METHOD(GetStepsSeconds, m_fStepsSeconds)
static int PlayerHasHighScore( T* p, lua_State *L )
{
lua_pushboolean(L, p->PlayerHasHighScore(Enum::Check<PlayerNumber>(L, 1)));
@@ -395,6 +396,7 @@ public:
ADD_METHOD( AllFailed );
ADD_METHOD( GetStage );
ADD_METHOD( GetStageIndex );
ADD_METHOD( GetStepsSeconds );
ADD_METHOD( PlayerHasHighScore );
ADD_METHOD( GetEarnedExtraStage );
}
+12 -1
View File
@@ -258,8 +258,16 @@ float Steps::PredictMeter() const
void Steps::TidyUpData()
{
// Don't set the StepsType to dance single if it's invalid. That just
// causes unrecognized charts to end up where they don't belong.
// Leave it as StepsType_Invalid so the Song can handle it specially. This
// is a forwards compatibility feature, so that if a future version adds a
// new style, editing a simfile with unrecognized Steps won't silently
// delete them. -Kyz
if( m_StepsType == StepsType_Invalid )
m_StepsType = StepsType_dance_single;
{
LOG->Warn("Detected steps with unknown style '%s' in '%s'", m_StepsTypeStr.c_str(), m_pSong->m_sSongFileName.c_str());
}
if( GetDifficulty() == Difficulty_Invalid )
SetDifficulty( StringToDifficulty(GetDescription()) );
@@ -465,12 +473,14 @@ void Steps::AutogenFrom( const Steps *parent_, StepsType ntTo )
{
parent = parent_;
m_StepsType = ntTo;
m_StepsTypeStr= GAMEMAN->GetStepsTypeInfo(ntTo).szName;
m_Timing = parent->m_Timing;
}
void Steps::CopyFrom( Steps* pSource, StepsType ntTo, float fMusicLengthSeconds ) // pSource does not have to be of the same StepsType
{
m_StepsType = ntTo;
m_StepsTypeStr= GAMEMAN->GetStepsTypeInfo(ntTo).szName;
NoteData noteData;
pSource->GetNoteData( noteData );
noteData.SetNumTracks( GAMEMAN->GetStepsTypeInfo(ntTo).iNumTracks );
@@ -489,6 +499,7 @@ void Steps::CopyFrom( Steps* pSource, StepsType ntTo, float fMusicLengthSeconds
void Steps::CreateBlank( StepsType ntTo )
{
m_StepsType = ntTo;
m_StepsTypeStr= GAMEMAN->GetStepsTypeInfo(ntTo).szName;
NoteData noteData;
noteData.SetNumTracks( GAMEMAN->GetStepsTypeInfo(ntTo).iNumTracks );
this->SetNoteData( noteData );
+2
View File
@@ -177,6 +177,8 @@ public:
void PushSelf( lua_State *L );
StepsType m_StepsType;
/** @brief The string form of the StepsType, for dealing with unrecognized styles. */
RString m_StepsTypeStr;
/** @brief The Song these Steps are associated with */
Song *m_pSong;
+6 -8
View File
@@ -223,15 +223,13 @@ void ArchHooks_MacOSX::DumpDebugInfo()
// Get system version
RString sSystemVersion;
{
long major = 0, minor = 0, bugFix = 0;
Gestalt( gestaltSystemVersionMajor, &major );
Gestalt( gestaltSystemVersionMinor, &minor );
Gestalt( gestaltSystemVersionBugFix, &bugFix );
if( bugFix )
sSystemVersion = ssprintf( "Mac OS X %ld.%ld.%ld", major, minor, bugFix );
char osrelease[256];
size_t size = sizeof(osrelease);
if( sysctlbyname( "kern.osrelease", osrelease, &size, NULL, 0 ) )
sSystemVersion = ssprintf( "Mac OS X %s", osrelease );
else
sSystemVersion = ssprintf( "Mac OS X %ld.%ld", major, minor );
sSystemVersion = ssprintf( "Mac OS X Unknown" );
}
size_t size;
@@ -25,7 +25,7 @@ void InputHandler_MacOSX_HID::QueueCallback( void *target, int result, void *ref
IOHIDQueueInterface **queue = (IOHIDQueueInterface **)sender;
IOHIDEventStruct event;
AbsoluteTime zeroTime = { 0, 0 };
HIDDevice *dev = This->m_vDevices[int( refcon )];
HIDDevice *dev = This->m_vDevices[size_t( refcon )];
vector<DeviceInput> vPresses;
while( (result = CALL(queue, getNextEvent, &event, zeroTime, 0)) == kIOReturnSuccess )
@@ -373,6 +373,50 @@ RString InputHandler_MacOSX_HID::GetDeviceSpecificInputString( const DeviceInput
return InputHandler::GetDeviceSpecificInputString( di );
}
// Modified from NESControllerInterface of Macifom project,
// used under MIT license from http://macifom.googlecode.com/svn-history/r89/Macifom/trunk/NESControllerInterface.m
// Used under MIT license from http://inquisitivecocoa.com/2009/04/05/key-code-translator/
static wchar_t KeyCodeToChar(CGKeyCode keyCode, unsigned int modifierFlags)
{
TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData);
const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr);
if( keyboardLayout )
{
UInt32 deadKeyState = 0;
UniCharCount maxStringLength = 255;
UniCharCount actualStringLength = 0;
UniChar unicodeString[maxStringLength];
OSStatus status = UCKeyTranslate(keyboardLayout,
keyCode, kUCKeyActionDown, modifierFlags,
LMGetKbdType(), 0,
&deadKeyState,
maxStringLength,
&actualStringLength, unicodeString);
if( status != noErr )
{
fprintf(stderr, "There was an %s error translating from the '%d' key code to a human readable string: %s\n",
GetMacOSStatusErrorString(status), (int)status, GetMacOSStatusCommentString(status));
}
else if( actualStringLength == 0 )
{
fprintf(stderr, "Couldn't find a translation for the '%d' key code\n", keyCode);
}
else
{
return unicodeString[0];
}
}
else
{
fprintf(stderr, "Couldn't find a translation for the '%d' key code\n", keyCode);
}
return 0;
}
wchar_t InputHandler_MacOSX_HID::DeviceButtonToChar( DeviceButton button, bool bUseCurrentKeyModifiers )
{
// KeyTranslate maps these keys to a character. They shouldn't be mapped to any character.
@@ -402,71 +446,15 @@ wchar_t InputHandler_MacOSX_HID::DeviceButtonToChar( DeviceButton button, bool b
return L'\0';
}
// Find the USB key code for this DeviceButton
// Use Text Input Source services to convert the key code to character code.
UInt8 iMacVirtualKey;
if( KeyboardDevice::DeviceButtonToMacVirtualKey( button, iMacVirtualKey ) )
{
UInt32 modifiers = 0;
if( bUseCurrentKeyModifiers )
modifiers = GetCurrentKeyModifiers();
// todo: handle Caps Lock -freem
SInt16 iCurrentKeyScript = GetScriptManagerVariable( smKeyScript );
SInt16 iCurrentKeyLayoutID = GetScriptVariable( iCurrentKeyScript, smScriptKeys );
static SInt16 iLastKeyLayoutID = !iCurrentKeyLayoutID; // Just be different.
static UInt32 iDeadKeyState;
static UCKeyboardLayout **KeyLayout;
if( iCurrentKeyLayoutID != iLastKeyLayoutID )
UInt32 nModifiers = bUseCurrentKeyModifiers ? GetCurrentKeyModifiers() : 0;
wchar_t sCharCode = KeyCodeToChar( iMacVirtualKey, nModifiers );
if( sCharCode != 0 )
{
iDeadKeyState = 0;
KeyLayout = (UCKeyboardLayout **)GetResource( 'uchr', iCurrentKeyLayoutID );
iLastKeyLayoutID = iCurrentKeyLayoutID;
}
if( KeyLayout )
{
UInt32 keyboardType = LMGetKbdType();
UInt32 nModifiers = bUseCurrentKeyModifiers ? GetCurrentKeyModifiers() : 0;
UniChar unicodeInputString[4];
UniCharCount length;
OSStatus status = UCKeyTranslate( *KeyLayout, iMacVirtualKey, kUCKeyActionDown, nModifiers,
keyboardType, 0, &iDeadKeyState, ARRAYLEN(unicodeInputString),
&length, unicodeInputString );
if( status )
return L'\0';
CFStringRef inputString = CFStringCreateWithCharacters( NULL, unicodeInputString, length );
char utf8InputString[7]; // Max size is 6 (although really only 4 are used) + null.
if( !CFStringGetCString(inputString, utf8InputString, 7, kCFStringEncodingUTF8) )
{
CFRelease( inputString );
return L'\0';
}
wchar_t ch = utf8_get_char( utf8InputString );
CFRelease( inputString );
return ch == INVALID_CHAR ? L'\0' : ch;
}
else
{
// Fall back on the 'KCHR' resource.
static unsigned long state = 0;
static Ptr keymap = NULL;
Ptr new_keymap;
new_keymap = (Ptr)GetScriptManagerVariable(smKCHRCache);
if( new_keymap != keymap )
{
keymap = new_keymap;
state = 0;
}
// XXX: Only returns ascii. é will be returned as e.
return KeyTranslate( keymap, UInt16(iMacVirtualKey)|modifiers, &state ) & 0xFF;
return sCharCode;
}
}
@@ -59,18 +59,8 @@ MemoryCardDriverThreaded_MacOSX::~MemoryCardDriverThreaded_MacOSX()
}
void MemoryCardDriverThreaded_MacOSX::Unmount( UsbStorageDevice *pDevice )
{
ParamBlockRec pb;
Str255 name; // A pascal string.
const RString& base = Basename( pDevice->sOsMountDir );
memset( &pb, 0, sizeof(pb) );
name[0] = min( base.length(), size_t(255) );
strncpy( (char *)&name[1], base, name[0] );
pb.volumeParam.ioNamePtr = name;
pb.volumeParam.ioVolIndex = -1; // Use ioNamePtr to find the volume.
if( PBFlushVolSync(&pb) != noErr )
{
if( sync_volume_np( pDevice->sOsMountDir.c_str(), SYNC_VOLUME_FULLSYNC | SYNC_VOLUME_WAIT ) != 0 )
LOG->Warn( "Failed to flush the memory card." );
}
+2
View File
@@ -45,6 +45,7 @@ inline Boolean LongValue( CFTypeRef o, long &n )
namespace __gnu_cxx
{
#ifndef __LP64__
template<>
struct hash<IOHIDElementCookie> : private hash<uintptr_t>
{
@@ -53,6 +54,7 @@ namespace __gnu_cxx
return hash<unsigned long>::operator()( uintptr_t(cookie) );
}
};
#endif
}
/* This is just awful, these aren't objects, treating them as such