Remove legacy network code
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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:
|
||||
================================================================================
|
||||
|
||||
@@ -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
|
||||
@@ -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,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
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
@@ -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'/>
|
||||
|
||||
@@ -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'>
|
||||
|
||||
@@ -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
|
||||
@@ -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 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
|
||||
|
||||
@@ -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 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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 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
|
||||
|
||||
@@ -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 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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 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
|
||||
|
||||
@@ -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 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 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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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=每局 所需幣數
|
||||
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=按專輯 排序
|
||||
Network Options=網路選項
|
||||
No USB memory cards found=找不到USB記憶卡
|
||||
NoteSkins=箭頭樣式
|
||||
NumBackgrounds=隨機背景 使用數量
|
||||
@@ -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,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
@@ -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"
|
||||
|
||||
@@ -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 |
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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})
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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"
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -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
Reference in New Issue
Block a user