Recent Changes of Soccer Server [4.21] * Shuffle the order of recv_from for of clients to equalize chances of kicking ball. * When the soccerserver runs with "-send_log off" option, then the server does not send information about communication between the server and clients to soccermonitors. This option reduces network trafic. * When the soccermonitor runs with "-eval on" option, then the server runs as evaluation mode. In the evaluation mode, a user can discard a player from the pull-down menu on the monitor. [4.20] * Official Version used in RoboCup98 Paris [4.17] * Install team `bench's. Now, 11 players of each team are standing at their bench even before (init) commands are received. When the server receives a (bye) command, it move the player to the bench. * The server does not receive (reconnect) commands in play-on mode. * The server saves rediced-size logfile. This algorithm is contributed by Mr. Klaus Dorer (klaus@cognition.iig.uni-freiburg.de). You can select the old format of logfile and Klaus's format by a new option "-record_version [1|2]", where '1' is old format and '2' is Klaus's format. [4.16] * Offside is called in the following condition. + An offside player aproachs to the ball in 9.15m. + The offside player is the nearest player in the offending team. * When offside is called, the server restarts the match from the nearest point on the offside line from the position where the offside player was when the passer kicked the ball. * Add the following flags about collision to the protocol from soccerserver to soccermonitor: dinfo.body.show.pos[i].enable = PLAYER_TO_BALL (0x40) BALL_TO_PLAYER (0x80) [4.14] * Inertia moment parameter (IMPARAM in source of the previous version) becomes a command-line parameter named "inertia_moment". * The referee restarts a match after 'offside' from position where the offending player was when the passer kicked the ball. * Add play-modes for offside. When 'offside' occers, the server changes the playmode to "offside_l" or "offside_r" (referee's message), and suspend the match 3 seconds, with a popup window, and restart the match. The following new options are introduced: -offside_label_width WIDTH -offside_label_font FONT * Change the name of an option "-print_goal" to "-popup_msg". When "-popup_msg on", the server displays both popup windows of "Goal!!" and "Offside!". Else, the server does not use popup windows. Default is "on". * New option "-ball_file FILE", which specifies the file of a bitmap picture of ball, is introduced. * Soccermonitor display kicking players with double circle, and catching goalies with filled circle. * Goalies are displayed different color. You can specify the color by "-goalie_l_color COLOR" and "-goalie_r_color COLOR" option. * Equation about stamina written in [4.00] is wrong. /* consume stamina by dash */ effective_dash_power = effort * dash_power stamina -= effective_dash_power should be /* consume stamina by dash */ effective_dash_power = effort * dash_power stamina -= fabs(dash_power) [4.12] * Used RoboCup Japan Open 98. [4.08] * New command line option "-verbose [on/off]" is introduced. Then soccerserver is invoked with "-verbose on" then the server reports some trouble-messages like "recvfrom error". If "-verbose off" then the server does not reports such warning. The default is "off". [4.04] * Speed value in sense_body is quantized by 0.01. * New flags introduced in version 4 are invisible for clients who init by version 3.0. * Clients can not specify goalie mode or version at 'reconnect'. * Null char is written '\000' instead of 'NULL'. * The server warns when a client use too long teamname in 'init'. * '-nowindow' and '-nw' for logplayer' option are the same. * The server does not return '(error unknow_command)' when a client sends more than one command in a simulation cycle. [4.03a,b] * Change the formula to decide kick_power_rate as follows: kick-power-rate := max-kick-power-rate * (1 - 0.25 * |dirDiference|/180 - 0.25 * (distBallPlayer - BallSize - PlayerSize)/ kick_margin) * No window mode of logplayer. When logplayer is invoked with -nowindow option, it start without window and accept commands from the standard input. Possible commands are as follows: play [FROM] [to TO] Play from FROM to TO in normal speed. If FROM > TO, it plays backword. FROM and TO should be integer, 'here'(current counter), or 'end' (last of the log). feed to TO Feed forward until TO. When TO is less than the current counter, It rewind to TO. feed {+|-}COUNT Feed {+|-}COUND steps. jump to TO Jump to TO without displaying. jump {+|-}COUNT Jump to {+|-}COUNT without displaying. step [COUNT] play COUNT steps. sleep SECOND sleep SECOND seconds. SECOND should be positive integer or forever. quit quit and finish loplayer. [4.02] * Kick command accerelate the velosity of the ball rather than sets it. * Maximum ball speed is introduced. max_ball_speed = 32 When the ball speed becomes larger than this, the speed is reduced to this maximum speed. Player also have a maximum speed. * 'kick_power_rate' is calculated in the following way. kick-power-rate := max-kick-power-rate * (1 - 0.25 * |dirDifference|/180 - 0.25 * distBallPlayer / controlRadiusWidth where dirDifference := the angle between the view direction of the player and the ball position distBallPlayer := the distance between the edge of the player and the ball controlRadiusWidth := control_radius - player_size * 'sense_body' information includes the following information: (kick KICK_COUNT) (dash DASH_COUNT) (turn TURN_COUNT) (say SAY_COUNT) Each of them tell how many commands are executed. * `goalie_catch_probability', the probability that a goalie succeed to catch the ball by a catch command is introduced. (default is 1) [4.00] [Major Changes] * Version control by init command. When a client connects the server with '(init TEAMNAME (version 4.00))', the server uses the new protocols for the client. If the client sends only '(init TEAMNAME)' then the server uses the old (version 3.2x) protocol. * Goalie When a client connects the server with '(init TEAMNAME (goalie)', the client becomes a goalies. The goalie can use '(catch DIR)' command that enable to capture the ball in the following rectangle area: ___ ********** | G********* W ---> DIR ********** | ~~~ |<---L--->| where W : GOALIE_CATCHABLE_AREA_W (default 1) L : GOALIE_CATCHABLE_AREA_L (default 2) The goalie can not use catch commands GOALIE_CATCH_DEC cycles after it uses a catch command. Only a goalie is available in a team. * Kick command set the ball velocity rather than accelerate it. * A new command, 'sense_body', which tells internal status of a player in the following way: (sense_body) -> (sense_body TIME (view_mode QUALTY WIDTH) (stamina STAMINA EFFORT) (speed AMOUNT_OF_SPEED)) * The server executes one of kick, turn or dash command in a simulation cycle. Other commands (say, change_view, sense_body) are executable in the same cycle. * Offside rule is introduced. The algorithm is as follows: (1) When a player of team-X kick a ball, players of team-X in offside position are marked ``offside''. (2) When a player marked ``offside'' try to kick the ball, the referee judges ``offside!!''. (3) ``offside'' mark is cleared by each effective kick. where, `offside options' is: (1) in the opponent side (2) between the ball and the opponent goal line (3) between the second defending player and the goal line. The user can turn off this offside rule by '-use_offside off' option. * Long term stamina is introduced as follows /* recover-stamina phase */ if( stamina <= 0.3*max_stamina ){ if( recovery <= 0.1 ){ /* do nothing */; else recovery -= .05; if( stamina <= 0.4*max_stamina ){ if( effort <= 0.1 ) /* do nothing */; else effort -= .05; if( stamina >= 0.9*max_stamina ){ if( effort >= 1.0 ){ /* do nothing */; else effort += .05; stamina += recovery * maximum_recovery /* consume stamina by dash */ effective_dash_power = effort * dash_power stamina -= effective_dash_power * New Landmarks center mark (flag c) goal posts (flag g l t) left-top (flag g l b) left-bottom (flag g r t) right-top (flag g r b) right-bottom flags outside of the pitch (flag TB LR XX) (flag LR TB YY) TB ::= [t|b] LR ::= [l|r] XX ::= [10|20|30|40|50] YY ::= [10|20|30] (flag TBLR 0) TBLR ::= [t|b|l|r] These flags are located at 5 meter outside from the edge of the pitch. For example, (flag t l 20) is 5 meters above from the top touch line and 20 meters left from the center line. In the same way (flag r b 10) is 5 meters right from the right goal line and 10 meters below from the center of right goal. In the similar way, (flag b 0) is 5 meters below from the midpoint of bottom touch line, and (flag l 0) is 5 meters left from the center of the left goal. * Default visual sensing time is 150ms. * Visual information about a player tells its facing direction in the following format. ((player TEAMNAME UNUM) DISTANCE DIRECTION DISTCHANGE DIRCHANGE FACEDIR) where FACEDIR is the relative facing direction. For example, P=> <=Q ... Q's FACEDIR is 180 P=> Q ... Q's FACEDIR is 90 v [3.32] * UDP port number used in logplayer is changed by -port PORT option.