Remove legacy network code

This commit is contained in:
Martin Natano
2022-04-11 14:50:00 -07:00
committed by teejusb
parent f1e3e4d519
commit 4c0aef69dd
124 changed files with 56 additions and 10863 deletions
-3
View File
@@ -1,8 +1,5 @@
# Prep options that are needed for each platform.
# This option allows for networking support with StepMania.
option(WITH_NETWORKING "Build with networking support." ON)
# This option quiets warnings that are a part of external projects.
option(WITH_EXTERNAL_WARNINGS
"Build with warnings for all components, not just StepMania." OFF)
+1 -6
View File
@@ -16,11 +16,6 @@ desired. However, SM5 does not support more than two players, so don't go past 2
usage: --mode=
Applys a GameCommand to all players if valid.
--------------------------------------------------------------------------------
[NetworkSyncManager]
* netip
usage: --netip=localhost
Connects to a server for online play.
--------------------------------------------------------------------------------
[PrefsManager]
* Type
usage: --Type=arcade
@@ -51,4 +46,4 @@ Displays version information.
[ThemeManager]
* metric
usage: --metric=(element)::(metric)=(value)
Sets [Element] Metric=Value in the metrics. Can be used multiple times.
Sets [Element] Metric=Value in the metrics. Can be used multiple times.
-7
View File
@@ -1,13 +1,6 @@
StepMania has a few compile flags that are helpful to know, as well as one
inherited from sm-ssc that should be nuked.
================================================================================
stepmania:
================================================================================
WITHOUT_NETWORKING
Disables all networking stuff (e.g. StepMania Online).
--------------------------------------------------------------------------------
================================================================================
sm-ssc:
================================================================================
-466
View File
@@ -1,466 +0,0 @@
PRELIMINARY - - - - - - - - 05/03/2004
Protocol version 4
But 0x04 will be its version for inter-protocol purposes.
This protocol is only intended to replace current protocol. Because current protocol
not expanable
SMLAN PROTCOL TCP/8765
Protcol is entirelly packaged in EzSockets Data Packets (use send and receive packet)
This will prevent any out-of-sync errors with future or past versions.
The protocol is impervious to fragmented, or bonded TCP packets.
Basic Representation:
Octet 0123 4 5
+----+-+---//--+
|ssss|C|Payload|
+----+-+---//--+
ssss - size of packet, handled by ezsockets (if you're using C++)
C - Command.
Payload - variable size based on command
The payload may contain more data than expected, i.e. new protocol version.
In the following protocol, the term size means the size of the chunk of data.
If the "size" is "NT" then that means it's a null-terminating string.
"MSN" most significant 4 bits (byte/16)
"LSN" least significant 4 bits (byte%16)
Note: Primary player is 0x0, secondary player is 0x1
CLIENT to SERVER protocol:
000: No Operation
Desc: This command will cause server to respond with a no op response.
Payload: None
Response: Server 001
001: No Operation Response
Desc: This command is used to respond to a no operation.
Payload: None
Response: None
002: Hello
Desc: This is the first packet from a client to server, stating below
information (NOTE: Names are no longer sent in this packet)
Payload:
Size Description:
1 Client protocol version
NT Name of build of StepMania
Response: Server 002
003: Game Start Request
Desc: This command is called once after most loading is done, and
again immediately before the sound starts.
Payload:
Size Description
MSN Primary player difficulty (feet) (0 for no player)
LSN Secondary player difficulty (feet) (0 for no player)
MSN Primary player difficulty (0=Beginner, 1=easy, etc.)
LSN Second player difficulty (0=Beginner, 1=easy, etc.)
MSN Start Position (0 is pre-sync, 1 is for sync)
LSN Reserved
NT Song Title
NT Song Subtitle
NT Song Artist
NT Course Title (If none exists; make it just a null)
NT Song Options (in string-format)
NT Primary Player's options (Null if non-existant)
NT Secondary Player's Options (Null if non-existant)
Response: Server 003
004: Game Over Notice
Desc: This command is sent when end of game is encounterd
Payload: None.
Response: None.
005: Game Status update
Desc: Updates game info for each step
Payload:
Size Description
MSN Player #
Protocol <= 2
LSN StepID
1: Miss
2: W5
3: W4
4: W3
5: W2
6: W1
7: LetGo
8: Held
Protocol >= 3
LSN StepID
1: HitMine
2: AvoidMine
3: Miss
4: W5
5: W4
6: W3
7: W2
8: W1
9: LetGo
10: Held
MSN Projected Grade (StepMania enum int)
LSN Reserved
4 Net-order long containing score.
2 Net-order int containing combo.
2 Net-order int containing health.
2 Net-order # containing offset
32767 would be DEAD on the note
If the user is hitting late, the # will be higher
It if the user is exactly 0.25 seconds off, the
number will be different by 500, if 0.5, it will be
different by 1000.
Response: None.
006: Style Update (PLEASE NOTE THIS HAS NOTHING TO DO WITH SERVER COMMAND 6)
Desc: This is sent when a style is chosen.
Size:
1 # of enabled players (1 means 1, 2 means 2)
1 Player # (0 means 1st, 1 means 2nd)
NT Player Name for #
(Additional player's and #'s) (enabled players ONLY)
Response: None
007: Chat message
Desc: The user typed a message for general chat.
Size:
NT Message
008: Request Start Game and Tell server existance/non existance of song.
Desc: The user selected a song on a Net-enabled selection
Size:
1 Usage of message
0: (in response to server 8) User has specified song
1: (in response to server 8) User does NOT have specified song
2: User requested a start game on given song
NT Song Title (As gotten by GetTranslitMainTitle)
NT Song Artist (As Gotten by GetTranslitArtist)
NT Song Subtitle (As gotten by GetTranslitSubTitle)
009: //Reserved
010: User entered/exited Network Music Selection Screen
Size:
1
0: exited ScreenNetSelectMusic
1: entered ScreenNetSelectMusic
2: **Not Sent**
3: entered options screen
4: exited the evaluation screen
5: entered evaluation screen
6: exited ScreenNetRoom
7: entered ScreenNetRoom
011: User has changed player options
Size:
NT Player 0's options
NT Player 1's options
012: SMOnline Packet. //SPECIAL CASE!!!
NOTE: The smonline packet is not defined here.
The SMLan packet 12 is a wrapper for the SMOnline packet.
This is so that we can have "protection" of sorts when
it comes to the coding of SMOnline, so we don't have to
use the lower level commands when dealing with SMOnline.
Size:
1 SMOnline command //This used to say 2, but it looks like 1 in all cases
<VARIABLE> SMOnline data
013: Reserved
014: Reserved
015: XML Packet. This packet contains data in XML format.
Size:
NT XML
SERVER to CLIENT protocol: (begins at 128)
NOTE: Server responses always add 128, thus a server response for no operation
is 128, not 000
000(128):No Operation
Desc: This command will cause server to respond with a no op response.
Payload: None
Response: Server 001
001(129):No Operation Response
Desc: This command is used to respond to a no operation.
Payload: None
Response: None
002(130):Server Hello Response
Desc: This introduces the server.
Payload:
Size Description
1 Server protocol version //NOTE: if protocol version is 128+, then this
server is an SMOnline server
NT Server Name
4 Random key ( at the moment only used for an alternate login method )
003(131):Allow Start
Desc: This will cause the client to start the game.
Payload: None
Response: None
004(132):Game over stats
Desc: this packet is send in response to the game over packet
it contains information regarding how well each player did.
Payload:
1 # of players sent in this packet (active players)
The way this works is to send every player's info for a given
field. Like every player's score will be sent first, then every
player's grade.
1 First player's player ID
<Other player's IDs>
4 Score
<Other player's scores>
1 Grade
<Other player's Grades>
1 Difficulty (0=beginner, 1=light, etc.)
<Other player's difficulties>
#this next chunk of step types is actually reversed
2 miss
<Other player's misses>
2 boo
<Other player's boos>
2 good (All players)
2 great (All players)
2 perfect (All players)
2 marvelous (All players)
2 ok (All players)
2 max_combo (All players)
NT Player's options
<Other player's options>
005:(133)Scoreboard update
Desc: This will update the client's scoreboard.
Payload:
Size
1 Which section
0: Names
1: Combos
2: Projected Grades
1 # of players to display
If Names, then:
1 Player in first place's index
1 Player in second place's index
...
1 Last player's index
If Combos, then:
2 First player's combo
2 Second Player's combo
...
2 Last player's combo
If Project grades
1 Player 1's grade (in the same format used when reporting projected grades)
1 Player 2's grade
...
1 Last player's projected grade
006:(134)System Message (PLEASE NOTE THIS HAS NOTHING TO DO WITH CLIENT COMMAND 6)
Desc: Send system message to user
Payload:
Size Description
NT Message
007:(135)Chat Message
Desc: Add a chat message to the chat window on some StepMania screens.
Payload:
Size Description
NT Message
008:(136)Tell client to start song/ask if client has song
Desc: The user selected a song on a Net-enabled selection
Size:
1 Usage of message
0: See if client has song
1: See if client has song, if so, scroll to song
2: See if client has song, if so, scroll to song, and play that song
3: Blindly start song
NT Song Title (As gotten by GetTranslitMainTitle)
NT Song Artist (As Gotten by GetTranslitArtist)
NT Song Subtitle (As gotten by GetTranslitSubTitle)
009:(137)Update user list
Desc: This sends all the users currently connected
Size:
1 Max # of players
1 # of players in this packet
1 Player 0's status
NT Player 0's name (if there is no player here... make it a null (""))
1 Player 1's status
NT Player 1's name
...
1 Last player's status
NT Last player's name
Status:
0 Inative (no info on this user yet)
1 Active (you know who it is)
2 In Selection Screen
3 In Options
4 In Evaluation
010:(138)Force change to Networking select music screen.
Size:
NT Set Specified gametype
NT Set Specified style
011:(139)Reserved
012:(140)SMOnline Packet. //SPECIAL CASE!!!
NOTE: The smonline packet is not defined here.
The SMLan packet 12 is a wrapper for the SMOnline packet.
This is so that we can have "protection" of sorts when
it comes to the coding of SMOnline, so we don't have to
use the lower level commands when dealing with SMOnline.
Size:
1 SMOnline command
<VARIABLE> SMOnline data
013:(141)Formatted information packet
Desc: Send formatted information regarding the server back to the player.
NOTE: The purpose of this function is alternatively to be a broadcast
packet. (You can expect it via UDP broadcast)
Size:
NT Server Name
2 Port the server is listening on
2 Number of players connected
014:(142)Attack Client
Size:
1 Player Number
4 Time to Last (in MS)
NT Text describing modifiers.
015:(143) XML reply. Contains XML
Size:
NT XML
----------------------------------------------------------------
Client SMOnline packets:
000: Send Login Information
Size:
1 Player Number
1 Encryption text
0: MD5 hash
1: MD5 ( MD5 hash + salt ) (salt is plain text, base 10 string )
NT Username
NT Password
Note: The client is not permitted to use method (1) for authentication
if the salt it received from the server is 0
001: User asks to enter room
Size:
1 Enter/Exit?
0: User wishes to exit room
1: User wishes to enter room
NT Room Name (Used when entering rooms)
NT Password (Empty if password not used)
002: Create a new Room
Size:
1 Room Type
0: Normal room (has sub rooms)
1: Game room (no sub rooms)
NT Room Title
NT Room Description
NT Room Password (blank if no password)
003: Requests Room Info
Size:
NT Room Name
Server SMOnline packets:
000: Login Response
1 Approval Status
0: Approved
1: Approval Failed
NT Login response (plain text)
001: Room Update (Changing rooms)
Size:
1 Type of update
0: Change Room Title
1: Update List of other rooms (or games)
If Room Title Update:
NT Room Title
NT Room Description
1 Type of room:
0: Chat room
1: Game room
1 Allows creation of sub room.
0: Does not allow creation of subrooms
1: Allows creation of subrooms
If Room List Update:
1 Number of rooms
NT Room1 Title
NT Room1 Description
NT Room2 Title
NT Room2 Description
...
NT RoomN Title
NT RoomN Description
Room Status appended for reverse compatibility
1 Room1 Status
0: Normal Room
1: Unused
2: Room in game
3: First stage of song selection has been done
4: Second stage of song selection has been done
1 Room2 Status
...
1 RoomN Status
Room Flags appended for reverse compatibility
1 Room1 Flags
bit 0: Passworded if true
1 Room2 Status
...
1 RoomN Status
002: Request general information from server.
1 Format for stats
0: Normal unformatted stats
003: Room Info
Size:
NT Last Song Title
NT Last Song Subtitle
NT Last Song Artist
1 Num Players
1 Max Players
NT Player1 Name
...
NT PlayerN Name
-554
View File
@@ -1,554 +0,0 @@
A re-writing of the SMLan Protocol, because I wish to understand it in
my own words. -aj
Protocol version: 0x04 (v4)
This has nothing to do with the server versions (see below)
==Client Versions==
(NETPROTOCOLVERSION in NetworkSyncManager.h)
1: StepMania 3.9 (SMLan?)
2: StepMania 3.95
3: StepMania 4 alphas, sm-ssc v1.0-v1.2.5, StepMania 5
==Server Versions==
1: SMLan (old)
128: SMOnline
129: SMOnline with "better song identification using chart hashes"
==Notes==
I use the term "client" and "player" interchangeably.
The original document used "client" and "user" interchangeably.
These two notes are from the SMOCaml project:
https://sourceforge.net/projects/smocaml/
Command S2C 004 (132): The data from miss to marvelous are reversed
Commands C2S 012-001 and 012-001: when there is no password the 'password' field
isn't sended at all, not even a NULL character
==Information==
The default port is 8765/tcp, though this is actually assigned to Ultraseek HTTP
by the IANA (see http://www.iana.org/assignments/port-numbers).
A modern/official online server for StepMania will use the currently unassigned
port 48040/tcp (and/or udp if the need arises). (Port number subject to change.)
The protocol is packaged in "EzSockets Data Packets".
A basic representation
0123 4 5...... [Octets]
+----+-+---//--+
|ssss|C|Payload| [data]
+----+-+---//--+
where:
ssss = Size of packet (handled by EzSockets if using C++)
C = Command
Payload = (variable size based on command)
The payload may contain more data than expected, for instance, if it's a new
protocol version.
"Size" refers to the size of the data chunk.
Some commonly referred to size types:
NT = Null-terminated string
MSN = Most significant 4 bits (byte/16)
LSN = Least significant 4 bits (byte%16)
The primary player is 0x0, secondary is 0x1. This does not take into account
Multiplayer notefields.
==[ Client -> Server Communication Protocol ]===================================
0x00 (000) No Operation
This command will case the server to respond with a nop.
Payload: None
Expected response: Server 0x01 (001)
________________________________________________________________________________
0x01 (001) No Operation Response
This command is used to respond to a no operation.
Payload: None
Expected response: None
________________________________________________________________________________
0x02 (002) Hello
This is the first packet a client sends to the server.
Payload:
[Size] [Description]
0x01 Client Protocol Version (see Client Versions above)
NT StepMania build name (PRODUCT_ID)
Expected response: Server 0x02 (002)
________________________________________________________________________________
0x03 (003) Game Start Request
Payload:
[Size] [Description]
MSN Primary Player Meter [0 if no player]
LSN Secondary Player Meter [0 if no player]
MSN Primary Player Difficulty
0 = Beginner
1 = Easy
2 = Medium
3 = Hard
4 = Expert
LSN Secondary Player Difficulty (values same as primary)
MSN Start Position:
0 = pre-sync
1 = sync
LSN Reserved
NT Song Title
NT Song Subtitle
NT Song Artist
NT Course Title (null if doesn't exist)
NT Song options string
NT Primary player's options (null if doesn't exist)
NT Secondary player's options (null if doesn't exist)
Expected response: Server 0x03 (003)
________________________________________________________________________________
0x04 (004) Game Over Notice
Sent when end of game is encountered. I think technically this is round over.
Payload: None
Expected response: None (though later in the document you'd assume Server 0x04)
________________________________________________________________________________
0x05 (005) Game Status Update
The payload changes between protocols, and it will likely have to change again
to account for some more StepIDs.
Payload:
[Size] [Description]
MSN Player Number
LSN StepID
(if Protocol >= 3)
1 = HitMine
2 = AvoidMine
3 = Miss
4 = W5
5 = W4
6 = W3
7 = W2
8 = W1
9 = LetGo
10 = Held
(if Protocol <= 2; Don't support these in any new server software)
1 = Miss
2 = W5
3 = W4
4 = W3
5 = W2
6 = W1
7 = LetGo
8 = Held
MSN Projected Grade (StepMania enum int, which can cause problems with themes.)
LSN Reserved (so discuss it with people if changing)
0x04 Score (net-order long)
0x02 Combo (net-order int; songs with large combos may cause issues?)
0x02 Health (net-order int)
0x02 Offset (net-order number. huh)
32767 would be DEAD on the note
If the user is hitting late, the # will be higher.
It if the user is exactly 0.25 seconds off, the number will be
different by 500. With this pattern 0.5 seconds gives a difference of 1000.
Expected response: None
________________________________________________________________________________
0x06 (006) Style Update
!IMPORTANT! This command is unrelated to Server Command 0x06 (006). !IMPORTANT!
This is sent when a style is chosen.
Payload:
[Size] [Description]
0x01 Number of enabled players (1 or 2)
0x01 Player Number (0 = P1, 1 = P2)
NT Player name for specified player number
Expected response: None
________________________________________________________________________________
0x07 (007) Chat Message
Send a general chat message.
Payload:
[Size] [Description]
NT Message
Expected response: none?
________________________________________________________________________________
0x08 (008) Request Start Game, Tell server if Song exists or not.
The player selected a song on a net-enabled screen.
Payload:
[Size] [Description]
0x01 Message Use:
0 = User has specified song (response to Server 0x08)
1 = User does not have specified song (response to Server 0x08)
2 = User has requested start game for the song
NT Song Title (GetTranslitMainTitle)
NT Song Artist (GetTranslitArtist)
NT Song Subtitle (GetTranslitSubTitle)
Expected response: none?
________________________________________________________________________________
0x09 (009) [Reserved]
________________________________________________________________________________
0x0A (010) User entered/exited a network screen
Payload:
[Size] [Description]
0x01 Status:
0 = exited ScreenNetSelectMusic
1 = entered ScreenNetSelectMusic
2 = not sent
3 = entered Options
4 = exited ScreenNetEvaluation
5 = entered ScreenNetEvaluation
6 = exited ScreenNetRoom
7 = entered ScreenNetRoom
Expected response: none?
________________________________________________________________________________
0x0B (011) Player options changed
Payload:
[Size] [Description]
NT Player 0's options (PLAYER_1)
NT Player 1's options (PLAYER_2)
Expected response: none?
________________________________________________________________________________
0x0C (012) SMOnline Packet (Special Case)
The SMOnline Packet is not defined here.
SMLan packet 12 is a wrapper for the SMOnline packet. It is used for
"protection" of sorts for the SMO coders.
Payload:
[Size] [Description]
0x01 SMOnline command
<...> SMOnline data (<...> = "<VARIABLE>" in original docs)
Expected response: none?
________________________________________________________________________________
0x0D (013) [Reserved]
________________________________________________________________________________
0x0E (014) [Reserved]
________________________________________________________________________________
0x0F (015) XML Packet
This packet contains data in XML format.
Payload:
[Size] [Description]
NT XML
Expected response: none?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
==[ Server -> Client Communication Protocol ]===================================
The Server->Client Communication Protocol begins at 0x80 (128). References to
protocol numbers based on 000 will appear here as well.
________________________________________________________________________________
0x80 (128) [0x00 (000)] No Operation
This command makes the server respond with a nop.
Expected Response: Server 0x01 (001; so really 0x81/129?)
________________________________________________________________________________
0x81 (129) [0x01 (001)] No Operation Response
The response the server gives to a client nop.
________________________________________________________________________________
0x82 (130) [0x02 (002)] Server Hello Response
Introduces the server to the client.
Payload:
[Size] [Description]
0x01 Server Protocol version (if >= 128; server is SMOnline.)
NT Server Name
0x04 Random Key (or Salt, iirc. Used for alternate login method.)
________________________________________________________________________________
0x83 (131) [0x03 (003)] Allow Start
Causes the client to start the game.
________________________________________________________________________________
0x84 (132) [0x04 (004)] Game over stats
Sent in response to the game over packet.
(Technically, this is the evaluation stats.)
Payload:
[Size] [Description]
0x01 Number of players in this packet (active)
Send every player's information for a given field.
0x01 First player's PlayerID
<other PlayerIDs>
0x04 Score
<other Scores>
0x01 Grade
<other Grades>
0x01 Difficulty (0 = Beginner, &c.)
<other Difficulties>
(the steps type section is reversed. We may need to do some packet analysis.)
0x02 Judgement_Miss
<other Miss counts>
0x02 Judgement_W5 (Boo)
<other W5s>
0x02 Judgement_W4 (Good)
<other W4s>
0x02 Judgement_W3 (Great)
<other W3s>
0x02 Judgement_W2 (Perfect)
<other W2s>
0x02 Judgement_W1 (Marvelous)
<other W1s>
0x02 Judgement_Held (OK)
<other Helds>
(LetGo doesn't seem to be handled.)
0x02 Max Combo
<other MaxCombos>
NT Player options
<other Player Options>
________________________________________________________________________________
0x85 (133) [0x05 (005)] Scoreboard update
Update the client's scoreboard.
Payload:
[Size] [Description]
0x01 Section
0 = names
1 = combos
2 = grades (Projected)
0x01 Number of players to display
The rest of the payload depends on section.
switch(section)
{
case Names:
0x01 Index of Player in 1st place
0x01 Index of Player in 2nd place
...
0x01 Last player's index
break;
case Combos:
0x01 Player 1's combo
0x01 Player 2's combo
...
0x01 Last player's combo
break;
case Grades: // uses same format as other Grade reports
0x01 Player 1's grade
0x01 Player 2's grade
...
0x01 Last player's grade
break;
}
________________________________________________________________________________
0x86 (134) [0x06 (006)] System Message
!IMPORTANT! This command is unrelated to Server Command 0x06 (006). !IMPORTANT!
Send a system message to the user.
Payload:
[Size] [Description]
NT Message
________________________________________________________________________________
0x87 (135) [0x07 (007)] Chat Message
Add a message to the chat window. ("on some StepMania screens.")
Payload:
[Size] [Description]
NT Message
________________________________________________________________________________
0x88 (136) [0x08 (008)] Ask if client has song/Tell client to start song
The player selected a song on a net-enabled screen.
Payload:
[Size] [Description]
0x01 Message Type
0 = See if client has song.
1 = See if client has song. If so, scroll to it.
2 = See if client has song. If so, scroll to it and play it.
3 = Blindly start song. (Probably assumes everyone has the song.)
NT Song Title (GetTranslitMainTitle)
NT Song Artist (GetTranslitArtist)
NT Song Subtitle (GetTranslitSubTitle)
________________________________________________________________________________
0x89 (137) [0x09 (009)] Update user list
Sends all the players currently connected.
Payload:
[Size] [Description]
0x01 Max number of players
0x01 Number of players in this packet
0x01 Player 0's status
NT Player 0's name (if no player, it should be an empty string ("").)
...
0x01 Last player's status
NT Last player's name
The status flag:
0x00 = Inactive (user unknown)
0x01 = Active (user known)
0x02 = On a selection screen
0x02 = In options
0x02 = On Eval.
________________________________________________________________________________
0x8A (138) [0x0A (010)] Force change to NetSelectMusic
Payload:
[Size] [Description]
NT Gametype to set
NT Style to set
________________________________________________________________________________
0x8B (139) [0x0B (011)] Reserved
________________________________________________________________________________
0x8C (140) [0x0C (012)] SMOnline Packet (Special Case)
The SMOnline Packet is not defined here.
SMLan packet 12 is a wrapper for the SMOnline packet. It is used for
"protection" of sorts for the SMO coders.
Payload:
[Size] [Description]
1 SMOnline command
<...> SMOnline data (<...> = "<VARIABLE>" in original docs)
________________________________________________________________________________
0x8D (141) [0x0D (013)] Formatted information packet
Send formatted information about the server back to the player.
This function is alternatively a broadcast packet (via UDP).
Payload:
[Size] [Description]
NT Server name
0x02 Server port
0x02 Number of players connected
________________________________________________________________________________
0x8E (142) [0x0E (014)] Attack client
Payload:
[Size] [Description]
0x01 Player number
0x04 Attack length (milliseconds)
NT Modifier string
________________________________________________________________________________
0x8F (143) [0x0F (015)] XML reply
Payload:
[Size] [Description]
NT XML data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
==[ Client SMOnline Packets ]===================================================
0x00 (000) Send Login Information
Payload:
[Size] [Description]
0x01 Player Number
0x01 Encryption Text:
0 = MD5 hash
1 = MD5(MD5 hash + salt), where salt is a plaintext base 10 string.
NT Username
NT Password
If the server's salt is 0, Encryption Text can't be 1. Block login.
________________________________________________________________________________
0x01 (001) Ask to enter room
Payload:
[Size] [Description]
0x01 Enter or Exit?:
0 = Exit
1 = Enter
NT Room Name (only when entering)
NT Password (empty if unused)
________________________________________________________________________________
0x02 (002) Create a new room
Payload:
[Size] [Description]
0x01 Room Type:
0 = Normal (with subrooms)
1 = Game (no subrooms)
NT Room Title
NT Room Description
NR Room Password (blank if no password)
________________________________________________________________________________
0x03 (003) Request room info
Payload:
[Size] [Description]
NT Room name
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
==[ Server SMOnline Packets ]===================================================
0x00 (000) Login Response
Payload:
[Size] [Description]
0x01 Approval status:
0 = Login OK
1 = Login Failed
NT Login Response (plaintext)
________________________________________________________________________________
0x01 (001)
Payload:
The payload changes depending on the type of update.
[Size] [Description]
0x01 Update Type:
0 = Change Room Title
1 = Update List of rooms/games
if Update Type == 0 (Change Room Title)
[Size] [Description]
NT Room Title
NT Room Description
0x01 Room Type:
0 = Chat
1 = Game
0x01 Allow Subroom creation?
0 = No
1 = Yes
if Update Type == 1 (Update room/game list)
[Size] [Description]
0x01 Number of rooms
for 1 to Number of Rooms where room number = # do
NT Room# Title
NT Room# Description
Reverse compatiblity Room Status
[Size] [Description]
0x01 Room# Status
0 = Normal
1 = unused
2 = Playing Game
3 = Song Selection Stage1
4 = Song Selection Stage2
Reverse compatiblity Room Flags
[Size] [Description]
0x01 Room# Flags
if bit 0, Passworded
________________________________________________________________________________
0x02 (002) Request general information from server.
Payload:
[Size] [Description]
0x01 Stats format
0 = Normal unformatted stats
________________________________________________________________________________
0x03 (003) Request room information
Payload:
[Size] [Description]
NT Last Song Title
NT Last Song Subtitle
NT Last Song Artist
0x01 Number of players
0x01 Max players
NT Player1 name
...
NT Last player (PlayerN) name
+1 -5
View File
@@ -1,14 +1,10 @@
Code that uses ScreenTextEntry::TextEntry()
-------------------------------------------
RoomWheel.cpp
ScreenEdit.cpp
ScreenEditMenu.cpp
ScreenNetRoom.cpp
ScreenNetworkOptions.cpp
ScreenOptionsCourseOverview.cpp
ScreenOptionsManageCourses.cpp
ScreenOptionsManageEditSteps.cpp
ScreenOptionsManageProfiles.cpp
ScreenOptionsReviewWorkout.cpp
ScreenPackages.cpp
ScreenTestFonts.cpp
ScreenTestFonts.cpp
-132
View File
@@ -1,132 +0,0 @@
[How to Use EzSockets by freem]
Hey there. ezsockets is the socket library used in StepMania. If you are going to
develop any extended network functionality, it would be good to know about
ezsockets. This is by no means an exhaustive guide, as it just covers what's
contained in the header, as well as what that code does.
Section 1: low level commands===================================================
These are typically used for connecting to the server, according to a cursory
glance at ScreenPackages code.
=="Crating" a socket== (lol typos in the comments)
There are three functions here, each with different arguments (yay overloading).
All of them return a bool.
bool create(int Protocol, int Type);
This shows what's needed to make a socket. Consult the internet for complete
documentation as to possible values, but here are some ones to know:
[Protocol]
TCP = IPPROTO_TCP
UDP = IPPROTO_UDP
Raw sockets = IPPROTO_RAW (though "Protocol" is used in the code. Raw sockets
are not supported on Xbox)
bool create();
Creates a socket using (IPPROTO_TCP, SOCK_STREAM) as the parameters.
bool create(int Protocol);
This picks the right Type for you based on what Protocol you choose.
TCP uses SOCK_STREAM, UDP uses SOCK_DGRAM for the Type value.
==Binding Sockets to a Local Port==
bool bind(unsigned short port);
==Listening==
bool listen()
==Accepting==
bool accept(EzSockets &socket);
If it's not blocking and you can't read it, this will return false.
Other than that... ??
==Connecting to Server==
bool connect(const string& host, unsigned short port);
Connects to the server at host using port.
==Closing/Killing Sockets==
void close();
Sets the state to disconnected, sets the buffers to empty strings,
then closes the socket.
==Checking Socket Status==
bool check();
"see if socket has been created". It checks (sock != INVALID_SOCKET) on the
Xbox and (sock > SOCKET_NONE) on every other platform.
bool CanRead();
Returns true if you can read from the socket.
bool DataAvailable() { return ( ( inBuffer.length()>0 ) || CanRead() ); }
Yeah that's it in a nutshell. If the input buffer has data or you can read,
there's data available.
bool IsError();
Returns true if there's an error.
bool CanWrite();
Returns true if you can write to the socket.
==???==
long uAddr();
void update();
Section 2: Higher Level Commands================================================
These are higher level, since they assume you've already gotten the socket up
and running (see check() in Section 1).
//Raw data system
void SendData(const string& outData);
void SendData(const char *data, unsigned int bytes);
Send off some data that's either a string or a char buffer + num bytes.
int ReadData(char *data, unsigned int bytes);
Reads data, returns number of bytes read.
int PeekData(char *data, unsigned int bytes);
Peeks at the data, returns number of bytes read.
//Packet system (for structures and classes)
void SendPack(const char *data, unsigned int bytes);
int ReadPack(char *data, unsigned int max);
int PeekPack(char *data, unsigned int max);
Similar to the raw data system above, but... you guessed it, for structures and classes.
//String (Flash) system / Null-terminated strings
void SendStr(const string& data, char delim = '\0');
int ReadStr(string& data, char delim = '\0');
int PeekStr(string& data, char delim = '\0');
Similar to above, with null terminated strings.
Section 3: putting it all together==============================================
okay i didn't test this; this is based on ScreenPackages code (specifically
ScreenPackages::EnterURL()), which assumes you have a private EzSockets object
named m_wSocket.
{
// defaults
RString sProto;
RString sServer;
int iPort=80;
RString sAddress;
m_wSocket.create(); // will create a TCP socket
m_wSocket.blocking = true; // you want to set this so that nothing else can use this socket and fuck things up
m_wSocket.connect( sServer, (short)iPort ); // connect uses an unsigned short, so a cast is needed. (int was used because of other code) check if this returns true/false, pls
// makin' headers (using SendData with raw data; http 1.0 in this case)
RString Header="";
Header = "GET "+sAddress+" HTTP/1.0\r\n";
Header+= "Host: " + Server + "\r\n";
Header+= "Connection: closed\r\n\r\n";
m_wSocket.SendData( Header.c_str(), Header.length() );
m_wSocket.blocking = false; // once you're done, you don't need to have the socket blocking anymore
// some other code can go here...
m_wSocket.close(); // and if you're done, you can close the socket.
}
-29
View File
@@ -157,7 +157,6 @@
<Function name='ResolveRelativePath'/>
<Function name='RoutineSkinP1'/>
<Function name='RoutineSkinP2'/>
<Function name='SMOnlineScreen'/>
<Function name='Saturation'/>
<Function name='SaveProfileCustom'/>
<Function name='SaveScreenshot'/>
@@ -1641,9 +1640,6 @@
<Function name='Load'/>
<Function name='targetnumber'/>
</Class>
<Class base='WheelBase' name='RoomWheel'>
<Function name='Move'/>
</Class>
<Class base='BitmapText' name='ScoreDisplayAliveTime'/>
<Class base='BitmapText' name='ScoreDisplayCalories'/>
<Class base='ActorFrame' name='Screen'>
@@ -1711,31 +1707,6 @@
<Function name='GetFinalized'/>
<Function name='GetSelection'/>
</Class>
<Class base='ScreenEvaluation' name='ScreenNetEvaluation'>
<Function name='GetNumActivePlayers'/>
</Class>
<Class base='ScreenNetSelectBase' name='ScreenNetRoom'>
<Function name='GetMusicWheel'/>
<Function name='SelectCurrent'/>
</Class>
<Class base='ScreenWithMenuElements' name='ScreenNetSelectBase'>
<Function name='ChatboxInput'/>
<Function name='ChatboxVisible'/>
<Function name='GetChatLines'/>
<Function name='GetChatScroll'/>
<Function name='GetUser'/>
<Function name='GetUserQty'/>
<Function name='GetUserState'/>
<Function name='ScrollChatDown'/>
<Function name='ScrollChatUp'/>
<Function name='ShowNextMsg'/>
<Function name='ShowPreviousMsg'/>
<Function name='UsersVisible'/>
</Class>
<Class base='ScreenNetSelectBase' name='ScreenNetSelectMusic'>
<Function name='GetMusicWheel'/>
<Function name='SelectCurrent'/>
</Class>
<Class base='ScreenWithMenuElements' name='ScreenOptions'>
<Function name='AllAreOnLastRow'/>
<Function name='FocusedItemEndsScreen'/>
+12 -23
View File
@@ -95,8 +95,8 @@ save yourself some time, copy this for undocumented things:
CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s.
Erm, I mean... Clamps <code>fValue</code> between <code>fLow</code> and <code>fHigh</code>.
</Function>
<Function name='CloseConnection' return='void' arguments=''>
Closes any connection to an online server.
<Function name='CloseConnection' return='bool' arguments=''>
[Deprecated] Always returns <code>false</code>.
</Function>
<Function name='collectgarbage' return='void' arguments='string opt, float arg'>
A generic interface to Lua's garbage collector. Performs different functions based on the value of <code>opt</code>.<br />
@@ -143,7 +143,7 @@ save yourself some time, copy this for undocumented things:
The <code>comma</code> and <code>dot</code> arguments are provided to ease compliance with locales or languages that do not use comma and dot in numbers the way English does.
</Function>
<Function name='ConnectToServer' return='bool' arguments='string sAddress'>
Tries to connect to the server at <code>sAddress</code>.
[Deprecated] Always returns <code>false</code>.
</Function>
<Function name='CourseDifficultyToLocalizedString' return='string' arguments='Difficulty d'>
Returns <Link class='ENUM' function='Difficulty' /> <code>d</code> localized for the current language using strings defined under <code>[CourseDifficulty]</code>.
@@ -281,7 +281,7 @@ save yourself some time, copy this for undocumented things:
Returns the screen display aspect ratio (i.e. the <code>DisplayAspectRatio</code> preference).
</Function>
<Function name='GetServerName' return='string' arguments=''>
Returns the name of the currently connected server.
[Deprecated] Always returns <code>""</code>.
</Function>
<Function name='GetSongBackground' theme='_fallback' return='string' arguments=''>
[02 Utilities.lua] Returns a path to the current songs background.
@@ -388,13 +388,13 @@ save yourself some time, copy this for undocumented things:
[02 Utilities.lua] Returns <code>true</code> if the coin mode is set to <Link class='ENUM' function='CoinMode'>CoinMode_Home</Link>.
</Function>
<Function name='IsNetConnected' return='bool' arguments=''>
Returns <code>true</code> if connected to the Internet.
[Deprecated] Always returns <code>false</code>.
</Function>
<Function name='IsNetSMOnline' return='bool' arguments=''>
Returns <code>true</code> if connected to StepMania Online.
[Deprecated] Always returns <code>false</code>.
</Function>
<Function name='IsSMOnlineLoggedIn' return='bool' arguments='PlayerNumber pn'>
Returns <code>true</code> if Player <code>pn</code> is logged on to a SMOnline server.
[Deprecated] Always returns <code>false</code>.
</Function>
<Function name='IsW1Allowed' theme='_fallback' return='bool' arguments='TapNoteScore tns'>
[04 Scoring.lua] Returns <code>true</code> if W1 is allowed (and <code>tns == 'TapNoteScore_W2'</code>)
@@ -574,7 +574,7 @@ save yourself some time, copy this for undocumented things:
<code>indent</code> is an optional argument that will be prepended to every line.
</Function>
<Function name='ReportStyle' return='void' arguments=''>
Sends the current style to the server.
[Deprecated] Always returns <code>false</code>.
</Function>
<Function name='round' theme='_fallback' return='int' arguments='float val, int decimal'>
[02 Utilities.lua] Round a number.
@@ -5274,17 +5274,6 @@ Details of the <code>event</code> table:
Gets the currently selected letter of Player <code>pn</code>.
</Function>
</Class>
<Class name='ScreenNetEvaluation' grouping='Screen'>
<Function name='GetNumActivePlayers' return='int' arguments=''>
Returns the number of active players.
</Function>
</Class>
<Class name='ScreenNetRoom' grouping='Screen'>
</Class>
<Class name='ScreenNetSelectBase' grouping='Screen'>
</Class>
<Class name='ScreenNetSelectMusic' grouping='Screen'>
</Class>
<Class name='ScreenOptions' grouping='Screen'>
<Function name='AllAreOnLastRow' return='bool' arguments=''>
Returns <code>true</code> if all active players are on the last options row.
@@ -5694,10 +5683,10 @@ local args = {
Returns the extra stage info (Song, Steps) for the specified Style <code>s</code>. If <code>b2ndExtra</code> is true, it will use the second Extra Stage data instead of the first.
</Function>
<Function name='GetNumAdditionalCourses' return='int' arguments=''>
[Deprecated] Always returns <code>0</code>
[Deprecated] Always returns <code>0</code>.
</Function>
<Function name='GetNumAdditionalSongs' return='int' arguments=''>
[Deprecated] Always returns <code>0</code>
[Deprecated] Always returns <code>0</code>.
</Function>
<Function name='GetNumCourseGroups' return='int' arguments=''>
Returns the number of course groups.
@@ -5772,10 +5761,10 @@ local args = {
Returns the preferred sort section name for the specified Song.
</Function>
<Function name='WasLoadedFromAdditionalCourses' return='bool' arguments='Course c'>
[Deprecated] Always returns <code>false</code>
[Deprecated] Always returns <code>false</code>.
</Function>
<Function name='WasLoadedFromAdditionalSongs' return='bool' arguments='Song s'>
[Deprecated] Always returns <code>false</code>
[Deprecated] Always returns <code>false</code>.
</Function>
</Class>
<Class name='SongOptions'>
+1 -55
View File
@@ -71,22 +71,6 @@ SM_SongChanged
SM_SortOrderChanging
SM_SortOrderChanged
[NetworkSyncManager]
SM_AddToChat
SM_ChangeSong
SM_GotEval
SM_UsersUpdate
SM_SMOnlinePack
[RoomInfoDisplay]
SM_RoomInfoRetract
SM_RoomInfoDeploy
[RoomWheel]
SM_BackFromRoomName
SM_RoomInfoRetract
SM_RoomInfoDeploy
[ScreenEdit]
SM_UpdateTextInfo
SM_BackFromMainMenu
@@ -121,36 +105,6 @@ SM_AddBonus
SM_GoToOK
SM_GoToCancel
[ScreenNetEvaluation]
SM_GotEval
[ScreenNetRoom]
SM_SMOnlinePack
SM_BackFromRoomName
SM_BackFromRoomDesc
SM_BackFromRoomPass
SM_BackFromReqPass
SM_RoomInfoRetract
SM_RoomInfoDeploy
[ScreenNetSelectBase]
SM_AddToChat
SM_UsersUpdate
SM_SMOnlinePack
[ScreenNetSelectMusic]
SM_NoSongs
SM_ChangeSong
SM_SMOnlinePack
SM_SetWheelSong
SM_RefreshWheelLocation
SM_SongChanged
SM_UsersUpdate
SM_BackFromPlayerOptions
[ScreenNetworkOptions]
SM_DoneConnecting
[ScreenOptionsEditCourse]
SM_BackFromContextMenu
@@ -178,8 +132,6 @@ SM_BackFromContextMenu
[ScreenOptionsReviewWorkout]
[ScreenPackages]
[ScreenRanking]
[ScreenSelectMaster]
@@ -190,12 +142,6 @@ SM_SongChanged
SM_SortOrderChanging
SM_SortOrderChanged
[ScreenSMOnlineLogin]
SM_SMOnlinePack
SM_PasswordDone
SM_NoProfilesDefined
SM_GoToNextScreen
[ScreenSplash]
SM_PrepScreen
@@ -206,4 +152,4 @@ SM_PrepScreen
SM_ChangeText
[WheelBase]
SM_SongChanged
SM_SongChanged
@@ -1 +0,0 @@
Common Normal
@@ -1 +0,0 @@
Common Normal
@@ -1 +0,0 @@
Common Normal
@@ -1 +0,0 @@
Common Normal
@@ -1 +0,0 @@
Common Normal
@@ -1 +0,0 @@
Common Normal
@@ -1 +0,0 @@
Common Normal
@@ -1 +0,0 @@
_blank
@@ -1 +0,0 @@
MusicWheelItem Song ColorPart
@@ -1 +0,0 @@
MusicWheelItem Song NormalPart
@@ -1 +0,0 @@
MusicWheelItem Song OverPart
@@ -1 +0,0 @@
_blank
@@ -1 +0,0 @@
_blank
@@ -1 +0,0 @@
_blank
@@ -1 +0,0 @@
_blank
@@ -1 +0,0 @@
_blank
-76
View File
@@ -198,7 +198,6 @@ Edit Steps=Schritte bearbeiten
Jukebox=Jukebox
Log In=Einloggen
Theme Options=Motiv Optionen
Network Options=Netzwerk Optionen
Export Packages=Pakete exportieren
Select Character=Charakter auswählen
Select Course=Kurs auswählen
@@ -321,13 +320,6 @@ SurvivalText=Überleben Kurs
NormalModeText=Normaler Modus
BattleModeText=Kampf Modus (Ausgeschaltet)
[NetworkSyncManager]
Connection failed.=Verbindung fehlgeschlagen
Connection to '%s' successful.=Verbindung zu '%s' erfolgreich.
Connection to server dropped.=Verbindung zum Server getrennt.
Initializing Client Network...=Initialisiere Client-Netzwerk...
Not Supported=Modus nicht unterstützt währenddem das Netzwerk benutzt wird.
[NoteType]
4th=4te
8th=8te
@@ -378,7 +370,6 @@ CoinMode=&oq;Home&cq;: Options are shown on the Title Menu. &oq;Pay&cq;: Title M
CoinModeNoHome=When set to PAY you must insert coins before joining in. When set to FREE you can join in without inserting coins.
CoinsPerCredit=The number of coins that must be inserted before a player can join. (when Coin Mode = Pay)
ComboContinuesBetweenSongs=If turned on, the combo will not be reset to 0 after every song.
Connection=Verbinde zu Server (muss angegeben werden)
CourseSortOrder=Determines how courses are sorted.
CreateNew=
Create New Course=Create a new course.
@@ -447,7 +438,6 @@ MoveRandomToEnd=Determines if courses with random songs should be placed at the
MovieColorDepth=Choose the color depth of movies. 32 bit textures use more memory, but look nicer.
MusicWheelSwitchSpeed=Adjusts the speed of the music wheel.
MusicWheelUsesSections=&oq;Always&cq; means sections in group + ABC; &oq;Never&cq; means no sections; &oq;Title Only&cq; shows sections in ABC order.
Network Options=Verbinde dich mit einem Server oder ändere Server-Optionen.
No Memory Card=Es wurde keine USB-Speicherkarte gefunden.
NoteSkins=NotenSkins
NumBackgrounds=Choose the maximum number of random backgrounds to be loaded simultaneously.
@@ -484,7 +474,6 @@ SaveScores=SaveScores
SaveReplays=Enable saving replays.
SaveStats=If enabled, save Stats.xml.
ScoreDisplay=ScoreDisplay
Scoreboard=Enables scoreboard
ScoringType=Defines which scoring method to use.
ScreenFilter=Screen Filter
Scroll=Scroll
@@ -993,7 +982,6 @@ CoinModeNoHome=Münzen Modus
CoinsPerCredit=Münzen&nbsp;pro Credit
ComboContinuesBetweenSongs=Carry Combo
Combo segments=Combo-Segmente
Connection=Connection
Convert pause to beats=Convert stop to beats
Convert delay to beats=Convert delay to beats
Convert selection to attack=Convert selection to Attack
@@ -1145,7 +1133,6 @@ MovieColorDepth=Movie Color
Music File=Music File
MusicWheelSwitchSpeed=Wheel Speed
MusicWheelUsesSections=Wheel Sections
Network Options=Netzwerk-Optionen
No USB memory cards found=No USB memory cards found
NoteSkins=NotenSkins
NumBackgrounds=Random Backgrounds
@@ -1205,7 +1192,6 @@ SaveScores=Save Scores
SaveReplays=Save Replays
SaveStats=Save Stats
ScoreDisplay=Score Display
Scoreboard=Scoreboard
ScoringType=Scoring Type
ScreenFilter=Screen Filter
Scroll=Scroll
@@ -1413,19 +1399,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
Enter room name=Enter room name
Empty=- EMPTY -
[RoomInfoDisplay]
Last Round Info:=Last Round Info:
Room Name:=Name:
Room Description:=Description:
Song Title:=Title:
Song Subtitle:=Subtitle:
Song Artist:=Artist:
Players=Players
[SMPackageUtil]
Could not find '%s'.=Could not find '%s'.
[Screen]
@@ -1716,31 +1689,6 @@ VitalButtons=Buttons vital for navigating menus are not mapped:
WarningHeader=WARNING!
WarningText=Bitte stelle sicher, dass du keine wichtigen Tastenbelegungen überschreibst, wie z.B.:\n&MENULEFT; LEFT &MENURIGHT; RIGHT &MENUUP; UP &MENUDOWN; DOWN &START; START &BACK; BACK oder &SELECT; SELECT. Übernehme keine Tastenbelegungen deren Funktion du nicht kennst und hebe die Belegung von wichtigen Tasten nicht auf!
[ScreenNetRoom]
Enter a description for the room:=Gib eine Beschreibung für den Raum an:
Enter a password for the room (blank, no password):=Gib ein Passwort für den Raum an (leer, kein Passwort):
Enter Room's Password:=Tippe das Raum-Passwort ein:
HeaderText=StepMania Online
HeaderSubText=Raum-Auswahl
HelpText=Ctrl+ENTER Auswählen &BACK; Verlassen &MENULEFT;&MENURIGHT; Bewegen
[ScreenNetSelectMusic]
HeaderText=Select Music Online
HeaderSubText=Song Selection
HelpText=Ctrl+ENTER Selects &BACK; Exit &MENULEFT;&MENURIGHT; Move::&MENUUP; Player Options &MENUDOWN; Change Difficulty
[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=An
ScoreOff=Aus
HeaderText=Netzwerk Optionen
HeaderSubText=Configure networked gameplay
[ScreenOptionsEditCourse]
The maximum number of entries per course is %d. This course already has %d entries.=The maximum number of entries per course is %d. This course already has %d entries.
You cannot delete the last entry in a course.=You can not delete the last entry in a course.
@@ -1824,18 +1772,6 @@ FitInsideAvoidLetter=Avoid Letter
FitInsideAvoidPillar=Avoid Pillar
BG=BG
[ScreenPackages]
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=Download cancelled.
Enter URL=Enter URL
Failed.=Failed.
Failed to connect.=Failed to connect.
File Already Exists=File Already Exists
Header Sent.=Header Sent.
Invalid URL.=Invalid URL.
VisitURL=--Visit URL--
Waiting for header.=Waiting for header.
[ScreenPrompt]
OK=OK
No=NO
@@ -1854,16 +1790,6 @@ HelpText=&START; Advance Timer
[ScreenRanking]
[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.
HeaderText=Online Login
HeaderSubText=Select a login 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.
[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?
@@ -1887,7 +1813,6 @@ HelpTextTestInput=Press any button or key. Press ESCAPE when done.
HelpTextTestLights=Press &MENULEFT;&MENURIGHT; to cycle lights. Press ESCAPE when done.
HelpTextTextEntry=Type a value using the keyboard. Press Enter to finish.
HelpTextMapControllers=Use arrow keys to move, ENTER to assign, SPACE to clear::Press ESCAPE when done
HelpTextOnline=stepmaniaonline.net to connect to official Stepmania Online Server::Check out stepmaniaonline.net for more information
HelpTextNetSelectMusic=Ctrl + Enter to enter room/select song::&UP; for Player Options
HelpTextBookkeeping=Press &MENULEFT;&MENURIGHT; to cycle data. Press ESCAPE when done.
@@ -2006,7 +1931,6 @@ Gametype:=Spieltyp:
Difficulty:=Schwierigkeit:
Announcer=Ansager
# Choices
Play Online=Netwerk-Spiel
Edit/Share=Bearbeiten/Teilen
Exit=Beenden
Game Start=Spielstart
-76
View File
@@ -198,7 +198,6 @@ Edit Steps=Edit Steps
Jukebox=Jukebox
Log In=Log In
Theme Options=Theme Options
Network Options=Network Options
Export Packages=Export Packages
Select Character=Select Character
Select Course=Select Course
@@ -321,13 +320,6 @@ SurvivalText=Survival Courses
NormalModeText=Normal Mode
BattleModeText=Battle Mode (Disabled)
[NetworkSyncManager]
Connection failed.=Connection failed.
Connection to '%s' successful.=Connection to '%s' successful.
Connection to server dropped.=Connection to server dropped.
Initializing Client Network...=Initializing Client Network...
Not Supported=Mode not supported while networked.
[NoteType]
4th=4th
8th=8th
@@ -379,7 +371,6 @@ CoinMode=&oq;Home&cq;: Options are shown on the Title Menu. &oq;Pay&cq;: Title M
CoinModeNoHome=When set to PAY you must insert coins before joining in. When set to FREE you can join in without inserting coins.
CoinsPerCredit=The number of coins that must be inserted before a player can join. (when Coin Mode = Pay)
ComboContinuesBetweenSongs=If turned on, the combo will not be reset to 0 after every song.
Connection=Connect to Server (To be specified)
CourseSortOrder=Determines how courses are sorted.
CustomSongsEnable=Custom songs are loaded from USB profiles.
CustomSongsMaxCount=Only this many custom songs will be loaded from a profile.
@@ -454,7 +445,6 @@ MoveRandomToEnd=Determines if courses with random songs should be placed at the
MovieColorDepth=Choose the color depth of movies. 32 bit textures use more memory, but look nicer.
MusicWheelSwitchSpeed=Adjusts the speed of the music wheel.
MusicWheelUsesSections=&oq;Always&cq; means sections in group + ABC; &oq;Never&cq; means no sections; &oq;Title Only&cq; shows sections in ABC order.
Network Options=Connect to a server or change server options.
No Memory Card=No USB memory card was found.
NoteSkins=NoteSkins
NumBackgrounds=Choose the maximum number of random backgrounds to be loaded simultaneously.
@@ -491,7 +481,6 @@ SaveScores=SaveScores
SaveReplays=Enable saving replays.
SaveStats=If enabled, save Stats.xml.
ScoreDisplay=ScoreDisplay
Scoreboard=Enables scoreboard
ScoringType=Defines which scoring method to use.
ScreenFilter=Screen Filter
Scroll=Scroll
@@ -1015,7 +1004,6 @@ CoinModeNoHome=Coin Mode
CoinsPerCredit=Coins&nbsp;Per Credit
ComboContinuesBetweenSongs=Carry Combo
Combo segments=Combo segments
Connection=Connection
Convert pause to beats=Convert stop to beats
Convert delay to beats=Convert delay to beats
Convert selection to attack=Convert selection to Attack
@@ -1173,7 +1161,6 @@ MovieColorDepth=Movie Color
Music File=Music File
MusicWheelSwitchSpeed=Wheel Speed
MusicWheelUsesSections=Wheel Sections
Network Options=Network Options
No USB memory cards found=No USB memory cards found
NoteSkins=NoteSkins
NumBackgrounds=Random Backgrounds
@@ -1233,7 +1220,6 @@ SaveScores=Save Scores
SaveReplays=Save Replays
SaveStats=Save Stats
ScoreDisplay=Score Display
Scoreboard=Scoreboard
ScoringType=Scoring Type
ScreenFilter=Screen Filter
Scroll=Scroll
@@ -1441,19 +1427,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
Enter room name=Enter room name
Empty=- EMPTY -
[RoomInfoDisplay]
Last Round Info:=Last Round Info:
Room Name:=Name:
Room Description:=Description:
Song Title:=Title:
Song Subtitle:=Subtitle:
Song Artist:=Artist:
Players=Players
[SMPackageUtil]
Could not find '%s'.=Could not find '%s'.
[Screen]
@@ -1747,31 +1720,6 @@ VitalButtons=Buttons vital for navigating menus are not mapped:
WarningHeader=WARNING!
WarningText=Please ensure that you do not overwrite any important keymappings, such as:\n&MENULEFT; LEFT &MENURIGHT; RIGHT &MENUUP; UP &MENUDOWN; DOWN &START; START &BACK; BACK or &SELECT; SELECT. Do not apply keymappings that you do not know the function of or unmap important keys!
[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:
HeaderText=StepMania Online
HeaderSubText=Room Selection
HelpText=Ctrl+ENTER Selects &BACK; Exit &MENULEFT;&MENURIGHT; Move
[ScreenNetSelectMusic]
HeaderText=Select Music Online
HeaderSubText=Song Selection
HelpText=Ctrl+ENTER Selects &BACK; Exit &MENULEFT;&MENURIGHT; Move::&MENUUP; Player Options &MENUDOWN; Change Difficulty
[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
HeaderText=Network Options
HeaderSubText=Configure networked gameplay
[ScreenOptionsEditCourse]
The maximum number of entries per course is %d. This course already has %d entries.=The maximum number of entries per course is %d. This course already has %d entries.
You cannot delete the last entry in a course.=You can not delete the last entry in a course.
@@ -1855,18 +1803,6 @@ FitInsideAvoidLetter=Avoid Letter
FitInsideAvoidPillar=Avoid Pillar
BG=BG
[ScreenPackages]
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=Download cancelled.
Enter URL=Enter URL
Failed.=Failed.
Failed to connect.=Failed to connect.
File Already Exists=File Already Exists
Header Sent.=Header Sent.
Invalid URL.=Invalid URL.
VisitURL=--Visit URL--
Waiting for header.=Waiting for header.
[ScreenPrompt]
OK=OK
No=NO
@@ -1885,16 +1821,6 @@ HelpText=&START; Advance Timer
[ScreenRanking]
[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.
HeaderText=Online Login
HeaderSubText=Select a login 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.
[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?
@@ -1918,7 +1844,6 @@ HelpTextTestInput=Press any button or key. Press ESCAPE when done.
HelpTextTestLights=Press &MENULEFT;&MENURIGHT; to cycle lights. Press ESCAPE when done.
HelpTextTextEntry=Type a value using the keyboard. Press Enter to finish.
HelpTextMapControllers=Use arrow keys to move, ENTER to assign, SPACE to clear::Press ESCAPE when done
HelpTextOnline=stepmaniaonline.net to connect to official Stepmania Online Server::Check out stepmaniaonline.net for more information
HelpTextNetSelectMusic=Ctrl + Enter to enter room/select song::&UP; for Player Options
HelpTextBookkeeping=Press &MENULEFT;&MENURIGHT; to cycle data. Press ESCAPE when done.
@@ -2055,7 +1980,6 @@ Gametype:=Gametype:
Difficulty:=Difficulty:
Announcer=Announcer
# Choices
Play Online=Network Play
Edit/Share=Edit/Share
Exit=Exit
Game Start=Game Start
-76
View File
@@ -196,7 +196,6 @@ Edit Steps=Editar pasos
Jukebox=Reproductor
Log In=Iniciar sesión
Theme Options=Opciones de tema
Network Options=Opciones de red
Export Packages=Exportar paquetes
Select Character=Elegir personaje
Select Course=Elegir curso
@@ -319,13 +318,6 @@ SurvivalText=Cursos Supervivencia
NormalModeText=Modo normal
BattleModeText=Modo batalla (Desactivado)
[NetworkSyncManager]
Connection failed.=Conexión fallida.
Connection to '%s' successful.=Conexión con '%s' realizada.
Connection to server dropped.=Se ha interrumpido la conexión con el servidor.
Initializing Client Network...=Iniciando red de cliente...
Not Supported=No soportado en red.
[NoteType]
4th=4.ª
8th=8.ª
@@ -370,7 +362,6 @@ Clear Machine Edits=Guardar todas las ediciones de pasos a esta máquina.
Clear USB edits=Descartar ediciones en USB.
Clear Machine Stats=Descartar todas las puntuaciones guardadas en esta máquina.
CoinsPerCredit=Número de monedas que se deben insertar para que un jugador pueda unirse (cuando está activado el modo Pagar).
Connection=Conecta con un servidor (que debe especificarse).
CourseSortOrder=Determina cuántos cursos se organizan.
CreateNew=
Create New Course=Crear un curso nuevo.
@@ -426,7 +417,6 @@ MoveRandomToEnd=Determina si los cursos con canciones aleatorias deben colocarse
MovieColorDepth=Elige la profundidad de color de los vídeos. Las texturas de 32 bits usan más memoria, pero tienen mejor aspecto.
MusicWheelSwitchSpeed=Ajusta la velocidad de la ruleta de música.
MusicWheelUsesSections=&oq;Siempre&cq; agrupa las secciones y las ordena alfabéticamente; &oq;Nunca&cq; desactiva las secciones; &oq;Solo título&cq; ordena las secciones alfabéticamente.
Network Options=Conecta con un servidor o cambia las opciones del servidor.
No Memory Card=No se ha encontrado ninguna tarjeta de memoria USB.
NoteSkins=Diseños
NumBackgrounds=Elige el número máximo de fondos aleatorios que se cargarán simultáneamente.
@@ -460,7 +450,6 @@ SaveScores=Guardar puntuaciones.
SaveReplays=Activar el guardado de repeticiones.
SaveStats=Si se activa, se guardará el archivo Stats.xml.
ScoreDisplay=Marcador
Scoreboard=Activa el marcador
ScoringType=Define el método de puntuación del que se hará uso.
ScreenFilter=Filtro de pantalla
Scroll=Desplazamiento
@@ -972,7 +961,6 @@ Clear clipboard=Descartar portapapeles
CoinMode=Modo monedas
CoinModeNoHome=Modo monedas
CoinsPerCredit=Mon. por crédito
Connection=Conexión
Convert pause to beats=Convertir parada en compases
Convert delay to beats=Convertir latencia en compases
Convert selection to attack=Convertir selección en ataque
@@ -1106,7 +1094,6 @@ More Options=Más opciones
MovieColorDepth=Color vídeo
MusicWheelSwitchSpeed=Velocidad ruleta
MusicWheelUsesSections=Secciones ruleta
Network Options=Opciones de red
No USB memory cards found=No se han encontrado tarjetas de memoria USB
NoteSkins=Diseños
NumBackgrounds=Fondos aleatorios
@@ -1160,7 +1147,6 @@ SaveScores=Guardar puntuación
SaveReplays=Guardar repeticiones
SaveStats=Guardar estadísticas
ScoreDisplay=Visualiz. puntuación
Scoreboard=Ránking
ScoringType=Tipo de puntuación
ScreenFilter=Filtro de pantalla
Scroll=Desplazar
@@ -1385,19 +1371,6 @@ NumRd=.º
NumSt=
NumTh=
[RoomWheel]
Enter room name=Introducir nombre de sala
Empty=- VACÍO -
[RoomInfoDisplay]
Last Round Info:=Info. de última ronda:
Room Name:=Nombre:
Room Description:=Descripción:
Song Title:=Título:
Song Subtitle:=Subtítulo:
Song Artist:=Artista:
Players=Jugadores
[SMPackageUtil]
Could not find '%s'.=No se encontró '%s'.
@@ -1709,31 +1682,6 @@ FitInsideAvoidPillar=Evitar pilares
[ScreenMapControllers2]
Add Mapping=Asignar
[ScreenNetRoom]
Enter a description for the room:=Introduce una descripción para la sala:
Enter a password for the room (blank, no password):=Introduce una contraseña para la sala (si lo dejas en blanco, no habrá contraseña):
Enter Room's Password:=Contraseña de la sala:
HeaderText=StepMania Online
HeaderSubText=Selección de sala
HelpText=Ctrl+ENTER Elegir &BACK; Salir &MENULEFT;&MENURIGHT; Mover
[ScreenNetSelectMusic]
HeaderText=Elegir música online
HeaderSubText=Elegir música
HelpText=Ctrl+ENTER Elegir &BACK; Salir &MENULEFT;&MENURIGHT; Mover::&MENUUP; Opciones de jugador &MENUDOWN; Cambiar dificultad
[ScreenNetworkOptions]
Disconnected from server.=Desconectado del servidor.
Enter a network address.=Introduce una dirección de red.
Server failed: %s Code:%d=Servidor fallido: %s Cód.:%d
Use 127.0.0.1 to connect to yourself.=Usa 127.0.0.1 para conectar con tu ordenador en un servidor local.
Connect=Conectar
Disconnect=Desconectar
ScoreOn=Activado
ScoreOff=Desactivado
HeaderText=Opciones de red
HeaderSubText=Configurar juego en red
[ScreenOptionsEditCourse]
The maximum number of entries per course is %d. This course already has %d entries.=El número máximo de entradas por curso es de %d. Este curso ya tiene %d entradas.
You cannot delete the last entry in a course.=No puedes eliminar la última entrada de un curso.
@@ -1795,18 +1743,6 @@ size ???=tamaño ???
HeaderText=Opciones
HeaderSubText=Desde aquí puedes configurar el juego.
[ScreenPackages]
DL @ %d KB/s=Descargando a %d KB/s
Download cancelled.=Descarga cancelada.
Enter URL=Introduce una URL.
Failed.=Fallido.
Failed to connect.=No se pudo conectar.
File Already Exists=El archivo ya existe.
Header Sent.=Cabecera enviada.
Invalid URL.=URL inválida.
VisitURL=--Visitar URL--
Waiting for header.=Esperando cabecera.
[ScreenPrompt]
OK=ACEPTAR
No=NO
@@ -1815,16 +1751,6 @@ Cancel=CANCELAR
[ScreenRanking]
[ScreenSMOnlineLogin]
Each player needs a unique Profile.=Cada jugador necesita un perfil único.
Enter your password.=Introduce tu contraseña.
No Styles are selectable.=No se pueden seleccionar estilos.
You are logging on as:=Iniciando sesión como:
You must define a Profile.=Debes definir un perfil.
HeaderText=Iniciar sesión
HeaderSubText=Selecciona un perfil online
Depending on the server you're connected to, you may have to register for an account on their website.=Dependiendo del servidor al que estés conectado, es posible que debas crear una cuenta en su página web.
[ScreenSaveSync]
Choosing NO will discard your changes.=Si eliges NO, no se guardarán los cambios.
Would you like to save these changes?=¿Quieres guardar los cambios?
@@ -1848,7 +1774,6 @@ HelpTextTestInput=Pulsa cualquier botón o tecla. Pulsa ESC cuando termines.
HelpTextTestLights=Pulsa &MENULEFT;&MENURIGHT; para probar las luces. Pulsa ESC cuando termines.
HelpTextTextEntry=Introduce un valor con el teclado. Pulsa ENTRAR cuando termines.
HelpTextMapControllers=Usa las teclas de dirección para moverte, ENTRAR para asignar y ESPACIO para despejar.::Pulsa ESC cuando termines.
HelpTextOnline=Puedes utilizar stepmaniaonline.net para conectar a un servidor oficial de StepMania.::Visita stepmaniaonline.net para más información.
HelpTextNetSelectMusic=Ctrl + ENTRAR para entrar en una sala y elegir canción::&UP; para opciones de jugador
HelpTextBookkeeping=Pulsa &MENULEFT;&MENURIGHT; para cambiar entre datos. Pulsa ESC cuando termines.
@@ -1980,7 +1905,6 @@ AnswerBlank=
Gametype:=Tipo de juego:
Difficulty:=Dificultad:
Announcer=Comentarista
Play Online=Juego en red
Edit/Share=Editar/Compartir
Exit=Salir
Game Start=Jugar
-77
View File
@@ -197,7 +197,6 @@ Edit Steps=Modifier les Pas
Jukebox=Jukebox
Log In=Se Connecter
Theme Options=Options de Thème
Network Options=Options Réseau
Export Packages=Exporter des Paquets
Select Character=Choisir le Personnage
Select Course=Choisir un Parcour
@@ -320,13 +319,6 @@ SurvivalText=Parcours de Survie
NormalModeText=Mode Normal
BattleModeText=Mode Combat (Désactivé)
[NetworkSyncManager]
Connection failed.=Connection Échouée.
Connection to '%s' successful.=Connection à '%s' réussite.
Connection to server dropped.=Connection au serveur dropped.
Initializing Client Network...=Initializing Client Network...
Not Supported=Mode not supported while networked.
[NoteType]
4th=1/4
8th=1/8
@@ -376,7 +368,6 @@ CoinMode=&oq;Home&cq;: Options are shown on the Title Menu. &oq;Pay&cq;: Title M
CoinModeNoHome=When set to PAY you must insert coins before joining in. When set to FREE you can join in without inserting coins.
CoinsPerCredit=The number of coins that must be inserted before a player can join. (when Coin Mode = Pay)
ComboContinuesBetweenSongs=If turned on, the combo will not be reset to 0 after every song.
Connection=Connecter au Serveur (À spécifier)
CourseSortOrder=Détermine comment les parcours sont triés.
CreateNew=
Create New Course=Create a new course.
@@ -442,7 +433,6 @@ MoveRandomToEnd=Determines if courses with random songs should be placed at the
MovieColorDepth=Choose the color depth of movies. 32 bit textures use more memory, but look nicer.
MusicWheelSwitchSpeed=Ajuste la vitesse de la roulette de musique.
MusicWheelUsesSections=&oq;Jamais&cq; aucune sections; &oq;Toujours&cq; sections en groupes + ABC; &oq;Titre Seulement&cq; montre les sections en ordre ABC.
Network Options=Connect to a server or change server options.
No Memory Card=Aucune carte mémoire USB n'a été trouvée.
NoteSkins=NoteSkins
NumBackgrounds=Choose the maximum number of random backgrounds to be loaded simultaneously.
@@ -479,7 +469,6 @@ SaveScores=Garder les Scores
SaveReplays=Activer la sauvegarde des replays.
SaveStats=Sauvegarder Stats.xml.
ScoreDisplay=Affichage du Score
Scoreboard=Active le tableau de score
ScoringType=Détermine la méthode de score utilisée.
ScreenFilter=Filtre d'Écran
Scroll=Déplacement
@@ -936,7 +925,6 @@ Theme Options=Options de Thème
Set BG Fit Mode=Set BG Fit Mode
Graphics/Sound Options=Options Graphiques/Son
Profiles=Profiles
Network Options=Options Réseau
UI Options=Options IU
Advanced Options=Options Avancées
StepMania Credits=Crédits StepMania
@@ -1000,9 +988,6 @@ Profile=Profile
Create New Profile=Créer un Profile
Player1Profile=Profile Joueur1
Player2Profile=Profile Joueur2
# Network Options
Connection=Connection
Scoreboard=Scoreboard
# UI Options
Center1Player=Centrer le &nbsp;Joueur 1
MenuTimer=Chrono du Menu
@@ -1403,19 +1388,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
Enter room name=Nom de la salle
Empty=- VIDE -
[RoomInfoDisplay]
Last Round Info:=Info de dernière Round:
Room Name:=Nom:
Room Description:=Description:
Song Title:=Titre:
Song Subtitle:=Sous-titre:
Song Artist:=Artiste:
Players=Joueurs
[SMPackageUtil]
Could not find '%s'.=N'a pas pus trouver '%s'.
[Screen]
@@ -1697,31 +1669,6 @@ VitalButtons=Des boutons vitaux pour la navigation de menus ne sont pas assigné
WarningHeader=AVERTISSEMENT!
WarningText=Assurez-vous de ne pas réécrire les commandes importantes, tel que:\n&MENULEFT; GAUCHE &MENURIGHT; DROITE &MENUUP; HAUT &MENUDOWN; BAS &START; START &BACK; RETOUR ou &SELECT; SELECT. Ne désignez pas à des fonctions que vous ne connaissez pas, et n'enlevez pas des boutons importants!
[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:
HeaderText=StepMania Online
HeaderSubText=Room Selection
HelpText=Ctrl+ENTER Selects &BACK; Exit &MENULEFT;&MENURIGHT; Move
[ScreenNetSelectMusic]
HeaderText=Select Music Online
HeaderSubText=Song Selection
HelpText=Ctrl+ENTER Selects &BACK; Exit &MENULEFT;&MENURIGHT; Move::&MENUUP; Player Options &MENUDOWN; Change Difficulty
[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
HeaderText=Network Options
HeaderSubText=Configure networked gameplay
[ScreenOptionsEditCourse]
The maximum number of entries per course is %d. This course already has %d entries.=The maximum number of entries per course is %d. This course already has %d entries.
You cannot delete the last entry in a course.=You can not delete the last entry in a course.
@@ -1805,18 +1752,6 @@ FitInsideAvoidLetter=Avoid Letter
FitInsideAvoidPillar=Avoid Pillar
BG=BG
[ScreenPackages]
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=Download cancelled.
Enter URL=Enter URL
Failed.=Failed.
Failed to connect.=Failed to connect.
File Already Exists=File Already Exists
Header Sent.=Header Sent.
Invalid URL.=Invalid URL.
VisitURL=--Visit URL--
Waiting for header.=Waiting for header.
[ScreenPrompt]
OK=OK
No=NON
@@ -1835,16 +1770,6 @@ HelpText=&START; Avancer le Timer
[ScreenRanking]
[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.
HeaderText=Online Login
HeaderSubText=Select a login 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.
[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?
@@ -1868,7 +1793,6 @@ HelpTextTestInput=Press any button or key. Press ESCAPE when done.
HelpTextTestLights=Press &MENULEFT;&MENURIGHT; to cycle lights. Press ESCAPE when done.
HelpTextTextEntry=Type a value using the keyboard. Press Enter to finish.
HelpTextMapControllers=Use arrow keys to move, ENTER to assign, SPACE to clear::Press ESCAPE when done
HelpTextOnline=stepmaniaonline.net to connect to official Stepmania Online Server::Check out stepmaniaonline.net for more information
HelpTextNetSelectMusic=Ctrl + Enter to enter room/select song::&UP; for Player Options
HelpTextBookkeeping=Press &MENULEFT;&MENURIGHT; to cycle data. Press ESCAPE when done.
@@ -1988,7 +1912,6 @@ Gametype:=Type de jeu:
Difficulty:=Difficulté:
Announcer=Annonceur
# Choices
Play Online=Network Play
Edit/Share=Modification/Partage
Exit=Quitter
Game Start=Commencer
-86
View File
@@ -223,7 +223,6 @@ Edit Steps=Edit Steps
Jukebox=Jukebox
Log In=Log In
Theme Options=Theme Options
Network Options=Network Options
Export Packages=Export Packages
Select Character=Select Character
Select Course=Select Course
@@ -353,14 +352,6 @@ SurvivalText=Survivalコース
NormalModeText=通常プレイ
BattleModeText=Raveモード(Disabled)
[NetworkSyncManager]
// 済
Connection failed.=サーバへの接続に失敗しました。
Connection to '%s' successful.=サーバ'%s'への接続に成功しました。
Connection to server dropped.=サーバからの応答がありません。
Initializing Client Network...=クライアントネットワークを初期化しています…
Not Supported=オンライン中にこのモードでプレイすることはできません。
[NoteType]
// いじるとバグりそう
4th=4th
@@ -439,7 +430,6 @@ Graphics/Sound Options=解像度、アスペクト比、音声についての設
InputOptions=入力のテスト、入力についての設定、及び音声の同期を行います。
Input Options=操作デバイスからの入力や操作速度についての設定を行います。
More Options=高度な設定はここから行えます。
Network Options=Stepmania Onlineサーバに接続したり\nオンラインオプションを設定したりします。
Profiles=このStepmaniaに保存されているプロファイルを編集します。
Reload Songs=曲とコースを完全に再読み込みします。Stepmania以外で\nファイルに変更を加えた場合使用することをお勧めします。
Select Game=ゲームタイプを変更します。
@@ -520,10 +510,6 @@ Windowed=ウインドウモード、またはフルスクリーンモードの\n
//メニュー→オプション→プロファイル
//メニュー→オプション→ネットワーク
Connection=Stepmania Online対応サーバに接続します。
Scoreboard=オンラインプレイのスコアボードの表示を設定します。
//メニュー→オプション→UI
Center1Player=&oq;On&cq;にして1人プレイを行うと、レーンが中央に寄ります。
MenuTimer=&oq;On&cq;に設定すると、ゲーム中の各シーンの操作に制限時間が発生します。
@@ -1065,7 +1051,6 @@ CoinModeNoHome=Coin Mode
CoinsPerCredit=Coins&nbsp;Per Credit
ComboContinuesBetweenSongs=Carry Combo
Combo segments=Combo segments
Connection=Connection
Convert pause to beats=譜面停止を拍に変換
Convert delay to beats=ディレイを拍に変換
Convert selection to attack=選択範囲におじゃまを設定
@@ -1217,7 +1202,6 @@ MovieColorDepth=Movie Color
Music File=譜面で使用する曲ファイル
MusicWheelSwitchSpeed=Wheel Speed
MusicWheelUsesSections=Wheel Sections
Network Options=Network Options
No USB memory cards found=No USB memory cards found
NoteSkins=NoteSkins
NumBackgrounds=Random Backgrounds
@@ -1277,7 +1261,6 @@ SaveScores=Save Scores
SaveReplays=Save Replays
SaveStats=Save Stats
ScoreDisplay=Score Display
Scoreboard=Scoreboard
ScoringType=Scoring Type
ScreenFilter=Screen Filter
Scroll=Scroll
@@ -1501,21 +1484,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
// 済
Enter room name=部屋名を入力してください。
Empty=- EMPTY -
[RoomInfoDisplay]
// 済
Last Round Info:=最終プレイ:
Room Name:=部屋名:
Room Description:=部屋の説明:
Song Title:=タイトル:
Song Subtitle:=サブタイトル:
Song Artist:=アーティスト:
Players=プレイヤー
[SMPackageUtil]
// 済
Could not find '%s'.='%s'が見つかりませんでした。
@@ -1843,34 +1811,6 @@ StartMissing=Startに設定されたキーがありません。
VitalButtons=以下のメニュー操作に必要なキーが設定されていません:
[ScreenNetRoom]
// 済
Enter a description for the room:=部屋の説明を入力してください。
Enter a password for the room (blank, no password):=部屋のパスワードを設定してください。\n(空白にするとパスワードは設定されません)
Enter Room's Password:=部屋のパスワードを入力してください。
HeaderText=StepMania Online
HeaderSubText=Room Selection
HelpText=Ctrl+ENTER 決定 &BACK; 戻る &MENULEFT;&MENURIGHT; 移動
[ScreenNetSelectMusic]
// 済
HeaderText=Select Music Online
HeaderSubText=Song Selection
HelpText=Ctrl+ENTER 決定 &BACK; 戻る &MENULEFT;&MENURIGHT; 選択::&MENUUP; プレイオプション &MENUDOWN; 譜面変更
[ScreenNetworkOptions]
// 済
Disconnected from server.=サーバから切断しました。.
Enter a network address.=サーバのアドレスを入力してください。
Server failed: %s Code:%d=Server failed: %s Code:%d
Use 127.0.0.1 to connect to yourself.=127.0.0.1で自分自身に接続できます。
Connect=Connect
Disconnect=Disconnect
ScoreOn=On
ScoreOff=Off
HeaderText=Network Options
HeaderSubText=Configure networked gameplay
[ScreenOptionsEditCourse]
// 済
The maximum number of entries per course is %d. This course already has %d entries.=コースの最大曲数は%d曲です。このコースはすでに%d曲が組み込まれています。
@@ -1968,19 +1908,6 @@ FitInsideAvoidLetter=レターボックスを回避
FitInsideAvoidPillar=ピラーボックスを回避
BG=BG
[ScreenPackages]
// 済
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=ダウンロードを中止しました。
Enter URL=URLを入力してください。
Failed.=失敗しました。
Failed to connect.=接続に失敗しました。
File Already Exists=ファイルが既に存在します。
Header Sent.=ヘッダを送信しました。
Invalid URL.=無効なURLです。
VisitURL=--Visit URL--
Waiting for header.=ヘッダの受信を待っています。
[ScreenPrompt]
// 放置します
OK=OK
@@ -2000,17 +1927,6 @@ HelpText=&START; タイマーを進める
[ScreenRanking]
[ScreenSMOnlineLogin]
// 済
Each player needs a unique Profile.=全てのプレイヤーは別名のプロファイルを使用する必要があります。
Enter your password.=パスワードを入力してください。
No Styles are selectable.=選択可能なプレイスタイルがありません。
You are logging on as:=次の名前でログインしています:
You must define a Profile.=プロファイルを選択してください。
HeaderText=Online Login
HeaderSubText=Select a login profile
Depending on the server you're connected to, you may have to register for an account on their website.=接続するサーバによっては、事前にサーバのサイトでアカウントを登録する必要があります。
[ScreenSaveSync]
// 済
Choosing NO will discard your changes.="NO"を選択すると結果は破棄されます。
@@ -2036,7 +1952,6 @@ HelpTextTestInput=好きなボタンを押してください。Escキーで終
HelpTextTestLights=&MENULEFT;&MENURIGHT;ライトを循環 Escキーで終了します。
HelpTextTextEntry=キーボードで値を入力してください。Enterキーで入力を終了します。
HelpTextMapControllers=矢印キーで選択、ENTERキーで設定、SPACEキーで削除::Escキーで終了します。
HelpTextOnline=stepmaniaonline.netは公式のStepmania Onlineサーバです。::詳細はStepmaniaonline.netをご覧ください。
HelpTextNetSelectMusic=Ctrl+Enter 部屋/曲を決定::&UP; プレイオプション
HelpTextBookkeeping=Press &MENULEFT;&MENURIGHT;ページを変える::Escキーで終了します。
@@ -2182,7 +2097,6 @@ Gametype:=ゲームタイプ:
Difficulty:=難易度:
Announcer=アナウンサー
# Choices
Play Online=Network Play
Edit/Share=Edit/Share
Exit=Exit
Game Start=Game Start
-3
View File
@@ -11,9 +11,6 @@ EventStageCounter=%03i 째탄
[ScreenTitleMenu]
HelpText=&BACK; 뒤로가기 &START; 시작 &MENUUP;&MENUDOWN; 선택표움직이기
Network OK=온라인
Offline=오프라인
Connected to %s=%s (으)로 접속됨
CurrentGametype= 게임종류: %s
LifeDifficulty=목숨난이도: %s
TimingDifficulty=판정난이도: %s
-76
View File
@@ -197,7 +197,6 @@ Edit Steps=Wijzig Stappen
Jukebox=Jukebox
Log In=Log In
Theme Options=Thema Opties
Network Options=Netwerk Opties
Export Packages=Exporteer Pakketten
Select Character=Selecteer Karakter
Select Course=Selecteer Parkoers
@@ -320,13 +319,6 @@ SurvivalText=Survival Parkoers
NormalModeText=Normale Mode
BattleModeText=Gevecht Mode (Disabled)
[NetworkSyncManager]
Connection failed.=Connectie mislukt.
Connection to '%s' successful.=Connectie met '%s' succesvol.
Connection to server dropped.=Connectie met de server is weggevallen.
Initializing Client Network...=Initialiseren van Cliënt Netwerk...
Not Supported=Deze mode is niet ondersteunt zolang verbonden met een netwerk.
[NoteType]
4th=4de
8th=8ste
@@ -378,7 +370,6 @@ CoinModeNoHome=Als het op BETALEN staat moet je een munt ingooien voor je kan me
CoinsPerCredit=Het aantal munten dat ingeworpen moet worden voor een speler kan meedoen. (als Munt Mode = Betalen)
CoinsPerCredit=Het aantal munten dat moet worden ingevoerd voor een speler mag meedoen. (als Munt Mode = Betalen)
ComboContinuesBetweenSongs=De combo zal niet worden teruggezet naar 0 na elk nummer als dit aan staat.
Connection=Verbind met Server (Wordt nog gespecificeerd)
CourseSortOrder=Bepaald hoe Parkoers worden gesorteerd.
Create New Course=Maak nieuw parkoers.
Create New Profile=Maak nieuw spelerprofiel.
@@ -445,7 +436,6 @@ MoveRandomToEnd=Bepaald of parkoers met willekeurige nummers aan het einde van h
MovieColorDepth=Kies de kleurdiepte van films. 32 bit texturen gebruiken meer geheugen, maar zien er beter uit.
MusicWheelSwitchSpeed=Verander de snelheid van het nummerwiel.
MusicWheelUsesSections=&oq;Altijd&cq; betekent secties in groepen + ABC; &oq;Nooit&cq; betekent geen secties; &oq;Alleen Titel&cq; laat secties in ABC-volgorde zien.
Network Options=Maak connectie met een server of verander serveropties.
No Memory Card=Er is geen USB geheugenkaart gevonden.
NoteSkins=NootUiterlijk
NumBackgrounds=Kies het maximum aantal willekeurige achtergronden dat tegelijk geladen mag zijn.
@@ -480,7 +470,6 @@ SaveReplays=Zet opslaan van herhaling aan.
SaveScores=ScoresOpslaan
SaveStats=Als dit aan staat, word Stats.xml opgeslagen.
ScoreDisplay=ScoreDisplay
Scoreboard=Zet scoreboard aan.
ScoringType=Definieer hoe de score word berekend.
ScreenFilter=Schermfilter
Scroll=Scroll
@@ -976,7 +965,6 @@ CoinMode=Munt Mode
CoinModeNoHome=Munt Mode
CoinsPerCredit=Munten&nbsp;per Krediet
ComboContinuesBetweenSongs=Laat Combo Doorlopen
Connection=Verbinding
Convert delay to beats=Converteer vertragingen naar ritmes
Convert pause to beats=Converteer stoppen naar ritmes
Convert selection to attack=Converteer selectie naar aanval
@@ -1123,7 +1111,6 @@ MovieColorDepth=Filmkleur
Music File=Muziekbestand
MusicWheelSwitchSpeed=Wielsnelheid
MusicWheelUsesSections=Wielselecties
Network Options=Netwerkopties
No USB memory cards found=Geen USB geheugenkaart gevonden
NoteSkins=NootUiterlijk
NumBackgrounds=Willekeurige Achtergronden
@@ -1181,7 +1168,6 @@ SaveReplays=Sla Replays Op
SaveScores=Scores Opslaan
SaveStats=Sla Statistieken Op
ScoreDisplay=Score Weergave
Scoreboard=Scoreboard
ScoringType=Score Type
ScreenFilter=Schermfilter
Scroll=Scroll
@@ -1383,19 +1369,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
Enter room name=Vul kamernaam in
Empty=- Leeg -
[RoomInfoDisplay]
Last Round Info:=Informatie Laatste Ronde:
Room Name:=Naam:
Room Description:=Beschrijving:
Song Title:=Titel:
Song Subtitle:=Subtitel:
Song Artist:=Artiest:
Players=Spelers
[SMPackageUtil]
Could not find '%s'.=Kon '%s' niet vinden.
@@ -1681,31 +1654,6 @@ WarningText=Wees er zeker van dat je niet belangrijke toetsmappings overschrijft
[ScreenMapControllers2]
Add Mapping=Voeg Mapping Toe
[ScreenNetRoom]
Enter a description for the room:=Voer een beschrijving in voor de kamer.
Enter a password for the room (blank, no password):=Voer een wachtwoord voor de kamer in (leeg, geen wachtwoord):
Enter Room's Password:=Voer wachtwoord voor kamer in:
HeaderText=StepMania Online
HeaderSubText=Kamerselectie
HelpText=Ctrl+ENTER Selecteer &BACK; Exit &MENULEFT;&MENURIGHT; Beweeg
[ScreenNetSelectMusic]
HeaderText=Selecteer Online Muziek
HeaderSubText=Nummerselectie
HelpText=Ctrl+ENTER Selecteert &BACK; Exit &MENULEFT;&MENURIGHT; Beweeg::&MENUUP; Speler Opties &MENUDOWN; Verander Niveau
[ScreenNetworkOptions]
Disconnected from server.=Verbinding met server verbroken.
Enter a network address.=Voer netwerkadres in.
Server failed: %s Code:%d=Server gefaald: %s Code:%d
Use 127.0.0.1 to connect to yourself.=Gebruik 127.0.0.1 om met jezelf te verbinden.
Connect=Verbind
Disconnect=Verbreek Verbinding.
ScoreOn=Aan
ScoreOff=Uit
HeaderText=Netwerkopties
HeaderSubText=Configureer netwerkspellen
[ScreenOptionsEditCourse]
The maximum number of entries per course is %d. This course already has %d entries.=Het maximum aantal nummers per parkoers is %d. Dit parkoers heeft al %d nummers.
You cannot delete the last entry in a course.=Je kan niet het laatste nummer uit een parkoers verwijderen.
@@ -1790,18 +1738,6 @@ FitInside=Aanpassen
FitInsideAvoidLetter=Letterboxen vermijden
FitInsideAvoidPillar=Pillarboxen vermijden
[ScreenPackages]
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=Download geannuleerd.
Enter URL=Vul URL in
Failed.=Mislukt.
Failed to connect.=Connectie mislukt.
File Already Exists=Bestand bestaat al
Header Sent.=Header Verstuurd.
Invalid URL.=Ongeldige URL.
VisitURL=--Bezoek URL--
Waiting for header.=Wachten op header.
[ScreenPrompt]
OK=OK
No=NEE
@@ -1820,16 +1756,6 @@ HelpText=&START; Laat Timer Doorgaan
[ScreenRanking]
[ScreenSMOnlineLogin]
Each player needs a unique Profile.=Elke speler heeft een uniek profiel nodig.
Enter your password.=Vul je wachtwoord in.
No Styles are selectable.=Je kan geen stijlen selecteren.
You are logging on as:=Je logt in als:
You must define a Profile.=Je moet een profiel definiëren.
HeaderText=Online Login
HeaderSubText=Selecteer een profiel
Depending on the server you're connected to, you may have to register for an account on their website.=Afhankelijk van de server waar je verbinding mee hebt moet je op hun website registreren.
[ScreenSaveSync]
Choosing NO will discard your changes.=Het kiezen van NEE gooit je veranderingen weg.
Would you like to save these changes?=Wil je deze veranderingen opslaan?
@@ -1853,7 +1779,6 @@ HelpTextTestInput=Druk op een knop of toets. Druk op ESCAPE als je klaar bent.
HelpTextTestLights=Druk &MENULEFT;&MENURIGHT; om alle lichten langs te gaan. Druk op ESCAPE als je klaar bent.
HelpTextTextEntry=Type een waarden met het toetsenbord. Druk op Enter als je klaar bent.
HelpTextMapControllers=Gebruik de pijlen om te bewegen, ENTER om toe te wijzen, SPATIE om leeg te maken::Druk ESCAPE als je klaar bent
HelpTextOnline=stepmaniaonline.net om te verbinden met de officiële StepMania Online Server::Bekijk stepmaniaonline.net voor meer informatie.
HelpTextNetSelectMusic=Ctrl + Enter om een kamer in te gaan/een nummer te selecteren::&UP; voor Speleropties
HelpTextBookkeeping=Druk &MENULEFT;&MENURIGHT; om data te doorlopen. Druk op ESCAPE als je klaar bent.
@@ -1989,7 +1914,6 @@ Gametype:=Speltype:
Difficulty:=Niveau:
Announcer=Omroeper
# Choices
Play Online=Netwerkspel
Edit/Share=Wijzig/Deel
Exit=Exit
Game Start=Begin Spel
-76
View File
@@ -197,7 +197,6 @@ Edit Steps=Edycja Piosenek
Jukebox=Odtwarzacz
Log In=Logowanie
Theme Options=Opcje Motywów
Network Options=Opcje Sieciowe
Export Packages=Eksport Pakietów
Select Character=Wybierz Postać Tancerza
Select Course=Wybierz Maraton
@@ -320,13 +319,6 @@ SurvivalText=Maratony Przetrwania
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=4-ty
8th=8-my
@@ -375,7 +367,6 @@ CoinMode=&oq;DOM&cq;: Opcje dostępne na ekranie tytułowym. &oq;GRA DARMOWA&cq;
CoinModeNoHome=Kiedy tryb jest ustawiony na GRA DARMOWA można grać bez wrzucania kredytu.
CoinsPerCredit=Liczba monet, które muszą być wrzucone by móc zagrać. (po wybraniu trybu Moneta = Płatna)
ComboContinuesBetweenSongs=Jeśli włączone, Combo nie będzie resetowane do 0 po każdej piosence.
Connection=Połącz z serwerem
CourseSortOrder=Określa sposób sortowania Maratonów.
CreateNew=
Create New Course=Utwórz nowy Maraton.
@@ -440,7 +431,6 @@ MoveRandomToEnd=Określa czy Maratony z losowymi piosenkami będą wyświetlane
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.
@@ -476,7 +466,6 @@ 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.
ScreenFilter=Filtr Ekranu
Scroll=Przesuwanie
@@ -973,7 +962,6 @@ Clear clipboard=Czyść Schowek
CoinMode=Tryb Pracy
CoinModeNoHome=Tryb Płatny
CoinsPerCredit=Monet&nbsp;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 attack=Zmień zaznaczenie na Atak
@@ -1119,7 +1107,6 @@ 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=ZauważonoSkiny
NumBackgrounds=Losowe Tła
@@ -1176,7 +1163,6 @@ SaveScores=Zapisz Wyniki
SaveReplays=Zapisz Powtórki
SaveStats=Zapisz Statystyki
ScoreDisplay=Wyświetlanie Punków
Scoreboard=Wyniki&nbsp;na serwerze
ScoringType=Metoda Punktacji
ScreenFilter=Filtr Ekranu
Scroll=Przesuwanie
@@ -1378,19 +1364,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
Enter room name=Wprowadź nazwę pokoju
Empty=- BRAK -
[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]
@@ -1668,31 +1641,6 @@ WarningText=Upewnij się że nie nadpiszesz żadnych ważnych\n powiązań do kl
StartMissing=Nic nie jest przypisane pod Start
VitalButtons=Przyciski istotne dla poruszania się po menu nie są przypisane:
[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.
@@ -1777,18 +1725,6 @@ FitInsideAvoidLetter=Unikaj list
FitInsideAvoidPillar=Unikać filaru
BG=TŁO
[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
@@ -1804,16 +1740,6 @@ HelpText=&START; Advance Timer
[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?
@@ -1837,7 +1763,6 @@ 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ć.
@@ -1972,7 +1897,6 @@ Gametype:=Rodzaj Gry:
Difficulty:=Poziom Trudności:
Announcer=Komentator
# Choices
Play Online=Gra Sieciowa
Edit/Share=Edycja
Exit=Wyjście
Game Start=Start
-76
View File
@@ -198,7 +198,6 @@ Edit Steps=Upraviť kroky
Jukebox=Jukebox
Log In=Prihlásenie
Theme Options=Nastavenia motívu
Network Options=Sieťové nastavenia
Export Packages=Exportovať balíky
Select Character=Vybrať tanečníka
Select Course=Vybrať maratón
@@ -321,13 +320,6 @@ SurvivalText=Maratóny prežitia
NormalModeText=Normálny režim
BattleModeText=Režim súboja (vypnuté)
[NetworkSyncManager]
Connection failed.=Chyba spojenia.
Connection to '%s' successful.=Úspešne pripojené k '%s'.
Connection to server dropped.=Pripojenie k serveru spadlo.
Initializing Client Network...=Inicializujem sieť klienta...
Not Supported=Režim nie je podporovaný počas sieťovej hry.
[NoteType]
4th=4.
8th=8.
@@ -379,7 +371,6 @@ CoinMode=&oq;Domov&cq;: Voľby sa zobrazujú na titulnej obrazovke. &oq;Platba&c
CoinModeNoHome=Ak je nastavené na PLATBA, musíte pred pridaním sa vložiť mince. Ak je nastavené na VOĽNÁ, môžete hrať bez vhodenia mince.
CoinsPerCredit=Počet mincí, ktoré musí hráč vložiť, aby sa mohol pridať (ak režim mincí = platba)
ComboContinuesBetweenSongs=Ak je zapnuté, kombo sa po každej skladbe nevynuluje.
Connection=Pripojiť sa na (zadaný) server
CourseSortOrder=Určuje, akým spôsobom sú radené maratóny.
CreateNew=
Create New Course=Vytvoriť nový maratón.
@@ -449,7 +440,6 @@ MoveRandomToEnd=Nastavuje, či majú byť maratóny s náhodnými skladbami umie
MovieColorDepth=Vyberte farebnú hĺbku videí. 32bitová hĺbka používa viac pamäte, ale vyzerá krajšie.
MusicWheelSwitchSpeed=Upraví rýchlosť hudobného disku.
MusicWheelUsesSections=&oq;Vždy&cq; znamená, že disk je delený na úseky podľa skupín + ABC; &oq;Nikdy&cq; znamená, že nie je použité žiadne delenie; &oq;Iba názov&cq; používa delenie podľa abecedného poradia.
Network Options=Pripojenie na server alebo zmena nastavení servera.
No Memory Card=Nebola nájdená žiadna pamäťová karta USB.
NoteSkins=Štýl nôt
NumBackgrounds=Vyberte najvyšší počet náhodných pozadí, ktoré budú naraz nahraté do pamäte.
@@ -486,7 +476,6 @@ SaveScores=Ukladať skóre
SaveReplays=Povoliť ukladanie záznamov.
SaveStats=Ak je zapnuté, štatistiky sa zapisujú do súboru Stats.xml.
ScoreDisplay=Zobrazenie skóre
Scoreboard=Zapína zobrazenie tabuľky so skóre
ScoringType=Určuje, ktorá metóda bodovania má byť použitá.
ScreenFilter=Filter obrazovky
Scroll=Posúvať
@@ -998,7 +987,6 @@ CoinModeNoHome=Režim mincí
CoinsPerCredit=Mincí na kredit
ComboContinuesBetweenSongs=Prenášať kombo
Combo segments=Kombo segmenty
Connection=Pripojenie
Convert pause to beats=Zmeniť pauzy na doby
Convert delay to beats=Zmeniť oneskorenia na doby
Convert selection to attack=Zmeniť výber na útok
@@ -1151,7 +1139,6 @@ MovieColorDepth=Farebná hĺbka videí
Music File=Súbor s hudbou
MusicWheelSwitchSpeed=Rýchlosť disku
MusicWheelUsesSections=Delenie disku
Network Options=Sieťové nastavenia
No USB memory cards found=Neboli nájdené USB karty
NoteSkins=Štýl nôt
NumBackgrounds=Náhodné pozadia
@@ -1211,7 +1198,6 @@ SaveScores=Ukladať skóre
SaveReplays=Ukladať záznamy
SaveStats=Ukladať štatistiky
ScoreDisplay=Zobrazenie skóre
Scoreboard=Tabuľka so skóre
ScoringType=Typ skórovania
ScreenFilter=Filter obrazovky
Scroll=Posúvanie
@@ -1419,19 +1405,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
Enter room name=Zadajte názov miestnosti
Empty=- PRÁZDNA -
[RoomInfoDisplay]
Last Round Info:=Posledné kolo:
Room Name:=Názov:
Room Description:=Popis:
Song Title:=Názov:
Song Subtitle:=Podnázov:
Song Artist:=Spevák/čka:
Players=Hráči
[SMPackageUtil]
Could not find '%s'.=Nepodarilo sa nájsť '%s'.
[Screen]
@@ -1724,31 +1697,6 @@ VitalButtons=Chýbajúce priradenia kláves pre tlačidlá vyžadované pre pohy
WarningHeader=VAROVANIE!
WarningText=Dávajte, prosím, pozor, aby ste neprepísali dôležité mapovanie kláves, ako napr.:\n&MENULEFT; LEFT &MENURIGHT; RIGHT &MENUUP; UP &MENUDOWN; DOWN &START; START &BACK; BACK alebo &SELECT; SELECT. Nemeňte mapovanie kláves, ktorých funkciu nepoznáte a takisto nezrušte mapovanie dôležitých kláves!
[ScreenNetRoom]
Enter a description for the room:=Zadajte popis miestnosti:
Enter a password for the room (blank, no password):=Zadajte heslo miestnosti (prázdna = bez hesla):
Enter Room's Password:=Zadajte heslo miestnosti:
HeaderText=StepMania Online
HeaderSubText=Výber miestnosti
HelpText=Ctrl+ENTER Výber &BACK; Ukončiť &MENULEFT;&MENURIGHT; Presun
[ScreenNetSelectMusic]
HeaderText=Vyberte hudbu online
HeaderSubText=Výber hudby
HelpText=Ctrl+ENTER Výber &BACK; Ukončiť &MENULEFT;&MENURIGHT; Presun::&MENUUP; Voľby hráča &MENUDOWN; Zmena obtiažnosti
[ScreenNetworkOptions]
Disconnected from server.=Odpojený zo servera.
Enter a network address.=Zadajte sieťovú adresu.
Server failed: %s Code:%d=Server vrátil chybu: %s Kód:%d
Use 127.0.0.1 to connect to yourself.=Použite 127.0.0.1 pre pripojenie k svojmu počítaču.
Connect=Pripojiť sa
Disconnect=Odpojiť sa
ScoreOn=Zap
ScoreOff=Vyp
HeaderText=Nastavenia siete
HeaderSubText=Nastaviť hru cez sieť
[ScreenOptionsEditCourse]
The maximum number of entries per course is %d. This course already has %d entries.=Najvyšší počet položiek na maratón je %d. Tento maratón má už %d položiek.
You cannot delete the last entry in a course.=Nemôžete odstrániť poslednú položku maratónu.
@@ -2052,18 +2000,6 @@ Chart Style=Štýl tabuľky
Choose=Vyberte
BG=Pozadie
[ScreenPackages]
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=Sťahovanie zrušené.
Enter URL=Zadajte adresu URL
Failed.=Zlyhalo.
Failed to connect.=Pripojenie zlyhalo.
File Already Exists=Súbor už existuje
Header Sent.=Hlavička odoslaná.
Invalid URL.=Neplatná adresa URL.
VisitURL=--Otvoriť adresu URL--
Waiting for header.=Čakám na hlavičku.
[ScreenPrompt]
OK=OK
No=NIE
@@ -2082,16 +2018,6 @@ HelpText=&START; Posunúť časovač
[ScreenRanking]
[ScreenSMOnlineLogin]
Each player needs a unique Profile.=Každý hráč potrebuje unikátny profil.
Enter your password.=Zadajte Vaše heslo.
No Styles are selectable.=Nie je možné vybrať žiaden štýl.
You are logging on as:=Prihlasujete sa ako:
You must define a Profile.=Musíte zadať profil.
HeaderText=Online prihlásenie
HeaderSubText=Vyberte profil pre prihlásenie
Depending on the server you're connected to, you may have to register for an account on their website.=V závislosti od nastavení servera, ku ktorému sa pripájate, si budete možno musieť zaregistrovať účet na jeho webovej stránke.
[ScreenSaveSync]
Choosing NO will discard your changes.=Výberom NIE zahodíte Vaše úpravy.
Would you like to save these changes?=Chcete uložiť Vaše zmeny?
@@ -2115,7 +2041,6 @@ HelpTextTestInput=Stlačte ľubovoľné tlačidlo alebo kláves. Stlačte ESCAP
HelpTextTestLights=Použite &MENULEFT;&MENURIGHT; pre prepínanie svetiel. Stlačte ESCAPE, keď ste skončili.
HelpTextTextEntry=Pomocou klávesnice vložte hodnotu. Pre dokončenie stlačte Enter.
HelpTextMapControllers=Použite šípky na presun, ENTER pre priradenie, MEDZERU pre vyčistenie::Stlačte ESCAPE, keď ste skončili.
HelpTextOnline=stepmaniaonline.net na pripojenie sa na oficiálny server StepMania Online::Navštívte stepmaniaonline.net pre viac informácií
HelpTextNetSelectMusic=Ctrl + Enter pre vstup do miestnosti/výber skladby::&UP; pre možnosti hráča
HelpTextBookkeeping=Stlačte &MENULEFT;&MENURIGHT; pre prepínanie údajov. Stlačte ESCAPE, keď ste skončili.
@@ -2252,7 +2177,6 @@ Gametype:=Typ hry:
Difficulty:=Obtiažnosť:
Announcer=Komentátor
# Choices
Play Online=Hra cez sieť
Edit/Share=Upraviť/zdieľať
Exit=Ukončiť
Game Start=Spustiť hru
-76
View File
@@ -200,7 +200,6 @@ Edit Steps=編輯譜面
Jukebox=音樂盒
Log In=登入
Theme Options=主題設定
Network Options=網路設定
Export Packages=輸出壓縮包
Select Character=選擇3D角色
Select Course=選擇組曲
@@ -323,13 +322,6 @@ SurvivalText=生存模式
NormalModeText=一般模式
BattleModeText=對戰模式 (關閉中)
[NetworkSyncManager]
Connection failed.=連接失敗
Connection to '%s' successful.=連接到'%s' 成功
Connection to server dropped.=伺服器的連接被切斷
Initializing Client Network...=用戶端網路初始化...
Not Supported=線上遊戲不支援這個模式
[NoteType]
4th=4th
8th=8th
@@ -380,7 +372,6 @@ CoinMode=投幣設定, 一般選擇家用會出現標題清單.
CoinModeNoHome=投幣設定, 一般選擇為投幣, 如果有特殊活動則選擇為免費.
CoinsPerCredit=每局所需投幣數.
ComboContinuesBetweenSongs=是否在下一關接續上一關的COMBO數.
Connection=連接到伺服器.
CourseSortOrder=組曲排序設定.
CreateNew=建立新的譜面.
Create New Course=建立新的組曲.
@@ -449,7 +440,6 @@ MoveRandomToEnd=將選曲畫面的隨機選曲項目移到最下層.
MovieColorDepth=選擇影片色深.
MusicWheelSwitchSpeed=選曲速度設定.
MusicWheelUsesSections=//選擇歌曲排序顯示方式.//
Network Options=連接到伺服器或是改變伺服器設定.
No Memory Card=沒有找到USB記憶卡.
NoteSkins=箭頭樣式
NumBackgrounds=選擇隨機動畫背景最大量.
@@ -486,7 +476,6 @@ SaveScores=儲存成績.
SaveReplays=儲存重播.
SaveStats=儲存Stats.xml.
ScoreDisplay=在線上模式中選擇是否顯示分數.
Scoreboard=在線上模式中選擇是否可觀看其他玩家成績結果.
ScoringType=選擇分數計分樣式.
ScreenFilter=畫面過濾, 數値越大背景越黑暗.
Scroll=譜面捲動特效.
@@ -996,7 +985,6 @@ CoinModeNoHome=無家用投幣模式
CoinsPerCredit=每局&nbsp;所需幣數
ComboContinuesBetweenSongs=Combo連攜
Combo segments=Combo區段
Connection=連接
Convert pause to beats=轉換停拍為節拍
Convert delay to beats=轉換延遲停拍為節拍
Convert selection to attack=轉換選擇區域為特效
@@ -1148,7 +1136,6 @@ MovieColorDepth=影片色深
Music File=音樂檔案
MusicWheelSwitchSpeed=選曲轉速
MusicWheelUsesSections=按專輯&nbsp;排序
Network Options=網路選項
No USB memory cards found=找不到USB記憶卡
NoteSkins=箭頭樣式
NumBackgrounds=隨機背景&nbsp;使用數量
@@ -1208,7 +1195,6 @@ SaveScores=儲存分數
SaveReplays=儲存重播
SaveStats=儲存型態
ScoreDisplay=分數表示
Scoreboard=分數板
ScoringType=記分方式
ScreenFilter=螢幕過濾
Scroll=捲動
@@ -1416,19 +1402,6 @@ NumRd=rd
NumSt=st
NumTh=th
[RoomWheel]
Enter room name=輸入房間名
Empty=- EMPTY -
[RoomInfoDisplay]
Last Round Info:=最後遊玩訊息:
Room Name:=名稱:
Room Description:=描述:
Song Title:=標題:
Song Subtitle:=副標題:
Song Artist:=作者:
Players=玩家:
[SMPackageUtil]
Could not find '%s'.=找不到 '%s'
[Screen]
@@ -1724,31 +1697,6 @@ VitalButtons=給清單導航的重要按鍵不可映射:
WarningHeader=警 告!
WarningText=請確定你沒有重載到任何重要的按鍵對應, 像是:\n&MENULEFT; 菜單左鍵 &MENURIGHT; 菜單右鍵 &MENUUP; 菜單上鍵 &MENUDOWN; 菜單下鍵 &START; 開始鍵 &BACK; 返回鍵 or &SELECT; 選擇鍵. 若不知道該按鍵功能或是沒有對應到重要按鍵,請不要套用!
[ScreenNetRoom]
Enter a description for the room:=輸入房間的描述:
Enter a password for the room (blank, no password):=輸入房間密碼, 不使用請留空:
Enter Room's Password:=輸入房間密碼:
HeaderText=StepMania Online
HeaderSubText=選擇房間
HelpText=Ctrl+ENTER 決定 &BACK; 離開 &MENULEFT;&MENURIGHT; 選擇
[ScreenNetSelectMusic]
HeaderText=歌曲選擇
HeaderSubText=選擇歌曲(可用英文聊天)
HelpText=Ctrl+ENTER 決定 &BACK; 離開 &MENULEFT;&MENURIGHT; 選擇::&MENUUP; 玩家設定 &MENUDOWN; 變更難度
[ScreenNetworkOptions]
Disconnected from server.=從伺服器斷開
Enter a network address.=輸入一個網路位址
Server failed: %s Code:%d=伺服器錯誤: %s 代碼:%d
Use 127.0.0.1 to connect to yourself.=輸入127.0.0.1連接你自己的
Connect=連接
Disconnect=斷開
ScoreOn=On
ScoreOff=Off
HeaderText=網路選項
HeaderSubText=Stepmania Online的網路設定
[ScreenOptionsEditCourse]
The maximum number of entries per course is %d. This course already has %d entries.=每個組曲項目最大設定量是 %d, 此組曲已經有 %d 個項目
You cannot delete the last entry in a course.=你不可刪除此組曲最後的項目
@@ -1832,18 +1780,6 @@ FitInsideAvoidLetter=避免水平扭曲
FitInsideAvoidPillar=避免垂直扭曲
BG=畫面
[ScreenPackages]
DL @ %d KB/s=DL @ %d KB/s
Download cancelled.=下載已取消
Enter URL=輸入網址
Failed.=失敗
Failed to connect.=連接失敗
File Already Exists=檔案已存在
Header Sent.=送出Header
Invalid URL.=網址不存在
VisitURL=--訪問網址--
Waiting for header.=等待Header
[ScreenPrompt]
OK=確定
No=
@@ -1862,16 +1798,6 @@ HelpText=&START; Advance Timer
[ScreenRanking]
[ScreenSMOnlineLogin]
Each player needs a unique Profile.=每個玩家需要不同的個人資料
Enter your password.=輸入你的密碼
No Styles are selectable.=沒有可選的遊戲類型
You are logging on as:=你用這個名稱登入:
You must define a Profile.=你必須建立一個個人資料
HeaderText=線上登入
HeaderSubText=選擇個人資料線上登入
Depending on the server you're connected to, you may have to register for an account on their website.=根據您連接到的服務器上, 你可以註冊一個帳號上他們的網站
[ScreenSaveSync]
Choosing NO will discard your changes.=選擇否取消變更.
Would you like to save these changes?=你想要保留這個變更嗎?
@@ -1895,7 +1821,6 @@ HelpTextTestInput=輸入任一鍵測試. ESC鍵離開.
HelpTextTestLights=&MENULEFT;&MENURIGHT; 瀏覽燈光. ESC鍵離開.
HelpTextTextEntry=使用鍵盤輸入一個數値. Enter鍵完成設定.
HelpTextMapControllers=方向鍵移動, ENTER鍵進入設定, SPACE鍵清除::ESC鍵離開
HelpTextOnline=使用smonline.us網址連接到官方Stepmania Online伺服器::詳細資訊可參考Stepmaniaonline.com
HelpTextNetSelectMusic=Ctrl + Enter 決定::&UP; 進入玩家設定
HelpTextBookkeeping=&MENULEFT;&MENURIGHT; 瀏覽資料. ESC鍵離開.
@@ -2032,7 +1957,6 @@ Gametype:=遊戲類型:
Difficulty:=難度:
Announcer=主持人
# Choices
Play Online=線上遊戲
Edit/Share=編輯與分享
Exit=離開遊戲
Game Start=開始遊戲
+6 -40
View File
@@ -6,20 +6,8 @@ in the metrics as Branch.keyname.
If the line is a function, you'll have to use Branch.keyname() instead.
--]]
-- used for various SMOnline-enabled screens:
function SMOnlineScreen()
for pn in ivalues(GAMESTATE:GetHumanPlayers()) do
if not IsSMOnlineLoggedIn(pn) then
return "ScreenSMOnlineLogin"
end
end
return "ScreenNetRoom"
end
function SelectMusicOrCourse()
if IsNetSMOnline() then
return "ScreenNetSelectMusic"
elseif GAMESTATE:IsCourseMode() then
if GAMESTATE:IsCourseMode() then
return "ScreenSelectCourse"
else
return "ScreenSelectMusic"
@@ -77,14 +65,10 @@ Branch = {
if PROFILEMAN:GetNumLocalProfiles() >= 2 then
return "ScreenSelectProfile"
else
if IsNetConnected() then
if THEME:GetMetric("Common","AutoSetStyle") == false then
return "ScreenSelectStyle"
else
if THEME:GetMetric("Common","AutoSetStyle") == false then
return "ScreenSelectStyle"
else
return "ScreenProfileLoad"
end
return "ScreenProfileLoad"
end
end
end,
@@ -96,16 +80,6 @@ Branch = {
return "ScreenOptionsEdit"
end,
AfterSelectStyle = function()
if IsNetConnected() then
ReportStyle()
GAMESTATE:ApplyGameCommand("playmode,regular")
end
if IsNetSMOnline() then
return SMOnlineScreen()
end
if IsNetConnected() then
return "ScreenNetRoom"
end
return "ScreenProfileLoad"
--return CHARMAN:GetAllCharacters() ~= nil and "ScreenSelectCharacter" or "ScreenGameInformation"
@@ -113,7 +87,7 @@ Branch = {
AfterSelectProfile = function()
if ( THEME:GetMetric("Common","AutoSetStyle") == true ) then
-- use SelectStyle in online...
return IsNetConnected() and "ScreenSelectStyle" or "ScreenSelectPlayMode"
return "ScreenSelectPlayMode"
else
return "ScreenSelectStyle"
end
@@ -141,7 +115,6 @@ Branch = {
bTrue = PREFSMAN:GetPreference("ShowInstructions")
return (bTrue and GoToMusic() or "ScreenGameInformation")
end,
AfterSMOLogin = SMOnlineScreen(),
BackOutOfPlayerOptions = function()
return SelectMusicOrCourse()
end,
@@ -181,12 +154,8 @@ Branch = {
return IsRoutine() and "ScreenGameplayShared" or "ScreenGameplay"
end,
EvaluationScreen= function()
if IsNetSMOnline() then
return "ScreenNetEvaluation"
else
-- todo: account for courses etc?
return "ScreenEvaluationNormal"
end
-- todo: account for courses etc?
return "ScreenEvaluationNormal"
end,
AfterGameplay = function()
-- pick an evaluation screen based on settings.
@@ -236,9 +205,6 @@ Branch = {
AfterSummary = function()
return "ScreenProfileSaveSummary"
end,
Network = function()
return IsNetConnected() and "ScreenTitleMenu" or "ScreenTitleMenu"
end,
AfterSaveSummary = function()
return GameOverOrContinue()
-- [[ Enable when Finished ]]
@@ -1 +0,0 @@
Common value
@@ -1 +0,0 @@
Common value
@@ -1 +0,0 @@
ScreenSelectMusic random music
@@ -1 +0,0 @@
ScreenSelectMusic roulette music
@@ -1 +0,0 @@
ScreenSelectMusic section music
@@ -1 +0,0 @@
Common value
+12 -281
View File
@@ -90,16 +90,15 @@ SleepAfterTweenOffSeconds=0
NumChoicesOnPage1=100
WrapCursor=true
AllowRepeatingInput=true
ChoiceNames="1,2,3,4,5,6,7"
ChoiceNames="1,2,3,4,5,6"
DefaultChoice="1"
Choice1="applydefaultoptions;screen,ScreenProfileLoad;text,Game Start"
Choice2="screen,ScreenNetworkOptions;text,Play Online"
Choice3="screen,ScreenSelectGame;text,Select Game"
Choice4="screen,ScreenOptionsService;text,Options"
Choice5="screen,ScreenOptionsEdit;text,Edit/Share"
Choice6="screen,ScreenJukeboxMenu;text,Jukebox"
Choice7="screen,ScreenExit;text,Exit"
Choice8="screen,ScreenTest;text,Sandbox"
Choice2="screen,ScreenSelectGame;text,Select Game"
Choice3="screen,ScreenOptionsService;text,Options"
Choice4="screen,ScreenOptionsEdit;text,Edit/Share"
Choice5="screen,ScreenJukeboxMenu;text,Jukebox"
Choice6="screen,ScreenExit;text,Exit"
Choice7="screen,ScreenTest;text,Sandbox"
ShowIcon=false
ShowScroller=true
PerChoiceScrollElement=false
@@ -487,132 +486,6 @@ ScoreFrameP2OnCommand=visible,false
Fallback="ScreenSelectCourse"
DefaultSort="Endless"
[ScreenSMOnlineLogin]
Class="ScreenSMOnlineLogin"
Fallback="ScreenOptionsServiceChild"
NextScreen=SMOnlineScreen()
PrevScreen=ScreenTitleBranch()
ShowStyleIcon=false
TimerSeconds=-1
ShowHelp=false
[ScreenNetRoom]
MusicSelectScreen="ScreenSMOnlineSelectMusic"
PrevScreen=ScreenTitleBranch()
NextScreen="ScreenGameplayBranch"
Fallback="ScreenNetSelectMusic"
Class="ScreenNetRoom"
HelpText=""
OpenRoomColor=color("1.0,1.0,1.0,1.0")
PasswdRoomColor=color("1.0,0.5,0.5,1.0")
InGameRoomColor=color("1.0,0.1,0.1,1.0")
RoomWheelX=SCREEN_CENTER_X-178
RoomWheelY=SCREEN_CENTER_Y-10
RoomWheelOnCommand=draworder,-100
RoomInfoDisplayX=SCREEN_CENTER_X
RoomInfoDisplayY=SCREEN_CENTER_Y
[ScreenSMOnlineSelectMusic]
PrevScreen="ScreenNetRoom"
Class="ScreenNetSelectMusic"
RoomSelectScreen="ScreenNetRoom"
Fallback="ScreenNetSelectMusic"
[ScreenNetSelectMusic]
Fallback="ScreenWithMenuElements"
Class="ScreenNetSelectMusic"
BannerWidth=0 // These dont do anything but prevent crashes
BannerHeight=0
MusicWheelX=SCREEN_CENTER_X-178
MusicWheelY=SCREEN_CENTER_Y-10
MusicWheelOnCommand=draworder,-100
MusicWheelOffCommand=
TimerStealth=true
BPMDisplayX=SCREEN_CENTER_X*0.3
BPMDisplayY=SCREEN_CENTER_Y+120
BPMDisplayOnCommand=horizalign,right;shadowlength,1;addx,-SCREEN_WIDTH*0.6;bounceend,0.5;addx,SCREEN_WIDTH*0.6
BPMDisplayOffCommand=bouncebegin,0.5;addx,-SCREEN_WIDTH*0.6
ModIconsP1X=SCREEN_CENTER_X+144
ModIconsP1Y=SCREEN_CENTER_Y-165
ModIconsP1OnCommand=zoomy,0;linear,0.5;zoomy,1
ModIconsP1OffCommand=linear,0.5;zoomy,0
ModIconsP2X=SCREEN_CENTER_X+144
ModIconsP2Y=SCREEN_CENTER_Y-164
ModIconsP2OnCommand=zoomy,0;linear,0.5;zoomy,1
ModIconsP2OffCommand=linear,0.5;zoomy,0
ChatInputBoxX=SCREEN_CENTER_X+144
ChatInputBoxY=SCREEN_CENTER_Y+112
ChatInputBoxOnCommand=addx,SCREEN_WIDTH*0.6;bounceend,0.5;addx,-SCREEN_WIDTH*0.6
ChatInputBoxOffCommand=bouncebegin,0.5;addx,SCREEN_WIDTH*0.6
ChatInputBoxWidth=310
ChatInputBoxHeight=60
ChatInputBoxColor=color("0.5,0.5,1.0,0.7") //transparent cyan
ChatOutputBoxX=SCREEN_CENTER_X+144
ChatOutputBoxY=SCREEN_CENTER_Y-37
ChatOutputBoxOnCommand=zoomy,1.1;addx,SCREEN_WIDTH*0.6;bounceend,0.5;diffusealpha,1;addx,-SCREEN_WIDTH*0.6
ChatOutputBoxOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0;zoom,0;
ChatOutputBoxWidth=310
ChatOutputBoxHeight=210
ChatOutputBoxColor=color("1.0,0.5,0.5,0.7") //transparent reddish
ChatInputX=SCREEN_CENTER_X-2
ChatInputY=SCREEN_CENTER_Y+90
ChatInputOnCommand=diffusealpha,0;linear,0.55;diffusealpha,1
ChatInputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
ChatOutputX=SCREEN_CENTER_X-2
ChatOutputY=SCREEN_CENTER_Y+68
ChatOutputOnCommand=diffusealpha,0;linear,0.55;diffusealpha,1
ChatOutputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
UsersX=SCREEN_CENTER_X-265
UsersY=SCREEN_CENTER_Y+172
UsersDX=40
UsersAY=16
UsersOnCommand=draworder,2;zoom,1
UsersOffCommand=linear,0.5;zoom,0
Users0Command=draworder,2;diffuse,1.0,0.4,0.4,1.0
Users1Command=draworder,2;diffuse,1.0,1.0,1.0,1.0
Users2Command=draworder,2;diffuse,0.5,0.5,1.0,1.0
Users3Command=draworder,2;diffuse,0.5,1.0,0.5,1.0
Users4Command=draworder,2;diffuse,1.0,0.5,0.5,1.0
optionsY=SCREEN_CENTER_Y-170
optionsX=SCREEN_CENTER_X-240
optionsOnCommand=zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,0.7;zoomx,0.7
optionsOffCommand=linear,0.5;zoomx,0.0;zoomy,0.0
MeterP1Y=SCREEN_CENTER_Y+150
MeterP1X=SCREEN_CENTER_X-223
MeterP1OnCommand=horizalign,right;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0
MeterP1OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0
MeterP2Y=SCREEN_CENTER_Y+150
MeterP2X=SCREEN_CENTER_X-110
MeterP2OnCommand=horizalign,right;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0
MeterP2OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0
DiffBGColor=color("0.7,0.7,0.7,0.7")
DiffBGWidth=0
DiffBGHeight=0
DiffBGY=SCREEN_CENTER_Y+160
DiffBGX=SCREEN_CENTER_X-60
DiffBGOnCommand=zoomz,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0
DiffBGOffCommand=linear,0.5;zoomx,0.0;zoomy,0.0
ChatOutputLines=14
ChatTextOutputWidth=304
ChatTextInputWidth=304
NumStylesShow=1
NumSongsShow=4
NumGroupsShow=3
ShowStyleIcon=false
TimerSeconds=
PrevScreen=ScreenTitleBranch()
NextScreen="ScreenStage"
NoSongsScreen=ScreenTitleBranch()
DifficultyIconP1OnCommand=visible,false
DifficultyIconP1OffCommand=
DifficultyIconP2OnCommand=visible,false
DifficultyIconP2OffCommand=
DifficultyIconP1X=SCREEN_CENTER_X+50
DifficultyIconP1Y=SCREEN_BOTTOM-54
DifficultyIconP2X=SCREEN_CENTER_X+80
DifficultyIconP2Y=SCREEN_BOTTOM-50
HelpText=ScreenString("HelpTextNetSelectMusic");
[ScreenSplash]
Class="ScreenSplash"
Fallback="ScreenWithMenuElementsBlank"
@@ -728,30 +601,6 @@ PlayerOptionsP2X=SCREEN_CENTER_X+0
PlayerOptionsP2Y=SCREEN_CENTER_Y+210
PlayerOptionsP2OnCommand=visible,false
PlayerOptionsP2OffCommand=
ScoreboardC1P1X=SCREEN_CENTER_X-260
ScoreboardC1P1Y=SCREEN_CENTER_Y-160
ScoreboardC1P1OnCommand=zoom,1
ScoreboardC1P1OffCommand=zoom,1
ScoreboardC2P1X=SCREEN_CENTER_X-140
ScoreboardC2P1Y=SCREEN_CENTER_Y-160
ScoreboardC2P1OnCommand=zoom,1
ScoreboardC2P1OffCommand=zoom,1
ScoreboardC3P1X=SCREEN_CENTER_X-30
ScoreboardC3P1Y=SCREEN_CENTER_Y-160
ScoreboardC3P1OnCommand=zoom,1
ScoreboardC3P1OffCommand=zoom,1
ScoreboardC1P2X=SCREEN_CENTER_X+40
ScoreboardC1P2Y=SCREEN_CENTER_Y-160
ScoreboardC1P2OnCommand=zoom,1
ScoreboardC1P2OffCommand=zoom,1
ScoreboardC2P2X=SCREEN_CENTER_X+160
ScoreboardC2P2Y=SCREEN_CENTER_Y-160
ScoreboardC2P2OnCommand=zoom,1
ScoreboardC2P2OffCommand=zoom,1
ScoreboardC3P2X=SCREEN_CENTER_X+270
ScoreboardC3P2Y=SCREEN_CENTER_Y-160
ScoreboardC3P2OnCommand=zoom,1
ScoreboardC3P2OffCommand=zoom,1
StepsDescriptionP1X=
StepsDescriptionP1Y=
StepsDescriptionP1OnCommand=visible,false
@@ -1355,30 +1204,6 @@ BarActualMaxCommand=glowshift;effectperiod,0.5
CheerDelaySeconds=2.5
[ScreenNetEvaluation]
Class="ScreenNetEvaluation"
Fallback="ScreenEvaluationStage"
NextScreen=ScreenBranchNetAfterEval()
UsersBG1Y=SCREEN_CENTER_Y+0
UsersBG1X=SCREEN_CENTER_X-180
UsersBG2Y=SCREEN_CENTER_Y+0
UsersBG2X=SCREEN_CENTER_X+180
UsersBGWidth=260
UsersBGHeight=400
UsersBGCommand=diffuse,0.4,0.1,0.4,0.5
UsersBGOnCommand=zoomx,0.0;zoomy,0.0;linear,0.5;zoomx,1.0;zoomy,1.0
UsersBGOffCommand=zoomx,1.0;zoomy,1.0;linear,0.5;zoomx,0.0;zoomy,0.0
User1Y=SCREEN_CENTER_Y-160
User1X=SCREEN_CENTER_X-180
User2Y=SCREEN_CENTER_Y-160
User2X=SCREEN_CENTER_X+180
UserDX=0
UserDY=SCREEN_CENTER_Y-208
UserOnCommand=zoomx,0.0;zoomy,0.0;linear,0.5;zoomx,1.0;zoomy,1.0
UserOffCommand=zoomx,1.0;zoomy,1.0;linear,0.5;zoomx,0.0;zoomy,0.0
UserDeSelCommand=zoomx,1.4;zoomy,1.4;linear,0.1;zoomx,1.0;zoomy,1.0
UserSelCommand=zoomx,1.0;zoomy,1.0;linear,0.1;zoomx,1.4;zoomy,1.4
[ScreenEvaluationStage]
Fallback="ScreenEvaluation"
NextScreen=GetEvaluationNextScreen()
@@ -1753,41 +1578,6 @@ ChoiceHardMeter="sort,HardMeter"
ChoiceLength="sort,Length"
UseEasyMarkerFlag=false
[RoomWheel]
Fallback="MusicWheel"
RoomWheelItemStartOnCommand=
RoomWheelItemFinishOnCommand=
CreateRoomColor=color("0.0,0.9,0.25,1.0")
ScrollBarOnCommand=visible,false
[RoomInfoDisplay]
RoomInfoDisplayOnCommand=diffuse,1.0,1.0,1.0,1.0;x,SCREEN_WIDTH+130;y,250;bounceend,0.5;x,SCREEN_WIDTH-160
RoomInfoDisplayOffCommand=x,SCREEN_WIDTH-160;y,250;bouncebegin,0.5;x,SCREEN_WIDTH+130
DeployDelay=1.5
RetractDelay=5
RoomTitleOnCommand=x,-120;y,-140;zoom,0.75
RoomDescOnCommand=x,-120;y,-129;zoom,0.75
LastRoundOnCommand=x,-120;y,-107;zoom,0.75
SongTitleOnCommand=x,-110;y,-96;zoom,0.75
SongSubTitleOnCommand=x,-110;y,-85;zoom,0.75
SongArtistOnCommand=x,-110;y,-74;zoom,0.75
PlayersOnCommand=x,-120;y,-52;zoom,0.75
PlayerListElementX=-110
PlayerListElementY=-41
PlayerListElementOffsetX=0
PlayerListElementOffsetY=11
PlayerListElementOnCommand=zoom,0.75
[RoomWheelItem]
TextOnCommand=zoom,0.6;strokecolor,color("#000000FF")
TextX=-110
TextY=-8
TextWidth=200
DescX=-100
DescY=6
DescOnCommand=zoom,0.4;strokecolor,color("#000000FF")
DescWidth=400
[LifeMeterBar]
DangerThreshold=0.2
InitialValue=0.5
@@ -2211,12 +2001,6 @@ TextOffCommand=
Class="ScreenTestSound"
Fallback="ScreenOptionsServiceChild"
[ScreenNetworkOptions]
Class="ScreenNetworkOptions"
Fallback="ScreenOptionsServiceChild"
NextScreen=NextNetworkScreen()
PrevScreen=NextNetworkScreen()
[ScreenBookkeeping]
Class="ScreenBookkeeping"
Fallback="ScreenOptionsServiceChild"
@@ -2238,58 +2022,6 @@ DataX=0
DataY=SCREEN_CENTER_Y+16
DataOnCommand=
[ScreenPackages]
Class="ScreenPackages"
PackagesBGY=SCREEN_CENTER_Y
PackagesBGX=SCREEN_WIDTH/4
PackagesBGWidth=SCREEN_WIDTH/3
PackagesBGOnCommand=diffusealpha,0.0;linear,0.9;diffusealpha,1.0
PackagesBGOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
PackagesBGBackCommand=linear,0.2;diffuse,#CCCCCC;diffusealpha,0.9
PackagesBGAwayCommand=linear,0.2;diffuse,#020101;diffusealpha,0.9
WebBGY=SCREEN_CENTER_Y
WebBGX=SCREEN_WIDTH*3.0/4.0
WebBGWidth=SCREEN_WIDTH/3
WebBGOnCommand=diffusealpha,0.0;linear,0.9;diffusealpha,1.0
WebBGOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
WebBGAwayCommand=linear,0.2;diffuse,#020101;diffusealpha,0.9
WebBGBackCommand=linear,0.2;diffuse,#CCCCCC;diffusealpha,0.9
PackagesY=SCREEN_CENTER_Y+10
PackagesX=SCREEN_WIDTH/4
PackagesOnCommand=diffusealpha,0.0;linear,1.0;diffusealpha,1.0
PackagesOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
NumPackagesShow=8
WebY=SCREEN_CENTER_Y+10
WebX=SCREEN_WIDTH*3.0/4.0
WebOnCommand=diffusealpha,0.0;linear,1.0;diffusealpha,1.0
WebOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
NumLinksShow=8
WebSelY=SCREEN_CENTER_Y+10
WebSelX=SCREEN_WIDTH*3.0/4.0
WebSelColor=color("0.9,0.9,0.9,0.4")
WebSelOnCommand=diffusealpha,0.0;linear,1.0;diffusealpha,1.0
WebSelOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
WebURLY=SCREEN_HEIGHT-40
WebURLX=SCREEN_WIDTH*2.0/3.0
WebURLOnCommand=diffusealpha,0.0;linear,1.0;diffusealpha,1.0;zoomx,0.4;zoomy,0.5
WebURLOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
DownloadY=22
DownloadX=SCREEN_WIDTH*4.0/7.0
DownloadProgressCommand=diffuse,0.1,0.1,0.9,0.8
DownloadOnCommand=diffusealpha,0.0;linear,1.0;diffusealpha,1.0
DownloadOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
DownloadStatusY=22
DownloadStatusX=SCREEN_WIDTH*4.0/7.0
DownloadStatusOnCommand=diffusealpha,0.0;linear,1.0;diffusealpha,1.0
DownloadStatusOffCommand=diffusealpha,1.0;linear,0.6;diffusealpha,0.0
CanDL=true
ShowStyleIcon=false
TimerSeconds=
PrevScreen=ScreenTitleBranch()
NextScreen="ScreenStage"
NoSongsScreen=ScreenTitleBranch()
Fallback="ScreenWithMenuElements"
[HoldGhostArrow]
WarmUpSeconds=0.25
@@ -3292,17 +3024,16 @@ Fallback="ScreenOptionsSimple"
; This NextScreen is only used for the "exit" choice.
NextScreen=ScreenTitleBranch()
PrevScreen=ScreenTitleBranch()
LineNames="1,2,3,4,5,6,8,9"
LineNames="1,2,3,4,5,6,7"
Line1="gamecommand;screen,ScreenMapControllers;name,Key Joy Mappings"
Line2="gamecommand;screen,ScreenTestInput;name,Test Input"
Line3="gamecommand;screen,ScreenAppearanceOptions;name,Appearance Options"
Line4="gamecommand;screen,ScreenOptionsGraphicsSound;name,Graphics/Sound Options"
Line5="gamecommand;screen,ScreenOptionsAdvanced;name,Advanced Options"
Line6="gamecommand;screen,ScreenNetworkOptions;name,Network Options"
Line8="gamecommand;screen,ScreenOptionsManageProfiles;name,Profiles"
Line9="gamecommand;screen,ScreenReloadSongs;name,Reload Songs"
GroupedScreens="ScreenOptionsService,ScreenAppearanceOptions,ScreenMapControllers,ScreenOptionsGraphicsSound,ScreenOptionsAdvanced,ScreenOptionsManageProfiles,ScreenNetworkOptions,ScreenReloadSongs,ScreenTestInput"
PersistScreens="ScreenOptionsService,ScreenAppearanceOptions,ScreenMapControllers,ScreenOptionsGraphicsSound,ScreenOptionsAdvanced,ScreenOptionsManageProfiles,ScreenNetworkOptions,ScreenReloadSongs,ScreenTestInput"
Line6="gamecommand;screen,ScreenOptionsManageProfiles;name,Profiles"
Line7="gamecommand;screen,ScreenReloadSongs;name,Reload Songs"
GroupedScreens="ScreenOptionsService,ScreenAppearanceOptions,ScreenMapControllers,ScreenOptionsGraphicsSound,ScreenOptionsAdvanced,ScreenOptionsManageProfiles,ScreenReloadSongs,ScreenTestInput"
PersistScreens="ScreenOptionsService,ScreenAppearanceOptions,ScreenMapControllers,ScreenOptionsGraphicsSound,ScreenOptionsAdvanced,ScreenOptionsManageProfiles,ScreenReloadSongs,ScreenTestInput"
[ScreenOptionsServiceChild]
Fallback="ScreenOptionsMaster"
+1 -299
View File
@@ -387,29 +387,6 @@ BackInEventMode=""
# NextAnnouncer="Left,Left,Right,Right,Left,Left,Right,Right"
# NextAnnouncer2="MenuLeft,MenuLeft,MenuRight,MenuRight,MenuLeft,MenuLeft,MenuRight,MenuRight"
[CodeDetectorOnline]
Fallback="CodeDetector"
PrevSteps1="MenuUp,MenuUp"
PrevSteps2=""
NextSteps1="MenuDown,MenuDown"
NextSteps2=""
NextSort3=""
NextSort4=""
ModeMenu1=""
Mirror=""
Left=""
Right=""
Shuffle=""
SuperShuffle=""
NextScrollSpeed=""
PreviousScrollSpeed=""
NextAccel=""
NextEffect=""
NextAppearance=""
Reverse=""
HoldNotes=""
CancelAll=""
[CombinedLifeMeterTug]
# We don't use it.
MeterWidth=0.0
@@ -1024,13 +1001,6 @@ ChoiceOni="sort,Oni;playmode,oni;mod,battery"
ChoiceEndless="sort,Endless;playmode,endless;mod,bar"
ChoiceSurvival="sort,Oni;playmode,oni;mod,lifetime"
[OnlineMusicWheel]
Fallback="MusicWheel"
# roulette + online causes a sorting issue that should be hammered out first. -aj
ShowRoulette=false
ShowRandom=false
ShowPortal=false
[MusicWheelItem]
WheelNotifyIconX=106
WheelNotifyIconY=0
@@ -1889,7 +1859,6 @@ ChoiceEdit="text,Edit/Share;screen,"..Branch.OptionsEdit()
ChoiceExit="screen,ScreenExit;text,Exit"
# Aliases for the future.
ChoiceContinue="screen,ScreenContinue;text,Continue?"
ChoiceOnline="screen,ScreenNetworkOptions;text,Play Online"
ChoiceGameSelect="screen,ScreenSelectGame;text,Select Game"
ChoiceJukebox="screen,ScreenJukeboxMenu;text,Jukebox"
ChoiceReportBug="urlnoexit,https://github.com/itgmania/itgmania/issues;text,Report Bug"
@@ -2773,7 +2742,7 @@ Fallback="ScreenOptionsSimpleService"
NextScreen=Branch.AfterInit()
PrevScreen=Branch.AfterInit()
LineNames="GameType,GraphicSound,KeyConfig,Arcade,InputOptions,SoundGraphics,Profiles,Network,Advanced,Reload,Credits"
LineNames="GameType,GraphicSound,KeyConfig,Arcade,InputOptions,SoundGraphics,Profiles,Advanced,Reload,Credits"
LineSync="gamecommand;screen,ScreenGameplaySyncMachine;name,Calibrate Machine Sync"
LineGameType="gamecommand;screen,ScreenSelectGame;name,Select Game"
@@ -2787,7 +2756,6 @@ LineBGFit="gamecommand;screen,ScreenSetBGFit;name,Set BG Fit Mode"
LineOverscan="gamecommand;screen,ScreenOverscanConfig;name,Overscan Correction"
LineGraphicSound="gamecommand;screen,ScreenOptionsGraphicsSound;name,Graphics/Sound Options"
LineProfiles="gamecommand;screen,ScreenOptionsManageProfiles;name,Profiles"
LineNetwork="gamecommand;screen,ScreenNetworkOptions;name,Network Options"
LineUI="gamecommand;screen,ScreenOptionsUI;name,UI Options"
LineAdvanced="gamecommand;screen,ScreenOptionsAdvanced;name,Advanced Options"
LineMoreOptions="gamecommand;screen,ScreenOptionsExtended;name,More Options"
@@ -2795,25 +2763,6 @@ LineCredits="gamecommand;screen,ScreenCredits;name,StepMania Credits"
LineSoundGraphics="gamecommand;screen,ScreenOptionsDisplaySub;name,Display Options"
LineInputOptions="gamecommand;screen,ScreenOptionsInputSub;name,InputOptions"
# Old
#LineNames="SystemDirection,KeyConfig,GameType,6,8,Reload,Credits,MoreOptions"
# LineNames="SystemDirection,1,2,Sync,13,3,10,11,4,12,6,5,Theme,8,9"
# for ScreenOptionsExtended:
#LineSystemDirection="gamecommand;screen,ScreenOptionsSystemDirection;name,System Direction"
#Line2="gamecommand;screen,ScreenTestInput;name,Test Input"
#Line3="gamecommand;screen,ScreenAppearanceOptions;name,Appearance Options"
#Line4="gamecommand;screen,ScreenOptionsGraphicsSound;name,Graphics/Sound Options"
#Line5="gamecommand;screen,ScreenOptionsAdvanced;name,Advanced Options"
#Line6="gamecommand;screen,ScreenNetworkOptions;name,Network Options"
#Line8="gamecommand;screen,ScreenOptionsManageProfiles;name,Profiles"
#Line10="gamecommand;screen,ScreenOptionsUI;name,UI Options"
#Line11="gamecommand;screen,ScreenOptionsInput;name,Input Options"
#Line12="gamecommand;screen,ScreenOptionsArcade;name,Arcade Options"
#LineTheme="gamecommand;screen,ScreenOptionsTheme;name,Theme Options"
#LineMoreOptions="gamecommand;screen,ScreenOptionsExtended;name,More Options"
#LineCredits="gamecommand;screen,ScreenCredits;name,StepMania Credits"
[ScreenOptionsInputSub]
Fallback="ScreenOptionsService"
NextScreen="ScreenOptionsService"
@@ -2824,9 +2773,6 @@ LineInput="gamecommand;screen,ScreenOptionsInput;name,Input Options"
LineSync="gamecommand;screen,ScreenGameplaySyncMachine;name,Calibrate Machine Sync"
[ScreenOptionsDisplaySub]
Fallback="ScreenOptionsService"
NextScreen="ScreenOptionsService"
@@ -2838,7 +2784,6 @@ LineOverscan="gamecommand;screen,ScreenOverscanConfig;name,Overscan Correction"
LineUI="gamecommand;screen,ScreenOptionsUI;name,UI Options"
[ScreenOptionsExtended]
Fallback="ScreenOptionsService"
NextScreen="ScreenOptionsService"
@@ -3264,12 +3209,6 @@ NextScreen=Branch.TitleMenu()
LineNames="1"
Line1="conf,Game"
[ScreenNetworkOptions]
Class="ScreenNetworkOptions"
Fallback="ScreenOptionsServiceChild"
NextScreen=Branch.Network()
PrevScreen=Branch.Network()
[ScreenOptionsManageProfiles]
Class="ScreenOptionsManageProfiles"
Fallback="ScreenOptionsSimpleService"
@@ -3706,28 +3645,6 @@ SurviveTimeX=SCREEN_CENTER_X
SurviveTimeY=SCREEN_CENTER_Y+120
SurviveTimeOnCommand=
# online scoreboard
# P1 is used when the only player is P2
ScoreboardC1P1X=SCREEN_CENTER_X*0.25
ScoreboardC1P1Y=SCREEN_CENTER_Y*0.45
ScoreboardC1P1OnCommand=zoom,0.825;strokecolor,Color("Outline");shadowlength,1
ScoreboardC2P1X=SCREEN_CENTER_X*0.5
ScoreboardC2P1Y=SCREEN_CENTER_Y*0.45
ScoreboardC2P1OnCommand=zoom,0.825;strokecolor,Color("Outline");shadowlength,1
ScoreboardC3P1X=SCREEN_CENTER_X*0.75
ScoreboardC3P1Y=SCREEN_CENTER_Y*0.45
ScoreboardC3P1OnCommand=zoom,0.825;strokecolor,Color("Outline");shadowlength,1
# P2 is used when the only player is P1
ScoreboardC1P2X=SCREEN_CENTER_X*1.25
ScoreboardC1P2Y=SCREEN_CENTER_Y*0.45
ScoreboardC1P2OnCommand=zoom,0.825;strokecolor,Color("Outline");shadowlength,1
ScoreboardC2P2X=SCREEN_CENTER_X*1.5
ScoreboardC2P2Y=SCREEN_CENTER_Y*0.45
ScoreboardC2P2OnCommand=zoom,0.825;strokecolor,Color("Outline");shadowlength,1
ScoreboardC3P2X=SCREEN_CENTER_X*1.75
ScoreboardC3P2Y=SCREEN_CENTER_Y*0.45
ScoreboardC3P2OnCommand=zoom,0.825;strokecolor,Color("Outline");shadowlength,1
[ScreenGameplayEditCourse]
Class="ScreenGameplayNormal"
Fallback="ScreenGameplay"
@@ -4498,221 +4415,6 @@ ShowStyleIcon=false
TimerSeconds=-1
ShowHelp=false
# stuff for legacy/deprecated online mode:
[ScreenSMOnlineLogin]
Class="ScreenSMOnlineLogin"
Fallback="ScreenOptionsServiceChild"
NextScreen=Branch.AfterSMOLogin
PrevScreen=Branch.TitleMenu()
ShowStyleIcon=false
TimerSeconds=-1
ShowHelp=false
[ScreenNetSelectBase]
Class="ScreenNetSelectBase"
Fallback="ScreenWithMenuElements"
ChatInputBoxX=SCREEN_CENTER_X*0.5
ChatInputBoxY=SCREEN_CENTER_Y+112
ChatInputBoxOnCommand=bounceend,0.5;diffusealpha,1;
ChatInputBoxOffCommand=bouncebegin,0.5;zoomy,0
ChatInputBoxWidth=SCREEN_CENTER_X*0.9
ChatInputBoxHeight=64
#--#
ChatInputX=(SCREEN_CENTER_X*0.5)*0.125
ChatInputY=SCREEN_CENTER_Y+90
ChatTextInputWidth=SCREEN_CENTER_X*1.8
ChatInputOnCommand=halign,0;valign,0;zoom,0.5;diffusealpha,0;linear,0.55;diffusealpha,1
ChatInputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
#====#
ChatOutputBoxX=SCREEN_CENTER_X*0.5
ChatOutputBoxY=SCREEN_CENTER_Y-36
ChatOutputBoxOnCommand=bounceend,0.5;diffusealpha,1;
ChatOutputBoxOffCommand=bouncebegin,0.5;zoomy,0
ChatOutputBoxWidth=SCREEN_CENTER_X*0.9
ChatOutputBoxHeight=SCREEN_CENTER_Y*0.875
#--#
ChatOutputX=(SCREEN_CENTER_X*0.5)*0.125
ChatOutputY=SCREEN_CENTER_Y+64
ChatTextOutputWidth=SCREEN_CENTER_X*1.8
ChatOutputLines=14
ChatOutputOnCommand=halign,0;valign,1;zoom,0.5;diffusealpha,0;linear,0.55;diffusealpha,1
ChatOutputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
UsersX=SCREEN_CENTER_X-265
UsersY=SCREEN_CENTER_Y+172
UserSpacingX=64
UserLine2Y=16
UsersOnCommand=draworder,2;zoom,1
UsersOffCommand=linear,0.5;zoom,0
Users0Command=draworder,2;diffuse,color("1.0,0.4,0.4,1.0")
Users1Command=draworder,2;diffuse,color("1.0,1.0,1.0,1.0")
Users2Command=draworder,2;diffuse,color("0.5,0.5,1.0,1.0")
Users3Command=draworder,2;diffuse,color("0.5,1.0,0.5,1.0")
Users4Command=draworder,2;diffuse,color("1.0,0.5,0.5,1.0")
[ScreenNetSelectMusic]
Class="ScreenNetSelectMusic"
Fallback="ScreenNetSelectBase"
PrevScreen="ScreenNetRoom"
NextScreen="ScreenStageInformation"
NoSongsScreen=Branch.TitleMenu()
RoomSelectScreen="ScreenNetRoom"
PlayerOptionsScreen="ScreenPlayerOptions"
Codes="CodeDetectorOnline"
ShowStyleIcon=false
TimerSeconds=
TimerStealth=true
SampleMusicPreviewMode='SampleMusicPreviewMode_Normal'
MusicWheelType="OnlineMusicWheel"
MusicWheelX=SCREEN_CENTER_X+160
MusicWheelY=SCREEN_CENTER_Y
MusicWheelOnCommand=
MusicWheelOffCommand=
# todo: move these to Lua bganim
BPMDisplayX=SCREEN_CENTER_X-160-90+2
BPMDisplayY=SCREEN_TOP+160+(36/2)+8
BPMDisplayOnCommand=
BPMDisplayOffCommand=
# todo: move these to Lua bganim
ModIconsP1X=SCREEN_CENTER_X+144
ModIconsP1Y=SCREEN_CENTER_Y-165
ModIconsP1OnCommand=zoomy,0;linear,0.5;zoomy,1
ModIconsP1OffCommand=linear,0.5;zoomy,0
ModIconsP2X=SCREEN_CENTER_X+144
ModIconsP2Y=SCREEN_CENTER_Y-164
ModIconsP2OnCommand=zoomy,0;linear,0.5;zoomy,1
ModIconsP2OffCommand=linear,0.5;zoomy,0
# are these used?
optionsX=SCREEN_CENTER_X-240
optionsY=SCREEN_CENTER_Y-170
optionsOnCommand=zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,0.7;zoomx,0.7
optionsOffCommand=linear,0.5;zoomx,0.0;zoomy,0.0
# uses StepsDisplayNet
StepsDisplayP1X=SCREEN_CENTER_X-223
StepsDisplayP1Y=SCREEN_CENTER_Y+150
StepsDisplayP1OnCommand=halign,1;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0
StepsDisplayP1OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0
StepsDisplayP2X=SCREEN_CENTER_X-110
StepsDisplayP2Y=SCREEN_CENTER_Y+150
StepsDisplayP2OnCommand=halign,1;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0
StepsDisplayP2OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0
[StepsDisplayNet]
Fallback="StepsDisplay"
[ScreenNetRoom]
Class="ScreenNetRoom"
Fallback="ScreenNetSelectBase"
PrevScreen=Branch.TitleMenu()
# XXX
NextScreen="ScreenGameplayBranch"
MusicSelectScreen="ScreenNetSelectMusic"
RoomWheelX=SCREEN_CENTER_X+160
RoomWheelY=SCREEN_CENTER_Y
RoomWheelOnCommand=
RoomWheelOffCommand=
RoomInfoDisplayX=SCREEN_CENTER_X-160
RoomInfoDisplayY=SCREEN_CENTER_Y
OpenRoomColor=color("1.0,1.0,1.0,1.0")
PasswdRoomColor=color("1.0,0.5,0.5,1.0")
InGameRoomColor=color("1.0,0.1,0.1,1.0")
[RoomWheel]
Fallback="MusicWheel"
RoomWheelItemStartOnCommand=
RoomWheelItemFinishOnCommand=
CreateRoomColor=color("0.0,0.9,0.25,1.0")
ScrollBarOnCommand=visible,false
[RoomWheelItem]
TextX=-110
TextY=-8
TextOnCommand=halign,0;zoom,0.6;maxwidth,200;strokecolor,color("#000000FF");
DescriptionX=-100
DescriptionY=6
DescriptionOnCommand=halign,0;zoom,0.4;maxwidth,400;strokecolor,color("#000000FF")
[RoomInfoDisplay]
RoomInfoDisplayOnCommand=diffuse,color("1.0,1.0,1.0,1");x,SCREEN_WIDTH+130;y,250;bounceend,0.5;x,SCREEN_WIDTH-160
RoomInfoDisplayOffCommand=x,SCREEN_WIDTH-160;y,250;bouncebegin,0.5;x,SCREEN_WIDTH+130
DeployDelay=1.5
RetractDelay=5
RoomTitleOnCommand=x,-120;y,-140;zoom,0.75
RoomDescOnCommand=x,-120;y,-129;zoom,0.75
LastRoundOnCommand=x,-120;y,-107;zoom,0.75
SongTitleOnCommand=x,-110;y,-96;zoom,0.75
SongSubTitleOnCommand=x,-110;y,-85;zoom,0.75
SongArtistOnCommand=x,-110;y,-74;zoom,0.75
PlayersOnCommand=x,-120;y,-52;zoom,0.75
PlayerListElementX=-110
PlayerListElementY=-41
PlayerListElementOffsetX=0
PlayerListElementOffsetY=11
PlayerListElementOnCommand=zoom,0.75
[ScreenSMOnlineSelectMusic]
PrevScreen="ScreenNetRoom"
Class="ScreenNetSelectMusic"
RoomSelectScreen="ScreenNetRoom"
Fallback="ScreenNetSelectMusic"
[ScreenNetEvaluation]
Class="ScreenNetEvaluation"
Fallback="ScreenEvaluationNormal"
NextScreen="ScreenProfileSave"
# these three commands are deprecated:
UsersBGWidth=SCREEN_CENTER_X*0.6
UsersBGHeight=SCREEN_HEIGHT*0.6
UsersBGCommand=diffuse,color("0,0,0,0.25")
UsersBGOnCommand=finishtweening;zoom,1.25
UsersBGOffCommand=finishtweening;zoom,1
User1X=SCREEN_CENTER_X*0.35
User1Y=SCREEN_CENTER_Y
User1OnCommand=
User1OffCommand=
#--#
UsersBG1X=SCREEN_CENTER_X*0.35
UsersBG1Y=SCREEN_CENTER_Y*0.975
UsersBG1OnCommand=
UsersBG1OffCommand=
#====#
User2X=SCREEN_CENTER_X*1.65
User2Y=SCREEN_CENTER_Y
User2OnCommand=
User2OffCommand=
#--#
UsersBG2X=SCREEN_CENTER_X*1.65
UsersBG2Y=SCREEN_CENTER_Y*0.975
UsersBG2OnCommand=
UsersBG2OffCommand=
UserDeSelCommand=finishtweening;linear,0.1;zoom,0.75
UserSelCommand=finishtweening;linear,0.1;zoom,1.0
UserTier02OrBetterCommand=rainbowscroll,true
UserDX=0
UserDY=24
UserOnCommand=
UserOffCommand=
#
[ModIcon]
TextX=0
TextY=0
@@ -1,12 +1,7 @@
if IsNetSMOnline() then
-- don't show "Ready" online; it will obscure the immediately-starting steps.
return Def.ActorFrame{}
end
return LoadActor("go") .. {
InitCommand=cmd(Center;draworder,105);
StartTransitioningCommand=function(self)
self:zoom(1.3):diffusealpha(0):bounceend(0.25):zoom(1):diffusealpha(1);
self:linear(0.14):glow(BoostColor(Color("Blue"),1.75)):decelerate(0.3):glow(1,1,1,0):sleep(1-0.45):linear(0.25):diffusealpha(0);
end;
};
};
@@ -1,9 +1,4 @@
if IsNetSMOnline() then
-- don't show "Ready" online; it will obscure the immediately-starting steps.
return Def.ActorFrame{}
end
return LoadActor("ready") .. {
InitCommand=cmd(Center;draworder,105);
StartTransitioningCommand=cmd(zoom,1.3;diffusealpha,0;bounceend,0.25;zoom,1;diffusealpha,1;linear,0.15;glow,BoostColor(Color("Orange"),1.75);decelerate,0.3;glow,1,1,1,0;sleep,1-0.45;linear,0.25;diffusealpha,0);
};
};
@@ -1 +0,0 @@
Online background
@@ -1 +0,0 @@
Online background
@@ -1,418 +0,0 @@
local curStage = GAMESTATE:GetCurrentStage();
local curStageIndex = GAMESTATE:GetCurrentStageIndex();
local t = LoadFallbackB();
local function PercentScore(pn)
local t = LoadFont("_overpass Score")..{
InitCommand=cmd(zoom,1;diffuse,Color("Black");diffusealpha,0.75);
BeginCommand=cmd(playcommand,"Set");
SetCommand=function(self)
local SongOrCourse, StepsOrTrail;
if GAMESTATE:IsCourseMode() then
SongOrCourse = GAMESTATE:GetCurrentCourse();
StepsOrTrail = GAMESTATE:GetCurrentTrail(pn);
else
SongOrCourse = GAMESTATE:GetCurrentSong();
StepsOrTrail = GAMESTATE:GetCurrentSteps(pn);
end;
local profile, scorelist;
local text = "";
if SongOrCourse and StepsOrTrail then
local st = StepsOrTrail:GetStepsType();
local diff = StepsOrTrail:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
if PROFILEMAN:IsPersistentProfile(pn) then
-- player profile
profile = PROFILEMAN:GetProfile(pn);
else
-- machine profile
profile = PROFILEMAN:GetMachineProfile();
end;
scorelist = profile:GetHighScoreList(SongOrCourse,StepsOrTrail);
assert(scorelist)
local scores = scorelist:GetHighScores();
local topscore = scores[1];
if topscore then
text = string.format("%.2f%%", topscore:GetPercentDP()*100.0);
-- 100% hack
if text == "100.00%" then
text = "100%";
end;
else
text = string.format("%.2f%%", 0);
end;
else
text = "";
end;
self:settext(text);
end;
CurrentSongChangedMessageCommand=cmd(playcommand,"Set");
CurrentCourseChangedMessageCommand=cmd(playcommand,"Set");
};
if pn == PLAYER_1 then
t.CurrentStepsP1ChangedMessageCommand=cmd(playcommand,"Set");
t.CurrentTrailP1ChangedMessageCommand=cmd(playcommand,"Set");
else
t.CurrentStepsP2ChangedMessageCommand=cmd(playcommand,"Set");
t.CurrentTrailP2ChangedMessageCommand=cmd(playcommand,"Set");
end
return t;
end
-- Genre/Artist data
t[#t+1] = LoadActor(THEME:GetPathG("ScreenSelectMusic", "info pane")) .. {
InitCommand=cmd(horizalign,center;x,SCREEN_CENTER_X-228;y,SCREEN_CENTER_Y-75;zoom,1);
OnCommand=function(self)
self:diffuse(ColorMidTone(StageToColor(curStage)));
self:zoomx(0):diffusealpha(0):decelerate(0.3):zoomx(1):diffusealpha(1);
end;
OffCommand=function(self)
self:sleep(0.3):decelerate(0.15):zoomx(0):diffusealpha(0);
end;
};
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(x,SCREEN_CENTER_X-330+6-138;draworder,126);
OnCommand=cmd(diffusealpha,0;smooth,0.3;diffusealpha,1);
OffCommand=cmd(smooth,0.3;diffusealpha,0);
-- Length
StandardDecorationFromFileOptional("SongTime","SongTime") .. {
SetCommand=function(self)
local curSelection = nil;
local length = 0.0;
if GAMESTATE:IsCourseMode() then
curSelection = GAMESTATE:GetCurrentCourse();
self:queuecommand("Reset");
if curSelection then
local trail = GAMESTATE:GetCurrentTrail(GAMESTATE:GetMasterPlayerNumber());
if trail then
length = TrailUtil.GetTotalSeconds(trail);
else
length = 0.0;
end;
else
length = 0.0;
end;
else
curSelection = GAMESTATE:GetCurrentSong();
self:queuecommand("Reset");
if curSelection then
length = curSelection:MusicLengthSeconds();
if curSelection:IsLong() then
self:queuecommand("Long");
elseif curSelection:IsMarathon() then
self:queuecommand("Marathon");
else
self:queuecommand("Reset");
end
else
length = 0.0;
self:queuecommand("Reset");
end;
end;
self:settext( SecondsToMSS(length) );
end;
CurrentSongChangedMessageCommand=cmd(queuecommand,"Set");
CurrentCourseChangedMessageCommand=cmd(queuecommand,"Set");
CurrentTrailP1ChangedMessageCommand=cmd(queuecommand,"Set");
CurrentTrailP2ChangedMessageCommand=cmd(queuecommand,"Set");
};
};
-- Course count and type
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(x,SCREEN_CENTER_X-200;draworder,126);
OnCommand=cmd(diffusealpha,0;smooth,0.3;diffusealpha,1);
OffCommand=cmd(smooth,0.2;diffusealpha,0);
LoadFont("Common Condensed") .. {
InitCommand=cmd(horizalign,right;zoom,1.0;y,SCREEN_CENTER_Y-78+2;maxwidth,180;diffuse,color("#DFE2E9");visible,GAMESTATE:IsCourseMode());
CurrentCourseChangedMessageCommand=cmd(queuecommand,"Set");
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local course = GAMESTATE:GetCurrentCourse();
if course then
self:settext(course:GetEstimatedNumStages() .. " songs");
self:queuecommand("Refresh");
else
self:settext("");
self:queuecommand("Refresh");
end
end;
};
};
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(x,SCREEN_CENTER_X+5;draworder,126);
OnCommand=cmd(diffusealpha,0;smooth,0.3;diffusealpha,1);
OffCommand=cmd(smooth,0.2;diffusealpha,0);
LoadFont("Common Condensed") .. {
InitCommand=cmd(horizalign,right;zoom,1.0;y,SCREEN_CENTER_Y-78+2;maxwidth,180;diffuse,color("#DFE2E9");visible,GAMESTATE:IsCourseMode());
CurrentCourseChangedMessageCommand=cmd(queuecommand,"Set");
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local course = GAMESTATE:GetCurrentCourse();
if course then
self:settext(CourseTypeToLocalizedString(course:GetCourseType()));
self:queuecommand("Refresh");
else
self:settext("");
self:queuecommand("Refresh");
end
end;
};
};
if not GAMESTATE:IsCourseMode() then
-- P1 Difficulty Pane
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,center;x,SCREEN_CENTER_X-210-32;y,SCREEN_CENTER_Y+230+8);
OnCommand=cmd(zoomy,0.8;diffusealpha,0;smooth,0.4;diffusealpha,1;zoomy,1);
PlayerJoinedMessageCommand=function(self,param)
if param.Player == PLAYER_1 then
(cmd(visible,true;diffusealpha,0;linear,0.3;diffusealpha,1))(self);
end;
end;
OffCommand=cmd(decelerate,0.3;zoomy,0.8;diffusealpha,0);
LoadActor(THEME:GetPathG("ScreenSelectMusic", "pane background")) .. {
CurrentStepsP1ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;decelerate,0.3;diffusealpha,1);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP1 = GAMESTATE:GetCurrentSteps(PLAYER_1)
local song = GAMESTATE:GetCurrentSong();
if song then
if local stepsP1 ~= nil then
local st = stepsP1:GetStepsType();
local diff = stepsP1:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:finishtweening():linear(0.2):diffuse(ColorLightTone(CustomDifficultyToColor(cd)));
else
self:diffuse(color("#666666"));
end
else
self:diffuse(color("#666666"));
end
end
};
LoadFont("StepsDisplay meter") .. {
InitCommand=cmd(zoom,1.25;diffuse,color("#000000");addx,-143;addy,13);
OnCommand=cmd(diffusealpha,0;smooth,0.2;diffusealpha,0.75);
OffCommand=cmd(linear,0.3;diffusealpha,0);
CurrentStepsP1ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;linear,0.3;diffusealpha,0.75);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP1 = GAMESTATE:GetCurrentSteps(PLAYER_1)
local song = GAMESTATE:GetCurrentSong();
if song then
if stepsP1 ~= nil then
local st = stepsP1:GetStepsType();
local diff = stepsP1:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:settext(stepsP1:GetMeter())
else
self:settext("")
end
else
self:settext("")
end
end
};
LoadFont("Common Italic Condensed") .. {
InitCommand=cmd(uppercase,true;zoom,1;addy,-40;addx,-143;diffuse,color("#000000");maxwidth,115);
OnCommand=cmd(diffusealpha,0;smooth,0.2;diffusealpha,0.75);
OffCommand=cmd(linear,0.3;diffusealpha,0);
CurrentStepsP1ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;linear,0.3;diffusealpha,0.75);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP1 = GAMESTATE:GetCurrentSteps(PLAYER_1)
local song = GAMESTATE:GetCurrentSong();
if song then
if stepsP1 ~= nil then
local st = stepsP1:GetStepsType();
local diff = stepsP1:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:settext(THEME:GetString("CustomDifficulty",ToEnumShortString(diff)));
else
self:settext("")
end
else
self:settext("")
end
end
};
LoadFont("Common Normal") .. {
InitCommand=cmd(uppercase,true;zoom,0.75;addy,-20;addx,-143;diffuse,color("#000000");maxwidth,130);
OnCommand=cmd(diffusealpha,0;smooth,0.2;diffusealpha,0.75);
OffCommand=cmd(linear,0.3;diffusealpha,0);
CurrentStepsP1ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;linear,0.3;diffusealpha,0.75);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP1 = GAMESTATE:GetCurrentSteps(PLAYER_1)
local song = GAMESTATE:GetCurrentSong();
if song then
if stepsP1 ~= nil then
local st = stepsP1:GetStepsType();
local diff = stepsP1:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:settext(THEME:GetString("StepsType",ToEnumShortString(st)));
else
self:settext("")
end
else
self:settext("")
end
end
};
};
-- P2 Difficulty Pane
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,center;x,SCREEN_CENTER_X+210+32;y,SCREEN_CENTER_Y+230+8);
OnCommand=cmd(zoomy,0.8;diffusealpha,0;smooth,0.4;diffusealpha,1;zoomy,1);
PlayerJoinedMessageCommand=function(self,param)
if param.Player == PLAYER_2 then
(cmd(visible,true;diffusealpha,0;linear,0.3;diffusealpha,1))(self);
end;
end;
OffCommand=cmd(decelerate,0.3;zoomy,0.8;diffusealpha,0);
LoadActor(THEME:GetPathG("ScreenSelectMusic", "pane background")) .. {
InitCommand=cmd(zoomx,-1);
CurrentStepsP2ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;decelerate,0.3;diffusealpha,1);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP2 = GAMESTATE:GetCurrentSteps(PLAYER_2)
local song = GAMESTATE:GetCurrentSong();
if song then
if stepsP2 ~= nil then
local st = stepsP2:GetStepsType();
local diff = stepsP2:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:finishtweening():linear(0.2):diffuse(ColorLightTone(CustomDifficultyToColor(cd)));
else
self:diffuse(color("#666666"));
end
else
self:diffuse(color("#666666"));
end
end
};
LoadFont("StepsDisplay meter") .. {
InitCommand=cmd(zoom,1.25;diffuse,color("#000000");addx,143;addy,13);
OnCommand=cmd(diffusealpha,0;smooth,0.2;diffusealpha,0.75);
OffCommand=cmd(linear,0.3;diffusealpha,0);
CurrentStepsP2ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;linear,0.3;diffusealpha,0.75);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP2 = GAMESTATE:GetCurrentSteps(PLAYER_2)
local song = GAMESTATE:GetCurrentSong();
if song then
if stepsP2 ~= nil then
local st = stepsP2:GetStepsType();
local diff = stepsP2:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:settext(stepsP2:GetMeter())
else
self:settext("")
end
else
self:settext("")
end
end
};
LoadFont("Common Italic Condensed") .. {
InitCommand=cmd(uppercase,true;zoom,1;addy,-40;addx,143;diffuse,color("#000000");maxwidth,115);
OnCommand=cmd(diffusealpha,0;smooth,0.2;diffusealpha,0.75);
OffCommand=cmd(linear,0.3;diffusealpha,0);
CurrentStepsP2ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;linear,0.3;diffusealpha,0.75);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP2 = GAMESTATE:GetCurrentSteps(PLAYER_2)
local song = GAMESTATE:GetCurrentSong();
if song then
if stepsP2 ~= nil then
local st = stepsP2:GetStepsType();
local diff = stepsP2:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:settext(THEME:GetString("CustomDifficulty",ToEnumShortString(diff)));
else
self:settext("")
end
else
self:settext("")
end
end
};
LoadFont("Common Normal") .. {
InitCommand=cmd(uppercase,true;zoom,0.75;addy,-20;addx,143;diffuse,color("#000000");maxwidth,130);
OnCommand=cmd(diffusealpha,0;smooth,0.2;diffusealpha,0.75);
OffCommand=cmd(linear,0.3;diffusealpha,0);
CurrentStepsP2ChangedMessageCommand=cmd(queuecommand,"Set");
PlayerJoinedMessageCommand=cmd(queuecommand,"Set";diffusealpha,0;linear,0.3;diffusealpha,0.75);
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
local stepsP2 = GAMESTATE:GetCurrentSteps(PLAYER_2)
local song = GAMESTATE:GetCurrentSong();
if song then
if stepsP2 ~= nil then
local st = stepsP2:GetStepsType();
local diff = stepsP2:GetDifficulty();
local courseType = GAMESTATE:IsCourseMode() and SongOrCourse:GetCourseType() or nil;
local cd = GetCustomDifficulty(st, diff, courseType);
self:settext(THEME:GetString("StepsType",ToEnumShortString(st)));
else
self:settext("")
end
else
self:settext("")
end
end
};
};
t[#t+1] = StandardDecorationFromFileOptional("PaneDisplayTextP1","PaneDisplayTextP1");
t[#t+1] = StandardDecorationFromFileOptional("PaneDisplayTextP2","PaneDisplayTextP2");
t[#t+1] = StandardDecorationFromTable("PercentScore"..ToEnumShortString(PLAYER_1), PercentScore(PLAYER_1));
t[#t+1] = StandardDecorationFromTable("PercentScore"..ToEnumShortString(PLAYER_2), PercentScore(PLAYER_2));
end;
-- BPMDisplay
t[#t+1] = Def.ActorFrame {
InitCommand=cmd(draworder,126;visible,not GAMESTATE:IsCourseMode());
OnCommand=cmd(diffusealpha,0;smooth,0.3;diffusealpha,1);
OffCommand=cmd(linear,0.3;diffusealpha,0);
LoadFont("Common Condensed") .. {
InitCommand=cmd(horizalign,right;x,SCREEN_CENTER_X-198+69-66;y,SCREEN_CENTER_Y-78+2;diffuse,color("#512232");horizalign,right;visible,not GAMESTATE:IsCourseMode());
OnCommand=cmd(queuecommand,"Set");
ChangedLanguageDisplayMessageCommand=cmd(queuecommand,"Set");
SetCommand=function(self)
self:settext("BPM"):diffuse(ColorLightTone(StageToColor(curStage)));
end;
};
StandardDecorationFromFileOptional("BPMDisplay","BPMDisplay");
};
return t;
@@ -1 +0,0 @@
Online background
@@ -18,7 +18,6 @@ t[#t+1] = StandardDecorationFromFileOptional("VersionInfo","VersionInfo");
t[#t+1] = StandardDecorationFromFileOptional("CurrentGametype","CurrentGametype");
t[#t+1] = StandardDecorationFromFileOptional("LifeDifficulty","LifeDifficulty");
t[#t+1] = StandardDecorationFromFileOptional("TimingDifficulty","TimingDifficulty");
t[#t+1] = StandardDecorationFromFileOptional("NetworkStatus","NetworkStatus");
t[#t+1] = StandardDecorationFromFileOptional("SystemDirection","SystemDirection");
t[#t+1] = StandardDecorationFromFileOptional("NumSongs","NumSongs") .. {
@@ -1 +0,0 @@
Common Fallback Font
@@ -1 +0,0 @@
Common Fallback Font
@@ -1 +0,0 @@
Common Fallback Font
@@ -1 +0,0 @@
_fira mono 24px
@@ -1 +0,0 @@
Common Normal
Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

@@ -1,5 +0,0 @@
return Def.ActorFrame{
Def.Quad{
InitCommand=cmd(zoomto,THEME:GetMetric(Var "LoadingScreen","ChatInputBoxWidth"),THEME:GetMetric(Var "LoadingScreen","ChatInputBoxHeight");diffuse,color("0,0,0,0.25"));
};
};
@@ -1 +0,0 @@
ScreenSelectMusic BPMDisplay
@@ -1 +0,0 @@
ScreenSelectMusic PaneDisplayTextP1
@@ -1 +0,0 @@
ScreenSelectMusic PaneDisplayTextP2
@@ -1 +0,0 @@
ScreenSelectMusic SongTime
@@ -1,30 +0,0 @@
local netConnected = IsNetConnected();
local loggedOnSMO = IsNetSMOnline();
local t = Def.ActorFrame{
LoadFont("Common Condensed") .. {
InitCommand=cmd(uppercase,true;zoom,0.75;shadowlength,1;horizalign,left);
BeginCommand=function(self)
-- check network status
if netConnected then
self:diffuse( color("#268129") );
self:diffusebottomedge( color("#153F17") );
self:settext( Screen.String("Network OK") );
else
self:diffuse( color("#4F1B34") );
self:settext( Screen.String("Offline") );
end;
end;
};
};
if netConnected then
t[#t+1] = LoadFont("Common Condensed") .. {
InitCommand=cmd(y,16;horizalign,left;zoom,0.5875;shadowlength,1;diffuse,color("#268129");diffusebottomedge,color("#153F17"));
BeginCommand=function(self)
self:settext( string.format(Screen.String("Connected to %s"), GetServerName()) );
end;
};
end;
return t;
@@ -1 +0,0 @@
ScreenEvaluationNormal icon
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

-3
View File
@@ -8,9 +8,6 @@ EventStageCounter=Stufe %03i
[ScreenTitleMenu]
HelpText=&BACK; Verlassen &START; Auswählen &MENUUP;&MENUDOWN; Bewegen
Network OK=Netwerk OK
Offline=Offline
Connected to %s=Verbunden zu %s
CurrentGametype=Momentaner Spielstyp: %s
LifeDifficulty=Leben-Schwierigkeit: %s
TimingDifficulty=Timing-Schwierigkeit: %s
+1 -10
View File
@@ -8,9 +8,6 @@ EventStageCounter=Stage %03i
[ScreenTitleMenu]
HelpText=&BACK; Exit &START; Select &MENUUP;&MENUDOWN; Move
Network OK=Network OK
Offline=Offline
Connected to %s=Connected to %s
CurrentGametype=Current Gametype
LifeDifficulty=Life Difficulty
TimingDifficulty=Timing Difficulty
@@ -361,12 +358,6 @@ Miss=If you misstep repeatedly, your dance\ngauge will decrease until the game\n
[Protiming]
MS=MS
[ScreenNetRoom]
HeaderText=Online Lobby
[ScreenNetSelectMusic]
HeaderText=Select Music
[LongStepsType]
Dance_Single=Dance Single
Dance_Double=Dance Double
@@ -405,4 +396,4 @@ Lights_Cabinet=Lights
Kickbox_Human=Kickbox Human
Kickbox_Quadarm=Kickbox Quadarm
Kickbox_Insect=Kickbox Insect
Kickbox_Arachnid=Kickbox Arachnid
Kickbox_Arachnid=Kickbox Arachnid
-3
View File
@@ -11,9 +11,6 @@ EventStageCounter=Fase %03i
[ScreenTitleMenu]
HelpText=&BACK; Salir &START; Seleccionar &MENUUP;&MENUDOWN; Mover
Network OK=Conexión OK
Offline=Sin conexión
Connected to %s=Conectado a %s
CurrentGametype=Tipo de juego: %s
LifeDifficulty=Dificultad vida: %s
TimingDifficulty=Dificultad ritmo: %s
-3
View File
@@ -8,9 +8,6 @@ EventStageCounter=Niveau %03i
[ScreenTitleMenu]
HelpText=&BACK; Quitter &START; Sélectionner &MENUUP;&MENUDOWN; Se déplacer
Network OK=Réseau OK
Offline=Déconnecté
Connected to %s=Connecté à %s
CurrentGametype=Type de jeu actuel : %s
LifeDifficulty=Difficulté de Vie : %s
TimingDifficulty=Difficulté de Timing : %s
-3
View File
@@ -8,9 +8,6 @@ EventStageCounter=Stage %03i
[ScreenTitleMenu]
HelpText=&BACK; Keluar &START; Select &MENUUP;&MENUDOWN; Pindah
Network OK=Jaringan OK
Offline=Luring
Connected to %s=Tersambung ke %s
CurrentGametype=Sedang bermain: %s
LifeDifficulty=Kesulitan Nyawa: %s
TimingDifficulty=Kesulitan Timing: %s
-3
View File
@@ -15,9 +15,6 @@ EventStageCounter=Stage %03i
[ScreenTitleMenu]
HelpText=&BACK; 戻る &START; 決定 &MENUUP;&MENUDOWN; カーソル移動
Network OK=オンライン
Offline=オフライン
Connected to %s=接続先: %s
CurrentGametype=ゲームタイプ: %s
LifeDifficulty=ライフレベル: %s
TimingDifficulty=判定レベル: %s
-3
View File
@@ -11,9 +11,6 @@ EventStageCounter=%03i 째탄
[ScreenTitleMenu]
HelpText=&BACK; 뒤로가기 &START; 시작 &MENUUP;&MENUDOWN; 선택표움직이기
Network OK=온라인
Offline=오프라인
Connected to %s=%s (으)로 접속됨
CurrentGametype= 게임종류: %s
LifeDifficulty=목숨난이도: %s
TimingDifficulty=판정난이도: %s
-3
View File
@@ -8,9 +8,6 @@ EventStageCounter=Etappe %03i
[ScreenTitleMenu]
HelpText=&BACK; Exit &START; Selecteer &MENUUP;&MENUDOWN; Beweeg
Network OK=Netwerk OK
Offline=Offline
Connected to %s=Verbonden met %s
CurrentGametype=Huidig Speltype: %s
LifeDifficulty=Levensniveau: %s
TimingDifficulty=Timingsniveau: %s
+1 -4
View File
@@ -8,9 +8,6 @@ EventStageCounter=Piosenka %03i
[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
@@ -262,4 +259,4 @@ Miss=Jeśli wielokrotnie będziesz się mylił,\ntwój wskaźnik tańca będzie
[Protiming]
MS=MS
MS=MS
-3
View File
@@ -8,9 +8,6 @@ EventStageCounter=Stupeň %03i
[ScreenTitleMenu]
HelpText=&BACK; Ukončiť &START; Výber &MENUUP;&MENUDOWN; Presun
Network OK=Sieť OK
Offline=Offline
Connected to %s=Pripojený k %s
CurrentGametype=Aktuálny typ hry
LifeDifficulty=Obtiažnosť životov
TimingDifficulty=Obtiažnosť časov.
+1 -6
View File
@@ -13,10 +13,6 @@ function ScreenColor(screen)
["ScreenEvaluationSummary"] = ScreenColors.Summary,
["ScreenStageInformation"] = ScreenColors.StageInformation,
["ScreenEditMenu"] = ScreenColors.Edit,
["ScreenSMOnlineLogin"] = ScreenColors.Online,
["ScreenNetRoom"] = ScreenColors.Online,
["ScreenNetSelectMusic"] = ScreenColors.Online,
["ScreenNetEvaluation"] = ScreenColors.Evaluation,
["Default"] = ScreenColors.Default,
}
@@ -28,7 +24,6 @@ ScreenColors = {
Style = color("#882D47"),
PlayMode = color("#882D47"),
Music = color("#882D47"),
Online = color("#882D47"),
Course = color("#882D47"),
PlayerOptions = color("#882D47"),
OptionsService = color("#882D47"),
@@ -113,4 +108,4 @@ GameColor = {
GameColor.Difficulty["Crazy"] = GameColor.Difficulty["Hard"]
GameColor.Difficulty["Freestyle"] = GameColor.Difficulty["Easy"]
GameColor.Difficulty["Nightmare"] = GameColor.Difficulty["Challenge"]
GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"]
GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"]
+1 -166
View File
@@ -184,12 +184,6 @@ VersionInfoY=SCREEN_TOP+24
VersionInfoOnCommand=diffuse,color("#33312D")
VersionInfoOffCommand=
#
ShowNetworkStatus=true
NetworkStatusX=SCREEN_LEFT+12
NetworkStatusY=SCREEN_BOTTOM-64
NetworkStatusOnCommand=halign,0
NetworkStatusOffCommand=linear,0.5;cropright,1
#
WrapScroller=false
ScrollerTransform=function(self,offset,itemIndex,numItems) self:y((46)*(itemIndex-(numItems-1)/2)); end;
ScrollerSecondsPerItem=0
@@ -451,7 +445,7 @@ ExplanationTogetherOnCommand=stoptweening;zoom,1;diffuse,color("#512232");wrapwi
[ScreenOptionsService]
ShowHeader=true
LineNames="GameType,GraphicSound,KeyConfig,Arcade,InputOptions,SoundGraphics,Theme,Profiles,Network,Advanced,Reload,Credits"
LineNames="GameType,GraphicSound,KeyConfig,Arcade,InputOptions,SoundGraphics,Theme,Profiles,Advanced,Reload,Credits"
LineTheme="gamecommand;screen,ScreenOptionsTheme;name,Theme Options"
LineCredits="gamecommand;screen,ScreenCredits;name,StepMania Credits"
# ScreenOptionsSystemDirection"
@@ -1224,165 +1218,6 @@ InfoX=SCREEN_RIGHT-180
InfoY=SCREEN_TOP+16
InfoOnCommand=halign,0;valign,0;zoom,0.75;shadowlength,1;maxheight,(SCREEN_HEIGHT-32)*2
# Online #
[ScreenNetSelectBase]
Class="ScreenNetSelectBase"
Fallback="ScreenWithMenuElements"
ChatInputBoxX=SCREEN_CENTER_X*0.5
ChatInputBoxY=SCREEN_CENTER_Y-200
ChatInputBoxOnCommand=bounceend,0.5;diffusealpha,1
ChatInputBoxOffCommand=bouncebegin,0.5;zoomy,0
ChatInputBoxWidth=SCREEN_CENTER_X*0.9
ChatInputBoxHeight=64
#--#
ChatInputX=(SCREEN_CENTER_X*0.5)*0.125
ChatInputY=SCREEN_CENTER_Y+90
ChatTextInputWidth=SCREEN_CENTER_X*1.8
ChatInputOnCommand=halign,0;valign,0;zoom,0.5;diffusealpha,0;linear,0.55;diffusealpha,1
ChatInputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
#
UsersOnCommand=draworder,2;zoom,1;strokecolor,color("#000000");zoom,0.7
[OnlineMusicWheel]
Fallback="MusicWheel"
# roulette + online causes a sorting issue that should be hammered out first. -aj
ShowRoulette=false
ShowRandom=false
ShowPortal=false
[ScreenNetRoom]
RoomWheelX=SCREEN_CENTER_X+326
RoomWheelY=SCREEN_CENTER_Y-12
RoomWheelOnCommand=draworder,-5;fov,90;vanishpoint,SCREEN_CENTER_X+160,SCREEN_CENTER_Y;addx,SCREEN_CENTER_X+60;sleep,0.2;decelerate,0.6;addx,-SCREEN_CENTER_X-60
RoomWheelCommand=decelerate,0.4;x,SCREEN_WIDTH/0.75
#
ChatInputBoxX=SCREEN_CENTER_X*0.5
ChatInputBoxY=SCREEN_CENTER_Y+112
ChatInputBoxOnCommand=diffusealpha,0
ChatInputBoxOffCommand=bouncebegin,0.5;zoomy,0
ChatInputBoxWidth=SCREEN_CENTER_X*0.9
ChatInputBoxHeight=64
#
ChatInputX=(SCREEN_CENTER_X*0.46)*0.125
ChatInputY=SCREEN_CENTER_Y+160
ChatTextInputWidth=SCREEN_CENTER_X*1.4
ChatInputOnCommand=halign,0;valign,0;zoom,0.6;diffusealpha,0;linear,0.55;diffusealpha,1
ChatInputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
#
ChatOutputBoxX=SCREEN_CENTER_X*0.46
ChatOutputBoxY=SCREEN_CENTER_Y+150
ChatOutputBoxOnCommand=diffusealpha,0
ChatOutputBoxOffCommand=diffusealpha,0
ChatOutputBoxWidth=SCREEN_CENTER_X*0.9
ChatOutputBoxHeight=SCREEN_CENTER_Y*0.875
#
ChatOutputX=(SCREEN_CENTER_X*0.46)*0.125
ChatOutputY=SCREEN_CENTER_Y+150
ChatTextOutputWidth=SCREEN_CENTER_X*1.5
ChatOutputLines=12
ChatOutputOnCommand=halign,0;valign,1;zoom,0.6;diffusealpha,0;linear,0.55;diffusealpha,1
ChatOutputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
#
[ScreenNetSelectMusic]
ShowSongTime=true
ShowCourseContentsList=false
ShowBPMDisplay=true
ShowDifficultyList=false
#
ShowSongTime=true
SongTimeX=
SongTimeY=SCREEN_CENTER_Y-78+2
SongTimeOnCommand=horizalign,left;zoom,1.0;diffuse,color("#DFE2E9")
#
ShowBPMDisplay=true
BPMDisplayX=SCREEN_CENTER_X-179-63
BPMDisplayY=SCREEN_CENTER_Y-78+2
BPMDisplayOnCommand=horizalign,right;zoom,1.0;
#
StepsDisplayP1X=SCREEN_CENTER_X
StepsDisplayP1Y=SCREEN_CENTER_Y+8888
StepsDisplayP2X=SCREEN_CENTER_X
StepsDisplayP2Y=SCREEN_CENTER_Y+8888
#
StepsDisplayP1OnCommand=visible,false
StepsDisplayP2OnCommand=visible,false
#
ShowPaneDisplayTextP1=true
PaneDisplayTextP1X=SCREEN_CENTER_X-200+24-32
PaneDisplayTextP1Y=SCREEN_CENTER_Y+207+8
PaneDisplayTextP1OnCommand=player,PLAYER_1;horizalign,center;zoomy,0;sleep,0.4;decelerate,0.3;zoomy,1
PaneDisplayTextP1OffCommand=smooth,0.2;zoomy,0
PaneDisplayTextP1PlayerJoinedMessageCommand=%function(self,params) if params.Player == PLAYER_1 then self:playcommand("On") end end
#
ShowPaneDisplayTextP2=true
PaneDisplayTextP2X=SCREEN_CENTER_X+200-72-4+32
PaneDisplayTextP2Y=SCREEN_CENTER_Y+207+8
PaneDisplayTextP2OnCommand=player,PLAYER_2;horizalign,center;zoomy,0;sleep,0.4;decelerate,0.3;zoomy,1
PaneDisplayTextP2OffCommand=smooth,0.2;zoomy,0
PaneDisplayTextP2PlayerJoinedMessageCommand=%function(self,params) if params.Player == PLAYER_2 then self:playcommand("On") end end
#
PercentScoreP1X=SCREEN_CENTER_X-353-32
PercentScoreP1Y=SCREEN_CENTER_Y+284
PercentScoreP1OnCommand=zoomy,0;zoomx,0.35;sleep,0.8;smooth,0.2;zoomy,0.35
PercentScoreP1OffCommand=smooth,0.2;zoomy,0;addy,-6
#
PercentScoreP2X=SCREEN_CENTER_X+353+32
PercentScoreP2Y=SCREEN_CENTER_Y+284
PercentScoreP2OnCommand=zoomy,0;zoomx,0.35;sleep,0.8;smooth,0.2;zoomy,0.35
PercentScoreP2OffCommand=smooth,0.2;zoomy,0;addy,-6
NullScoreString=string.format("% 9i",0)
#
MusicWheelX=SCREEN_CENTER_X+326
MusicWheelY=SCREEN_CENTER_Y-12
MusicWheelOnCommand=draworder,-5;fov,90;vanishpoint,SCREEN_CENTER_X+160,SCREEN_CENTER_Y;addx,SCREEN_CENTER_X+60;sleep,0.2;decelerate,0.6;addx,-SCREEN_CENTER_X-60
MusicWheelOffCommand=decelerate,0.4;x,SCREEN_WIDTH/0.75
#
ChatInputX=(SCREEN_CENTER_X*0.46)*0.125
ChatInputY=SCREEN_CENTER_Y+160
ChatTextInputWidth=SCREEN_CENTER_X*1.4
ChatInputOnCommand=halign,0;valign,0;zoom,0.6;diffusealpha,0;linear,0.55;diffusealpha,1
ChatInputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
#
ChatInputBoxX=SCREEN_CENTER_X*0.5
ChatInputBoxY=SCREEN_CENTER_Y+112
ChatInputBoxOnCommand=diffusealpha,0
ChatInputBoxOffCommand=bouncebegin,0.5;zoomy,0
ChatInputBoxWidth=SCREEN_CENTER_X*0.9
ChatInputBoxHeight=64
#
ChatOutputBoxX=SCREEN_CENTER_X*0.46
ChatOutputBoxY=SCREEN_CENTER_Y+150
ChatOutputBoxOnCommand=diffusealpha,0
ChatOutputBoxOffCommand=diffusealpha,0
ChatOutputBoxWidth=SCREEN_CENTER_X*0.9
ChatOutputBoxHeight=SCREEN_CENTER_Y*0.875
#
ChatOutputX=(SCREEN_CENTER_X*0.46)*0.125
ChatOutputY=SCREEN_CENTER_Y+150
ChatTextOutputWidth=SCREEN_CENTER_X*1.5
ChatOutputLines=12
ChatOutputOnCommand=halign,0;valign,1;zoom,0.6;diffusealpha,0;linear,0.55;diffusealpha,1
ChatOutputOffCommand=diffusealpha,1;linear,0.5;diffusealpha,0
#
UsersX=SCREEN_CENTER_X-272
UsersY=SCREEN_CENTER_Y-172
UsersDX=40
UsersAY=16
UsersOnCommand=draworder,2;zoom,0.75;shadowlength,1
[RoomWheelItem]
TextX=0
TextY=0
TextOnCommand=horizalign,left;zoom,1.1;maxwidth,SCREEN_WIDTH*0.31;y,-14;x,-200;strokecolor,color("#42292E")
DescriptionX=0
DescriptionY=0
DescriptionOnCommand=horizalign,left;zoom,0.75;maxwidth,SCREEN_WIDTH*0.5;x,-200;y,16;strokecolor,color("#42292E")
[StepsDisplayEdit]
ShowDescription=true
DescriptionX=-4
-5
View File
@@ -176,11 +176,6 @@ list(APPEND SMDATA_ACTOR_MENU_HPP
"WheelNotifyIcon.h"
"WorkoutGraph.h")
if(WITH_NETWORKING)
list(APPEND SMDATA_ACTOR_MENU_SRC "RoomInfoDisplay.cpp")
list(APPEND SMDATA_ACTOR_MENU_HPP "RoomInfoDisplay.h")
endif()
source_group("Actors\\\\Menus"
FILES
${SMDATA_ACTOR_MENU_SRC}
-7
View File
@@ -178,7 +178,6 @@ list(APPEND SM_DATA_REST_SRC
"Difficulty.cpp"
"DisplaySpec.cpp"
"EnumHelper.cpp"
"FileDownload.cpp"
"Game.cpp"
"GameCommand.cpp"
"GameConstantsAndTypes.cpp"
@@ -230,7 +229,6 @@ list(APPEND SM_DATA_REST_HPP
"DisplaySpec.h"
"Difficulty.h"
"EnumHelper.h"
"FileDownload.h"
"Game.h"
"GameCommand.h"
"GameConstantsAndTypes.h"
@@ -266,11 +264,6 @@ list(APPEND SM_DATA_REST_HPP
"TimingSegments.h"
"TitleSubstitution.h")
if(WITH_NETWORKING)
list(APPEND SM_DATA_REST_SRC "RoomWheel.cpp")
list(APPEND SM_DATA_REST_HPP "RoomWheel.h")
endif()
source_group("Data Structures\\\\Misc Objects"
FILES
${SM_DATA_REST_SRC}
-28
View File
@@ -70,7 +70,6 @@ list(APPEND SMDATA_SCREEN_REST_SRC
"ScreenMiniMenu.cpp"
"ScreenNameEntry.cpp"
"ScreenNameEntryTraditional.cpp"
"ScreenPackages.cpp"
"ScreenPlayerOptions.cpp"
"ScreenProfileLoad.cpp"
"ScreenProfileSave.cpp"
@@ -123,7 +122,6 @@ list(APPEND SMDATA_SCREEN_REST_HPP
"ScreenMiniMenu.h"
"ScreenNameEntry.h"
"ScreenNameEntryTraditional.h"
"ScreenPackages.h"
"ScreenPlayerOptions.h"
"ScreenProfileLoad.h"
"ScreenProfileSave.h"
@@ -160,38 +158,12 @@ source_group("Screens\\\\Others"
${SMDATA_SCREEN_REST_SRC}
${SMDATA_SCREEN_REST_HPP})
list(APPEND SMDATA_SCREEN_NET_SRC
"ScreenNetEvaluation.cpp"
"ScreenNetRoom.cpp"
"ScreenNetSelectBase.cpp"
"ScreenNetSelectMusic.cpp"
"ScreenNetworkOptions.cpp")
list(APPEND SMDATA_SCREEN_NET_HPP
"ScreenNetEvaluation.h"
"ScreenNetRoom.h"
"ScreenNetSelectBase.h"
"ScreenNetSelectMusic.h"
"ScreenNetworkOptions.h")
if(WITH_NETWORKING)
list(APPEND SMDATA_SCREEN_NET_SRC "ScreenSMOnlineLogin.cpp")
list(APPEND SMDATA_SCREEN_NET_HPP "ScreenSMOnlineLogin.h")
endif()
source_group("Screens\\\\Network"
FILES
${SMDATA_SCREEN_NET_SRC}
${SMDATA_SCREEN_NET_HPP})
list(APPEND SMDATA_ALL_SCREENS_SRC
${SMDATA_SCREEN_GAMEPLAY_SRC}
${SMDATA_SCREEN_OPTION_SRC}
${SMDATA_SCREEN_NET_SRC}
${SMDATA_SCREEN_REST_SRC})
list(APPEND SMDATA_ALL_SCREENS_HPP
${SMDATA_SCREEN_GAMEPLAY_HPP}
${SMDATA_SCREEN_OPTION_HPP}
${SMDATA_SCREEN_NET_HPP}
${SMDATA_SCREEN_REST_HPP})
-7
View File
@@ -16,7 +16,6 @@ list(APPEND SMDATA_GLOBAL_SINGLETON_SRC
"MemoryCardManager.cpp"
"MessageManager.cpp"
"NetworkManager.cpp"
"NetworkSyncManager.cpp"
"NoteSkinManager.cpp"
"PrefsManager.cpp"
"ProfileManager.cpp"
@@ -43,7 +42,6 @@ list(APPEND SMDATA_GLOBAL_SINGLETON_HPP
"MemoryCardManager.h"
"MessageManager.h"
"NetworkManager.h"
"NetworkSyncManager.h"
"NoteSkinManager.h"
"PrefsManager.h"
"ProfileManager.h"
@@ -53,11 +51,6 @@ list(APPEND SMDATA_GLOBAL_SINGLETON_HPP
"ThemeManager.h"
"UnlockManager.h")
if(WITH_NETWORKING)
list(APPEND SMDATA_GLOBAL_SINGLETON_SRC "ezsockets.cpp")
list(APPEND SMDATA_GLOBAL_SINGLETON_HPP "ezsockets.h")
endif()
source_group("Global Singletons"
FILES
${SMDATA_GLOBAL_SINGLETON_SRC}
-4
View File
@@ -118,10 +118,6 @@ if(WITH_NO_ROLC_TOMCRYPT)
target_compile_definitions("${SM_EXE_NAME}" PRIVATE LTC_NO_ROLC)
endif()
if(NOT WITH_NETWORKING)
target_compile_definitions("${SM_EXE_NAME}" PRIVATE WITHOUT_NETWORKING)
endif()
# Compilation flags per project here.
target_compile_definitions("${SM_EXE_NAME}" PRIVATE $<$<CONFIG:Debug>:DEBUG>)
target_compile_definitions("${SM_EXE_NAME}" PRIVATE $<$<CONFIG:Release>:RELEASE>)
-1
View File
@@ -12,7 +12,6 @@
#include "arch/Dialog/Dialog.h"
#include "RageFileManager.h"
#include "SpecialFiles.h"
#include "FileDownload.h"
#include "arch/LoadingWindow/LoadingWindow.h"
#include "Preference.h"
#include "JsonUtil.h"
-398
View File
@@ -1,398 +0,0 @@
#include "global.h"
#if !defined(WITHOUT_NETWORKING)
#include "FileDownload.h"
#include "RageUtil.h"
#include "RageFileManager.h"
#include "SpecialFiles.h"
#include "RageLog.h"
#include "Preference.h"
FileTransfer::FileTransfer()
{
m_iPackagesPos = 0;
m_iLinksPos = 0;
m_bIsDownloading = false;
m_sStatus = "";
m_fLastUpdate = 0;
m_iTotalBytes = 0;
m_iDownloaded = 0;
m_bFinished = false;
UpdateProgress();
// Workaround: For some reason, the first download sometimes corrupts;
// by opening and closing the RageFile, this problem does not occur.
// Go figure?
// XXX: This is a really dirty work around! Why does RageFile do this?
// It's always some strange number of bytes at the end of the file when it corrupts.
m_fOutputFile.Open("Packages/dummy.txt", RageFile::WRITE);
m_fOutputFile.Close();
}
FileTransfer::~FileTransfer()
{
m_fOutputFile.Close();
}
RString FileTransfer::Update( float fDeltaTime )
{
HTTPUpdate();
m_fLastUpdate += fDeltaTime;
if (m_fLastUpdate >= 1.0)
{
if (m_bIsDownloading && m_bGotHeader)
m_sStatus = ssprintf("DL @ %d KB/s", int((m_iDownloaded-m_bytesLastUpdate)/1024));
m_bytesLastUpdate = m_iDownloaded;
UpdateProgress();
m_fLastUpdate = 0;
}
return m_sStatus;
}
void FileTransfer::UpdateProgress()
{
// Code here did nothing...
}
void FileTransfer::Cancel()
{
m_wSocket.close();
m_bIsDownloading = false;
m_iDownloaded = 0;
m_bGotHeader = false;
m_fOutputFile.Close();
m_sStatus = "Failed.";
m_sBUFFER = "";
FILEMAN->Remove("Packages/" + m_sEndName);
}
void FileTransfer::StartDownload( const RString &sURL, const RString &sDestFile )
{
StartTransfer( download, sURL, "", sDestFile );
}
void FileTransfer::StartUpload( const RString &sURL, const RString &sSrcFile, const RString &sDestFile )
{
StartTransfer( upload, sURL, sSrcFile, sDestFile );
}
extern Preference<RString> g_sCookie;
void FileTransfer::StartTransfer( TransferType type, const RString &sURL, const RString &sSrcFile, const RString &sDestFile )
{
RString Proto;
RString Server;
int Port=80;
RString sAddress;
if( !ParseHTTPAddress( sURL, Proto, Server, Port, sAddress ) )
{
m_sStatus = "Invalid URL.";
m_bFinished = true;
UpdateProgress();
return;
}
m_bSavingFile = sDestFile != "";
m_sBaseAddress = "http://" + Server;
if( Port != 80 )
m_sBaseAddress += ssprintf( ":%d", Port );
m_sBaseAddress += "/";
if( sAddress.Right(1) != "/" )
{
m_sEndName = Basename( sAddress );
m_sBaseAddress += Dirname( sAddress );
}
else
{
m_sEndName = "";
}
// Open the file...
// First find out if a file by this name already exists if so, then we gotta
// ditch out.
// XXX: This should be fixed by a prompt or something?
// if we are not talking about a file, let's not worry
if( m_sEndName != "" && m_bSavingFile )
{
if( !m_fOutputFile.Open( sDestFile, RageFile::WRITE | RageFile::STREAMED ) )
{
m_sStatus = m_fOutputFile.GetError();
UpdateProgress();
return;
}
}
// Continue...
sAddress = URLEncode( sAddress );
if ( sAddress != "/" )
sAddress = "/" + sAddress;
m_wSocket.close();
m_wSocket.create();
m_wSocket.blocking = true;
if( !m_wSocket.connect( Server, (short) Port ) )
{
m_sStatus = "Failed to connect.";
UpdateProgress();
return;
}
// Produce HTTP header
RString sAction;
switch( type )
{
case upload: sAction = "POST"; break;
case download: sAction = "GET"; break;
}
vector<RString> vsHeaders;
vsHeaders.push_back( sAction+" "+sAddress+" HTTP/1.0" );
vsHeaders.push_back( "Host: " + Server );
vsHeaders.push_back( "Cookie: " + g_sCookie.Get() );
vsHeaders.push_back( "Connection: closed" );
string sBoundary = "--ZzAaB03x";
vsHeaders.push_back( "Content-Type: multipart/form-data; boundary=" + sBoundary );
RString sRequestPayload;
if( type == upload )
{
RageFile f;
if( !f.Open( sSrcFile ) )
FAIL_M( f.GetError() );
sRequestPayload.reserve( f.GetFileSize() );
int iBytesRead = f.Read( sRequestPayload );
if( iBytesRead == -1 )
FAIL_M( f.GetError() );
sRequestPayload = "--" + sBoundary + "\r\n" +
"Content-Disposition: form-data; name=\"name\"\r\n" +
"\r\n" +
"Chris\r\n" +
"--" + sBoundary + "\r\n" +
"Content-Disposition: form-data; name=\"userfile\"; filename=\"" + Basename(sSrcFile) + "\"\r\n" +
"Content-Type: application/zip\r\n" +
"\r\n" +
sRequestPayload + "\r\n" +
"--" + sBoundary + "--";
}
/*
if( sRequestPayload.size() > 0 )
{
sHeader += "Content-Type: application/octet-stream\r\n";
sHeader += "Content-Length: multipart/form-data; boundary=" + sBoundary + "\r\n";
//sHeader += "Content-Length: " + ssprintf("%d",sRequestPayload.size()) + "\r\n";
}
*/
vsHeaders.push_back( "Content-Length: " + ssprintf("%zd",sRequestPayload.size()) );
RString sHeader;
for (RString const &h : vsHeaders)
sHeader += h + "\r\n";
sHeader += "\r\n";
m_wSocket.SendData( sHeader.c_str(), sHeader.length() );
m_wSocket.SendData( "\r\n" );
m_wSocket.SendData( sRequestPayload.c_str(), sRequestPayload.size() );
m_sStatus = "Header Sent.";
m_wSocket.blocking = false;
m_bIsDownloading = true;
m_sBUFFER = "";
m_bGotHeader = false;
UpdateProgress();
}
static size_t FindEndOfHeaders( const RString &buf )
{
size_t iPos1 = buf.find( "\n\n" );
size_t iPos2 = buf.find( "\r\n\r\n" );
LOG->Trace("end: %u, %u", unsigned(iPos1), unsigned(iPos2));
if( iPos1 != string::npos && (iPos2 == string::npos || iPos2 > iPos1) )
return iPos1 + 2;
else if( iPos2 != string::npos && (iPos1 == string::npos || iPos1 > iPos2) )
return iPos2 + 4;
else
return string::npos;
}
void FileTransfer::HTTPUpdate()
{
if( !m_bIsDownloading )
return;
int BytesGot=0;
// Keep this as a code block, as there may be need to "if" it out some time.
/* If you need a conditional for a large block of code, stick it in
* a function and return. */
for(;;)
{
char Buffer[1024];
int iSize = m_wSocket.ReadData( Buffer, 1024 );
if( iSize <= 0 )
break;
m_sBUFFER.append( Buffer, iSize );
BytesGot += iSize;
}
if( !m_bGotHeader )
{
m_sStatus = "Waiting for header.";
// We don't know if we are using unix-style or dos-style
size_t iHeaderEnd = FindEndOfHeaders( m_sBUFFER );
if( iHeaderEnd == m_sBUFFER.npos )
return;
// "HTTP/1.1 200 OK"
size_t i = m_sBUFFER.find(" ");
size_t j = m_sBUFFER.find(" ",i+1);
size_t k = m_sBUFFER.find("\n",j+1);
if ( i == string::npos || j == string::npos || k == string::npos )
{
m_iResponseCode = -100;
m_sResponseName = "Malformed response.";
return;
}
m_iResponseCode = StringToInt(m_sBUFFER.substr(i+1,j-i));
m_sResponseName = m_sBUFFER.substr( j+1, k-j );
i = m_sBUFFER.find("Content-Length:");
j = m_sBUFFER.find("\n", i+1 );
if( i != string::npos )
m_iTotalBytes = StringToInt(m_sBUFFER.substr(i+16,j-i));
else
m_iTotalBytes = -1; // We don't know, so go until disconnect
m_bGotHeader = true;
m_sBUFFER.erase( 0, iHeaderEnd );
}
if( m_bSavingFile )
{
m_iDownloaded += m_sBUFFER.length();
m_fOutputFile.Write( m_sBUFFER );
// HACK: We're ending up with incomplete files after close() if we don't flush here. Why?
m_fOutputFile.Flush();
m_sBUFFER = "";
}
else
{
m_iDownloaded = m_sBUFFER.length();
}
if ( ( m_iTotalBytes <= m_iDownloaded && m_iTotalBytes != -1 ) ||
//We have the full doc. (And we knew how big it was)
( m_iTotalBytes == -1 &&
( m_wSocket.state == EzSockets::skERROR || m_wSocket.state == EzSockets::skDISCONNECTED ) ) )
// We didn't know how big it was, and were disconnected
// So that means we have it all.
{
m_wSocket.close();
m_bIsDownloading = false;
m_bGotHeader=false;
m_sStatus = ssprintf( "Done;%dB", int(m_iDownloaded) );
m_bFinished = true;
if( m_iResponseCode < 200 || m_iResponseCode >= 400 )
{
m_sStatus = ssprintf( "%ld", m_iResponseCode ) + m_sResponseName;
}
else
{
if( m_bSavingFile && m_iResponseCode < 300 )
{
RString sZipFile = m_fOutputFile.GetRealPath();
m_fOutputFile.Close();
FILEMAN->FlushDirCache();
m_iDownloaded = 0;
}
}
}
}
bool FileTransfer::ParseHTTPAddress( const RString &URL, RString &sProto, RString &sServer, int &iPort, RString &sAddress )
{
// [PROTO://]SERVER[:PORT][/URL]
Regex re(
"^([A-Z]+)://" // [0]: HTTP://
"([^/:]+)" // [1]: a.b.com
"(:([0-9]+))?" // [2], [3]: :1234 (optional, default 80)
"(/(.*))?$"); // [4], [5]: /foo.html (optional)
vector<RString> asMatches;
if( !re.Compare( URL, asMatches ) )
return false;
ASSERT( asMatches.size() == 6 );
sProto = asMatches[0];
sServer = asMatches[1];
if( asMatches[3] != "" )
{
iPort = StringToInt(asMatches[3]);
if( iPort == 0 )
return false;
}
else
iPort = 80;
sAddress = asMatches[5];
return true;
}
void FileTransfer::Finish()
{
for(;;)
{
float fSleepSeconds = 0.1f;
this->Update( fSleepSeconds );
usleep( int( fSleepSeconds * 1000000.0 ) );
if( this->IsFinished() )
{
break;
}
}
}
#endif
/*
* (c) 2004 Charles Lohr, Chris Danford
* 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.
*/
-95
View File
@@ -1,95 +0,0 @@
#ifndef FileTransfer_H
#define FileTransfer_H
#if !defined(WITHOUT_NETWORKING)
#include "ezsockets.h"
#include "RageFile.h"
class FileTransfer
{
public:
FileTransfer();
~FileTransfer();
void StartDownload(const RString &sURL, const RString &sDestFile);
void StartUpload(const RString &sURL, const RString &sSrcFile, const RString &sDestFile);
void Cancel();
RString Update(float fDeltaTime);
bool IsFinished() const { return m_bFinished; }
void Finish();
int GetResponseCode() const { return m_iResponseCode; }
RString GetResponse() const { return m_sBUFFER; }
RString GetStatus() const { return m_sStatus; }
private:
enum TransferType { download, upload };
void StartTransfer(TransferType type, const RString &sURL, const RString &sSrcFile, const RString &sDestFile);
int m_iPackagesPos;
int m_iLinksPos;
int m_iDLorLST;
// HTTP portion
void HTTPUpdate();
// True if proper string, false if improper
bool ParseHTTPAddress(const RString & URL, RString & Proto, RString & Server, int & Port, RString & Addy);
void UpdateProgress();
bool m_bIsDownloading;
float m_fLastUpdate;
long m_bytesLastUpdate;
RString m_sStatus;
EzSockets m_wSocket;
bool m_bGotHeader;
RageFile m_fOutputFile;
RString m_sEndName;
bool m_bSavingFile;
RString m_sBaseAddress;
// HTTP Header information responce
long m_iTotalBytes;
long m_iDownloaded;
long m_iResponseCode;
RString m_sResponseName;
// Raw HTTP Buffer
RString m_sBUFFER;
bool m_bFinished;
};
#endif
#endif
/*
* (c) 2004 Charles Lohr, Chris Danford
* 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.
*/
-2
View File
@@ -18,7 +18,6 @@
#include "InputMapper.h"
#include "RageFileManager.h"
#include "LightsManager.h"
#include "NetworkSyncManager.h"
#include "RageTimer.h"
#include "RageInput.h"
@@ -283,7 +282,6 @@ void GameLoop::UpdateAllButDraw(bool bRunningFromVBLANK)
GAMESTATE->Update(fDeltaTime);
SCREENMAN->Update(fDeltaTime);
MEMCARDMAN->Update();
NSMAN->Update(fDeltaTime);
/* Important: Process input AFTER updating game logic, or input will be
* acting on song beat from last frame */
+3 -30
View File
@@ -8,7 +8,6 @@
#include "RageLog.h"
#include "GameState.h"
#include "ThemeManager.h"
#include "NetworkSyncManager.h"
#include "ProfileManager.h"
#include "Song.h"
#include "Course.h"
@@ -487,35 +486,9 @@ void MusicWheel::GetSongList( vector<Song*> &arraySongs, SortOrder so )
}
else
{
// Online mode doesn't support auto set style. A song that only has
// dance-double steps will show up when dance-single was selected, with
// no playable steps. Then the game will crash when trying to play it.
// -Kyz
if(CommonMetrics::AUTO_SET_STYLE && !NSMAN->isSMOnline)
{
// with AUTO_SET_STYLE on and Autogen off, some songs may get
// hidden. Search through every playable StepsType until you
// find one, then add the song.
// see Issue 147 for more information. -aj
// http://ssc.ajworld.net/sm-ssc/bugtracker/view.php?id=147
set<StepsType> vStepsType;
SongUtil::GetPlayableStepsTypes( pSong, vStepsType );
for (StepsType const &type : vStepsType)
{
if(pSong->HasStepsType(type))
{
arraySongs.push_back( pSong );
break;
}
}
}
else
{
// If the song has at least one steps, add it.
if( pSong->HasStepsType(GAMESTATE->GetCurrentStyle(PLAYER_INVALID)->m_StepsType) )
arraySongs.push_back( pSong );
}
// If the song has at least one steps, add it.
if( pSong->HasStepsType(GAMESTATE->GetCurrentStyle(PLAYER_INVALID)->m_StepsType) )
arraySongs.push_back( pSong );
}
}
-993
View File
@@ -1,993 +0,0 @@
#include "global.h"
#include "NetworkSyncManager.h"
#include "LuaManager.h"
#include "LocalizedString.h"
#include <errno.h>
NetworkSyncManager *NSMAN;
// Aldo: version_num used by GetCurrentSMVersion()
// XXX: That's probably not what you want... --root
#include "ver.h"
#if defined(WITHOUT_NETWORKING)
NetworkSyncManager::NetworkSyncManager( LoadingWindow *ld ) { useSMserver=false; isSMOnline = false; }
NetworkSyncManager::~NetworkSyncManager () { }
void NetworkSyncManager::CloseConnection() { }
void NetworkSyncManager::PostStartUp( const RString& ServerIP ) { }
bool NetworkSyncManager::Connect( const RString& addy, unsigned short port ) { return false; }
RString NetworkSyncManager::GetServerName() { return RString(); }
void NetworkSyncManager::ReportNSSOnOff( int i ) { }
void NetworkSyncManager::ReportScore( int playerID, int step, int score, int combo, float offset ) { }
void NetworkSyncManager::ReportScore(int playerID, int step, int score, int combo, float offset, int numNotes) { }
void NetworkSyncManager::ReportSongOver() { }
void NetworkSyncManager::ReportStyle() {}
void NetworkSyncManager::StartRequest( short position ) { }
void NetworkSyncManager::DisplayStartupStatus() { }
void NetworkSyncManager::Update( float fDeltaTime ) { }
bool NetworkSyncManager::ChangedScoreboard( int Column ) { return false; }
void NetworkSyncManager::SendChat( const RString& message ) { }
void NetworkSyncManager::SelectUserSong() { }
RString NetworkSyncManager::MD5Hex( const RString &sInput ) { return RString(); }
int NetworkSyncManager::GetSMOnlineSalt() { return 0; }
void NetworkSyncManager::GetListOfLANServers( vector<NetServerInfo>& AllServers ) { }
unsigned long NetworkSyncManager::GetCurrentSMBuild( LoadingWindow* ld ) { return 0; }
#else
#include "ezsockets.h"
#include "ProfileManager.h"
#include "RageLog.h"
#include "ScreenManager.h"
#include "Song.h"
#include "Course.h"
#include "GameState.h"
#include "StatsManager.h"
#include "Steps.h"
#include "ProductInfo.h"
#include "ScreenMessage.h"
#include "GameManager.h"
#include "MessageManager.h"
#include "arch/LoadingWindow/LoadingWindow.h"
#include "PlayerState.h"
#include "CryptManager.h"
AutoScreenMessage( SM_AddToChat );
AutoScreenMessage( SM_ChangeSong );
AutoScreenMessage( SM_GotEval );
AutoScreenMessage( SM_UsersUpdate );
AutoScreenMessage( SM_FriendsUpdate );
AutoScreenMessage( SM_SMOnlinePack );
int NetworkSyncManager::GetSMOnlineSalt()
{
return m_iSalt;
}
static LocalizedString INITIALIZING_CLIENT_NETWORK ( "NetworkSyncManager", "Initializing Client Network..." );
NetworkSyncManager::NetworkSyncManager( LoadingWindow *ld )
{
LANserver = nullptr; //So we know if it has been created yet
BroadcastReception = nullptr;
ld->SetText( INITIALIZING_CLIENT_NETWORK );
NetPlayerClient = new EzSockets;
NetPlayerClient->blocking = false;
m_ServerVersion = 0;
useSMserver = false;
isSMOnline = false;
FOREACH_PlayerNumber( pn )
isSMOLoggedIn[pn] = false;
m_startupStatus = 0; //By default, connection not tried.
m_ActivePlayers = 0;
StartUp();
}
NetworkSyncManager::~NetworkSyncManager ()
{
//Close Connection to server nicely.
if( useSMserver )
NetPlayerClient->close();
SAFE_DELETE( NetPlayerClient );
if ( BroadcastReception )
{
BroadcastReception->close();
SAFE_DELETE( BroadcastReception );
}
}
void NetworkSyncManager::CloseConnection()
{
if( !useSMserver )
return;
m_ServerVersion = 0;
useSMserver = false;
isSMOnline = false;
FOREACH_PlayerNumber( pn )
isSMOLoggedIn[pn] = false;
m_startupStatus = 0;
NetPlayerClient->close();
}
void NetworkSyncManager::PostStartUp( const RString& ServerIP )
{
RString sAddress;
unsigned short iPort;
size_t cLoc = ServerIP.find( ':' );
if( ServerIP.find( ':' ) != RString::npos )
{
sAddress = ServerIP.substr( 0, cLoc );
char* cEnd;
errno = 0;
iPort = (unsigned short)strtol( ServerIP.substr( cLoc + 1 ).c_str(), &cEnd, 10 );
if( *cEnd != 0 || errno != 0 )
{
m_startupStatus = 2;
LOG->Warn( "Invalid port" );
return;
}
}
else
{
iPort = 8765;
sAddress = ServerIP;
}
LOG->Info( "Attempting to connect to: %s, Port: %i", sAddress.c_str(), iPort );
CloseConnection();
if( !Connect(sAddress.c_str(), iPort) )
{
m_startupStatus = 2;
LOG->Warn( "Network Sync Manager failed to connect" );
return;
}
FOREACH_PlayerNumber( pn )
isSMOLoggedIn[pn] = false;
useSMserver = true;
m_startupStatus = 1; // Connection attepmpt successful
// If network play is desired and the connection works,
// halt until we know what server version we're dealing with
m_packet.ClearPacket();
m_packet.Write1( NSCHello ); //Hello Packet
m_packet.Write1( NETPROTOCOLVERSION );
m_packet.WriteNT( RString( string(PRODUCT_FAMILY) + product_version ) );
/* Block until response is received.
* Move mode to blocking in order to give CPU back to the system,
* and not wait.
*/
bool dontExit = true;
NetPlayerClient->blocking = true;
// The following packet must get through, so we block for it.
// If we are serving, we do not block for this.
NetPlayerClient->SendPack( (char*)m_packet.Data, m_packet.Position );
m_packet.ClearPacket();
while( dontExit )
{
m_packet.ClearPacket();
if( NetPlayerClient->ReadPack((char *)&m_packet, NETMAXBUFFERSIZE)<1 )
dontExit=false; // Also allow exit if there is a problem on the socket
if( m_packet.Read1() == NSServerOffset + NSCHello )
dontExit=false;
// Only allow passing on handshake; otherwise scoreboard updates and
// such will confuse us.
}
NetPlayerClient->blocking = false;
m_ServerVersion = m_packet.Read1();
if( m_ServerVersion >= 128 )
isSMOnline = true;
m_ServerName = m_packet.ReadNT();
m_iSalt = m_packet.Read4();
LOG->Info( "Server Version: %d %s", m_ServerVersion, m_ServerName.c_str() );
}
void NetworkSyncManager::StartUp()
{
RString ServerIP;
if( GetCommandlineArgument( "netip", &ServerIP ) )
PostStartUp( ServerIP );
BroadcastReception = new EzSockets;
BroadcastReception->create( EZS_UDP );
BroadcastReception->bind( 8765 );
BroadcastReception->blocking = false;
}
bool NetworkSyncManager::Connect( const RString& addy, unsigned short port )
{
LOG->Info( "Beginning to connect" );
NetPlayerClient->create(); // Initialize Socket
LOG->Info( "Calling EzSockets:connect()" );
useSMserver = NetPlayerClient->connect( addy, port );
LOG->Info( "Back from ezsockets..." );
return useSMserver;
}
void NetworkSyncManager::ReportNSSOnOff(int i)
{
m_packet.ClearPacket();
m_packet.Write1( NSCSMS );
m_packet.Write1( (uint8_t) i );
NetPlayerClient->SendPack( (char*)m_packet.Data, m_packet.Position );
}
RString NetworkSyncManager::GetServerName()
{
return m_ServerName;
}
//Same as the one below except for ctr = uint8_t(STATSMAN->m_CurStageStats.m_player[playerID].GetGrade() * 16 + numNotes);
//Im keeping the old one because it's used for single tap notes
void NetworkSyncManager::ReportScore(int playerID, int step, int score, int combo, float offset, int numNotes)
{
if (!useSMserver) //Make sure that we are using the network
return;
LOG->Trace("Player ID %i combo = %i", playerID, combo);
m_packet.ClearPacket();
m_packet.Write1(NSCGSU);
step = TranslateStepType(step);
uint8_t ctr = (uint8_t)(playerID * 16 + step - (SMOST_HITMINE - 1));
m_packet.Write1(ctr);
ctr = uint8_t(STATSMAN->m_CurStageStats.m_player[playerID].GetGrade() * 16 + numNotes);
if (STATSMAN->m_CurStageStats.m_player[playerID].m_bFailed)
ctr = uint8_t(112); //Code for failed (failed constant seems not to work)
m_packet.Write1(ctr);
m_packet.Write4(score);
m_packet.Write2((uint16_t)combo);
m_packet.Write2((uint16_t)m_playerLife[playerID]);
// Offset Info
// Note: if a 0 is sent, then disregard data.
// ASSUMED: No step will be more than 16 seconds off center.
// If this assumption is false, read 16 seconds in either direction.
int iOffset = int((offset + 16.384)*2000.0f);
if (iOffset>65535)
iOffset = 65535;
if (iOffset<1)
iOffset = 1;
// Report 0 if hold, or miss (don't forget mines should report)
if (step == SMOST_HITMINE || step > SMOST_W1)
iOffset = 0;
m_packet.Write2((uint16_t)iOffset);
NetPlayerClient->SendPack((char*)m_packet.Data, m_packet.Position);
}
void NetworkSyncManager::ReportScore(int playerID, int step, int score, int combo, float offset)
{
if( !useSMserver ) //Make sure that we are using the network
return;
LOG->Trace( "Player ID %i combo = %i", playerID, combo );
m_packet.ClearPacket();
m_packet.Write1( NSCGSU );
step = TranslateStepType(step);
uint8_t ctr = (uint8_t) (playerID * 16 + step - ( SMOST_HITMINE - 1 ) );
m_packet.Write1( ctr );
ctr = uint8_t( STATSMAN->m_CurStageStats.m_player[playerID].GetGrade()*16 );
if ( STATSMAN->m_CurStageStats.m_player[playerID].m_bFailed )
ctr = uint8_t( 112 ); //Code for failed (failed constant seems not to work)
m_packet.Write1( ctr );
m_packet.Write4( score );
m_packet.Write2( (uint16_t)combo );
m_packet.Write2( (uint16_t)m_playerLife[playerID] );
// Offset Info
// Note: if a 0 is sent, then disregard data.
// ASSUMED: No step will be more than 16 seconds off center.
// If this assumption is false, read 16 seconds in either direction.
int iOffset = int( (offset+16.384)*2000.0f );
if( iOffset>65535 )
iOffset=65535;
if( iOffset<1 )
iOffset=1;
// Report 0 if hold, or miss (don't forget mines should report)
if( step == SMOST_HITMINE || step > SMOST_W1 )
iOffset = 0;
m_packet.Write2( (uint16_t)iOffset );
NetPlayerClient->SendPack( (char*)m_packet.Data, m_packet.Position );
}
void NetworkSyncManager::ReportSongOver()
{
if ( !useSMserver ) //Make sure that we are using the network
return;
m_packet.ClearPacket();
m_packet.Write1( NSCGON );
NetPlayerClient->SendPack( (char*)&m_packet.Data, m_packet.Position );
return;
}
void NetworkSyncManager::ReportStyle()
{
LOG->Trace( "Sending \"Style\" to server" );
if( !useSMserver )
return;
m_packet.ClearPacket();
m_packet.Write1( NSCSU );
m_packet.Write1( (int8_t)GAMESTATE->GetNumPlayersEnabled() );
FOREACH_EnabledPlayer( pn )
{
m_packet.Write1( (uint8_t)pn );
m_packet.WriteNT( GAMESTATE->GetPlayerDisplayName(pn) );
}
NetPlayerClient->SendPack( (char*)&m_packet.Data, m_packet.Position );
}
void NetworkSyncManager::StartRequest( short position )
{
if( !useSMserver )
return;
if( GAMESTATE->m_bDemonstrationOrJukebox )
return;
LOG->Trace( "Requesting Start from Server." );
m_packet.ClearPacket();
m_packet.Write1( NSCGSR );
unsigned char ctr=0;
Steps * tSteps;
tSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
if( tSteps!= nullptr && GAMESTATE->IsPlayerEnabled(PLAYER_1) )
ctr = uint8_t(ctr+tSteps->GetMeter()*16);
tSteps = GAMESTATE->m_pCurSteps[PLAYER_2];
if( tSteps!= nullptr && GAMESTATE->IsPlayerEnabled(PLAYER_2) )
ctr = uint8_t( ctr+tSteps->GetMeter() );
m_packet.Write1( ctr );
ctr=0;
tSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
if( tSteps!= nullptr && GAMESTATE->IsPlayerEnabled(PLAYER_1) )
ctr = uint8_t( ctr + (int)tSteps->GetDifficulty()*16 );
tSteps = GAMESTATE->m_pCurSteps[PLAYER_2];
if( tSteps!= nullptr && GAMESTATE->IsPlayerEnabled(PLAYER_2) )
ctr = uint8_t( ctr + (int)tSteps->GetDifficulty() );
m_packet.Write1( ctr );
//Notify server if this is for sync or not.
ctr = char( position*16 );
m_packet.Write1( ctr );
if( GAMESTATE->m_pCurSong != nullptr )
{
m_packet.WriteNT( GAMESTATE->m_pCurSong->m_sMainTitle );
m_packet.WriteNT( GAMESTATE->m_pCurSong->m_sSubTitle );
m_packet.WriteNT( GAMESTATE->m_pCurSong->m_sArtist );
}
else
{
m_packet.WriteNT( "" );
m_packet.WriteNT( "" );
m_packet.WriteNT( "" );
}
if( GAMESTATE->m_pCurCourse != nullptr )
m_packet.WriteNT( GAMESTATE->m_pCurCourse->GetDisplayFullTitle() );
else
m_packet.WriteNT( RString() );
//Send Player (and song) Options
m_packet.WriteNT( GAMESTATE->m_SongOptions.GetCurrent().GetString() );
int players=0;
FOREACH_PlayerNumber( p )
{
++players;
m_packet.WriteNT( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions.GetCurrent().GetString() );
}
for (int i=0; i<2-players; ++i)
m_packet.WriteNT(""); //Write a nullptr if no player
//Send song hash/chartkey
if (m_ServerVersion >= 129) {
tSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
if (tSteps != nullptr && GAMESTATE->IsPlayerEnabled(PLAYER_1)) {
m_packet.WriteNT(tSteps->GetChartKey());
}
else
{
m_packet.WriteNT("");
}
tSteps = GAMESTATE->m_pCurSteps[PLAYER_2];
if (tSteps != nullptr && GAMESTATE->IsPlayerEnabled(PLAYER_2)) {
m_packet.WriteNT(tSteps->GetChartKey());
}
else
{
m_packet.WriteNT("");
}
int rate = (int)(GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate * 100);
m_packet.Write1(rate);
m_packet.WriteNT(GAMESTATE->m_pCurSong->GetFileHash());
}
//This needs to be reset before ScreenEvaluation could possibly be called
m_EvalPlayerData.clear();
//Block until go is recieved.
//Switch to blocking mode (this is the only
//way I know how to get precievably instantanious results
bool dontExit=true;
NetPlayerClient->blocking=true;
//The following packet HAS to get through, so we turn blocking on for it as well
//Don't block if we are serving
NetPlayerClient->SendPack((char*)&m_packet.Data, m_packet.Position);
LOG->Trace("Waiting for RECV");
m_packet.ClearPacket();
while (dontExit)
{
m_packet.ClearPacket();
if (NetPlayerClient->ReadPack((char *)&m_packet, NETMAXBUFFERSIZE)<1)
dontExit=false; // Also allow exit if there is a problem on the socket
// Only do if we are not the server, otherwise the sync
// gets hosed up due to non blocking mode.
if (m_packet.Read1() == (NSServerOffset + NSCGSR))
dontExit=false;
// Only allow passing on Start request; otherwise scoreboard updates
// and such will confuse us.
}
NetPlayerClient->blocking=false;
}
static LocalizedString CONNECTION_SUCCESSFUL( "NetworkSyncManager", "Connection to '%s' successful." );
static LocalizedString CONNECTION_FAILED ( "NetworkSyncManager", "Connection failed." );
void NetworkSyncManager::DisplayStartupStatus()
{
RString sMessage("");
switch (m_startupStatus)
{
case 0:
//Networking wasn't attepmpted
return;
case 1:
sMessage = ssprintf( CONNECTION_SUCCESSFUL.GetValue(), m_ServerName.c_str() );
break;
case 2:
sMessage = CONNECTION_FAILED.GetValue();
break;
}
SCREENMAN->SystemMessage( sMessage );
}
void NetworkSyncManager::Update(float fDeltaTime)
{
if (useSMserver)
ProcessInput();
PacketFunctions BroadIn;
if ( BroadcastReception->ReadPack( (char*)&BroadIn.Data, 1020 ) )
{
NetServerInfo ThisServer;
BroadIn.Position = 0;
if ( BroadIn.Read1() == 141 ) // SMLS_Info?
{
ThisServer.Name = BroadIn.ReadNT();
int port = BroadIn.Read2();
BroadIn.Read2(); //Num players connected.
uint32_t addy = BroadcastReception->getAddress();
ThisServer.Address = ssprintf( "%u.%u.%u.%u:%d",
(addy<<0)>>24, (addy<<8)>>24, (addy<<16)>>24, (addy<<24)>>24, port );
//It's fairly safe to assume that users will not be on networks with more than
//30 or 40 servers. Until this point, maps would be slower than vectors.
//So I am going to use a vector to store all of the servers.
//
//In this situation, I will traverse the vector to find the element that
//contains the corresponding server.
unsigned int i;
for ( i = 0; i < m_vAllLANServers.size(); i++ )
{
if ( m_vAllLANServers[i].Address == ThisServer.Address )
{
m_vAllLANServers[i].Name = ThisServer.Name;
break;
}
}
if ( i >= m_vAllLANServers.size() )
m_vAllLANServers.push_back( ThisServer );
}
}
}
static LocalizedString CONNECTION_DROPPED( "NetworkSyncManager", "Connection to server dropped." );
void NetworkSyncManager::ProcessInput()
{
//If we're disconnected, just exit
if ((NetPlayerClient->state!=NetPlayerClient->skCONNECTED) ||
NetPlayerClient->IsError())
{
SCREENMAN->SystemMessageNoAnimate( CONNECTION_DROPPED );
useSMserver=false;
isSMOnline = false;
FOREACH_PlayerNumber(pn)
isSMOLoggedIn[pn] = false;
NetPlayerClient->close();
return;
}
// load new data into buffer
NetPlayerClient->update();
m_packet.ClearPacket();
int packetSize;
while ( (packetSize = NetPlayerClient->ReadPack((char *)&m_packet, NETMAXBUFFERSIZE) ) > 0 )
{
m_packet.size = packetSize;
int command = m_packet.Read1();
//Check to make sure command is valid from server
if (command < NSServerOffset)
{
LOG->Trace("CMD (below 128) Invalid> %d",command);
break;
}
command = command - NSServerOffset;
switch (command)
{
case NSCPing: // Ping packet responce
m_packet.ClearPacket();
m_packet.Write1( NSCPingR );
NetPlayerClient->SendPack((char*)m_packet.Data,m_packet.Position);
break;
case NSCPingR: // These are in response to when/if we send packet 0's
case NSCHello: // This is already taken care of by the blocking code earlier
case NSCGSR: // This is taken care of by the blocking start code
break;
case NSCGON:
{
int PlayersInPack = m_packet.Read1();
m_EvalPlayerData.resize(PlayersInPack);
for (int i=0; i<PlayersInPack; ++i)
m_EvalPlayerData[i].name = m_packet.Read1();
for (int i=0; i<PlayersInPack; ++i)
m_EvalPlayerData[i].score = m_packet.Read4();
for (int i=0; i<PlayersInPack; ++i)
m_EvalPlayerData[i].grade = m_packet.Read1();
for (int i=0; i<PlayersInPack; ++i)
m_EvalPlayerData[i].difficulty = (Difficulty) m_packet.Read1();
for (int j=0; j<NETNUMTAPSCORES; ++j)
for (int i=0; i<PlayersInPack; ++i)
m_EvalPlayerData[i].tapScores[j] = m_packet.Read2();
for (int i=0; i<PlayersInPack; ++i)
m_EvalPlayerData[i].playerOptions = m_packet.ReadNT();
SCREENMAN->SendMessageToTopScreen( SM_GotEval );
}
break;
case NSCGSU: // Scoreboard Update
{ //Ease scope
int ColumnNumber=m_packet.Read1();
int NumberPlayers=m_packet.Read1();
RString ColumnData;
switch (ColumnNumber)
{
case NSSB_NAMES:
ColumnData = "Names\n";
for (int i=0; i<NumberPlayers; ++i)
ColumnData += m_PlayerNames[m_packet.Read1()] + "\n";
break;
case NSSB_COMBO:
ColumnData = "Combo\n";
for (int i=0; i<NumberPlayers; ++i)
ColumnData += ssprintf("%d\n",m_packet.Read2());
break;
case NSSB_GRADE:
ColumnData = "Grade\n";
for (int i=0;i<NumberPlayers;i++)
ColumnData += GradeToLocalizedString( Grade(m_packet.Read1()) ) + "\n";
break;
}
m_Scoreboard[ColumnNumber] = ColumnData;
m_scoreboardchange[ColumnNumber]=true;
/*
Message msg("ScoreboardUpdate");
msg.SetParam( "NumPlayers", NumberPlayers );
MESSAGEMAN->Broadcast( msg );
*/
}
break;
case NSCSU: //System message from server
{
RString SysMSG = m_packet.ReadNT();
SCREENMAN->SystemMessage( SysMSG );
}
break;
case NSCCM: //Chat message from server
{
m_sChatText += m_packet.ReadNT() + " \n ";
//10000 chars backlog should be more than enough
m_sChatText = m_sChatText.Right(10000);
SCREENMAN->SendMessageToTopScreen( SM_AddToChat );
}
break;
case NSCRSG: //Select Song/Play song
{
m_iSelectMode = m_packet.Read1();
m_sMainTitle = m_packet.ReadNT();
m_sArtist = m_packet.ReadNT();
m_sSubTitle = m_packet.ReadNT();
//Read songhash
if (m_ServerVersion >= 129) {
m_sFileHash = m_packet.ReadNT();
} else {
m_sFileHash = "" ;
}
SCREENMAN->SendMessageToTopScreen( SM_ChangeSong );
}
break;
case NSCUUL:
{
/*int ServerMaxPlayers=*/m_packet.Read1();
int PlayersInThisPacket=m_packet.Read1();
m_ActivePlayer.clear();
m_PlayerStatus.clear();
m_PlayerNames.clear();
m_ActivePlayers = 0;
for (int i=0; i<PlayersInThisPacket; ++i)
{
int PStatus = m_packet.Read1();
if ( PStatus > 0 )
{
m_ActivePlayers++;
m_ActivePlayer.push_back( i );
}
m_PlayerStatus.push_back( PStatus );
m_PlayerNames.push_back( m_packet.ReadNT() );
}
SCREENMAN->SendMessageToTopScreen( SM_UsersUpdate );
}
break;
case NSCSMS:
{
RString StyleName, GameName;
GameName = m_packet.ReadNT();
StyleName = m_packet.ReadNT();
GAMESTATE->SetCurGame( GAMEMAN->StringToGame(GameName) );
GAMESTATE->SetCurrentStyle( GAMEMAN->GameAndStringToStyle(GAMESTATE->m_pCurGame,StyleName), PLAYER_INVALID );
SCREENMAN->SetNewScreen( "ScreenNetSelectMusic" ); //Should this be metric'd out?
}
break;
case NSCSMOnline:
{
m_SMOnlinePacket.size = packetSize - 1;
m_SMOnlinePacket.Position = 0;
memcpy( m_SMOnlinePacket.Data, (m_packet.Data + 1), packetSize-1 );
LOG->Trace( "Received SMOnline Command: %d, size:%d", command, packetSize - 1 );
SCREENMAN->SendMessageToTopScreen( SM_SMOnlinePack );
}
break;
case NSCAttack:
{
PlayerNumber iPlayerNumber = (PlayerNumber)m_packet.Read1();
if( GAMESTATE->IsPlayerEnabled( iPlayerNumber ) ) // Only attack if the player can be attacked.
{
Attack a;
a.fSecsRemaining = float( m_packet.Read4() ) / 1000.0f;
a.bGlobal = false;
a.sModifiers = m_packet.ReadNT();
GAMESTATE->m_pPlayerState[iPlayerNumber]->LaunchAttack( a );
}
m_packet.ClearPacket();
}
break;
case FLU:
{
int PlayersInThisPacket = m_packet.Read1();
fl_PlayerNames.clear();
fl_PlayerStates.clear();
for (int i = 0; i<PlayersInThisPacket; ++i)
{
int PStatus = m_packet.Read1();
fl_PlayerStates.push_back(PStatus);
fl_PlayerNames.push_back(m_packet.ReadNT());
}
SCREENMAN->SendMessageToTopScreen(SM_FriendsUpdate);
}
break;
}
m_packet.ClearPacket();
}
}
bool NetworkSyncManager::ChangedScoreboard(int Column)
{
if (!m_scoreboardchange[Column])
return false;
m_scoreboardchange[Column]=false;
return true;
}
void NetworkSyncManager::SendChat(const RString& message)
{
m_packet.ClearPacket();
m_packet.Write1( NSCCM );
m_packet.WriteNT( message );
NetPlayerClient->SendPack((char*)&m_packet.Data, m_packet.Position);
}
void NetworkSyncManager::ReportPlayerOptions()
{
m_packet.ClearPacket();
m_packet.Write1( NSCUPOpts );
FOREACH_PlayerNumber (pn)
m_packet.WriteNT( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions.GetCurrent().GetString() );
NetPlayerClient->SendPack((char*)&m_packet.Data, m_packet.Position);
}
int NetworkSyncManager::GetServerVersion()
{
return m_ServerVersion;
}
void NetworkSyncManager::SelectUserSong()
{
m_packet.ClearPacket();
m_packet.Write1( NSCRSG );
m_packet.Write1( (uint8_t) m_iSelectMode );
m_packet.WriteNT( m_sMainTitle );
m_packet.WriteNT( m_sArtist );
m_packet.WriteNT( m_sSubTitle );
//Send songhash
if (m_ServerVersion >= 129) {
m_packet.WriteNT(GAMESTATE->m_pCurSong->GetFileHash());
}
NetPlayerClient->SendPack( (char*)&m_packet.Data, m_packet.Position );
}
void NetworkSyncManager::SendSMOnline( )
{
m_packet.Position = m_SMOnlinePacket.Position + 1;
memcpy( (m_packet.Data + 1), m_SMOnlinePacket.Data, m_SMOnlinePacket.Position );
m_packet.Data[0] = NSCSMOnline;
NetPlayerClient->SendPack( (char*)&m_packet.Data , m_packet.Position );
}
SMOStepType NetworkSyncManager::TranslateStepType(int score)
{
/* Translate from Stepmania's constantly changing TapNoteScore
* to SMO's note scores */
switch(score)
{
case TNS_HitMine:
return SMOST_HITMINE;
case TNS_AvoidMine:
return SMOST_AVOIDMINE;
case TNS_Miss:
return SMOST_MISS;
case TNS_W5:
return SMOST_W5;
case TNS_W4:
return SMOST_W4;
case TNS_W3:
return SMOST_W3;
case TNS_W2:
return SMOST_W2;
case TNS_W1:
return SMOST_W1;
case HNS_LetGo+TapNoteScore_Invalid:
return SMOST_LETGO;
case HNS_Held+TapNoteScore_Invalid:
return SMOST_HELD;
default:
return SMOST_UNUSED;
}
}
// Packet functions
uint8_t PacketFunctions::Read1()
{
if (Position>=NETMAXBUFFERSIZE)
return 0;
return Data[Position++];
}
uint16_t PacketFunctions::Read2()
{
if (Position>=NETMAXBUFFERSIZE-1)
return 0;
uint16_t Temp;
memcpy( &Temp, Data + Position,2 );
Position+=2;
return EzSockets::sm_ntohs(Temp);
}
uint32_t PacketFunctions::Read4()
{
if (Position>=NETMAXBUFFERSIZE-3)
return 0;
uint32_t Temp;
memcpy( &Temp, Data + Position,4 );
Position+=4;
return EzSockets::sm_ntohl(Temp);
}
RString PacketFunctions::ReadNT()
{
//int Orig=Packet.Position;
RString TempStr;
while ((Position<NETMAXBUFFERSIZE)&& (((char*)Data)[Position]!=0))
TempStr= TempStr + (char)Data[Position++];
++Position;
return TempStr;
}
void PacketFunctions::Write1(uint8_t data)
{
if (Position>=NETMAXBUFFERSIZE)
return;
memcpy( &Data[Position], &data, 1 );
++Position;
}
void PacketFunctions::Write2(uint16_t data)
{
if (Position>=NETMAXBUFFERSIZE-1)
return;
data = EzSockets::sm_htons(data);
memcpy( &Data[Position], &data, 2 );
Position+=2;
}
void PacketFunctions::Write4(uint32_t data)
{
if (Position>=NETMAXBUFFERSIZE-3)
return ;
data = EzSockets::sm_htonl(data);
memcpy( &Data[Position], &data, 4 );
Position+=4;
}
void PacketFunctions::WriteNT(const RString& data)
{
size_t index=0;
while( Position<NETMAXBUFFERSIZE && index<data.size() )
Data[Position++] = (unsigned char)(data.c_str()[index++]);
Data[Position++] = 0;
}
void PacketFunctions::ClearPacket()
{
memset((void*)(&Data),0, NETMAXBUFFERSIZE);
Position = 0;
}
RString NetworkSyncManager::MD5Hex( const RString &sInput )
{
return BinaryToHex( CryptManager::GetMD5ForString(sInput) ).MakeUpper();
}
void NetworkSyncManager::GetListOfLANServers( vector<NetServerInfo>& AllServers )
{
AllServers = m_vAllLANServers;
}
static bool ConnectToServer( const RString &t )
{
NSMAN->PostStartUp( t );
NSMAN->DisplayStartupStatus();
return true;
}
extern Preference<RString> g_sLastServer;
LuaFunction( ConnectToServer, ConnectToServer( ( RString(SArg(1)).length()==0 ) ? RString(g_sLastServer) : RString(SArg(1) ) ) )
#endif
static bool ReportStyle() { NSMAN->ReportStyle(); return true; }
static bool CloseNetworkConnection() { NSMAN->CloseConnection(); return true; }
LuaFunction( IsSMOnlineLoggedIn, NSMAN->isSMOLoggedIn[Enum::Check<PlayerNumber>(L, 1)] )
LuaFunction( IsNetConnected, NSMAN->useSMserver )
LuaFunction( IsNetSMOnline, NSMAN->isSMOnline )
LuaFunction( ReportStyle, ReportStyle() )
LuaFunction( GetServerName, NSMAN->GetServerName() )
LuaFunction( CloseConnection, CloseNetworkConnection() )
/*
* (c) 2003-2004 Charles Lohr, Joshua Allen
* 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.
*/
-249
View File
@@ -1,249 +0,0 @@
#ifndef NetworkSyncManager_H
#define NetworkSyncManager_H
#include "PlayerNumber.h"
#include "Difficulty.h"
#include <queue>
class LoadingWindow;
const int NETPROTOCOLVERSION=4;
const int NETMAXBUFFERSIZE=1020; //1024 - 4 bytes for EzSockets
const int NETNUMTAPSCORES=8;
// [SMLClientCommands name]
enum NSCommand
{
NSCPing = 0,
NSCPingR, // 1 [SMLC_PingR]
NSCHello, // 2 [SMLC_Hello]
NSCGSR, // 3 [SMLC_GameStart]
NSCGON, // 4 [SMLC_GameOver]
NSCGSU, // 5 [SMLC_GameStatusUpdate]
NSCSU, // 6 [SMLC_StyleUpdate]
NSCCM, // 7 [SMLC_Chat]
NSCRSG, // 8 [SMLC_RequestStart]
NSCUUL, // 9 [SMLC_Reserved1]
NSCSMS, // 10 [SMLC_MusicSelect]
NSCUPOpts, // 11 [SMLC_PlayerOpts]
NSCSMOnline, // 12 [SMLC_SMO]
NSCFormatted, // 13 [SMLC_RESERVED1]
NSCAttack, // 14 [SMLC_RESERVED2]
XML, // 15 [SMLC_RESERVED3]
FLU, // 15 [SMLC_FriendListUpdate]
NUM_NS_COMMANDS
};
enum SMOStepType
{
SMOST_UNUSED = 0,
SMOST_HITMINE,
SMOST_AVOIDMINE,
SMOST_MISS,
SMOST_W5,
SMOST_W4,
SMOST_W3,
SMOST_W2,
SMOST_W1,
SMOST_LETGO,
SMOST_HELD
/*
,SMOST_CHECKPOINTMISS,
SMOST_CHECKPOINTHIT
*/
};
const NSCommand NSServerOffset = (NSCommand)128;
// TODO: Provide a Lua binding that gives access to this data. -aj
struct EndOfGame_PlayerData
{
int name;
int score;
int grade;
Difficulty difficulty;
int tapScores[NETNUMTAPSCORES]; //This will be a const soon enough
RString playerOptions;
};
enum NSScoreBoardColumn
{
NSSB_NAMES=0,
NSSB_COMBO,
NSSB_GRADE,
NUM_NSScoreBoardColumn,
NSScoreBoardColumn_Invalid
};
/** @brief A special foreach loop going through each NSScoreBoardColumn. */
#define FOREACH_NSScoreBoardColumn( sc ) FOREACH_ENUM( NSScoreBoardColumn, sc )
struct NetServerInfo
{
RString Name;
RString Address;
};
class EzSockets;
class StepManiaLanServer;
class PacketFunctions
{
public:
unsigned char Data[NETMAXBUFFERSIZE]; //Data
int Position; //Other info (Used for following functions)
int size; //When sending these pacs, Position should
//be used; NOT size.
//Commands used to operate on NetPackets
uint8_t Read1();
uint16_t Read2();
uint32_t Read4();
RString ReadNT();
void Write1( uint8_t Data );
void Write2( uint16_t Data );
void Write4( uint32_t Data );
void WriteNT( const RString& Data );
void ClearPacket();
};
/** @brief Uses ezsockets for primitive song syncing and score reporting. */
class NetworkSyncManager
{
public:
NetworkSyncManager( LoadingWindow *ld = nullptr );
~NetworkSyncManager();
// If "useSMserver" then send score to server
void ReportScore( int playerID, int step, int score, int combo, float offset );
void ReportScore(int playerID, int step, int score, int combo, float offset, int numNotes);
void ReportSongOver();
void ReportStyle(); // Report style, players, and names
void ReportNSSOnOff( int i ); // Report song selection screen on/off
void StartRequest( short position ); // Request a start; Block until granted.
RString GetServerName();
// SMOnline stuff
// FIXME: This should NOT be public. PERIOD.
void SendSMOnline( );
bool Connect( const RString& addy, unsigned short port );
void PostStartUp( const RString& ServerIP );
void CloseConnection();
void DisplayStartupStatus(); // Notify user if connect attempt was successful or not.
int m_playerLife[NUM_PLAYERS]; // Life (used for sending to server)
void Update( float fDeltaTime );
bool useSMserver;
bool isSMOnline;
bool isSMOLoggedIn[NUM_PLAYERS];
vector<int> m_PlayerStatus;
int m_ActivePlayers;
vector<int> m_ActivePlayer;
vector<RString> m_PlayerNames;
//friendlist
std::vector<RString> fl_PlayerNames;
std::vector<int> fl_PlayerStates;
// Used for ScreenNetEvaluation
vector<EndOfGame_PlayerData> m_EvalPlayerData;
// Used together:
bool ChangedScoreboard(int Column); // Returns true if scoreboard changed since function was last called.
RString m_Scoreboard[NUM_NSScoreBoardColumn];
// Used for chatting
void SendChat(const RString& message);
RString m_WaitingChat;
// Used for options
void ReportPlayerOptions();
// Used for song checking/changing
RString m_sMainTitle;
RString m_sArtist;
RString m_sSubTitle;
RString m_sFileHash;
int m_iSelectMode;
void SelectUserSong();
int GetServerVersion();
RString m_sChatText;
// FIXME: This should NOT be public. PERIOD. It probably shouldn't be a member at all.
PacketFunctions m_SMOnlinePacket;
StepManiaLanServer *LANserver;
int GetSMOnlineSalt();
RString MD5Hex( const RString &sInput );
void GetListOfLANServers( vector<NetServerInfo>& AllServers );
private:
#if !defined(WITHOUT_NETWORKING)
void ProcessInput();
SMOStepType TranslateStepType(int score);
void StartUp();
int m_playerID; // Currently unused, but need to stay
int m_step;
int m_score;
int m_combo;
int m_startupStatus; // Used to see if attempt was successful or not.
int m_iSalt;
bool m_scoreboardchange[NUM_NSScoreBoardColumn];
RString m_ServerName;
EzSockets *NetPlayerClient;
EzSockets *BroadcastReception;
vector<NetServerInfo> m_vAllLANServers;
int m_ServerVersion; // ServerVersion
PacketFunctions m_packet;
#endif
};
extern NetworkSyncManager *NSMAN;
#endif
/*
* (c) 2003-2004 Charles Lohr, Joshua Allen
* 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.
*/
-1
View File
@@ -24,7 +24,6 @@
#include "ActorUtil.h"
#include "ArrowEffects.h"
#include "Game.h"
#include "NetworkSyncManager.h" //used for sending timing offset
#include "DancingCharacters.h"
#include "ScreenDimensions.h"
#include "RageSoundManager.h"
-18
View File
@@ -10,10 +10,6 @@
#include "RageLog.h"
#include "SpecialFiles.h"
#if !defined(WITHOUT_NETWORKING)
#include "ver.h"
#endif
//DEFAULTS_INI_PATH = "Data/Defaults.ini"; // these can be overridden
//PREFERENCES_INI_PATH // overlay on Defaults.ini, contains the user's choices
//STATIC_INI_PATH = "Data/Static.ini"; // overlay on the 2 above, can't be overridden
@@ -316,20 +312,6 @@ PrefsManager::PrefsManager() :
m_bPseudoLocalize ( "PseudoLocalize", false ),
m_show_theme_errors("ShowThemeErrors", false)
#if !defined(WITHOUT_NETWORKING)
,
m_bEnableScoreboard ( "EnableScoreboard", true )
,
m_bUpdateCheckEnable ( "UpdateCheckEnable", true )
// TODO - Aldo_MX: Use PREFSMAN->m_iUpdateCheckIntervalSeconds & PREFSMAN->m_iUpdateCheckLastCheckedSecond
//,
//m_iUpdateCheckIntervalSeconds ( "UpdateCheckIntervalSeconds", 86400 ), // 24 hours
//m_iUpdateCheckLastCheckedSecond ( "UpdateCheckLastCheckSecond", 0 )
// TODO - Aldo_MX: Write helpers in LuaManager.cpp to treat unsigned int/long like LUA Numbers
//,
//m_uUpdateCheckLastCheckedBuild ( "UpdateCheckLastCheckedBuild", version_num )
#endif
{
Init();
ReadPrefsFromDisk();
-14
View File
@@ -323,20 +323,6 @@ public:
Preference<bool> m_bPseudoLocalize;
Preference<bool> m_show_theme_errors;
#if !defined(WITHOUT_NETWORKING)
Preference<bool> m_bEnableScoreboard; //Alows disabling of scoreboard in network play
// Check for Updates code
Preference<bool> m_bUpdateCheckEnable;
// TODO - Aldo_MX: Use PREFSMAN->m_iUpdateCheckIntervalSeconds & PREFSMAN->m_iUpdateCheckLastCheckedSecond
//Preference<int> m_iUpdateCheckIntervalSeconds;
//Preference<int> m_iUpdateCheckLastCheckedSecond;
// TODO - Aldo_MX: Write helpers in LuaManager.cpp to treat unsigned int/long like LUA Numbers
//Preference<unsigned long> m_uUpdateCheckLastCheckedBuild;
#endif
void ReadPrefsFromIni( const IniFile &ini, const RString &sSection, bool bIsStatic );
void ReadGamePrefsFromIni( const RString &sIni );
void ReadDefaultsFromIni( const IniFile &ini, const RString &sSection );
+10
View File
@@ -2809,6 +2809,16 @@ int LuaFunc_get_music_file_length(lua_State* L)
}
LUAFUNC_REGISTER_COMMON(get_music_file_length);
/* stubs for deprecated network functions */
LuaFunction(CloseConnection, false);
LuaFunction(ConnectToServer, false);
LuaFunction(GetServerName, std::string(""));
LuaFunction(IsNetConnected, false);
LuaFunction(IsNetSMOnline, false);
LuaFunction(IsSMOnlineLoggedIn, false);
LuaFunction(ReportStyle, false);
/*
* Copyright (c) 2001-2005 Chris Danford, Glenn Maynard
* All rights reserved.
-223
View File
@@ -1,223 +0,0 @@
#include "global.h"
#if !defined(WITHOUT_NETWORKING)
#include "RoomInfoDisplay.h"
#include "ActorUtil.h"
#include "NetworkSyncManager.h"
#include "LocalizedString.h"
AutoScreenMessage( SM_RoomInfoRetract );
AutoScreenMessage( SM_RoomInfoDeploy );
static LocalizedString LAST_ROUND_INFO ( "RoomInfoDisplay", "Last Round Info:" );
static LocalizedString ROOM_NAME ( "RoomInfoDisplay", "Room Name:" );
static LocalizedString ROOM_DESC ( "RoomInfoDisplay", "Room Description:" );
static LocalizedString SONG_TITLE( "RoomInfoDisplay", "Song Title:" );
static LocalizedString SONG_SUB_TITLE( "RoomInfoDisplay", "Song Subtitle:" );
static LocalizedString SONG_ARTIST( "RoomInfoDisplay", "Song Artist:" );
static LocalizedString PLAYERS( "RoomInfoDisplay", "Players" );
RoomInfoDisplay::RoomInfoDisplay() :
m_state( OPEN )
{
//No code
}
RoomInfoDisplay::~RoomInfoDisplay()
{
for (size_t i = 0; i < m_playerList.size(); i++)
{
this->RemoveChild(m_playerList[i]);
SAFE_DELETE(m_playerList[i]);
}
}
void RoomInfoDisplay::DeployInfoBox()
{
if (m_state == CLOSED)
{
ON_COMMAND( this );
m_state = OPEN;
}
}
void RoomInfoDisplay::RetractInfoBox()
{
if (m_state == OPEN)
OFF_COMMAND( this );
m_state = LOCKED;
}
void RoomInfoDisplay::Load( RString sType )
{
DEPLOY_DELAY.Load( sType, "DeployDelay" );
RETRACT_DELAY.Load( sType, "RetractDelay" );
PLAYERLISTX.Load( sType, "PlayerListElementX" );
PLAYERLISTY.Load( sType, "PlayerListElementY" );
PLAYERLISTOFFSETX.Load( sType, "PlayerListElementOffsetX" );
PLAYERLISTOFFSETY.Load( sType, "PlayerListElementOffsetY" );
m_bg.Load( THEME->GetPathG(m_sName,"Background") );
m_bg->SetName( "Background" );
this->AddChild( m_bg );
m_Title.LoadFromFont( THEME->GetPathF(sType,"text") );
m_Title.SetName( "RoomTitle" );
m_Title.SetShadowLength( 0 );
m_Title.SetHorizAlign( align_left );
LOAD_ALL_COMMANDS( m_Title );
ON_COMMAND( m_Title );
this->AddChild( &m_Title );
m_Desc.LoadFromFont( THEME->GetPathF(sType,"text") );
m_Desc.SetName( "RoomDesc" );
m_Desc.SetShadowLength( 0 );
m_Desc.SetHorizAlign( align_left );
LOAD_ALL_COMMANDS( m_Desc );
ON_COMMAND( m_Desc );
this->AddChild( &m_Desc );
m_lastRound.LoadFromFont( THEME->GetPathF(sType,"text") );
m_lastRound.SetName( "LastRound" );
m_lastRound.SetText( LAST_ROUND_INFO.GetValue() );
m_lastRound.SetShadowLength( 0 );
m_lastRound.SetHorizAlign( align_left );
LOAD_ALL_COMMANDS( m_lastRound );
ON_COMMAND( m_lastRound );
this->AddChild( &m_lastRound );
m_songTitle.LoadFromFont( THEME->GetPathF(sType,"text") );
m_songTitle.SetName( "SongTitle" );
m_songTitle.SetShadowLength( 0 );
m_songTitle.SetHorizAlign( align_left );
LOAD_ALL_COMMANDS( m_songTitle );
ON_COMMAND( m_songTitle );
this->AddChild( &m_songTitle );
m_songSub.LoadFromFont( THEME->GetPathF(sType,"text") );
m_songSub.SetName( "SongSubTitle" );
m_songSub.SetShadowLength( 0 );
m_songSub.SetHorizAlign( align_left );
LOAD_ALL_COMMANDS( m_songSub );
ON_COMMAND( m_songSub );
this->AddChild( &m_songSub );
m_songArtist.LoadFromFont( THEME->GetPathF(sType,"text") );
m_songArtist.SetName( "SongArtist" );
m_songArtist.SetShadowLength( 0 );
m_songArtist.SetHorizAlign( align_left );
LOAD_ALL_COMMANDS( m_songArtist );
ON_COMMAND( m_songArtist );
this->AddChild( &m_songArtist );
m_players.LoadFromFont( THEME->GetPathF(sType,"text") );
m_players.SetName( "Players" );
m_players.SetShadowLength( 0 );
m_players.SetHorizAlign( align_left );
LOAD_ALL_COMMANDS( m_players );
ON_COMMAND( m_players );
this->AddChild( &m_players );
LOAD_ALL_COMMANDS( this );
this->PlayCommand("Off");
FinishTweening();
m_state = LOCKED;
}
void RoomInfoDisplay::SetRoom( const RoomWheelItemData* roomData )
{
RequestRoomInfo(roomData->m_sText);
m_Title.SetText( ROOM_NAME.GetValue() + roomData->m_sText );
m_Desc.SetText( ROOM_DESC.GetValue() + roomData->m_sDesc );
}
void RoomInfoDisplay::Update( float fDeltaTime )
{
if ((m_deployDelay.PeekDeltaTime() >= DEPLOY_DELAY) && (m_deployDelay.PeekDeltaTime() < (DEPLOY_DELAY + RETRACT_DELAY)))
DeployInfoBox();
else if (m_deployDelay.PeekDeltaTime() >= DEPLOY_DELAY + RETRACT_DELAY)
RetractInfoBox();
ActorFrame::Update(fDeltaTime);
}
void RoomInfoDisplay::RequestRoomInfo(const RString& name)
{
NSMAN->m_SMOnlinePacket.ClearPacket();
NSMAN->m_SMOnlinePacket.Write1((uint8_t)3); //Request Room Info
NSMAN->m_SMOnlinePacket.WriteNT(name);
NSMAN->SendSMOnline( );
}
void RoomInfoDisplay::SetRoomInfo( const RoomInfo& info)
{
m_songTitle.SetText( SONG_TITLE.GetValue() + info.songTitle );
m_songSub.SetText( SONG_SUB_TITLE.GetValue() + info.songSubTitle );
m_songArtist.SetText( SONG_ARTIST.GetValue() + info.songArtist );
m_players.SetText(ssprintf("%s (%d/%d):", PLAYERS.GetValue().c_str(), info.numPlayers, info.maxPlayers));
if (m_playerList.size() > info.players.size())
{
for (size_t i = info.players.size(); i < m_playerList.size(); i++)
{
//if our old list is larger remove some elements
this->RemoveChild(m_playerList[i]);
SAFE_DELETE(m_playerList[i]);
}
m_playerList.resize(info.players.size());
}
else if (m_playerList.size() < info.players.size())
{
//add elements if our old list is smaller
int oldsize = m_playerList.size();
m_playerList.resize(info.players.size());
for (size_t i = oldsize; i < m_playerList.size(); i++)
{
m_playerList[i] = new BitmapText;
m_playerList[i]->LoadFromFont( THEME->GetPathF(GetName(),"text") );
m_playerList[i]->SetName("PlayerListElement");
m_playerList[i]->SetHorizAlign( align_left );
m_playerList[i]->SetX(PLAYERLISTX + (i * PLAYERLISTOFFSETX));
m_playerList[i]->SetY(PLAYERLISTY + (i * PLAYERLISTOFFSETY));
LOAD_ALL_COMMANDS(m_playerList[i]);
ON_COMMAND(m_playerList[i]);
this->AddChild(m_playerList[i]);
}
}
for (size_t i = 0; i < m_playerList.size(); i++)
m_playerList[i]->SetText(info.players[i]);
m_state = CLOSED;
m_deployDelay.Touch();
}
#endif
/*
* (c) 2006 Josh Allen
* 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.
*/
-79
View File
@@ -1,79 +0,0 @@
/* RoomInfoDisplay: Shows information about an online game room. */
#ifndef ROOM_INFO_DISPLAY_H
#define ROOM_INFO_DISPLAY_H
#include "RoomWheel.h"
#include "ActorFrame.h"
class RoomInfoDisplay : public ActorFrame
{
public:
RoomInfoDisplay();
~RoomInfoDisplay();
virtual void Load( RString sType );
virtual void Update( float fDeltaTime );
void SetRoom( const RoomWheelItemData* roomData );
void SetRoomInfo( const RoomInfo& info);
void DeployInfoBox();
void RetractInfoBox();
private:
void RequestRoomInfo(const RString& name);
enum RoomInfoDisplayState
{
OPEN = 0,
CLOSED,
LOCKED
};
RoomInfoDisplayState m_state;
AutoActor m_bg;
BitmapText m_Title;
BitmapText m_Desc;
BitmapText m_lastRound;
BitmapText m_songTitle;
BitmapText m_songSub;
BitmapText m_songArtist;
BitmapText m_players;
vector<BitmapText*> m_playerList;
RageTimer m_deployDelay;
ThemeMetric<float> X;
ThemeMetric<float> Y;
ThemeMetric<float> DEPLOY_DELAY;
ThemeMetric<float> RETRACT_DELAY;
ThemeMetric<float> PLAYERLISTX;
ThemeMetric<float> PLAYERLISTY;
ThemeMetric<float> PLAYERLISTOFFSETX;
ThemeMetric<float> PLAYERLISTOFFSETY;
};
#endif
/*
* (c) 2006 Josh Allen
* 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.
*/
-248
View File
@@ -1,248 +0,0 @@
#include "global.h"
#include "RoomWheel.h"
#include "RageLog.h"
#include "RageUtil.h"
#include "ScreenTextEntry.h"
#include "LocalizedString.h"
#include "NetworkSyncManager.h"
#include "ScreenManager.h"
#include "ActorUtil.h"
#include "LocalizedString.h"
static LocalizedString EMPTY_STRING ( "RoomWheel", "Empty" );
AutoScreenMessage( SM_BackFromRoomName );
AutoScreenMessage( SM_RoomInfoRetract );
AutoScreenMessage( SM_RoomInfoDeploy );
RoomWheel::~RoomWheel()
{
for (WheelItemBaseData *i : m_CurWheelItemData)
{
SAFE_DELETE( i );
}
m_CurWheelItemData.clear();
}
void RoomWheel::Load( RString sType )
{
WheelBase::Load( sType );
m_offset = 0;
LOG->Trace( "RoomWheel::Load('%s')", sType.c_str() );
AddPermanentItem( new RoomWheelItemData(WheelItemDataType_Generic, "Create Room", "Create a new game room", THEME->GetMetricC( m_sName, "CreateRoomColor")) );
BuildWheelItemsData( m_CurWheelItemData );
RebuildWheelItems();
}
WheelItemBase *RoomWheel::MakeItem()
{
return new RoomWheelItem;
}
RoomWheelItem::RoomWheelItem( RString sType ):
WheelItemBase( sType )
{
Load( sType );
}
RoomWheelItem::RoomWheelItem( const RoomWheelItem &cpy ):
WheelItemBase( cpy ),
m_sprNormalPart( cpy.m_sprNormalPart ),
m_sprColorPart( cpy.m_sprColorPart ),
m_sprOverPart( cpy.m_sprOverPart ),
m_text( cpy.m_text ),
m_Desc( cpy.m_Desc )
{
if( cpy.GetNumChildren() != 0 )
{
this->AddChild( m_sprNormalPart );
this->AddChild( m_sprColorPart );
this->AddChild( m_sprOverPart );
this->AddChild( &m_text );
this->AddChild( &m_Desc );
}
}
void RoomWheelItem::Load( RString sType )
{
// colorpart gets added first in MusicWheelItem, so follow that here.
m_sprColorPart.Load( THEME->GetPathG(sType,"ColorPart") );
this->AddChild( m_sprColorPart );
m_sprNormalPart.Load( THEME->GetPathG(sType,"NormalPart") );
this->AddChild( m_sprNormalPart );
m_text.SetName( "Text" );
m_text.LoadFromFont( THEME->GetPathF(sType,"text") );
LOAD_ALL_COMMANDS_AND_SET_XY( m_text );
this->AddChild( &m_text );
m_Desc.SetName( "Description" );
m_Desc.LoadFromFont( THEME->GetPathF("RoomWheel","text") );
LOAD_ALL_COMMANDS_AND_SET_XY( m_Desc );
this->AddChild( &m_Desc );
m_sprOverPart.Load( THEME->GetPathG(sType,"OverPart") );
this->AddChild( m_sprOverPart );
}
void RoomWheel::BuildWheelItemsData( vector<WheelItemBaseData*> &arrayWheelItemDatas )
{
if( arrayWheelItemDatas.empty() )
arrayWheelItemDatas.push_back( new RoomWheelItemData(WheelItemDataType_Generic, EMPTY_STRING, "", RageColor(1,0,0,1)) );
}
void RoomWheel::AddPermanentItem( RoomWheelItemData *itemdata )
{
++m_offset;
AddItem( itemdata );
}
void RoomWheel::AddItem( WheelItemBaseData *pItemData )
{
m_CurWheelItemData.push_back( pItemData );
int iVisible = FirstVisibleIndex();
int iIndex = m_CurWheelItemData.size();
if( m_bEmpty )
{
m_bEmpty = false;
// Remove the - Empty - field when we add an object from an empty state.
RemoveItem( 0 );
}
// If the item was shown in the wheel, rebuild the wheel
if( 0 <= iIndex - iVisible && iIndex - iVisible < NUM_WHEEL_ITEMS )
RebuildWheelItems();
}
void RoomWheel::RemoveItem( int index )
{
index += m_offset;
if( m_bEmpty || index >= (int)m_CurWheelItemData.size() )
return;
vector<WheelItemBaseData *>::iterator i = m_CurWheelItemData.begin();
i += index;
// If this item's data happened to be last selected, make it nullptr.
if( m_LastSelection == *i )
m_LastSelection = nullptr;
SAFE_DELETE( *i );
m_CurWheelItemData.erase( i );
if( m_CurWheelItemData.size() < 1 )
{
m_bEmpty = true;
m_CurWheelItemData.push_back( new WheelItemBaseData(WheelItemDataType_Generic, "- EMPTY -", RageColor(1,0,0,1)) );
}
RebuildWheelItems();
}
static LocalizedString ENTER_ROOM_NAME( "RoomWheel", "Enter room name" );
bool RoomWheel::Select()
{
SCREENMAN->PostMessageToTopScreen( SM_RoomInfoRetract, 0 );
if( m_iSelection > 0 )
return WheelBase::Select();
if( m_iSelection == 0 )
{
// Since this is not actually an option outside of this wheel, nullptr is a good idea.
m_LastSelection = nullptr;
ScreenTextEntry::TextEntry( SM_BackFromRoomName, ENTER_ROOM_NAME, "", 255 );
}
return false;
}
void RoomWheelItem::LoadFromWheelItemData( const WheelItemBaseData *pWID, int iIndex, bool bHasFocus, int iDrawIndex )
{
WheelItemBase::LoadFromWheelItemData( pWID, iIndex, bHasFocus, iDrawIndex );
m_text.SetText( pWID->m_sText );
m_text.SetDiffuseColor( pWID->m_color );
const RoomWheelItemData *tmpdata = dynamic_cast<const RoomWheelItemData*>( pWID );
WheelItemBase::LoadFromWheelItemData( pWID, iIndex, bHasFocus, iDrawIndex );
m_Desc.SetText( tmpdata->m_sDesc );
m_Desc.SetDiffuseColor( pWID->m_color );
m_sprColorPart->SetDiffuse( pWID->m_color );
}
void RoomWheel::Move( int n )
{
if( n == 0 && m_iSelection >= m_offset )
{
const RoomWheelItemData* data = GetItem( m_iSelection-m_offset );
if( data != nullptr )
SCREENMAN->PostMessageToTopScreen( SM_RoomInfoDeploy, 0 );
}
else
{
SCREENMAN->PostMessageToTopScreen( SM_RoomInfoRetract, 0 );
}
WheelBase::Move( n );
}
unsigned int RoomWheel::GetNumItems() const
{
return m_CurWheelItemData.size() - m_offset;
}
// lua start
#include "LuaBinding.h"
class LunaRoomWheel : public Luna<RoomWheel>
{
public:
static int Move(T* p, lua_State *L)
{
if (lua_isnil(L, 1)) { p->Move(0); }
else
{
p->Move(IArg(1));
}
return 1;
}
LunaRoomWheel()
{
ADD_METHOD(Move);
}
};
LUA_REGISTER_DERIVED_CLASS(RoomWheel, WheelBase)
// lua end
/*
* (c) 2004 Josh Allen
* 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.
*/
-98
View File
@@ -1,98 +0,0 @@
/* RoomWheel - A wheel containing data about rooms. */
#ifndef ROOM_WHEEL_H
#define ROOM_WHEEL_H
#include "WheelBase.h"
#include "WheelItemBase.h"
#include "ThemeMetric.h"
struct RoomWheelItemData : public WheelItemBaseData
{
RoomWheelItemData() : m_iFlags(0) { }
RoomWheelItemData( WheelItemDataType type, const RString& sTitle, const RString& sDesc, RageColor color ):
WheelItemBaseData( type, sTitle, color ), m_sDesc(sDesc), m_iFlags(0) { };
RString m_sDesc;
unsigned int m_iFlags;
};
class RoomWheelItem : public WheelItemBase
{
public:
RoomWheelItem( RString sType = "RoomWheelItem" );
RoomWheelItem( const RoomWheelItem &cpy );
void Load( RString sType );
virtual void LoadFromWheelItemData( const WheelItemBaseData* pWID, int iIndex, bool bHasFocus, int iDrawIndex );
virtual RoomWheelItem *Copy() const { return new RoomWheelItem(*this); }
private:
AutoActor m_sprNormalPart;
AutoActor m_sprColorPart;
AutoActor m_sprOverPart;
BitmapText m_text;
BitmapText m_Desc;
};
struct RoomInfo
{
RString songTitle;
RString songSubTitle;
RString songArtist;
int numPlayers;
int maxPlayers;
vector<RString> players;
};
class RoomWheel : public WheelBase
{
public:
virtual ~RoomWheel();
virtual void Load( RString sType );
virtual void BuildWheelItemsData( vector<WheelItemBaseData*> &arrayWheelItemDatas );
virtual unsigned int GetNumItems() const;
virtual bool Select();
virtual void Move( int n );
inline RoomWheelItemData *GetItem( unsigned int i ) { return dynamic_cast<RoomWheelItemData*>( WheelBase::GetItem(i + m_offset) ); }
void AddPermanentItem( RoomWheelItemData *itemdata );
int GetCurrentIndex() const { return m_iSelection; }
int GetPerminateOffset() const { return m_offset; }
void AddItem( WheelItemBaseData *itemdata );
void RemoveItem( int index );
// Lua
void PushSelf(lua_State *L);
private:
virtual WheelItemBase *MakeItem();
int m_offset;
};
#endif
/*
* (c) 2004 Josh Allen
* 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.
*/

Some files were not shown because too many files have changed in this diff Show More