Manuel Moos: Speeding up default server pinging by a factor of two. Should still not totally break down on ISDN or fast dialup, definitely no problem for crappy WLAN or even the slowest form of DSL.
Manuel Moos: Fixed bug where a round would go on forever if the last survivors where AIs outliving their humans by quite a bit, then getting killed sufficiently simultaneously.
Daniel Lee Harple: Do not extract whitespace from authentication params using std::ws()ΓÇöit will not stop at a newline character. tString::ReadLine() will extract whitespace in the behavior we expect. Fixes bug #492844.
committer: Daniel Lee Harple <leeharple@gmail.com>
branch nick: 0.2.8-armagetronad-shufflespam
timestamp: Thu 2009-06-18 23:53:26 +0200
message:
Players can no longer spam chat with /shuffle messages. Added new setting SHUFFLE_SPAM_MESSAGES_PER_ROUND, a per round, per player limit on the number of shuffle messages displayed.
Daniel Lee Harple: eUserConfig commands, such as USER_LEVEL and RESERVE_SCREEN_NAME now exit immediately and show usage if the first argument, the username, is not given.
Daniel Lee Harple: Enabled sound again. Be sure to update to latest osxlibs package from https://sourceforge.net/project/showfiles.php?group_id=110997&package_id=266788
epsy: have batch/make/version make use of bzr if path is versionned, putting in version, when appliable, revno, tag, and build date(when working tree is modified)
* Fix subdirectory handling for shorthand authorities
* Have PLAYER_MESSAGE retrieve the message to be sent using operator >> instead of tString::ReadLine, allowing use of newlines but forcing the use of quotes
Manuel Moos: Fixed playback errros when browsing the master list; duplicate server entries were not taken care of on playback, only while recording, causing a mismatch of network message IDs later.
No more client state changes in display lists or list deletions in glBegin/glEnd blocks (both should have been harmless, but the list deletions definitely were outside of the GL specs.
Added python script checking bugle trace logs for stuff like that.
epsy46: /op would complain that the admin's "victim is already at maximal rights" when /op'ping an auth'd player without an access level as argument, trough the player could be still promoted
epsy46: TEAM_ELIMINATION_MODE defines the way ArmagetronAd should eliminate teams when there's more teams than TEAMS_MAX: Set to 0 it will try to keep as many players as possible, kicking teams that have the lowest score if teams are balanced; Set to 1 it will try to keep the best team colors (Team blue, then Team gold, then Team red, etc); Set to 2 it will kick out the teams that have the lowest score, regardless of balance. Copy-paste ftw.
epsy46: NEVER try « generic socks » when GLOBAL_ID is on if connection to a master server fails, otherwise it can generate weird mismatches when authing. This fixes bug #220195
* se_SecretConsoleOut is now _way_ more polyvalent
* Forcing an UpdateName() upon auth
* Admin commands are now logged with username(or (G)?ID, if the user is logged in), and are showed to everyone in the server who have an access level better than ACCESS_LEVEL_SPY_CONSOLE
* (very minor) ./bootstrap.sh is now less intrusive regarding +x flagging
wrtlprnft: Put the code to log score differences and the code to update the suspend count into separate functions. Needed for the sty+ct branch and I guess it's a good idea to minimize confusing function names :-)
wrtlprnft: replaced strnlen by our own implementation because it's nonstandard. If anyone knows how to use the (probably optimized) glibc version if it exists, please do it :-)
wrtlprnft: made use of the new 0xRESETT tColorStringProxies. Also removed a lot of tabs that made the code unreadable at tabstop=4 (unfortunately we settled to use spaces for indentation, I agree that using tabs at the beginning of lines would have been way better)
wrtlprnft: fixed a typo, removed useless 0xRESETT and an access level setter to Administrator (that's the default), and documented some changes in NEWS
epsy46: AUTO_TEAM_SPEC_SPAM will hide spectator joins/part messages, as it's generally annoying in the contextts it is used in, mostly important matches and such.
wrtlprnft: Added settings to separately enable/disable all ladderlog outputs. Currently all are enabled by default, but this may change for further additions.
Aborting gameobject move if only horribly bad exit edges can be found for the current face. This is to combat floating point inaccuracies in eFace::IsInside(), it can happen that a given point is not considered to be inside any face of the grid.
Manuel Moos: Implemented wrtl's suggestion of reduced spam level for /team messages, and also reducing the time during which you cannot say the same thing twice by the same factor.
wrtlprnft: /rtfm now respects serverside silencing and the spam protection, plus there's an announcement to everyone if someone uses it (but only the sender and receiver get spammed with the complete help text, of course). I don't really understand the code to make a message silencable by the client, though :-(
Manuel Moos: MIN_VOTERS now correctly applied to votes that not everyone can technically vote on. The messages are still a bit strange (first, it looks as if the vote got accepted as a valid vote), but we'll have to live with that (or duplicate some code).
Manuel Moos: Fixed team menu bugs: "Join any/create new" is now always there when it makes sense, and team properties get updated on the client when players switch teams, so there will be no more spurious "Join x" messages on non-team servers.
Manuel Moos: Added "spectate" item to team management menu, and spectator mode is only turned off after you join a team, not right when you enter the menu.
Added WAIT_FOR_EXTERNAL_SCRIPT, a feature found in armahacktron that facilitates stdio scripting. Thanks epsy for isolating it from the rest of armahacktron
Strings get excess zeroes clamped away before they are written over the net. This fixes sporadic network message length discrepancies on playback. I hope the extra zeroes don't do harm elsewhere (string comparison is safe).
Manuel Moos: If the team owning a zone is dead at round end, the zone does not collapse harmlessly; instead, it gets "touchy" and will collapse at the slightest contact with an enemy.
Manuel Moos: Shuffled around access levels. Authenticated now is all on the bottom, only barely above "Program". Default access level for remote users stays 15, only that it's now named "Remote User".
Manuel Moos: Added two access levels below authenticated that you can USER_LEVEL players to; intended to be used to take away rights authenticated players usually get (like, starting votes) for selected users.
Avoiding redundant wall coordinates during holing. This makes the holer information a bit inaccurate; if someone "enlarges" a reviously existing hole, it will belong entirely to him, and not just the new bits.
Duplicating last wall coordinate on Update() if there was a hole up to the wall end; this avoids "dragging" the hole along.
Manuel Moos: Another workaround attempt for the "perfectly stable" OS ATI driver :) Same problem as last time, glColor() call at the end of a glBegin()/glEnd() block.
Manuel Moos: Allow canceling the current display list; use that when textures are loaded. Previously, the texture upload was also recorded in the display list, which was a waste of memory.
Manuel Moos: Fixed rendering errors with zones: they and other alpha blended game objects are always (well, single frame exceptions are allowed) rendered last.
Manuel Moos: Added support for authority "blurb" messages. Authorities can append lines to the "PASSWORD_OK" response, and those lines will be transformed and logged in ladderlog.txt.
Manuel Moos: Added support for authority "blurb" messages. Authorities can append lines to the "PASSWORD_OK" response, and those lines will be transformed and logged in ladderlog.txt.
Manuel Moos: Disabled support for antialiasing and perspective correction settings. Antialiasing never worked properly anyway, and disabling perspective correction is just stupid :)
Manuel Moos: Fixed GL errors and fixed the generation of the player wall collective display list; every wall there was rendered twice and with suboptimal primitive order :)
wrtlprnft: Fixed color overflow in the configuration change message (hi there K-Yo!). I hope z-man doesn't rip my head off for removing yet another color code related bug that he can use as proof that color codes aren't officially supported (they're still not!)
Manuel Moos: Hmm, odd rendering height bug for the rim walls. It seems the code renders them wrongly the first time around. Oh well, let's just create the display list some frames into the round :)
Manuel Moos: Performance improvement: the cycle now triggers rendering of its walls, the renderer does not have to traverse all walls (and render them multiple times).
* Fixed dedicated compilation by adding a "Copy Headers" build phase to every target with the correct config.h for that target. The file's role is set to Project so it doesn't actually get copied. The other solution attempts failed: tried putting the src/macosx/dedicated or src/macosx/client folder in the search path for each respective target, and header files aren't members of a target so we couldn't exclude them (annoying).
* Enabled auth server support on server
* Enabled ZThread support in both client and server
Write a SACRIFICE message into ladderlog containing the player who used the hole, the player who went through it and the player who got holed, in that order.
Added a new flag that allows users to specify whether they want their identity to be hidden.
Maybe the serverside handling of it can be improved a bit by allowing users (like administrators) to only hide their access level without hiding their ID.
MOVE_TO no longer calls nMachine::OnKick; although it did so with zero severity, and that should have had no effect, it's better not to call it at all.
Authentication changes are now visible in /players output right away; /logout and /login in the same round should no longer enforce keeping the authority.
Dunno if this is a very good idea, but it saves you one keystroke:
If there's one of those enter password dialogs and the name that's suggested by the server matches a global ID (from any player) the password field is selected, otherwise it's the username field. Useful if you don't want to trust your password to user.cfg but still comfortably log in.
Removed fallback to bmd5 when the authority did not return a method list, all protocol-non-compilance errors are now fatal and give meaningful error messages (I hope).
Short network messages are now ignored and don't cause disconnection.
Logins are secured with an additional random token, making it harder to inject fake login accept packets with a wrong IP to circumvent the anti-pharming code.
Spectating admins can now see /team messages, and really high level admins can always see /msg messages (they can read them in the logs already). All configurable, of course.
text input fields now let the text wrap correctly and make use of the space allocated for them in a not-completely-dumb way. And *sigh* depending on the text field, color codes are either ignored (for the usernames) or both displayed in text and rendered.
"KICK 2pack" no longer kicks user 2 instead of player 2pack.
all admin commands now also accept partial name matches, like /msg, and check for case sensitive matches in the screen name first, then the user name, then case insensitive matches in the two.
Added authority black/whitelists.
Debug recordings now work with authentication and are safe to share, no secret information is recorded.
Better screen name reservation; previously, "RESERVE_SCREEN_NAME Z-Man" would have had no effect, because the nickname is compared to the FILTERED name of players; so now the reserved name is filtered as well.
Added UI elements and non-chat based authentication initiation: in the player setup, there is a Global ID text item and an Auto Login toggle, and in the game menu, if on supporting servers, an Authenticate trigger.
Filtering port, only to realize that nanohttp does not handle the port correctly anyway. Lowercasing the file path part of the authority for reference, lookup is done with the original.
Better virtual RemoveFromGame logic for eGameObjects, derived classes now don't have to worry about things like removing themselves from the lists or clearing the current grid face (forgetting that has ugly effects).
Added PLAYER_RANDOM_COLOR to randomly pick a collor every round.
The new pick gets rejected if it is closer to the other players' colors than the old color, so the thing stabilizes you to a unique color after a while.
Servers that are no longer listed on the master servers are no longer shown. This should get rid of the huge list of unreachable servers people report sometimes.
ΓÇó Only build for native architecture in dedicated ΓÇ£DebugΓÇ¥ builds as well.
ΓÇó Remove package files build step from dedicated target
• Pass in useful command-line arguments for dedicated target (--datadir, etc…)
ΓÇó Added ΓÇ£Create Client ReleaseΓÇ¥, ΓÇ£Create Dedicated ReleaseΓÇ¥, and ΓÇ£Create Full ReleaseΓÇ¥ targets. The disk images are placed in $BUILT_PRODUCTS_DIR (build/Release usually).
The ΓÇ£Create Client ReleaseΓÇ¥ target checks to see if you have an $AA_RECORDER_APP environment variable set, and if you do the recorder app will be included in the disk image. For example I have in my .bash_profile:
r7369 | z-man | 2007-11-11 23:12:10 +0100 (Sun, 11 Nov 2007) | 1 line
Well, the new timer code did the same as the old one, so instead of activating it, the high resolution timer is now dropped in favor of the old low resolution timer (which is then smoothed) if the high resolution timer is making trouble.
No longer accept fullscreen toggles when the application is active. It's a mystery how they get through, but they trigger a bug in SDL_GetAppState() that makes the application marked as inactive when it gets restored.
Master server log now contains server names (after one server setup support request too many where the admin is incapable of keeping his server up long enough or stating its IP)
The point in time where a client decides that now it's in sync with the server is recorded now. It was the most significant deviation in behavior caused by different compiler settings.
Const-correctness for some virtual functions. They were const in gCycle, but not in eGameObject, causing the wrong instance to be called in eCamera, causing camera jumps whenever there was a lag slide.
Added zero time simulation when the extrapolator is initialized, giving an accurate rubberSpeedFactor, which in turn does away with some extrapolation glitches when a rubber assisted turn is the first thing that happens.
- Remove double slashes from both the part where the map wants to be and the path it was loaded from before checking for equeality (fixes problem with an empty category attribute).
- Don't kill the server/client if the map filepath is wrong and just display a tERR_WARN. A wrong map file path is NOT severe enough to kill a server full of players, ever.
r6262 | z-man | 2006-11-10 22:51:12 +0100 (Fri, 10 Nov 2006) | 1 line
Ping charity is now clamped to the range 0-300 on the server and the client to avoid odd-looking insanely high numbers in the ping charity report console message.
currentFace is cleared on RemoveFromGame(); this avoids zombie game objects from referencing faces and the sub-faces resulting from grid changes forever. The same isn't required in eGameObject::RemoveFromGame(), since that one calls the destructor which does the same job.
- New "About" menu item in the main menu displays the version of Armagetron Advanced, the paths it uses, links to the main site, wiki and forums and the names of the project admins.
Decorated the code with some tAdvanceFrame() calls before sn_SendPlanned() calls; outgoing network messages should now get correct time stamps and ping measurements should be more accurate.
r6008 | z-man | 2006-08-07 00:30:32 +0200 (Mon, 07 Aug 2006) | 1 line
Got rid of quite a lot of raycasts by caching the result of the rubber raycast (from the cycle to the front) during a single simulation frame when nothing can jump into the cycle's path. The cycle position extrapolation code also uses the cached data.
Used new wall end position snapshots to make wall time extrapolation more accurate, especially while rubber is being used.
Rubberless deaths replaced with instant rubber usage that lets the cycle survive if the trails are short compared to rubber, as is often the case on race type servers. Groundpig, this is for you :)
Added the possibility to make "snapshots" of the current wall end data; it is stored in one of the coord_ entries and not touched on further updates. Hmm, this would also give a slightly better cycle position history with the right query functions.
Drop wall on rubberless deaths; the current wall gets updated on death, and with the warped position, this could mean trouble. The actual position of the walls doesn't matter in the end, they get holed away some commands later.
More precise collision detection: sensors take the speed of their owner into account and test whether obstacles will be solid by the time the owner could reach them, not whether they are solid now.
Factored position prediction code into own function, it's now called from gCycle::Timestep, no longer TimestepCore(), where it will always be called so the wall prediction is always active.
When a prediction wall is hit, the new simulation stopping exception type is thrown.
Whoops. Fixed coordinate messup when converting between gPlayerWall and gNetPlayerWall coordinates when querying the time and a real stupidity when querying the distance...
Added prediction of walls on the dedicated server: wall ends can be set to the predicted position the cycle will be at at the time any other game object is simulated to. The other objects check for the presence of these extrapolated wall ends and can delay their simulation until the predicted wall turns real or disappears. This should get rid of most rubberless death bugs, let's hope it doesn't produce to many new ones.
Cool, the client is now running a separate network handling thread that processes messages while the main thread waits for the graphics card to swap. Only works when not recording, though.
* src/network/nSocket.cpp: Use IPPROTO_IP instead of SOL_IP on Mac OS X. This was getting a failure message, but the comment says the success is not critical.
Improved rubber precision by predicting rubber usage for the reservoir mindistance.
Smoothly blend from distance based turn commands (without rubber active) to time based turn commands (with full rubber active, when sitting directly in front of a wall).
Disabled lag compensation when rubber is active for now. It is making too many problems. The packet loss tolerance already takes care the player doesn't get killed from lag, that's better than nothing.
Rearranged call order of nNetObject::ReadSync() and nNetObject::InitAfterCreation(), init now comes first. Some things that were formerly done in init now need to be done in ReadSync() if this->ID() is zero (inicating that this is the first sync).
More high timestep accuracy fixes to rubber code. The beginning of rubber usage is now precisely simulated to, we at least try to do the same for the end of rubber usage (it's less important there).
Fixed AI balancing. AIs are, at the lowest level, always allowed to join a team now. The higher level balancing code is responsible for making sure the joining makes sense.
Fixed trail end related simulation accuracy bugs. The rubber code now checks when a trail end will disappear and will simulate exactly to that point. When stuck on a trail end, the moment you're allowed to pass it is thus better defined even when simulating with large timesteps.
Lag is detected when cycle turn/brake commands arrive too late, compensated by simulating the cycle back in time, and reported to the client so it can compensate.
Optimization: connections are only updated if they have a socket. nAverager::Timestep is surprisingly expensive in a total server run, because it is called so often.
Fixed the way turns are enforced after the turn delay is over. Instead of forging the last turn times, which does not work any more, the turn delay is temporarily set to zero.
More CPU latency improvements. After network traffic comes in, the server first simulates the game objects that received commands and sends out sycns, then does the rest.
"Lag turn" bugfix. Sometimes, the server would initiate a cycle turn and mark the turn command as exectued, but the cycle was unable to execute the turn right away. The following inconsistent sync message confused the client.
Added prototypes for lag compensation functions so they can be integrated in the Windows/Mac projects before they're actually used.
Splitted libenginecore.a from libengine.a with the files that use most of the CPU time; they can be compiled with optimizations even if the rest of the code is in debug mode.
Lag improvements: instead of just pausing, the game now uses the select() system call that pauses until a time has elapsed or network data has arrived. The data is then processed as fast as possible, answers are sent out, and the cycle restarts.
r5528 | z-man | 2006-06-29 14:21:54 +0200 (Thu, 29 Jun 2006) | 1 line
Fixed balancing: when a team is to be removed, the smallest team is broken up and the players are distributed evenly across the other teams, always putting each player into the smallest team left.
r5514 | z-man | 2006-06-27 11:34:51 +0200 (Tue, 27 Jun 2006) | 1 line
Joining players are always assigned to a team, but a potentially unfullfillable team join wish stays memorized. Older wishes/wishes from higher scoring players usually are given preference, but don't rely on it.
Fixed clientside phasing bug that is fatal when playing on pre-0.2.7.1 servers. The bug was caused by the bugfix for enemy cycles getting stuck after a turn.
r4944 | z-man | 2006-06-18 23:45:12 +0200 (Sun, 18 Jun 2006) | 1 line
Whoops, reenabled the black screen at round start (when objects are spawned) and right after login (when sync is incomplete). The change also seemed to fix fast forward playback problems.
Various fixes for non-normalized driving directions.
Basically, all occurences of the scaling dependand eCoord::F( dirDrive, <other vector>) were replaced by the scale independant eCoord::F( dirDrive, <other vector>)/dirDrive::NormSquared().
r4931 | z-man | 2006-06-17 23:30:28 +0200 (Sat, 17 Jun 2006) | 1 line
Fullscreen messages that come over the network are no longer handled immediately; instead, they're handled as a tToDo task later. They sometimes oocured inside the login function and made the login time out.
r4930 | z-man | 2006-06-17 23:28:24 +0200 (Sat, 17 Jun 2006) | 1 line
Call per frame task always when recording and playing back, not just when actual rendering takes place. Important for consistency and playback without --benchmark.
r4929 | z-man | 2006-06-17 23:27:15 +0200 (Sat, 17 Jun 2006) | 1 line
Prevent console auto-rendering during per-frame tasks, they can lead to nasty recursion artefacts. The auto-rendering could trigger another per-frame task.
Bugfixes: issuing a kick vote made you immune for the same time for a kick vote as getting kickvoted. Sometimes, you were spamkicked without being given a good reason.
Added support for fullscreen messages from the server to the client. They are displayed like error messages.
While a message is displayed, local players are sent into spectator and chat state.
The server waits for everyone to read the message if it went out to all clients.
New console command: FULLSCREEN_MESSAGE <timeout> <message> triggers such a thing manually, and MESSAGE_OF_DAY is displayed that way, too, if possible, with configurable title (TITLE_OF_DAY) and timeout (MESSAGE_OF_DAY_TIMEOUT).
r4816 | z-man | 2006-06-07 17:36:06 +0200 (Wed, 07 Jun 2006) | 1 line
Fixed "Team Red" bug. If, on a two team server, one team gets abandonned and another team gets created right away, it no longer gets a previously unused color, but the one that was just freed.
r4786 | z-man | 2006-06-06 01:07:14 +0200 (Tue, 06 Jun 2006) | 1 line
Clients older than 0.2.8.2, when they go into the invisible spectator mode, still leave a spectator player lingering around until they either enter the game again or quit. This player can server as a kick vote target.
r4782 | z-man | 2006-06-05 22:21:40 +0200 (Mon, 05 Jun 2006) | 1 line
Phasing fix: When A grinds B's current wall, B's last driving direction is taken to be opposite to the grid. When A turns to cut off B, that gives the algorithms better data, or so the hope is.
The way cylce walls that are considered to be important for future collisions are gridded has been revamped: They're no longer dropped as they would be after a turn, which causes a sync to the clients, but only a partial gPlayerWall referencing the first bit of the gNetPlayerWall is copied. The gNetPlayerWall is left unchanged.
In addition, to exploit the cheaper gridding, the action is now triggered more often. Grinding an enemy wall triggers it now all the time, not just when the grind is started.
r4697 | z-man | 2006-06-02 12:54:27 +0200 (Fri, 02 Jun 2006) | 1 line
Cycle position warped to position of death in KillAt, like the function was originally designed. I can't remember why this was removed, but I'm sure I'll be reminded soon :)
Added another call to su_ClearKeys() right at the beginning of chat handling to smuggle cycle or camera input (keypress ends) around chat input blocker.
Made the code that handles /msg commands first convert the pattern to the internal player name so typing "/msg ��� hi" actually finds a match if there's a user named ��� with an internal name or oau.
Ok, now the perfect 180s really work reliably and you never end up on the wrong side.
Before the current face is found, the directions are blown up to gigantic proportions to tell the face-finding code that they're much more important than the current position (which will be exactly on top of a grid point).
Sometimes, you'll get stuck on your own wall, though. We'll have to live with that.
Increased CYCLE_RUBBER_MINADJUST for techical reasons: avoids graphical artefacts, and gives the cycle movement code a bit more floating point resolution to work with.
Moved all paths from Makefile.pats back to the individual Makefile.am's. All the shared information now is passed down from the configure script directly and determined there.
Flexibilized relocation code, it now gets the executable path from three sources: binreloc, the compmpiled in prefix, or the command line used for starting.
Fixed local deletion proliferation bug: after a local object was deleted on the client (such as when you go to spectator mode), all following objects that would get the same ID were deleted immediately. Local deletions are now memorized and remote deletion followup messages are ignored.
Server triggered syncs now don't block the client with the two-way server client communication, as they will wait for the server to complete transmission anyway.
Remedy for the "odd player" problem in multi-combat-zone maps such as 4x4 sumo. Spawn points can be divided into groups of equal size (minimum three), and no group will be left with just one player.
Future proofed voting: there is now a server controlled voting item, kick votes can use it (disabled by default as it is incompatible with older clients).
Incoming message IDs are blown up to long ints (32 bits) so higher level systems have an easier time determining if an update message is new or old. Configuration system and NetObject syncing use it.
Fixed rendering of zones on client when connected to old servers, they would sometimes send updates long after the zone was created, and the legacy algorithm was not prepared.
Replaced protected alive with private alive_ in gCycleMovement; it can be set with Die(). Adapted ghCycle.cpp to the change. This should work against invisible walls.
Added BUG_COLOR_OVERFLOW (default: old behavior, flag is enabled) so server admins can disable the trail color bug if it annoys them. The color values are always clamped if the player is member of a team.
Version generation now understands CVS tags: if the sources are locked to a version tag, the version is generated from that. If the sources are locked to a date tag, that date is used instead of the touch date.
YYYYMMDD in minor_version is replaced by DATE. We need to stick to a single date format.
Improved replacement of preliminary walls with final walls: the overlap of the new (final) and old (preliminary) wall in creation time is taken as the main criterion, and the direction of the two walls.
If it is noticed that the current wall of a cycle has gotten a final replacement (this was ignored before), a flag is set in the wall that causes it to be inserted into the grid (and thus deleted) immediately after the cycle's next turn.
The screen now stays blank as long as the timer says synchronization is not yet complete, just as it does the first half second of every round.
The timer detects that by measuring the variance of the received syncs. The non-complete status stays in effect for at most ten seconds, starting with the timer's creation.
Changes to SubStr: the len parameter has to be smaller than zero to trigger taking the whole rest of the string; sometimes you really want a zero length substring (to avoid having to do special case coding).
Pressing instant chat keys, should they be keys that don't generate characters (function keys, cursor keys) during chat now insert the corresponding instant chat.
Added a configuration item that allows issuing cycle control commands from whithin chat (thereby losing chat protection status, of course).
Fixed dead man's trail bug. The client now respects the distance transmitted on the last sync message, and the server lets cycles die at the right position.
Fixed crash: sometimes, the simplifying code would get the great idea to simplify one of the tree corners grid away. This caused trouble on the next expansion.
When a cycle gets killed, there are currently two sources for the killer: The wall it smashed into and the last enemy influence, taken from close encounters with enemy walls.
The new algoritm rejects killers that are not allowed to be enemies by configuration; then, it tries to find an enemy killer, then a team killer, then it concludes it must have been suicide. All the time, the owner of the wall you smashed into is given a slight preference.
Fixed synchronization bug: When a quick client turn command would get to the server early, the server would pass it to the cycle and mark it as used, but the cycle may only execute it delayed. The next sync back to the client would have inconsistent information. The server now no longer issues turn commands when they are not possible, and the client recognizes inconsistent syncs from older servers and corrects them.
Adapted to new return value possibility in eHalfEdge::IntersectWithCareless: an off-axis intersection point of the moving edge and the edge of the current face gets a score malus.
Added debug retry on move command in eGameObject::FindCurrentFace().
eHalfEdge::IntersectWithCareless() gives now more sensible results for almost parallel edges; it returns the eges' center of gravity, where the shorter edge is considered heavier.
Fully implemented single server ping by pressing "p"; exported the option NOT to poll the servers directly (and other tuning parameters) as a setting item.
Added Enemies(), a function that determines whether two players can be enemies.
Added option to disallow players from the same client or IP to be enemies; friends don't get points fro killing each other or winning a match. Determined by ALLOW_ENEMIES_ settings.
Added BAN, BAN_IP, UNBAN_IP, BAN_LIST commands for banning.
Added support for network settings that know what version they were added in; when an old client connects, they can revert to their default value or lock the old client out.
Moved packet loss tolerance code into gCycleMovement (the emergency death recovery exception catcher) and made it configurable (CYCLE_PACKETLOSS_TOLERANCE).
Added non-smoothed laggometer variable; it does not get updated by Timestep() for enemies on the client (so it can be set to the right value by the cycle sync code)
Fixed hadling of the running out of netobject IDs condition: The killing of the ID hogging user is delayed and the number of available IDs is temporarily increased.
Refactored command line parsing; tCommandLine.cpp only takes care of globally important options. The others have been moved to gArmagetron.cpp and tConfiguration.cpp.
fixed bug [ 1232501 ] Scrolling in Master Browser:
menu key repeat code was relying on undocumented behaviour of event retrieval code (that the passed event was untouched if there was no new incoming event) that changed.
New Remote Admin does something! changed /rcon to /radmin, and the params following /radmin now are parsed as if you were at the real console! Huzzah! Took me a *YEAR* to find the code for that\!
Started reworking remote admin... now uses /login pass, /logout, and /rcon <command>, only it doesn't do anything yet. working on that. just thought it would be good to update things. also added tString::SubStr and tString::StrPos for string manipulation. Seem to work.
Worked around sound initialisation problems in linux: sound is now initialized before the graphics and crashes during first initialisation are detected.
changed SP_TEAM_MAX_PLAYERS to 1. Since the dedicated server switches to the multiplayer settings as soon as more than 1 humans are online, this is the only meaningful setting.
changed rubber code: you cannot move arbitrarily close to a wall, and rubber is ineffective as long as you absolutely can't make another turn right now anyway.
side note: hrm, this seems like a rather long string of files, and I don't think i actually changed half of them, but it compiles and runs under windows and linux, so i figure it's good.
show rubber meter, show speed meter, show brake meter are new options so that you can just display only the FPS if you wish, and stop the fps chewing on low end machines
Added support for a sky texture in the movie pack. Works the same way as arena walls in gWall.cpp. Since many movie packs do not include a sky texture the default sky texture is used if it is missing in the moviepack/ directory.
Moved desctructor code in class uMenuItemSelection to a new function Clear() to allow the selection list to be cleared at runtime for reloading. Added a new class uMenuItemFileSelection to create a menu item that lists files and or directories to choose from.
Color almost entirely gone from player names, entirely for 0.2.7.0 users, and 0.2.7.0 users will not see colored names at all of the older clients. Scoretable is fixed up to remove hex... chat lines don't have hex... what else... some config options for basic remote admin and winzone being death zone on off
Added Function RemoveHex to tString. Just do <tString var goes here>.RemoveHex(); and all hex codes in that tString will be removed. Now just to place it in all the crucial spots... I think... Already added to chat lines.