## JJ2+ (last updated October 19th, 2013)

Created by BlurredD based on Neobeo's code

With much help from Monolith

And additional code by Grytolle

Expanded by Violet CLM and Jerrythabest

Additional credits: Neobeo, Monolith, Cpp (Overlord), Grytolle, EvilMike, Bobby aka Dizzy, Red^Ninja, Salface, Shane Lillie (Notepad chatlogger), cooba, Emo (some guy), Cataphract, the [semi-idle], Syntax (who made the original Roast Tag rules), SuPrem, Stijn, DoubleGJ, Sir Ementaler, Foly, TreyLina, the guys at CodeProject, and others who (might?) know who they are.

Additional Artwork: Hare, Blade, Disguise, Pyromanus, P4ul, Mez, Toxic Bunny, Spaztic, Haze.

## About JJ2+

JJ2+ is a mod, adding countless features and bug fixes to both Single Player and Multiplayer gameplay. It has much better network code than the original game, fixes or enhances many of the events in the game, and allows level designers far more power than in regular JJ2 through the addition of an easy-to-use scripting language.

JJ2+ only works with the full versions 1.23 and 1.24 (TSF), although not all versions of 1.23 and 1.24 are supported. In particular, TSF: LK Avalon is not supported.

JJ2+ makes use of the BASS audio library, allowing support for MP3/MP2/MP1/OGG/WAV/AIFF music and better support for module music. Warning: Users not running the latest version of JJ2+ will crash if JJ2 attempts to load any music file that is not a supported module music track.

JJ2+ has been in development more or less since January 2006. It is not open source at this time.

Any questions about JJ2+, or bug reports, can be posted either in the dedicated thread at the Jazz Jackrabbit Community Forums, or our ModDB page.

## Installation

Extract all files from plus.zip into your Jazz Jackrabbit 2 directory.

If it is the first time JJ2+ is installed, it is necessary to run the Plusifier (plusifier.exe) first. The Plusifier takes JJ2's original executable and makes a new executable that automatically loads plus.dll on startup. The new executable will have a plus sign added to its filename. The Plusifier DOES NOT need to be used every time JJ2+ is updated, unless specified otherwise.

The Plusifier allows overwriting the original exe or another file, so BE CAREFUL and make backups when necessary. Please report any problems with the Plusifier.

plus.dll can also be loaded into an already running JJ2 process by using plus.exe, but using it is strongly recommended to use the Plusifier instead.

If you receive an error (unlikely) claiming that you are missing "MSVCP100.dll", you will need to download the Microsoft Visual C++ 2010 Redistributable Package. If you are running JJ2+ in Wine, the module "vcrun2010" in winetricks should do the trick.

## Latest Changes

### Oct 19, 2013

- Both versions of JJ2+ may run all levels and tilesets created in the TSF JCS.
- 1.23+ can run any level saved in 1.23 JCS as well, even those saved with more than 1023 tiles counting both regular and animated tiles.
- 1.23+ users can now join any TSF+ server (but not vanilla TSF). The `/multiversion` command and plus.ini setting have accordingly been removed.
- All tiles have the same IDs in both 1.23+ and TSF+ now, so caution need no longer be exercised in dealing with tile IDs in AngelScript.
- Added 'Turbo' difficulty mode, accessible from the main menu or through the `-TURBO` command line argument. While playing on Turbo, your max health is only three hearts, buttstomping does not give you invincibility, and enemies are harder to kill and may exhibit behaviors unique to this difficulty.
- Replaced 1.23 and 1.24's old splash screens with new art from community members Hare and DoubleGJ.
- Updated the credits shown while quitting JJ2 to include JJ2+ credits.
- Added commands `/mouseaim <on|off>` and `/allowmouseaim <on|off>`, along with configuration settings "[General]MouseAim" (defaults true) and "[Server]AllowMouseAim" (defaults false), to enable/disable mouse aim mode. When `/mouseaim` is turned on locally in a server with `/allowmouseaim` turned on globally, a target reticle will appear on the game screen beneath the mouse cursor, and bullets will be fired toward that reticle. The (logical) left mouse button replaces the standard fire key while this mode is enabled.
- Added `/shutup <on|off>` command to disable chatting from everyone but the host and any remote admins present. (Server must be running latest version of JJ2+.)
- Pressing Alt no longer focuses on the game menu.
- Allowed JJ2 to flip tiles vertically, rather than only horizontally. (No level editor programs currently support this.)
- Added tile types 'Invisible' (3), 'Heat Effect' (5), and 'Frozen' (6), plus a `jjTileType[]` array in AngelScript.
- Improved textured backgrounds.
- Added textured background effects 'Tunnel' (1), 'Menu' (2), and 'Tile Menu' (3), plus a host of AngelScript properties for configuring them. See JCS.ini section for details.
- Fixed glitch of textured backgrounds skipping frames. (This was most noticeable in EvilMike's "This Level is Untitled".)
- Running a level with translucent tiles in the textured background at certain resolutions will no longer crash JJ2.
- Improved JJ2's handling of bullets in online play.
- Fixed glitch of Bouncers bouncing in random directions not synchronized among clients, potentially causing fake health.
- Destroyed scenery blocks and other objects are now synchronized better.
- Spectators can now see the ammo counts of other players, besides just their health and current weapon.
- Bullets that the server thinks exploded against players should now explode for clients as well.
- Pickups created from shooting or buttstomping crates or barrels, shooting enemies, or bumping carrot bumpers are now server-global objects instead of local, so if you pick one up, everyone else will see that same pickup disappear.
- The created pickups also now eventually fade away and disappear online, as an additional precaution. (This only works for versions 4.2 and higher, but it degrades gracefully for older clients.)
- Consequently, players no longer receive fake health from carrots created by enemies, carrot bumpers, carrot crates, and carrot barrels.
- Fixed glitch of sometimes sending malformed animation data packets while morphing, particularly to or from a frog.
- Fixed glitch of clients crashing upon joining when `/plusonly` was disabled while hosting a level using a .j2as file.
- Fixed glitch of muting a player failing to block that player's `/me` messages.
- Fixed glitch from a previous revision of TNT not destroying destruct scenery tiles in TSF.
- Fixed glitch of the Rocket Turtle boss not using its new behavior from the January 28th update in TSF.
- Fixed glitch of palette changing sometimes crashing JJ2 when there were a lot of animated tiles present.
- Fixed glitch from a previous revision of JJ2 sometimes crashing when a player was outside the bounds of layer 4.
- Fixed glitch from a previous revision of destroying powerups with special attacks or buttstomps not always increasing the player's ammo count.
- Fixed glitch of 16-bit water in low detail mode only being drawn on the left half of the screen.
- Fixed glitch of special attacks not being able to destroy stomp blocks during sugar rushes.
- Fixed glitch of kicking or uppercutting a morph monitor morphing the player twice instead of once.
- Fixed glitch of bird morph monitors only being destroyable by bullets, not by special attacks or buttstomps.
- Looking up or down while destroying a bird morph or turning into a frog will no longer freeze the player into an altered camera state until reverting to a rabbit.
- Fixed glitch of birds and frogs triggering Cheshire2 objects despite not being able to use them.
- Fixed glitch of frozen barrels not creating anything when destroyed by laser shield blasts.
- Fixed glitch of Devil Devan's health messing up when he was hurt by special attacks or buttstomps.
- Devil Devan no longer briefly displays an incorrect sprite (often "Chris is a Redneq") after landing from a jump.
- Fixed glitch of buttstomping enemies or collecting carrots potentially shortening a player's invincibility time instead of adding to it.
- Fixed glitch of turtle shells occasionally partially transforming into bones or copters when destroying skeletons or float lizards.
- Turtle shells placed in JCS as 'Still Turtleshell' events work as surrogate bullets for a player who shoots them, i.e. when they destroy an enemy, that player gets the points for it. Previously this only worked for shells created by shooting normal turtles.
- Fixed glitch of `jjOBJ::lightType` being a write-only property.
- Fixed glitch of `jjPLAYER::localPlayerID` always returning 0 in local play splitscreen games.
- Fixed glitch of `jjPLAYER::playerID` returning the wrong number when the player had a shield.
- Fixed numerous swinging platform glitches:
- Fixed glitch of fast players falling through swinging platforms.
- Fixed glitch of players falling off fast swinging platforms.
- Fixed glitch of spike bolls sometimes crashing JJ2 (or disabling its sound system) when shot down.
- Fixed glitch of wind events not affecting players standing on swinging platforms.
- Fixed glitch of swinging platforms with their Swing parameter set to 1 drawing to the wrong spot while frozen.
- Fixed glitch of swinging platforms becoming permanently immobile if frozen in front of a tile with the 12th parameter bit set to 1.
- Fixed glitch of not being able to stand on other players other than the numerically last client in a server.
- Fixed glitch of layers with auto speeds sometimes resetting their positions after scrolling for too long.
- Fixed glitch of not being able to fire RF missiles diagonally underwater while facing left, or pepper spray while facing either direction.
- Fixed glitches in players' collision with enemies.
- Destroying an enemy with a buttstomp or special attack in online multiplayer no longer hurts.
- Destroying an enemy by freezing it and running into it really fast no longer hurts.
- All enemies now bounce the player back back when destroyed by freezing and running; previously only some of them did.
- Servers are no longer hurt just by touching a frozen enemy.
- Fixed glitch of bullets sometimes not being tested for collision with other objects while passing in front of certain events, such as Collapse Scenery.
- If a vanilla client fails to join because of `/joinersspectate` being enabled outside of Plus Only mode, the server will see a warning reminding them that the setting is turned on.
- Ammo pickups are now drawn to each subscreen based on the powerup status of the player viewing them, instead of the powerup status of player 1. Likewise, blaster powerups appear with the green or blue gun depending on the character of the player viewing them, and fastfire pickups take both factors into account. This means that two players in local splitscreen may see different sprites for the same object.
- The toaster powerup sprites now display the purple and orange powerup colors instead of the red and blue normal colors, bringing them in line with every other powerup.
- Increased speed, acceleration, and lifetime of powered up Fireball bullets to match the regular Fireball bullets.
- Console announcements will now display in local games. The 't' chat key is available in local multiplayer non-SP/Coop games, but only for writing commands, not for chatting; some commands will work, and others won't, because this hasn't been something we've really focused on.
- Max Health and Start Health may be as high as 127 in local games, as opposed to their limit of 7 in network games.
- Clients no longer perform the hurt animation/sound upon receiving health from HFK or the AngelScript `jjPLAYER::health` property.
- Gem rings may now be frozen.
- The 500 Pinball Bumper gives you 500 points the first time it's used.
- Fastfire and ammo pickups will no longer decrease a player's fire rate/ammo count if it's faster/higher than the maximum when the pickup is touched.
- Changing gamemodes while setting up a server will no longer change the filename to that gamemode's default filename (battle1/treasur1/capture1).
- Starting a level with no start positions in a multiplayer game will no longer crash JJ2.
- Starting a level with no Spaz Start events as Spaz will no longer complain about this to the jazz2.log file.
- Errors generated while starting a level should now specify whether the error arose from the level or the tileset, and if the latter, the error will actually tell you the tileset's filename.
- Calling `jjSample` or `jjSamplePriority` within an `onMain` function in AngelScript now plays the sample more reliably.
- Added "Show Max Health" menu option and corresponding "[General]ShowMaxHealth" configuration setting (defaults false), which shows the hearts a player is currently missing in black.
- Removed the "Hardware Acceleration" menu option, due to its conflicting with new code. This may or may not be a temporary removal.
- Pressing F9 twice will display the tileset and music filenames in addition to the level name and everything else. The `/np` command has accordingly been removed.
- Partially entered cheat codes no longer subsist between levels, since if you had a partially entered cheat code when you started an MP level, it would never go away (as visible from double-F9) until the next time you were in SP and could get rid of it.
- The Echo property (`jjEcho` in AngelScript) now resets at the beginning of each level.
- Chat text always appears at the bottom of the window, even if you're playing in splitscreen.
- Splitscreen clients will see only one subscreen while spectating, instead of multiple identical subscreens.
- If the server and the spectator are both running this version of JJ2+ or higher, spectating no one is now a free camera mode controlled by the mouse.
- Idle Server Mode now also uses this mode.
- The `/ready` command in CTF now uses standard warp code, so players' speed and other such properties will not be retained after warping to their bases.
- If `/ready` would warp a player into a wall, JJ2+ will now make a good faith effort to move the player somewhere else instead.
- Created a "plus.j2d" file for storing various images used by JJ2+, using the same file format as JJ2's native data.j2d.
- Numerous additions have been made to the AngelScript API. For a detailed account, users are advised to view the dedicated AS help file instead, but examples include:
- Scriptwriters may now define objects' behavior, as well as define the results of their collisions with players or bullets.
- AngelScript now has access to direct player input through the keyboard and mouse.
- Added jjPARTICLE class to give scriptwriters full control over JJ2's particle effect system, and jjCANVAS class for drawing sprites and other graphics directly to the screen, as level elements or as part of the HUD.
- Added functions for detecting the collision mask of layer 4 or any other layer.
- Added weapon-specific properties `comesFromGunCrates`, `infinite`, `replenishes`, `replacedByBubbles`, `multiplier`, `maximum`, and `style`, allowing level designers much greater control over weapons.
- Added hooks `onLevelBegin`, which takes place slightly later than `onLevelLoad`, and `onGameStart` and `onGameStop`, which are even later.
- All hooks that set the `p` or `jjP` global property should now include a `jjPLAYER@` parameter. The old coding style still works for previously added hook names, but is deprecated.
- Deprecated the jjOBJ properties `creator`, `noHit`, and `objType`, and replaced them with new, more specific/useful properties.
- Updated the AngelScript library to a WIP build of version 2.28.0, imported the math add-on, and enabled the `split` and `join` methods on strings.
- jjPAL is now a reference type and so may be passed to functions by handle instead of by value.
- Updated the example levels:
- All existing levels have been updated to reflect the implemented changes, either simply to use a less deprecated coding style or else to include genuinely new features.
- Renamed several levels to standardize the example level filenames. For example, DOMlevel.j2l is now plusDOMLevel.j2l.
- Added: plusComet, plusMenu, plusHeaven, plusTetris .j2l/.j2as.
- Moved the example levels into a separate zip archive, as to not bloat the main installation archive with multiple files.

### Feb 5, 2013

- Fixed glitch in the `/readystart` command where the server would not consider itself idle if it began hosting in Idle Server mode.
- Fixed glitch of the `/cstop` command's countdown being reinterpreted as a `/cstart` countdown if the game ends (e.g. by someone making a score) before the countdown runs out.
- Fixed glitch where remote admins would be falsely announced as ready instead of receiving an error if the `/ready` command wasn't typed correctly.

### Feb 4, 2013

- Fixed a major memory leak in the AngelScript implementation. Thanks to Shaker, TreyLina, and all others who pointed it out.
- Fixed a 1.23-only memory leak in 16-bit color mode.
- Fixed glitch of `/me` and `/ip` giving the wrong results in servers with splitscreen players.
- Fixed glitch where exiting a stopped online/TCP game and starting a local game would disable all damage.
- Fixed glitch where shooting powerups in SP could give the player more than 99 ammo. (Finally.)
- Documentation fix: AngelScript property `jjPLAYER.jumpStrength` was incorrectly listed as `jjPLAYER.jumpSpeed`.
- Fixed glitch of AngelScript `jjPLAYER.kill()` method sometimes failing to add to a client's death count.
- Fixed glitch of AngelScript `jjChat` function crashing in local games when used to send plain text instead of a command.
- Added boolean "teamchat" parameter (defaults to false) to AngelScript `jjChat` function, to address issue of it inheriting the teamchat setting from the player's last chat message.
- Added command `/weaponchange <on|off>` and configuration setting "WeaponChange" (defaults to true).
- Added command `/readystart <on|off>` and configuration setting "Ready-Start" (defaults to false).
- Added command `/readyff <on|off>` and configuration setting "ReadyGivesFastFire" (defaults to false).
- Added parameter "Strength" to the Slide event. See JCS.ini section for details.
- Added global AngelScript properties `jjDelayGeneratedCrateOrigins`, `jjGameState`, `jjGameMode`, `jjGameCustom`, and `jjGameConnection`.
- Added global AngelScript functions `jjDeleteObject` and `jjKillObject` (almost identical to one another).
- Added AngelScript method `jjPLAYER.setScore` and property `jjPLAYER.flag`.
- Updated the AngelScript API to point out how the `jjPLAYER.fly` property can be used with copter objects.
- Updated the example levels:
- Fixed glitch in PlusJCSFun.j2as where the timer at the beginning of the level wouldn't restart after death.
- Generating trigger crates in PlusJCSFun.j2l now use simple generator events instead of AngelScript.
- Updated battle1plus and plusSurvivor .j2as to better demonstrate certain events happening on the first gametick.
- Also attempted to make battle1plus.j2as less confusing to users not familiar with coding.

### Jan 28, 2013

- Implemented the AngelCode Scripting Library (AngelScript for short), allowing level designers to inject large sections of code into their levels and dramatically alter gameplay. See the included file plus-angelscript.html for instructions and API.
- It is necessary for the server (or a remote admin) to enable both Plus Only mode and Latest Version Only modes for AngelScript to work online. In offline play, including Single Player, no special settings are required.
- Added configuration setting "AngelscriptDebug" (defaults to false). See plus-angelscript.html for details.
- Plus.exe will now include .j2as files as well as levels, tilesets, and music when used to zip levels.
- The chatlogger will no longer scroll down every time someone says something, if it's the focused window.
- Added significant subset of JJ2+ console commands as options in the dropdown menu that appears while running JJ2+ in a window.
- Using the menu or pressing Alt no longer freezes the game.
- Some commands (e.g. `/wc`, `/run`) are now also available in offline games through the menu.
- Added tab completion functionality to the commands. When you type in part of a command and then press the Tab key, the command will be completed for you automatically, or you will be given a list of possible commands.
- Added command `/ready` which, when the game is stopped at the very beginning, acquires all available ammo, fastfire, and powerups, and warps all local players to their bases in Capture The Flag mode.
- Added command `/allowready <on|off>` and configuration setting "AllowReady" (defaults to false).
- Added command `/ip <client>` for remote admins. (Server must be running latest version of JJ2+.)
- Added command `/me <text>`, as an analogy to actions in IRC. (Server must be running latest version of JJ2+.)
- Added command `/run <on|off>` and configuration setting "AlwaysRunning" (defaults to false).
- This replaces the old "always run" checkbox from the "plus settings" window.
- Added command `/strongpowerups <on|off>` and configuration setting "StrongPowerups" (defaults to false). When enabled, pepper spray and electro-blaster will deal 2 hearts of damage when powered up. (Server must be running latest version of JJ2+.)
- Modified command `/gamemode <gamemode>` to be able to change from a custom mode directly into its respective 'master' gamemode.
- Added server-side command `/fireball <on|off>` to replace pepper spray with the fireball weapon from the beta versions of JJ2. (Server must be running latest version of JJ2+.)
- Added command `/cstop` by analogy to `/cstart` command. (Server must be running latest version of JJ2+).
- Improved player detection of belt events, collapse scenery, and ceiling springs.
- Improved handling of underwater diagonal bullets. (Server must be running latest version of JJ2+, and clients should be running it in order to see the bullets in the right places.)
- Fixed glitch of client health not being updated globally when hurt by enemies or Hurt events in online games. (Both client and server must be running latest version of JJ2+).
- Fixed glitch where players would be invincible against bullets when standing on the left side of the level. (Mostly server-side fix.)
- The same glitch for the right side of the level had been fixed previously, but not documented.
- Fixed glitches with copter ears interacting with airboards, fly carrots, copters, and water.
- Fixed glitch where water could never be removed from a level after it was first added.
- Fixed glitch where stomping a pinball paddle would slow down the player and make jumping off impossible.
- Fixed the Illuminate Surroundings checkbox so it now works for all objects instead of only 1up.
- There are a few older levels that used this checkbox that will now look slightly different, but usually for the better.
- Fixed glitches that prevented appearance of most bullet SCEs, and fixed the bubble shield SCE so it no longer crashes the game.
- Fixes are not applied to bullets in crates, since certain Ground Force levels take their existing behavior into account. All generator-based SCEs should work perfectly, though.
- Fixed glitch of robot boss completely ceasing to function after being frozen once.
- Fixed the Slide event. To use, place it on floor tiles like regular Hurt events.
- Fixed the Laser Shield event.
- Fixed the Butterfly event (which now gives 100 points instead of 10).
- Added a new method of making paths for the Butterfly and the Rocket Turtle, using the Area ID events. See JCS.ini section for details.
- Edited the destruct/collapse/speed/stomp/bomb scenery block events to work properly with the Generator event.
- Following the lead of regenerating blocks in local splitscreen, the events will not respawn when players are too close to them.
- Fixed glitch of JJ2 crashing when block events were used with flipped animated tiles.
- This is a purely local fix -- any clients running earlier versions of JJ2+ or regular JJ2 when loading such a level will still crash, and without warning or explanation.
- Allowed block events to work with non-animated tiles (including flipped non-animated tiles).
- Note that events on non-animated tiles do not lead to the creation of new words in the tile cache, so this may not always work out as desired. See this article for further details.
- Fixed glitches that made ice, pepper spray, and electro-blaster unable to destroy destruct scenery with the Weapon parameter set to 3, 8, or 9 respectively. (Local fix.)
- Fixed issues with Gem Ring event not giving the player any points and totally ignoring its Speed and Length parameters.
- Improved the Sucker Tube event.
- Fixed glitch of player getting stuck after falling from a warp target into a sucker tube with a non-zero wait time.
- Made diagonal tube movement possible at any speeds.
- Enabled the Trig Sample parameter.
- Added parameters to Sucker Tube event to create sucker tubes that disregard masking and can only be entered at certain places. See JCS Events section for details.
- A number of events have received new JCS parameters, whose entries in JCS.ini should be updated accordingly. In each case, see the JCS.ini section for instructions on how to add the new parameters and how to use them.
- Horizontal springs may have their direction reversed manually.
- Warp events may warp players instantly without any special sound or animation.
- Trigger crates may deactivate or toggle triggers, just like Trigger Zone.
- This is a local change, so online servers must have both Plus Only and Latest Version Only turned on.
- Bomb Crate events may be completely empty, creating not even a bomb when destroyed.
- Steady Light and Pulze Light events can create a far greater variety of light types and sizes.
- Ambient lighting can coexist with water.
- Limit X Scroll can create more flexible boundaries and scrolling levels. See JCS.ini section for details.
- No Fire Zone can leave a player unable to shoot even after leaving the tile the event is in, and can also reverse the player's gravity.
- The Text event can display only a substring of one of the sixteen Help Strings set in Level Properties.
- All events banned from non-local multiplayer (enemies, swinging platforms, etc.) may now be used without resorting to MCEs, as long as their difficulty is set to "multiplayer only."
- Note that not all events may behave quite perfectly; this is merely a blanket change allowing them to appear ingame in the first place.
- Enemies exclusive to TSF and HH98 will now work in 1.23, and will be displayed as their regular 1.23 counterparts. (XMas Lizard to Lizard, Cat to Doggy Dogg, etc.)
- The Copter event no longer places restrictions on the horizontal speed of players using it.
- Changed low detail mode to show all optional layers with XSpeed 1 and YSpeed 1, instead of only layer 3 regardless of its speed.
- Instead of killing players, the bottom of the level may now optionally be a solid floor. See the Pit Levels section below.
- Disabled the "jjnowall" cheat functionality in all non-Single Player gamemodes.
- Added 3D TV support. See 3D Mode section for details.
- Touching an end of level event in Treasure Hunt will now notify the player how many more gems are needed to win, providing a way to discover where the exit actually is.
- Made the HUD not display the player's current weapon/ammo if the player is unable to fire.
- Added command line argument `-servername=<name>`.
- Removed pitlevelex.j2l from plus.zip, since its information had gotten out of date.
- Added battle1plus, flycarrotPJ, hellwarp, plusButterfly, plusEnscripted, plusJCSFun, plusLimitX, plusPalettes, plusSurvivor, plusTimerBattle, and plusTimerEx .j2l/.j2as example levels to illustrate various new JJ2+ features.
- Converted this readme file from .txt to .html.
- Updated BASS to version 2.4.9.

### Jul 7, 2012

- Outsourced the project files to the "1.25 council" on the JCF.

### Jun 30, 2010

- Fixed issue where CTF death pits (instant death areas in Single Player mode created with CTF bases) would not work as intended in some situations.
- Fixed glitch with "All Blue" and "All Red" modes where clients would sometimes see themselves on the wrong team (server-side fix).
- Fixed issues related to players morphing characters (ideally both the server and clients must be running the latest version of JJ2+).
- Fixed glitch with chat field and menu player name field where special accent mark key combinations were not handled properly.
- Fixed glitch where random chat text was sent to others immediately after pressing 't' to show the chat field (local fix). Special thanks to FawFul for helping me figure out the problem.
- Added additional parameters to events Area End Of Level, Area Warp EOL, and Area Warp Secret. The new parameters allow for fast level cycling and a greater number of choices for the next level. See JCS.ini section below to learn what to do.
- See levels SPlevel1.j2l and SPlevel2.j2l for an example. It's recommended to update JCS.ini before running these levels through JCS (via Save & Run).
- Fixed Area Warp Secret event and Area End Of Level event with Secret set to 1 so that the event cannot later be retriggered when the player returns to the original level after playing the secret level(s).
- Fixed glitch with Warp event and Area Warp Secret event where the "need x more" message was not displayed properly.
- Fixed glitch with pit levels played offline in Single Player or Coop where not all local split screen players will die after falling into a pit.
- Added the ability to insert and erase characters in the middle of the text of the chat field.
- In Treasure mode, the level no longer cycles when a player reaches an exit during a stopped game (both the server and clients must be running the latest version of JJ2+).
- Fixed glitch with level cycling in Single Player, Coop, and Race modes.
- Fixed cycling issues in Single Player and Coop in online games.
- The level now cycles when any player reaches an end-of-level exit. Note that bonus level exits still do not work.
- The level now cycles when a boss is finished. Note that the server and clients may not see the boss finished off at the same time.
- Clients running the latest version of JJ2+ no longer see the level cycle locally when they finish a boss while the server sees the boss as still alive.
- Fixed glitch in Playlog where Place stat would show the incorrect place of players.
- Improved collision detection for online games.
- In Single Player and Coop, clients now lose hearts after being hit (client-side fix).
- MCE and SCE events can now hit players without causing JJ2 to crash (server-side change).
- Warning: Clients not using the latest version of JJ2+ WILL CRASH if the level has any MCE/SCE seeker objects.
- Fixed issues with Extended Last Rabbit Standing:
- Made Place stat no longer partially determined by the number of points a player has.
- Game will now only go into overtime if two or more players have the highest number of lives left. Previously, a winner would have been decided if one of those players had a higher number of points than the rest.
- Improved HUD.
- Redesigned HUD for Battle-based modes and most notably for LRS-based modes.
- Fixed minor HUD player list sort issue (client-side fix).
- Fixed other miscellaneous issues.
- Added command `/maxresolution <width>x<height>` and configuration settings "MaxResolutionWidth" and "MaxResolutionHeight" (Max Resolution defaults to 640x480). Only players running the latest version of JJ2+ are affected.
- For the Game List in the menu, now at most only 10 servers with the same IP address will be shown.
- Increased the maximum distance a player can be hit by TNT in online games when Extended TNT Range is enabled.
- Improved how start positions work in team games (local fix). If a level doesn't have a Multiplayer Level Start event for both blue team and red team, then players will start at any start position.
- Latest Version Only setting now only applies to JJ2+ clients. Clients not using JJ2+ will be able to join when the setting is enabled. Use Plus Only setting to exclude those clients.
- Fixes for being hit while/after warping and being killed while frozen are now used for all modes and both online and offline play.
- Fixed glitch in Treasure mode where the server was able to die after hitting certain objects or events.
- Removed command `/lives` which was used to send chat indicating each player's number of lives if custom mode was Extended Last Rabbit Standing. This command hasn't been needed by JJ2+ users for a long while.
- Fixed minor in-game ping issue (server-side fix).
- "<team> scored a point" messages are now never displayed for Team Last Rabbit Standing (client-side fix).
- Most Windows-1252 characters can now be typed into the server name in the menu.
- Documentation fix: "-levellist=<filename>" should be "-levellistfile=<filename>".

### Apr 8, 2010 (A)

- Fixed issues with UDP packets not being properly sent to the server (client- side fix).
- Changed again how Lori's clothes colors are customized in multiplayer games (local fix). Lori's clothes color is now editable by setting the value that used to change the color of Lori's eyes. This means Lori's eye color will always be green.
- Improved how Lori's fur color is displayed.
- Added note related to the last update: When there are already 16 connections to the server, and the 17th connection is made, all clients using a previous version of JJ2+ will be kicked. Therefore, you may wish to limit the number of connections to 16 (with command `/maxconnections 16`) until more people get the latest version of JJ2+.

### Apr 8, 2010

- If you didn't install the previous JJ2+ update, make sure to use the updated Plusifier.
- Added configuration setting "UseAnyLocalAddress" (defaults to true). When false, a JJ2 will bind to a single local IP address when creating listen sockets. You probably don't want to change this setting.
- Fixed glitch where a JJ2 server would fail to bind to a single local IP address when creating listen sockets.
- Server now automatically relists if it loses its connection to the list server.
- Added support for downloading music files:
- Added server command `/uploadmusic <on|off>` and configuration setting "UploadMusic" (defaults to on).
- Added server command `/maxuploadpacketsize <bytes>` and configuration setting "MaxUploadPacketSize" (defaults to 1024).
- Added client command `/downloadmusic <on|off>` and configuration setting "DownloadMusic" (defaults to on). When downloading music, note that the escape key can be pressed to stop downloading while staying in the server.
- Added client command `/downloadsamemusicversion <on|off>` and configuration setting "DownloadSameMusicVersion" (defaults to off).
- plus.exe can also be used to add levels to LevelList.ini and to zip levels including their tilesets, music, and other linked levels automatically (see Level List and Zipping Levels section below). Use command line argument "-loadplus" to skip the prompt and automatically load the plus.dll into a running JJ2 process.
- Made adjustments which allow command `/changemusic <music_filename>` to increase the maximum allowed length for <music_filename> from 31 to 62 (though JJ2's chat limitations won't allow a filename that long). These changes make it impossible to change music through programs like Project Controller.
- Added support for up to 32 connections in a server (both the server and clients must be running the latest version of JJ2+). Note that clients running a previous version of JJ2+ cannot join servers where there are already 16 or more connections. However, non-Plus clients can join such a server, although they won't be able to see chat from any client (including themselves) who has a connection number above 15.
- Added command `/maxconnections <number>` and configuration setting "MaxConnections" (defaults to 32).
- Improved Max Players check for joining clients.
- Added the needless ability for the server to be able to host levels from folders other than the Jazz2 directory, including the cache folder, without causing problems for clients. The 31 character limit still applies to the length of the path and filename of the level, and the tileset for the level must exist in the Jazz2 directory.
- No Fire Zone events now work in Single Player mode (local change).
- Spring delays now work in all game modes (local change). Previously spring delays only worked for Battle, Race, and Treasure.
- Re-added constraint where secret levels cannot cycle to other secret levels.
- Improved the fix for the glitch where a player hits a warp event while the level cycles and then continues warping to a random postion in the next level. It should now always work even if the player was frozen while warping. Also, the warp fix is now only for online games.
- Most Windows-1252 characters can now be typed into the chat field.
- Most Windows-1252 characters can now be typed into a player name in the menu. Also, a space character can now be used as the second character in the name.
- When editing a player name, the name is no longer displayed animated in a pattern of colors.
- Updated how chat is stored and displayed within JJ2. Most notably, chat lines no longer disappear if the player who said the lines leaves the server.
- Updated `/ban` and `/kick` commands to `/ban [<time>{s|m|h|d}] {<player>|<ip_address>} [<reason>]"` and `/kick <player> [<reason>]"` respectively.
- Updated `/ban`, `/kick`, and `/unban` commands to give more error messages when appropriate.
- The old "ban" and "kick" commands (the ones that did not use a preceding forward slash) no longer can be used.
- IP addresses banned through Banlist.lst can now be unbanned through the `/unban` command.
- Server now sees "<player> was kicked off" and "<player> was BANNED" messages when a player is kicked and banned respectively.
- Server now blocks attempts from banned players to join the server sooner.
- Updated how Remote Admin is done:
- Added support for admin groups (uses admin configuration file admin.ini).
- For each admin group, the following can be set: the password, allowed commands (or blocked commands), Auto Admin IP addresses, and whether the group is currently enabled.
- Auto Admin IP addresses allow a user to be automatically promoted to an admin for a given group when joining the server.
- Removed restriction where admins cannot kick or ban other admins. These commands can be made unavailable by adjusting the allowed or blocked commands for a given group.
- Replaced command `/setadminpass <password>` with command `/setadminpass <group> <password>`.
- Replaced command `/getadminpass <password>` with command `/getadminpass <group> <password>`.
- Removed configuration setting "AdminPassword". Change the password of a group in admin configuration file instead.
- Added server-only commands `/admingroup <group> <on|off>`, `/addadminip <group> <ip_address>`, `/removeadminip <group> <ip_address>`, `/addallowedcommand <group> <command>`, `/removeallowedcommand <group> <command>`, `/addblockedcommand <group> <command>`, and `/removeblockedcommand <group> <command>`.
- Note that an admin group needs to be enabled and have a valid password before users can log on that group.
- See Remote Admin section and file admin.ini for more information.
- Added command line arguments "-settings=<filename>", "-admin=<filename>", and "-levellistfile=<filename>" for specifying configuration files. Note that the configuration file must exist beforehand or else default file will be used.
- Changed parsing method for command line arguments of the form "-<name>=<value>" so that backslashes no longer need to be escaped in <value>. Note however that to use double quotation mark in <value>, the double quotation mark must be escaped by another double quotation mark.
- Fixed command line argument "-player <number>" for TSF. It had a name conflict with command line argument "-play".
- Updated client command `/login <password>` so that if the server is running JJ2+, the login command and password will not be displayed locally in the chat and instead will be replaced by a message saying "Attempting to login".
- Updated Roast Tag so that the maximum points the player who is IT receives after roasting a player is five.
- Updated Jailbreak to better handle the case where one team no longer has any free players after Pregame has ended, particularly when a player changes team mid-game. When there aren't enough free players, the jails are now always opened or stay open afterwards.
- In Jailbreak, jails are now always open during pregame.
- Made minor improvement for how killing spree text is displayed in team games with Friendly Fire enabled.
- When Idle Server mode is enabled, a visual indicator is now always displayed, and Idle Server can now be disabled by pressing CTRL+ENTER.
- Server is no longer hidden for clients when the server minimizes. Server is now only hidden for clients when Idle Server mode is enabled.
- Player pings are now shown on the Game Info (F9) screen when F9 is pressed twice, when the tab key is held down, and when the "Always Show In-Game Pings" setting is enabled (both the server and clients must be running the latest version of JJ2+).
- Added command `/alwaysshowingamepings <on|off>` and configuration setting "AlwaysShowInGamePings" (defaults to off).
- Clients now must wait for server data before being able to play in a level (both the server and clients must be running the latest version of JJ2+). This change fixes issues related to scenery events and game objects being processed at the wrong time by clients.
- Improved how spectating works in general.
- Fewer movement packets are now sent for Spectator mode and Idle Server mode (local change).
- Added command `/maxspectators <number>` and configuration setting "MaxSpectators" (defaults to 32). Note that the limit also applies to joining players when Joiners Spectate is enabled.
- Server no longer spectates when Idle Server mode is on and command `/forcespectate all on` is used.
- During a game when the user wants to quit and the "Are you Sure? Yes/No" prompt is displayed, the arrow keys and tab key can no longer change the spectated target or display the player list on the HUD respectively.
- Added command `/allblue <on|off>` and configuration setting "AllBlue" (defaults to off).
- Added command `/allred <on|off>` and configuration setting "AllRed" (defaults to off).
- Teams are now always made more even when a new player joins the game except when Even Teams is off and the joining player specifies his or her team while running the latest version of JJ2+
- Fixed glitches in Team Last Rabbit Standing:
- The incorrect number of lives were sometimes shown for a player who joins the current game after previously being in Spectator mode or, in the case of the server, in Idle Server mode.
- When `/forcespectate all off` was used while a player was spectating while out, spectating would be disabled for the client.
- When `/forcespectate all on` was used while a player was spectating while out, spectating would be disabled for the client.
- When `/shuffle` command was used during normal player without enough active players in the server, excess reserves were given to each team.
- Fixed glitch in Roast Tag where a player who becomes the ring holder receives the improper amount of health when Health From Kills is enabled.
- Fixed glitch where Add-Ons (e.g. instagib) could be used in offline games.
- Fixed glitch in offline CTF games where the flag was never dropped when the flag holder was roasted.
- Fixed glitch where clients would keep team colors when the game mode is changed from CTF to another game mode (client-side fix).
- Fixed glitch where the server would corrupt an upload to clients.
- Fixed buffer issue with UDP packets.
- Fixed glitch where clients would see the incorrect time left when the server resets the time limit while the game is stopped.
- Fixed glitch where clients would see negative team scores when a team's score is between 128 and 255 (client-side fix). No negative team scores was an adjustment added in a previous JJ2+ update.
- Fixed glitch where clients would not see certain objects spawn initially after the level cycles (client-side fix).
- Fixed glitch where a copter would cause a generated object to disappear (local fix). Most notably, the bouncer powerup in Bluez's Green Beret no longer disappears.
- Fixed various Lori issues:
- Fixed glitch where Lori cannot use copters (local fix).
- Lori's fur and clothes colors can now be properly customized in multiplayer games (local fix). Lori's clothes color will be editable by setting the value that used to change the color of the tip of Lori's gun. This means the tip of Lori's gun will stay red, but the rest of the gun can still be different colors.
- Lori Level Start (event 32) can be used to create a start position usable only by Lori. Requires replacing lines in JCS.ini. See JCS.ini section below to learn what to do.
- Fixed glitch where the server would hear the game end music restart after a player joins.
- Fixed UDP exploit for clients (client-side fix).
- Fixed glitch where JJ2 would randomly crash due to sprites not being cleared from a previous level.
- Fixed minor glitch where clients not running JJ2+ don't see the correct health update when there is a health change.
- Fixed minor client-side issue related to level cycle.
- In online games, missing level backgrounds now always appear black with no trails from any tiles, even when chat fills the screen.
- Slightly improved idle player detection.
- Removed player prediction for remote players who are spawning or warping so that their positions are updated immediately (ideally both the server and clients must be running the latest version of JJ2+).
- Improved how morphing works online. Both server and client need the latest version of JJ2+.
- Frog anims are now always loaded on each level initialization.
- When JJ2 is minimized to the tray, the same procedures are now done as if JJ2 has been minimized to the taskbar.
- Improved how game echoes are displayed when a player is roasted (server-side change).
- "Player joined/left the game" messages now always appear in all green for clients (client-side fix).
- Teams are now always internally made even when the game mode is not CTF.
- Server no longer sees the characters of clients who are connecting to the level.
- The right CTRL key can now be used for keyboard shortcuts that specify the use of a CTRL key, e.g. CTRL+F9.
- The main window no longer pauses when a client minimizes or when the Sound & Music Properties dialog is accessed.
- Fixed minor formatting issue with some strings.
- Documentation fix: `/unban <ip_address>` should be `/unban <ip_address|all>`.
- In this readme, section "Level List" renamed to "Level List and Zipping Levels.".

### Jul 28, 2009

- Updated the Plusifier:
- New JJ2+ exe created with the Plusifier now no longer crashes if Data Execution Prevention is enabled.
- plus.dll is now loaded earlier by JJ2+ exe.
- The Plusifier now optionally makes backups of your original JJ2 exe.
- NOTE: You MUST use the Plusifier again on your original JJ2 exe (i.e. an exe that has not been patched by the plusifier yet) EVEN IF YOU ALREADY HAVE A FUNCTIONING JJ2+ EXE.
- Fixed problem (hopefully) where some clients timeout in a server after 30 seconds. This is mainly a server-side fix, but to ensure all UDP packets are received, clients must be running this version of JJ2+ as well. Special thanks to SuPrem and Cpp (Overlord) for helping me find the problem.
- Fixed glitch where boss event attempts to use BOSS1.S3M or BOSS2.S3M for music instead of BOSS1.J2B or BOSS2.J2B.
- Players now always won't lose control (and potentially get stuck) when they get hit before or after warping (local fix). This was previously a Plus Only feature.
- Players now always will be automatically unfrozen if they die and are freezed (local fix). This was previously a Plus Only feature.
- Significantly improved how servers on the Game List screen is displayed.
- Made better fix for gem rings crashes by preventing gem rings from being frozen (local fix).
- Gem counters are now always displayed when a player collects 100 red gems or an equivalent.
- Fixed glitch in Team Last Rabbit Standing where connecting players in Spectator mode are changed to Out Spectator mode.
- For the server, more packets from connecting clients that shouldn't be processed are now ignored.
- Adjusted protection rules for weapons and shields not available in the current level. For Single Player and Coop, fixed how players sometimes couldn't use ammo they collected from the previous level(s). Moreover, if the game mode is or was Single Player or Coop at some point during the current level, players can now use any weapon or shield except the laser shield without being kicked/banned, and laser shots by players will be blocked but not count as a hack attempt.
- Fixed glitch in Jailbreak where the last free player for a team can get more than 90 seconds to free his or her teammates.
- In Pestilence, made chat message less ambiguous. Now states: "No kills by zombies for 2 minutes means random new zombie".
- Fixed glitch where clients get kicked for an unauthorized file request when the request was legitimate (server-side fix).
- Fixed glitch where JJ2's Galaxy Music System causes a crash if Data Execution Prevention is enabled.
- When No Movement on Stopped Games is enabled, objects no longer automatically spawn during stopped games. Use command `/spawnobjects` to force all allowed objects created by generators to spawn if they aren't spawned already.
- chatlogger window now uses the a new icon.
- Added command line argument "-port=<port>" so that servers can use ports other than 10052 for hosting.
- Note: This version of JJ2+ is no longer compatible with [anonymous]'s JJ2 1.23 Port Changer program.
- Added support so that clients can join servers not listening for connections on port 10052 (client-side change).
- Added support through command line and j2i files for joining servers that are passworded or on a different version of JJ2. When using the command line, use "-connect" before the IP address.
- Formats:
- <ip_address>[:<port>] [-password=<password>] [-version=<server_version>]
- <ip_address>[:<port>][/[<password>][/<server_version>]]
- Values for <server_version>:
- For 1.23, use: 1.23, 23, 1.21, or 21 (all map to "21 ")
- For TSF, use: 1.24 or 24 (both map to "24 ")
- Examples:
- 127.0.0.1:10052 -password=abc -version=1.24
- 127.0.0.1 -password="pw \w ""spaces"""
- 127.0.0.1/abc/1.21
- 127.0.0.1:10058//1.21
- Note that to use a double quotation mark in a password, the double quotation mark must be "escaped" by another double quotation mark. Backslashes do not need to be escaped.
- TSF JJ2+ users can now join any 1.23 server whether through the Game List in the menu, command line argument "-connect", or j2i file (local change). Note that TSF JJ2+ users don't have to specify the server version in command line and j2i file.
- During a game when the escape key is pressed and the menu box is displayed, the arrow keys and tab key can no longer change the spectated target or display the player list on the HUD respectively.
- JJ2 servers now bind to a single local IP address when creating listen sockets.
- Food and Fastfire (fire speed) are now always reset between levels if the game mode is not Single Player or Coop. Plan multiplayer levels accordingly.
- Loading settings no longer turns off Spectator mode if "AllowSpectating" configuration setting is set to false.
- Changed how loading settings after startup works so that missing settings are not automatically set to their defaults.
- Command `/np` now indicates nothing is playing if the music filename is blank.
- All Remote Admin logins are now publicly announced.
- Players who attempt to use invalid shields and weapons are now always automatically kicked on their first hack attempt.
- Finally added configuration settings for the following: WeakPowerups, NoPowerups, NoAmmoCrates, NoCarrots, and NoShields.
- Added command `/fastpoweruprespawn <on|off>` and configuration setting "FastPowerupRespawn" (defaults to off).
- Added command `/noseekerammo <on|off>` and configuration setting "NoSeekerAmmo" (defaults to off).
- Added command `/noseekerpowerups <on|off>` and configuration setting "NoSeekerPowerups" (defaults to off).
- Modified Domination so that a team gains a point for each control point separately depending on when it was captured. Previously, a team gained points all at once depending on the number of captured control points after every x seconds.
- Fixed command line arguments so that "-noddrawwin" isn't required in addition to "-noddraw" to prevent crashes.
- Moved hook for chat function around. Users should see no difference with chat.
- Slowly dropping IPX support.

### Apr 10, 2009

- Fixed glitch where users crashed (usually on the menu screen) after loading JJ2+.
- For protection against players using weapons and shields not available in the current level, weapons and shields added through the extra event parameter of events such as Gun Barrel and Bomb Crate are now properly detected. Also note that if JJ2+ is loaded mid-game, players can use any weapon/shield except the laser shield until the level is cycled. If the game mode is Single Player, players can use any weapon/shield except the laser shield.

### Apr 9, 2009

- Note: This version isn't entirely incompatible with the last version.
- Note: I made changes that may cause clients to never see any objects when they first spawn. Please tell me if this happens often!
- Fixed glitch created in the last update where the server freezes clients after sending too many packets.
- The JJ2+ build date is now displayed on the main menu screen.
- Command `/levellist <shuffle>` now gives an error if all levels could not be shuffled.
- Command `/n` now displays the level number if the next level is from the Level List.
- Improved how Level List Cycling works in general.
- Added command line arguments: Custom Mode: `-rt`, `-lrs`, `-xlrs`, `-pest`, `-tb`, `-dctf`, `-jb`, `-fr`, `-tlrs`, `-dom`, `-list`, `-levellist [<number>]`, `-spaz` (for 1.23), `-menu`, `-minimize`.
- User-defined fur is now always used for online games (as in for Internet Play and Local Network).
- This fixes the behavior where command line argument -connect does not allow user-defined fur by default.
- Fixed glitch where command line argument -server does not assign the server to a valid team.
- Fixed glitch where flag holder's health cannot be seen when spectating a flag.
- Command `/stats` now always logs player stats if there are active players, even when play has not begun.
- Made Auto-Stop more useful:
- When game stops, Auto-Stop now automatically logs player stats and announces who won.
- Now stops overtime games.
- On 'Game Server Setup' screen, can now use "levellist [<number>]" in place of a level filename. When the server starts, JJ2+ will attempt to load the first level (or the level belonging to the specified number) from the Level List.
- Fixed glitch where music could not be heard if volume was initially muted.
- Documentation fix: `/forcespectate <player> <on|off>` should be `/forcespectate <player|all> <on|off>`.
- Added note about Admin Chat. See Remote Admin section below for more details.
- Added Plus Only Features section.
- Reduced probability of seeing "trails" of players who died or warped.
- Reduced probability of clients being able to lose hearts immediately after spawning (the server needs latest version of JJ2+).
- JJ2 no longer freezes or turns off sound when screensaver or monitor low- power activates.
- Fixed glitch (hopefully) where loading plus.exe on the menu screen sometimes causes JJ2 to crash. Note that plus.exe still cannot be loaded on the connecting screen. Please notify me if crashes still occur.
- Download bar on downloading screen should now properly indicate how much of a the file was downloaded.
- In addition, the "<x> bytes received in <y> s" message in the spy log now displays the correct values.
- Probably fixed most issues with connecting and downloading files. Tell me if something fails.
- Clients running the latest version of JJ2+ are no longer kicked if they are downloading when the level cycles.
- Changed how special trigger zones work. See special trigger zones section below.
- The changes may cause problems for levels still using the original special trigger zones, though there should be no major problems if everyone in the server is using the latest version of JJ2+.
- Added a special trigger zone for an overtime trigger. See Special Trigger Zones section below.
- Fixed minor issue where the server does not always update the team trigger for clients.
- Clients in a JJ2+ server will no longer automatically flash locally when hit by the shockwaves of RFs and TNT. This was previously a Plus Only feature.
- Holding down tab now displays player list on HUD as long as the key is pressed.
- Can sort the player list on the Game Info (F9) screen differently by pressing CTRL+F9. Default is state 1. Press once for state 2, twice for state 3, and three times for state 1 again. When F9 is pressed twice, the number of the current state will be displayed to the left of the divider. When tab is held down, state 3 is always used.
- State 1:
- Sort players by player number only.
- State 2:
- Sort players who are not connecting before players who are connecting.
- Then sort players who are not spectating before players who are spectating.
- Then sort players by team if CTF mode.
- Then sort players who are not out/zombies/jailed before players who are out/zombies/jailed.
- Then sort players by player number.
- State 3:
- Sorts players as in state 2
- In addition, sort players by number of points/lives/gems/deaths.
- Added configuration settings for "GameInfo" (defaults to 0, range is [0, 2]) and "PlayerListSort" (defaults to 1, range is [1, 3]).
- Adjusted No Movement on Stopped Games so that players no longer see other players jitter when those other players are not actually moving. Server and clients must have latest version of JJ2+.
- Server and Remote Admin passwords are no longer automatically shown after they are changed.
- Remote Admin password no longer displayed on the HUD. In its place is "Remote Admin" in yellow.
- Fixed glitch where clients sometimes see multiple objects spawn at one place when only one object should have spawned. As a result, most notably clients should no longer see any duplicate carrots which give "fake health" (client- side fix).
- Multiple objects spawned on the same tile with MCEs are now always processed correctly when a non-local player attempts to pickup all of them at once (local fix).
- Fixed the trigger zone switch so that it only switches the trigger state once on contact (local fix).
- Fixed behavior so that when changing a trigger or triggers for a non-Plus client, all triggers except the one(s) currently being set are no longer set to become the same as the server's triggers.
- Fixed glitch where clients using splitscreen do not immediately see health decreases when they stomp one another (server-side fix).
- Added more targets to that can be spectated. See `/spectate <target>` command.
- For Spectator mode, sound now corresponds to the spectated target.
- For Idle Server mode, sound can no longer be heard.
- Added protection against players using weapons and shields not available in the current level. Players using invalid shields and weapons will have their bullets blocked and will be banned if they shoot them too often. Note that if `/nopowerups <on|off>` or `/noshields <on|off>` is used, players will still be allowed to shoot bullets from powerups and shields until the level is cycled.
- JJ2+ messages that are unrelated to commands are no longer preceded by "Console:".
- Changed how basic CTF messages are displayed. Most notably each message is now a single color based on the team.
- In Flag Run, "<player> captured the flag" messages now appear only once on each flag capture (local fix).
- In Jailbreak, if prisoners are released with no active players on either blue team or red team, the jails will will open until there are enough active players.
- Fixed glitch where the check for the number of active players in team games was incorrect.
- Updated plus.exe to improved how levels are added to the Level List. Users can now specify which section levels are added either after being prompted by the program or by using "-section <section_name>" before the level filename arguments. In addition, plus.exe now automatically does renumbering for missing keys and blank level filenames, even when no levels are added to the specified section.
- Added command `/resetsettings` mainly so that admins can reset settings.
- Players running the latest version of JJ2+ who are killed or fall into a pit while using a shield can now immediately use the blaster.
- Playlog improvements:
- Now logs Treasure games.
- Now logs the winners of games.
- Now logs Game Mode changes in addition to Custom Mode changes.
- Auto-Stop now automatically stops the game if there is a winner in Battle- and CTF-based modes.
- Warning: Reaching the score limit with Auto-Stop enabled may cause clients not running JJ2+ or using an older version of JJ2+ to see the game end when the level is not cycling.
- Most generated pickups are now automatically destroyed if they fall into a pit.
- In JJ2+ servers in Treasure mode, players running the latest version of JJ2+ will see an arrow pointing to the nearest exit when they have enough gems to win.
- In Treasure mode, improved cycling when player with enough gems to win reaches exit.
- Objects no longer automatically spawn during stopped games.
- Added command `/spawnobjects` which forces all allowed objects to spawn.
- Increased maximum delay time for generated objects to 255 seconds and added a JCS event parameter so that objects can optionally be delayed from initially spawning until after the delay time specified. Requires replacing lines in JCS.ini. See JCS.ini section below to learn what to do.

### Nov 27, 2008

- Fixed the Plusifier so that overwriting the original JJ2 exe actually works. You do not need to use the Plusifier again if you already have a functioning JJ2+ exe. If you choose to overwrite your original JJ2 exe with the Plusifier, MAKE A BACKUP FIRST!
- Implemented a better fix for the glitch where downloaders can freeze the server.
- The new implementation also fixes the glitch caused by the original implementation where downloads of levels and tilesets were extra slow.
- In Team Last Rabbit Standing, lives are now distributed more evenly.
- LivesPerTeam configuration setting now defaults to 30.
- Added `/maxteamplayers` command and configuration setting (defaults to 16).
- Command `/setlives` no longer can be used during pregame in TLRS.
- Fixed glitch with command `/setlives` in TLRS related to team lives reserves.
- Fixed glitch in TLRS where players start with 0 lives when they join the game with no other active players.
- Made various other fixes to TLRS.
- Fixed glitched in Spectator mode where clients see flashing hearts at top- right corner when spectating flags or no one.
- Fixed glitch where players don't immediately drop the flag when they enter Spectator mode or, in the case of the server, enter Idle Server mode.
- Added music support for MP3/MP2/MP1/OGG/WAV/AIFF and better music support for MOD music.
- Implemented BASS audio library which works on top of JJ2's Galaxy Music System.
- BASS version: 2.4
- Warning: Users not running the latest version of JJ2+ will crash if JJ2 attempts to load any music file that is not a supported module music track.
- Fixed glitch (hopefully) where the music volume would decrease without resetting in online games.
- Restored original behavior for how music works in offline games (for the most part).
- Fixed how the volume works in general.
- Added `/autovolumeleveling` command and configuration setting (defaults to true).
- All `/loadsettings` and `/savesettings` commands can now be used by clients in a server.
- When a client is not an admin in a server, bad commands now always give an error message instead of being printed to the screen.
- Added a better explanation for how to play/make Domination levels.
- In Domination, the number of seconds between each score now depends on the total number of control points in the level. See Domination section below for more details.
- Made minor improvement to the Playlog.
- Fixed glitch where Level List Cycling needlessly changes the next level setting when the custom mode is changed.
- When there is not enough active and potentially active players in the server and the pregame countdown ends, pregame is now extended up to 3 times for 30 seconds. Previously pregame was only extended once for 1 minute.

### Aug 28, 2008

- Added Team Last Rabbit Standing custom mode (uses `/tlrs`).
- Added `/livesperteam` command and configuration setting (defaults to 20).
- Added Domination custom mode (uses `/dom`).
- Fixed glitch in LRS-based modes where players may be in the game (i.e. not out) with a red name.
- Fixed glitch where countdowns for new rounds in Flag Run, Jailbreak, and DCTF are done too quickly.
- Added `/loadsettings <filename>` and `/savesettings <filename>` commands.
- Added `/forcespectate <player> <on|off>` command.
- Added `/joinersspectate <on|off>` command and configuration setting (defaults to false).
- Disabled pause key so that JJ2 no longer freezes.
- Idle Server mode is no longer automatically enabled when the server spectates.
- Players no longer die when Idle Server mode or Spectator mode is enabled.
- Idle Server mode is now automatically disabled when Spectator mode is enabled. Similarly, Spectator mode is now automatically disabled when Idle Server mode is enabled.
- Fixed glitch in camera caused by starting normal Spectator mode after spectating while out in LRS-based modes.
- Various other spectating fixes.
- Added a warning about `/shuffle`: Shuffling teams several seconds after a level cycles or while players are still connecting may cause players to spawn at the wrong start positions.
- Adjusted Death CTF so that when a player scores for the other team, no one dies because of it.
- Added `/resetallteams` command and configuration setting (defaults to true).
- Added `/welcomer <on|off>` command and configuration setting (defaults to false).
- Added `/welcomemessage <message>` command and configuration setting (defaults to an empty string).
- Fixed glitch when No Movement on Stopped Games is enabled where players using JJ2+ do not stop shooting after a game is stopped.
- In LRS-based modes, any one who joins after a player places 4th or 3rd will be automatically out.
- In LRS-based modes, lives are no longer reset for the idle server and spectating players after a new game.
- In XLRS, when the game ends, players can now see the adjusted points on their screen after the points for 1st, 2nd, and 3rd place are multiplied by 1.5, 1.25, and 1.125 respectively.
- Fixed glitch in XLRS where the `/setlives/` command does not update plus users of their current lives.
- Spectating players' names in the Game Info (F9) screen now appear gray.
- Improved spacing for how roast/deaths/lives/points are displayed in Game Info (F9) screen.
- Ice now has a more similarly behavior with server and clients.
- Players running the latest version of JJ2+ will be automatically unfrozen if they die and are freezed.
- Added `/evilice <on|off>` command and configuration setting (defaults to false).
- On Game Info (F9) screen, when F9 is pressed twice:
- "Custom Mode:" text on left side is removed.
- Current Game Mode is now displayed when the Custom Mode is off.
- Below the current Game/Custom mode, the start health (S), max health (M), and the Plus Only status (P) is now displayed. Note that the start health displayed is the minimum of the max health and the actual start health value.
- Command `/setlives` can now be used on connecting players.
- Forgot to mention the optional [reset] parameter which resets the amount of time left for commands /timelimit, /pgtimelimit, and /otlimit.
- Instagib now always displays 1 heart at the top-right of the screen to JJ2+ users. Instagib still overrides Start Health and Max Health settings.
- Added `/smhealth <number|default>` command for setting both Start Health and Max Health at the same time.
- !swap, !blue, and !red messages now always appear before the consequent Console message.
- Command `/reset` now resets lives for LRS and XLRS during pregame.
- Fixed glitch (hopefully) where the random number generator was not properly seeded.
- In Flag Run, players running the latest version of JJ2+ can now see a visual indicator of a capture point.
- Command `/mute` no longer mutes all players when used by the server. See mute command. If the server mutes a player, that player cannot use Self-Swap and admin commands.
- When Even Teams is enabled, clients can no longer use Self-Swap to make teams more uneven.
- Added example levels for Jailbreak (JBlevel.j2l), Flag Run (FRlevel.j2l), and Domination (DOMlevel.j2l).
- Added minor descriptions on how to play Team Last Rabbit Standing and Domination.

### Jul 3, 2008

- Setting Max Health to 1 is now treated more similarly to instagib. Most notably, carrots will no longer respawn just like in instagib.
- Fixed glitch when player warps while the level cycles and then continues warping to a random warp target afterwards.
- Removed constraint where secret levels sometimes cannot cycle to other levels.
- In LRS and XLRS, players who don't get a roast every 3 minutes will no longer be punished by having their health set to one heart. In its place, players who fail to get a roast every 2 minutes will have their position announced in the server. For other incentives for players to get roasts, Health From Kills can be used.
- Fixed up how Late Joiners works with LRS and XLRS. In particular, fixed how players can sometimes rejoin the server with more lives than when they left.
- Added more changes to reduce lag clones and hopefully without significantly increasing the server's lag.
- Command `/levellist <number>` now always gives an error when the Level List file belonging to the specified number cannot be accessed.
- Added `/llautoshuffle` command and configuration setting (defaults to false).
- IdleTime configuration setting now defaults to 3 minutes.

### Jun 22, 2008

- 32MB is now allocated for JJ2's main memory (previously 9MB for 1.23 and 11MB for TSF). This basically means larger music files and levels can be played locally without any Amnesia errors. Only available in the patched JJ2 exe made with the Plusifier. If you already have a patched exe, you MUST use the Plusifier again to access this feature.
- Updated the Plusifier with a save dialog so that any filename can be used for the save file. This means you may accidently overwrite the original exe or another file, so BE CAFEFUL and make backups when necessary.
- Server now does a better job of always relaying flag holder (for CTF) and ring holder (for Roast Tag) positions to clients.
- When No Blink is enabled, clients using the latest version of JJ2+ won't see players blinking after they are hit (server must also have latest version).
- Removed `/capture` command (Team Battle with captures enabled led to bad start positions anyway). May replace with TBCTF eventually, if DCTF isn't good enough.
- In Team Battle, arrow no longer points to flag.
- Fixed glitch where players could not press fire to continue to next level when movement was restricted, such as during spectating, when out in LRS/XLRS, etc.
- Fixed how "Spectator Mode" text is displayed for spectating splitscreeners.
- In Last Rabbit Standing and Extended LRS, players running JJ2+ now automatically spectate when all local players are out.
- Adjusted spectating so that players who are out and CTF flags in certain conditions cannot be spectated. Such conditions for flags include when the current game mode is not CTF and when the custom mode is Team Battle.
- Made spectator camera work more smoothly in certain levels.
- Made the following commands usable by remote admins: list, delist, relist, public, private, servername, maxplayers, password, blockdownloads, multiversion, plusonly, nosplitscreeners, kickidlers, idletime, spectating, ban <ip_address>, unban.
- Needless to say, admins are now more capable of fixing/breaking a server.
- Reduced chance of getting an Amnesia error when /restartmusic is used.
- Admins now always see hack attempts and the IPs of clients who get kicked/banned (when JJ2's default kick/ban commands are not used).
- Changed HFK Health Increase value range from [1, 6] to [-6, 6].
- Restored default behavior of being able to capture flags in offline play.
- Added info and example level for Pit Levels.
- Fixed minor glitch with anti-hack procedures.
- Added `/autosavechatlog` command and configuration setting (defaults to false).
- Improved how JJ2+ logging works in general. In particular, logging for multiple instances of JJ2 is handled better.
- Added ExtendedTNT and TNTDamage configuration settings.
- Added `/selfswap` command and configuration setting (defaults to true).
- Added `/alwaysupdatepos` command and configuration setting (defaults to false).
- LateJoiners configuration setting now defaults to false.
- In LRS and XLRS, players' lives in the Game Info (F9) screen now appear yellow.
- Updated list server addresses located in JJ2's memory (i.e. NOT in registry keys) to use list1.digiex.net and list2.digiex.net.
- Added `/latestversiononly` command and configuration setting (defaults to false).
- Added `/sdteampointdec` command and configuration setting (defaults to true).
- Added `/ffpointdec` command and configuration setting (defaults to false).
- Added a minor section about the Playlog in this readme after Known Issues.

### Apr 9, 2008

- Fixed glitch where clients could not mute players other than the server.
- Fixed glitch where saving the chatlog changes the current working directory of JJ2.
- Remembered to mention the fix for "<player> captured the flag" messages that appeared repeatedly for clients, which was caused by a flag holder colliding into an unmasked border of a CTF level (client-side fix).
- Added older features from Carrotade to the readme.
- LevelList.ini updated: Removed duplicate "[TeamBattle]".

### Apr 5, 2008

- Removed Jazz2+.exe and added plusifier.exe, which can be used to make an exe that can run plus.dll.
- Made beta public, with virtually no last-minute testing.

### Apr 3, 2008

- Fixed glitch when Auto Shuffle is on during Jailbreak, and server dies after warping out of jail.
- Fixed glitch where Auto Shuffle caused players to start at the wrong positions.
- Adjusted how certain packets are sent to hopefully solve sudden crashes for clients in Jailbreak and Pestilence once and for all.
- Added local fix for clients so that certain packets from the server can't cause crashes.
- Added JJ2+ server feature to help alleviate lag clones for clients.
- Clients running JJ2+ no longer see "Game is currently..." messages when a level starts.
- Fixed glitch where game mode and max score changes kick non-Plus clients in private servers and cause glitches for non-Plus clients who are connecting.
- When Plus Only is enabled, players running the latest version of JJ2+
- Won't lose control (and potentially get stuck) when they get hit before or after warping.
- (clients) won't automatically flash locally when hit by the shockwaves of RFs and TNT.
- Fixed glitch where clients would flash when they aren't supposed to (I'd rather not explain this one...)
- Possibly other fixes/features I forgot to mention. I want this update tested as soon as possible.

### Mar 22, 2008

- Fixed glitches caused by rushing the last update:
- Fixed team score glitch in Team Battle when a player self-destructs into a pit.
- Fixed glitch where blinking players are allowed to cause damage to others.
- Fixed glitch in 1.23 where powered-up ice projectiles travel in opposite directions when shot while facing left (a local fix, exactly like the fix TSF has always used).
- For clients running JJ2+, "<team> scored a point" is no longer displayed when a team's score decreases.
- Fixed minor glitch when Even Teams is on and the server joins the game after spectating/idling.
- Added `/nosplitscreeners` command and configuration setting (defaults to false).
- Added `/autoshuffle` command and configuration setting (defaults to false).
- Adjusted `/shuffle` command so that it can be used at any time in CTF mode.
- When Plus Only is enabled in Roast Tag, players running the latest version of JJ2+ now can see an arrow pointing to the ring holder if there is one.
- When no one has the flag in Flag Run, players running the latest version of JJ2+ can now see an arrow pointing to the nearest place the flag can be captured.
- Fixed glitch where spectating clients are unable to properly "rejoin" the game when they stop spectating (thanks for pointing it out, cooba).
- Added `/mute` and `/unmute` commands.
- Renamed files from 'cade' to 'plus'. This means Jazz2+.exe and plus.exe now use plus.dll.
- Updated the dll loader (plus.exe) to use Gry's method, since the original method was too unreliable.

### Mar 14, 2008

- Added `/plusonly` command.
- In configuration ini file, moved HfkMaxHealth, HfkHealthInc, and FriendlyFire from [CustomMode] to [Add-on].
- Added PunishSDs configuration setting.
- Fixed glitch where Pregame Time Limit doesn't save the configuration setting for 15s and 30s time limits properly.
- HFK no longer reduces the HFK Max Health setting if HFK Max Health is lower than the general Max Health, but players will still not be able to get more health than the general Max Health. See `/hfkmaxhealth` and `/maxhealth` commands.
- Added `/starthealth` and `/maxhealth` commands and configuration settings (both default to 'Default'). Warning: Not friendly to clients not running the latest version of JJ2+.
- Fixed glitch for clients related to 'CTF' games in levels that don't have both flags (false "captured the flag" messages).
- Added additional disconnect messages for the 'Network Error' screen.
- For the server: If a player is running an old/incompatible version of JJ2+, a red circle now appears behind the Plus sign shown next to that player's name on the Game Info (F9) screen.
- Friendly Fire no longer affects Roast Tag. This means there's no longer the option to allow players who don't have the ring and aren't the bottom feeder to hurt each other when someone has the ring (not that it was used often). Friendly Fire still doesn't affect Pestilence.
- Friendly Fire now affects team games if Plus Only is enabled (clients need latest JJ2+ version).
- When Plus Only is enabled, players will be unable to hit or push other players under certain conditions:
- In Roast Tag, when there is a ring holder and neither the killer or the victim is the ring holder or the bottom feeder.
- In Pestilence, zombies can't hit/push other zombies. And when there's at least one zombie, non-zombies can't hit/push other non-zombies.
- In Jailbreak, free players can't hit/push jailed players.
- When Passing, Friendly Fire, and Plus Only are enabled, a pass to another teammate can be done with any hit.
- Modified `/swap` command so that flag holder's team can be changed (it slightly distorts player stats, but then again, so does `/k` and a few other commands).
- In Jailbreak, players running the latest version of JJ2+ cannot be freed by the other team or wallclimb. Specifically, players won't be able to freeze objects inside the jail of the other team.

### Feb 17, 2008

- Added shortcut SHIFT+F2 for minimizing JJ2 to tray (blame Gry). Note: cannot be used in fullscreen mode.
- Fixed glitch in Flag Run where the server only sees one flag (either red or blue) captured when a client steals the flag.
- Just a note: the pepper spray fix (for respawning events) probably requires clients to use it too.
- Fixed minor glitch with autostop and autocycle commands when they are turned on during a stopped game.
- During a stopped normal untimed game, "STOPPED" is now displayed at top- right corner.
- When game is stopped, "OT", "PG", and "TG" is displayed to the left of the timer for overtime, pregame, and normal timed games respectively.
- Added timer for JJ2+ clients in JJ2+ servers.
- Added "plus" indicator for JJ2+ clients in JJ2+ servers when F9 is pressed twice (see features).
- Current Custom Mode is now displayed on the left side of the screen when F9 is pressed twice.
- Added `/ban <ip_address>` and `/unban` commands for server (cannot be used by admins).
- Fixed glitch where user gets sent to 'Start Multiplayer game' screen after pressing 'Done' on 'Game Server Setup' screen. This glitch occurs after pressing escape on 'Players on this computer' screen.
- On 'Game Server Setup' screen, pressing 'Done' now sets menu to 'Select a Level' when level does not exist.

### Jan 17, 2008

- Fixed glitch with `/shuffle` where clients could not see the update teams.
- Modified an undocumented feature that may or may not be in the final release.
- Wallclimbing configuration setting now defaults to false.
- Added AllowSpectating configuration setting (defaults to false).
- Fixed glitch in Treasure mode where leaving clients don't explode off their gems. The problem is related to the seeker hole fix...

### Jan 11, 2008

- Added `/wc` (wallclimbing) command and configuration setting (defaults to true).
- Sugar rush music now stops immediately after dying with a sugar rush (not for splitscreeners though...).
- Auto-Stop (still a poor command name) now stops the game after overtime.
- Reduced probability of clients causing damage to others by stomping/kicking/uppercutting the "ghost" of another player.
- Made one more precaution before sending certain packets (in hope of ceasing client crashing problems).
- Added issue with Game Mode and Max Score changes to Known Issues.
- Fixed glitch with `/eventeams` where splitscreeners don't join on the opposite team of the server.
- Fixed glitch where events on the far-left side of levels stop respawning for clients (only the server must be running JJ2+). Such an event is the infamous copter in battle1. Special thanks goes to a random player named Emo for shooting pepper spray (the cause of the glitch) in my Battle Game XC server.
- Updated the dll loader (cade.exe) so that it hopefully works on Wine and I suppose all reasonably versions of Windows. It probably does. The dll loader now requires the dll to be in the same directory as the JJ2 exe though.

### Jan 5, 2008

- Added `/ptrigger` command for changing the triggers of just one player (Note: if a client is splitscreening, this command cannot be used to give each splitscreener of that client different triggers).
- Significantly reduced amount of TCP sent from the server to clients in general.
- This means Jailbreak and Pestilence should cause fewer crashes to clients!
- Fixed `/maxscore` command so it doesn't time-out non-Plus clients
- Unfortunately, I'm now sending even more TCP to non-Plus clients when changing game mode or score, so it would be a good idea to avoid game mode changes whenever possible.
- Timers for Flag Run and Roast Tag no longer continue when game is stopped.
- The `/rename` command now says "<old_name> was renamed to <new_name>" on success.
- Clients running this program no longer see negative team scores when a team's score is between 128 and 255.
- Added loading issue to Known Issues.
- Added `/changemusic`, `/restartmusic`, and `/np` (now playing) commands.
- Chat field no longer disappears on level cycle.
- Hearts now always display right to left. This makes it easier to see more than 5 hearts on the display.
- Spectators' displays now look similar to the display of the player they are spectating, including number of hearts, roasts/gems, and current weapon (current weapon is based on last fired shot). Since ammo cannot be accurately determined, an infinity sign is used instead of a number.

### Dec 21, 2007

- For LRS and XLRS:
- amount of time for a player not roasting before health getting set to 1 changed from 2 minutes to 3
- Jailed name now only has 1 asterisk (i.e. "BlurredD" becomes "*BlurredD").
- Made order of who gets the flag in Flag Run based on captures.
- i.e. if player 1 has 4 captures and player 2 has 3 captures, and they both go for the flag at the same time, player 2 gets the flag.
- if two or more players who go after the flag have the same number of captures, the flag is given to one of those players randomly.
- Random anti-crash fixes (unfortunately no major fixes for Jailbreak client crashes, yet..)
- In Flag Run, capturing and scoring the flag is now more similar to what's done in normal CTF. Basically this means clients are now more likely to score or capture the flag the instance they try to score or capture.

### Miscellaneous features/fixes added before Dec 21, 2007

- Fixed Team Chat.
- Fixed cycling while minimized (for the most part).
- Weapon Respawn fix.
- Seeker Hole fix (local fix).
- CTF fixes for the following:
- Recapturing enemy flag immediately after death (fixed for the most part).
- Disappearing flags.
- Fixed glitch where clients can join private server without a password (server-side fix).
- Fixed online RF missle glitches:
- Recoil from RF missles no longer causes fake health for clients.
- Recoil from RF missles that were not powered-up now only does 1 heart damage.
- Fixed glitch related to level filename lengths which cause clients to suddenly disconnect.
- Reduced probability of clients getting fake health from carrots (server-side fix).
- Added Spectator Mode. Note that spectating players cannot send or receive team chat.
- Added Flag Passing, which requires the receiver to hold the up arrow when shot by RF missiles by the flag holder.

## New features and bug fixes

Note that this section is updated rather arbitrarily. For a much fuller sense of JJ2+'s contributions, read the Latest Changes section instead.

- Fixed problem (hopefully) where some clients timeout in a server after 30 seconds. This is mainly a server-side fix, but to ensure all UDP packets are received, clients must be running the latest version of JJ2+ as well. Special thanks to SuPrem and Cpp (Overlord) for helping me find the problem.
- Fixed players from appearing to go outside the level (both client and server need to use JJ2+).
- Fixed all major access violation issues.
- Improved how downloading files works.
- Improved how objects spawn.
- Improved issues with fake health.
- SHIFT+F2 minimizes JJ2 to tray (blame Gry). Note: cannot be used in fullscreen mode.
- 32MB is now allocated for JJ2's main memory (previously 9MB for 1.23 and 11MB for TSF). This basically means larger music files and levels can be played locally without any Amnesia errors. Only available in the patched JJ2 exe made with the Plusifier.
- Added music support for MP3/MP2/MP1/OGG/WAV/AIFF and better music support for MOD music.
- Implemented BASS audio library which works on top of JJ2's Galaxy Music System.
- BASS version: 2.4.9
- Warning: Users not running the latest version of JJ2+ WILL CRASH if JJ2 attempts to load any music file that is not a supported module music track.
- Added support through command line and j2i files for joining servers that are passworded or on a different version of JJ2. When using the command line, use "-connect" before the IP address.
- Formats:
- <ip_address>[:<port>] [-password=<password>] [-version=<server_version>]
- <ip_address>[:<port>][/[<password>][/<server_version>]]
- Values for <server_version>:
- For 1.23, use: 1.23, 23, 1.21, or 21 (all map to "21 ")
- For TSF, use: 1.24 or 24 (both map to "24 ")
- Examples:
- 127.0.0.1:10052 -password=abc -version=1.24
- 127.0.0.1 -password="pw \w ""spaces"""
- 127.0.0.1/abc/1.21
- 127.0.0.1:10058//1.21
- Note that to use a double quotation mark in a password, the double quotation mark must be "escaped" by another double quotation mark. Backslashes do not need to be escaped.
- TSF JJ2+ users can now join any 1.23 server, and 1.23 JJ2+ users can join all TSF JJ2+ servers.
- 1.23 may now play levels that use TSF tilesets or were otherwise compiled in the TSF JCS, no matter the number of tiles. Enemies exclusive to TSF and HH98 will be displayed as their regular 1.23 counterparts. (XMas Lizard to Lizard, Cat to Doggy Dogg, etc.)
- Overtime and Pregame modes.
- Spectator mode.
- Optionally replacing Pepper Spray with the OEM Fireball gun.
- Server Game Info (F9) features.
- Plus sign shown next to name for players running Plus (blue for 1.23, green for TSF).
- A red circle appears behind the Plus sign if a player is running an old/incompatible version of JJ2+.
- Exclamation point shown next to player names if they are using a different version of JJ2 than the server.
- Other Game Info (F9) features (for both server and clients in Plus servers).
- For JJ2+ clients in JJ2+ servers, gray plus sign shown next to name for players running Plus.
- "C" shown to the right of name to indicate connecting client.
- "D" shown to the right of name to indicate downloading client.
- "A" indicates client has admin access.
- "S" indicates player is spectating.
- "M" indicates player is muted.
- Point count shown for CTF mode.
- Death count shown for Battle and CTF modes.
- On left side when F9 is pressed twice:
- Below the level name and player's position, Current Game or Custom Mode is displayed.
- Below the current Game/Custom mode, the start health (S), max health (M), and the Plus Only status (P) is now displayed. Note that the start health displayed is the minimum of the max health and the actual start health value.
- Holding down tab now displays player list on HUD as long as the key is pressed.
- Can sort the player list on the Game Info (F9) screen differently by pressing CTRL+F9. Default is state 1. Press once for state 2, twice for state 3, and three times for state 1 again. When F9 is pressed twice, the number of the current state will be displayed to the left of the divider. When tab is held down, state 3 is always used.
- State 1:
- Sort players by player number only.
- State 2:
- Sort players who are not connecting before players who are connecting.
- Then sort players who are not spectating before players who are spectating.
- Then sort players by team if CTF mode.
- Then sort players who are not out/zombies/jailed before players who are out/zombies/jailed.
- Then sort players by player number.
- State 3:
- Sorts players as in state 2
- In addition, sort players by number of points/lives/gems/deaths.
- Various game mode improvements.
- New custom modes:
- For Battle Mode:
- Pestilence (roasted rabbits get morphed into zombies, so live long and roast for points).
- Last Rabbit Standing (players have lives, last player with lives wins).
- Extended Last Rabbit Standing (players have lives, but win by points).
- Points for 1st, 2nd, and 3rd place get multiplied by 1.5, 1.25, and 1.125 respectively.
- Roast Tag (roast the ring holder, the player with the green name, to become IT).
- Only the player who is IT or becomes IT receives points from roasts.
- For CTF Mode:
- Team Battle (roast is 1 team point, i.e. Battle mode, but with teams).
- Death CTF (roast is 1 team point, flag score points equals 1 + number of enemy team).
- On flag scores, either the enemy team or both teams die depending on settings -- see `/resetallteams`.
- Jailbreak (those roasted go to jail and must be freed with ice, score by jailing entire enemy team).
- For those who want to make JB levels:
- Trigger ID 30 is for release prisoners and Trigger ID 29 is for overtime.
- The overtime trigger is mainly meant to prevent freeing players with ice on either team.
- Flag Run (one flag for both teams, score by taking it into the enemy's base).
- Team Last Rabbit Standing (players have lives, team has total lives, last team with lives wins).
- Domination (teams capture control points, get 1 point for each control point they own every 5-20 seconds).
- Special features which are only enabled when Plus Only and/or Latest Version Only is enabled. See Plus Only Features section below.
- Scripting language (AngelScript) support.
- Mouse aim mode.
- Special trigger zones that sets triggers for all players. See Special Trigger Zones section below.
- New and updated JCS Events. See JCS.ini section below to learn more.
- Older features and bug fixes from Carrotade:
- Death from pits (the event at the bottom-right corner of level must be 255).
- Level List cycling. See Level List section below.
- Automatic level cycling.
- Chat, stats, and IP logging.
- Anti-cheat protection.
- Idle player or spammer kicking.
- Idle Server mode.
- Remote Admin.
- Created additional command line arguments (see New Command Line Arguments section below).

Note: See commands below for additional features.

## Known Issues

This is, naturally, only a partial list, but hopefully it covers some of the more egregious issues.

- The TSF: LK Avalon version of JJ2 is not supported and most likely will never be supported.
- Currently, JJ2 performs extremely poorly on Windows 8 in fullscreen mode. See this thread for some suggestions for how to deal with this on your own.
- Downloaders cannot receive chat, for lag reasons.
- Downloaders not running the latest version of JJ2+ will get kicked when the level changes, and this is the best solution for now.
- Loading plus.exe while starting a server (when the screen is all black), or on the connecting screen will cause JJ2 to crash.
- Game Mode and Max Score changes causes glitches for splitscreeners not running JJ2+.
- Changing a player's team may lead to bad triggers (such as for team-based triggers) depending on the level.
- Shuffling teams while splitscreeners are in the server may cause bad triggers as well as other problems.
- Reaching the score limit with Auto-Stop enabled may cause clients not running JJ2+ or using an older version of JJ2+ to see the game end when the level is not cycling.
- Receiving too many chat messages in too short a time may freeze the game when it's not the focused window.
- Some menu options corresponding to console commands are only available for the player hosting the server, not for remote admins.
- The fireball gun will display as pepper spray for anyone not running the latest JJ2+ version.
- When playing in reverse gravity, players may sometimes get temporarily stuck against slopes below them.
- Player's names may be miscolored if they spectate in a non-team gamemode and then unspectate after the server switches to a team gamemode.
- Tile fragments (e.g. from destruct scenery) do not support tile types (e.g. transparent) or vertically flipped tiles.
- Sugar rushes and shields and the like count down while the game is stopped.
- Script state is not saved over single player load/saves.
- Leaving the game running for a very long period of time (several weeks or more) may cause certain time-related features to misfunction.
- 1.23's odd ability to read text strings of IDs higher than 15 has been lost, perhaps temporarily.
- Hardware Acceleration mode has been removed from the game.

## Playlog

The Points stat is based on the number of roasts a player has and includes point decreases from pit deaths and similar. In other words, it's the number of "roasts" you see on the screen during a JJ2 game. The Roasts stat is strictly the number of kills a player has in a given game. This is true for all custom modes and game modes that record these stats. For custom modes like Roast Tag and battle games with pits, "Points" makes a lot more sense. I know it's not immediately obvious what points and roasts means in the Playlog, especially in team games, but now you know. I am considering using the word "Points" in the HUD for Battle mode in the near future.

## Level List and Zipping Levels

plus.exe also serves two main purposes: adding levels to the Level List (in file LevelList.ini) and zipping levels including their tilesets, music, scripts, and other linked levels automatically. Note that levels can be added to the Level List and a zip file at the same time.

### Level List

To add levels to the Level List, you can select the levels within your JJ2 folder and drag them over plus.exe. Arguments can be used to skip the prompts.

#### plus.exe arguments for Level List:

-addtolist
  Used to add levels to the Level List.
-section <section_name>
  Specifies which section levels are added.
-link, -nolink
  Add/Don't add the levels linked to the specified levels.
-excludefile <filename>
  Specifies file which lists files to exclude from being added to the Level List.
  See default exclude file plus-exclude.txt which is automatically used.
-noexclude
  Exclude no files from being added to the Level List. This overrides the default where files listed in plus-exclude.txt are automatically excluded.

#### Example shortcuts:

plus.exe -addtolist -nolink
  Add levels, don't get linked levels, prompt for section name.
plus.exe -addtolist -section CTF -link
  Add levels to Level List section "CTF", get linked levels (useful for level packs).

In addition, plus.exe automatically does renumbering for missing keys and blank level filenames, even when no levels are added to the specified section. You can also write the filenames directly into LevelList.ini directly. The "j2l" extension must be included. This is the general format of LevelList.ini:

    [Battle]
    001=levelfilename.j2l

The default section names, based on gamemode, are Battle, TeamBattle, CTF, Treasure, SinglePlayer, Race, FlagRun, and Jailbreak. The number before the equal sign must be between 001 and 999, and the leading zeros are required.

On 'Game Server Setup' screen, you can use "levellist [<number>]" in place of a level filename. When the server starts, JJ2+ will attempt to load the first level (or the level belonging to the specified number) from the Level List.

See Cycling and Next Level Commands in the Server Only Commands section for the Level List commands.

### Zipping Levels

To zip levels to a zip file, you can select the levels you want and drag them over plus.exe or simply click plus.exe and follow the prompts to add levels from a Level List section. Arguments can be used to skip the prompts.

#### plus.exe arguments for Zipping Levels:

-addtozip
  Used to add levels to a zip file.
-zip <zip_filename>
  Specifies zip filename. This argument doesn't need to be used with -addtozip.
-overwrite
  If zip file exists, overwrite zip.
-append
  If zip file exists, append files to zip and overwrite duplicate files within the original zip.
  Zip file cannot contain passworded files.
-fastappend
  If zip file exists, append files to zip. Duplicate files within the original zip are always added, which will lead to a situation where more than one file has the same filename. Note that this option is not provided as a prompt.
-addsection, -nosection
  Add/Don't add the levels from a Level List section.
-section <section_name>
  Add all levels from the specified Level List section to the zip. This argument doesn't need to be used with -addsection.
-link, -nolink
  Add/Don't add the levels linked to the specified levels.
-tilesets, -notilesets
  Add/Don't add the tilesets of the specified levels.
-music, -nomusic
  Add/Don't add the music of the specified levels.
-excludefile <filename>
  Specifies file which lists files to exclude from being zipped.
  See default exclude file plus-exclude.txt which is automatically used.
-noexclude
  Exclude no files from being zipped. This overrides the default where files listed in plus-exclude.txt are automatically excluded.

#### Example shortcuts:

plus.exe -addtozip -overwrite -nosection -link
  Zip levels, prompt for zip save filename, overwrite existing zip, get linked levels, prompt for getting tilesets and music.
plus.exe -addtozip -zip mypack.zip -append -addsection -nolink -tilesets -music
  Zip levels, add to zip file "mypack.zip", append files to existing zip, add section from Level List specified through prompt, don't get linked levels, get tilesets and music.

## Remote Admin

When Remote Admin is enabled (`/remoteadmin on`), a client can be promoted to an admin and given access to certain server commands. A client can become an admin either by typing the command `/login <password>` or, for newer versions of JJ2+, by having an Auto Admin IP address.

The latest versions of JJ2+ offers the ability to manage admin groups. For each admin group, the following can be set: the password, allowed commands (or blocked commands), Auto Admin IP addresses, and whether the group is currently enabled. Auto Admin IP addresses allow a user to be automatically promoted to an admin for a given group when joining the server. The password must be between 8 to 20 characters long and must contain only letters and numbers. If no password or an invalid password has been stored for an admin group in the admin configuration file (admin.ini), a valid password will have to be specified later before that group can be used. Passwords are NOT case sensitive. Any attempt to login (whether Remote Admin is enabled or not) as well as any command issued by an admin will be hidden to any player in the server who is not an admin.

For the commands `/c <level_filename>` and `/n <level_filename>`, the admin is limited to the levels that can be found in the Level List (LevelList.ini). The server and admins are able to use Admin Chat--chat only viewable by the server and admins--by prefixing their chat messages with ">". For players running JJ2+, F9 can be used to see who has Admin Access. Those who do will have a green "A" next to their name.

Since an admin may have considerable access to server commands, it is especially important to make sure those who have the admin password can be trusted.

## Roast Tag

This is a custom gametype where one player can become it (i.e. the player who has "Eva's Ring" and has a green name), and everyone else tries to roast that player. When no one is it yet, there is a free-for-all, and the first player to get a roast receives three points then becomes it. Afterwards, any time a player kills the one that is it, the killer will become it. In addition, the player with the least points and most deaths will become the bottom feeder and will get a red name. Whenever someone is it, the other players, excluding the bottom feeder, cannot receive points unless they roast the player who is it. The bottom feeder can receive one point for roasting normal players (i.e. players without colored names).

After the first roast, the player who is it receives one point for roasting a normal player, and the points received increase by one after each roast of a normal player for a maximum of five points. Whoever is it will always receive three points for roasting the bottom feeder. Furthermore, the player that is it must get a roast every 90 seconds, or else that player will lose a point and cease to be it. After that, there is another free-for-all.

Roast Tag is enabled by the `/rt` command.

## Flag Run

In this gamemode derived from Unreal Tournament 2004, there is one "flag" which both teams can capture, usually located somewhere in the middle of the level. The flag holder must return the flag to the opponent's base before time runs out or else the flag holder will self-destruct and lose the flag. The flag holder's team has 45 seconds to score on flag captures, and 30 seconds to score on flag steals. A flag can be stolen by roasting the flag holder when he/she has 15 seconds or less to score.

Scoring:

- 45-31 seconds left: 3 points + extra points
- 30-16 seconds left: 2 points + extra points
- 15-0 seconds left: 1 point + extra points

On flag captures, extra points start at 0.

On flag passes and flag steals, extra points get set to 1.

Each roast by the flag holder adds 1 extra point.

Extra points can be 3 at the most.

Flag Run is enabled by the `/fr` command.

## Team Last Rabbit Standing

Teams have a set number of lives which are divided among the players of a team. No player cannot receive more points than Max Lives. If there are lives left over, they go into a team's reserves. When players lose all their lives, and their team has reserves, the remaining reserves are divided among all players of the same team who are out. Game ends when only one team has remaining lives left.

Team Last Rabbit Standing is enabled by the `/tlrs` command.

## Domination

Teams try to capture the control points in a level. Each team gains a point for each control point separately every 5-20 seconds depending on when it was captured. The number of seconds between each score depends on the total number of control points in the level:

1-4 control points: 5 seconds

5-8 control points: 10 seconds

9-12 control points: 15 seconds

13-16 control points: 20 seconds

Neutral control points (that is, control points not controlled by any team yet) are shown as a spinning white circle. Once a player touches it, after a one second delay the control point will turn into a Super Gem in the color of the player's team. Captured control points can then be captured by another team in a similar manner. The team that currently holds a control point can prevent its capture by another team by touching the control point within a second after another team has touched it.

In JCS, control points are created by marking any event as Easy or Hard. Control points marked as "Easy" face to the right, while control points marked as "Hard" face to the left. If the event used is a text event, the control point is named after the text string used with that event. If the event used is NOT a text event, the control point will be automatically named based on it's relative position to other control points. For example, if there are two control points and none of them use a text event, the control point closest to the top and furthest to the left would be named "Control Point 1", and the other control point would be named "Control Point 2." The control point ordering goes from top to bottom and left to right.

Domination is enabled by the `/dom` command.

## Pit Levels

Enabling pits makes it so players die when they hit the bottom of the level. If ammo, carrots, or other pickups are shot down and fall into a pit, they will be destroyed. For a level to be able to use pits, the event at the bottom-right corner of level must be "MCE Event" (#255). If the event in the bottom-right corner of the level is "One Way" (#1) instead of #255, the bottom of the level will function as a solid floor, instead of as a death pit.

Fly carrots, airboards, copters, and water are recommended not to be used with pits. Start positions, warp targets, and platforms should not be placed too close to the bottom of a level since this may cause clients to get stuck at the bottom. Warp targets where players can fall into a pit without landing on a platform must especially be avoided.

## Trigger Zones

Some things to know first: Whenever a client first spawns in a level, the client receives all of the server's trigger settings. This behavior is needed to make many levels work, but causes problems for others. Levels that will have problems include those which use a trigger for team-based routes. This section addresses these issues.

With JJ2+, the trigger IDs of the trigger zones placed on the bottom row of a level will receive special properties. Several trigger zones have specific uses. When the server sends its trigger settings to clients, the trigger settings will be adjusted depending on the client. For the following triggers, note that "Position <number>" means place the trigger zone at position (<number>, <level_height>) in JCS. For example, to set the server trigger in a level with 50 as its height, you would place a trigger zone at (2, 50).

- Position 1: Team trigger
- When the trigger zone's onoff state equals 0, the trigger is set on for red team, off for blue team.
- When the trigger zone's onoff state equals 1, the trigger is set on for blue team, off for red team.
- Position 2: Server trigger
- The trigger is set on for server, off for clients.
- Position 3: Overtime trigger
- The trigger is always set on when overtime begins.

Any other trigger zone placed on the bottom row of a level will have its trigger set to off when trigger settings are sent to clients. In addition, clients running the latest version of JJ2+ will always ignore their trigger settings.

Note: I plan on giving other uses for trigger zones after position 3, so if you want a trigger to always be off/ignored by clients, place its trigger zone at the bottom right of your level.

## JCS.ini

To use special events recognized only by JJ2+, you must replace certain lines in your JCS.ini, which should be located in the same folder as JCS.exe. It's recommended to update JCS.ini before opening levels that take advantage of these JCS event changes, since some of the level's data may be lost when they attempt to save it.

### Oct 19 2013 Additions

Three new textured background effects have been added to JJ2 besides "Warp Horizon." The first, "Tunnel," is most similar to Warp Horizon, except that it draws the texture in a circle around a fade spot instead of as two planes above and below a fade line. See `Psych2.j2l` for an example.

The "Menu" textured background is the familiar effect from JJ2's main menus, complete with numerous little Jazz Jackrabbit 2 logos. The "Palrow 16," "Palrow 32," and "Palrow 256" parameters choose which colors from the tileset palette each layer of the background will use. For example, if you set Palrow 256 to 112, the JJ2 logos will only use colors from the 112-127 range. No layer uses all 16 colors from a row, so feel free to move the number up and down a little for the best-looking result. See `plusMenu.j2l` for an example.

(Some tilesets' palettes have gradients ranging from dark to light, and others from light to dark. Therefore, checking the "Parallaxing Stars" checkbox with a Menu textured background will reverse the background's expectations for which order to grab its colors in.)

The "Tile Menu" textured background uses the same code as the "Menu" background to draw, but draws tiles from the tileset instead! The front layer is filled with the 8x8 texture in layer 8 (or whatever texture is specified with the AngelScript property `jjTexturedBGTexture`). The middle layer is filled with the 2x2 square set of tiles in the top left corner of layer 4, from 0,0 to 1,1, and the back layer is filled with tile 0,2 in layer 4. See `plusSurvivor.j2l` for an example.

    0=Warp Horizon				|Fade Red  |Fade Green |Fade Blue
    1=Tunnel				|Fade Red  |Fade Green |Fade Blue
    2=Menu					|Palrow 16 |Palrow 32  |Palrow 256
    3=Tile Menu

Or, if using MLLE:

    0=3D Planes (Layer 8)         |+|Parallaxing stars|Fade Color
    1=Tunnel (Layer 8)            |+|Spiral|Fade Color
    2=Menu (Layer 8)              |-|Reverse gradients|Palrow 16|Palrow 32|Palrow 256
    3=Tile Menu (Layer 8)

Three new tile types have been added to JJ2. "Invisible" tiles are simply not drawn at all; this can be used with tilesets that do not include empty masked tiles on their own, or else to make a certain set of tiles seem to disappear. "Frozen" tiles are drawn blue and semi-translucently, using the same effect as frozen rotating rocks or shootable pole objects. "Heat Effect" tiles, a feature planned for JJ2 but never implemented, are drawn wavily to the screen as if seen through intense heat.

    1=Translucent
    3=Invisible
    4=Caption
    5=Heat Effect
    6=Frozen

### Feb 4 2013 Additions

Slide (event 5) now provides control over its strength.

    5=Slide                             |+|Modifier  |Slide    |       |Strength:2

### Jan 28 2013 Additions

Limit X Scroll (event 24) now offers additional control over the limits placed on horizontal scrolling.

The "Left" parameter specifies what column should be the farthest left point in the level that the player can move to. If left at 0, this defaults to whatever column the event itself is in, for full backwards compatibility.

The "Width" parameter, if greater than 0, specifies the distance in tiles) between the farthest left point and the farthest right point that the player can move to. Additionally, if "Width" is greater than 0, these two points will scroll to their specified targets.

See plusLimitX.j2l for a basic example.

    24=Limit X Scroll                   |+|Modifier  |Limit  |Xscroll|Left:10|Width:10

Bomb Crate (event 52) can be used to create a crate with no default contents at all, only whatever you specify through ExtraEvent and NumEvent. The same change is not applied to other crate events because that would be pointless.

    52=Bomb Crate                       |+|Goodies   |Bomb    |Crate |ExtraEvent:8|NumEvent:4|RandomFly:1|NoBomb:1

Extra Time (event 89) is now used for the Player Timer feature new in JJ2+ (see plusTimerEx.j2l and PlusTimerEx.j2as). Its Seconds parameter defaults to 10 if left empty.

    89=Extra Time                       |+|Goodies   |Extra  |Time   |Seconds:7

The horizontal spring events now have a parameter to reverse their direction from what it would otherwise be, analogous to the "Ceiling" parameter on non-horizontal springs. This should primarily be used to create leftward-facing springs in midair, but may also be used by cruel people to create springs that point directly into walls.

    91=Hor Red Spring                   |+|Spring    |H-Red  |Spring |Empty:2|Keep Y-Speed:1|Delay:4|Reverse:1
    92=Hor Green Spring                 |+|Spring    |H-Green|Spring |Empty:2|Keep Y-Speed:1|Delay:4|Reverse:1
    93=Hor Blue Spring                  |+|Spring    |H-Blue |Spring |Empty:2|Keep Y-Speed:1|Delay:4|Reverse:1

Trigger Crate (event 95) now can disable and toggle triggers as well as enabling them. These parameters work exactly the same as for Trigger Zone, except "off" defaults to enabling the trigger and only disables the trigger when set to 1, whereas Trigger Zone's "onoff" default to disabling the trigger and only enables the trigger when set to 1.

    95=Scenery Trigger Crate            |+|Trigger   |Trig   |Crate  |TriggerID:5|off:1|switch:1

Steady Light (event 148) and Pulze Light (event 149) can now create different types and sizes of light source. The types are:

0. Normal light
1. Single point (ignores the "Size" parameter)
2. Single point (brighter) (ignores the "Size" parameter)
3. Flicker light
4. Bright normal light
5. Laser shield/Illuminate Surroundings
6. Ring of light
7. Ring of light 2

    148=Steady Light                    |+|Light     |Steady |Light |Type:3 |Size:7
    149=Pulse Light                     |+|Light     |Pulse  |Light |Speed:8|Sync:4|Type:3|Size:5

Or, if using MLLE:

    148=Steady Light                    |+|Light     |Steady |Light  |Type: {Normal,Point,Point2,Flicker,Bright,Laser,Ring,Ring2}3 |Size:7
    149=Pulse Light                     |+|Light     |Pulse  |Light  |Speed:8|Sync:4|Type: {Normal,Point,Point2,Flicker,Bright,Laser,Ring,Ring2}3|Size:5

Sucker Tube (event 206) now allows an alternate Noclip Mode. While in Noclip Mode, a player ignores walls and is unfettered by gravity and deceleration. The parameter "BecomeNoclip" determines whether using the event causes the player to enter Noclip Mode; the parameter "Noclip Only" determines whether the player must already be in Noclip Mode to use the event. A player in Noclip Mode cannot use a sucker tube event with Noclip Only set to 0, nor can a player not in Noclip Mode use a sucker tube event with Noclip Only set to 1.

Thus, to enter Noclip Mode, Noclip Only should be set to 0 and BecomeNoclip to 1. To resume normal play, Noclip Only should be set to 1 and BecomeNoclip to 0.

    206=Sucker Tube                     |+|Object    |Suck   |      |X-Speed:-7|Y-Speed:-7|Trig Sample:1|BecomeNoclip:1|Noclip Only:1|WaitTime:3

Text (event 207) now allows the player to view only one substring of a greater help string. The substrings are delimited by the vertical pipe character (|), just like for the end of level events, and "Offset" determines which substring will be viewed. The first substring cannot be displayed independently, since an Offset value of 0 will default to displaying the entire string.

For example, with help string 2 being set to "Zero|One|Two|Three", setting TextID to 2 and Offset to 3 will display the word "Three" onscreen, instead of the entire help string. Offset 1 will display "One", and Offset 0 will display "Zero|One|Two|Three".

See plus-angelscript.html for information about the "AngelScript" parameter.

    207=Text                            |+|Trigger   |Text   |      |TextID:8|Vanish:1|AngelScript:1|Offset:8

Water Level (event 208) can be configured to allow ambient lighting and water to exist simultaneously if the "Lighting" parameter is set to 1. Alternatively, setting it to 3 will ignore the level's ambient lighting setting but will cause the level to appear progressively darker the farther underwater the player is. Value 2 is not yet implemented and so should not be used.

    208=Water Level                     |+|Scenery   |Water  |      |Height (Tiles):8|Instant:1|Lighting:2

Or, if using MLLE:

    208=Water Level                     |+|Scenery   |Water  |      |Height (Tiles):8|Instant:c1|Lighting:{Off, On, ???, Lagunicus}2

Warp (event 230) can now warp players instantaneously to their targets, without playing a sound effect or showing warping animations.

    230=Warp                            |+|Area      |Warp   |      |ID:8|Coins:8|SetLap:1|ShowAnim:1|Fast:1

No Fire Zone (event 245) now provides much finer control and a wider variety of gameplay alterations. By default, the player is unable to fire while standing in the zone. If "Set To" is set to 2, the player will be unable to fire even after leaving the tile. Setting "Set To" to 1 will disable the effect. Finally, setting "Set To" to 3 will toggle the effect, like the "switch" parameter on trigger zones.

By setting "Var" to 1, the event will turn on and off a reverse gravity mode instead of a no-firing mode. This mode is in its early stages of development; it works well with springs, warps, belts, sucker tubes, and the "Hook," "Vine," and "One Way" events, but it has not been tested with most other events and may lead to unexpected effects.

    245=No Fire Zone                    |+|Area      |No Fire|Zone  |Set To:2|Var:1

Or, if using MLLE:

    245=No Fire Zone                    |+|Area      |No Fire|Zone  |Set To:{Local, Off, On, Toggle}2|Var:{No Fire, Anti-Grav}1

The Rocket Turtle boss has received a significant overhaul for its movement and its interaction with the Area ID events. (Or "Path", since "Area ID" is a completely meaningless name.) To use the new alternate behavior, set its "Velocity" parameter to anything other than zero. Leaving Velocity at 0 will use the old, rather buggy behavior for the boss. See plus-butterfly.j2l for examples.

Once activated through an Activate Boss event, the Rocket Turtle will begin moving in a specified direction ("Angle") at a specified speed ("Velocity").

There are eight possible angles, beginning at angle 0 (right/east) and rotating clockwise all the way to angle 7 (up-right/northeast).

The Rocket Turtle will maintain this angle and velocity until it hits a Path event, at which point it will adopt the angle/velocity specified by the parameters of that Path event. Unlike in the old Rocket Turtle behavior, this Path event will still exist after being used and can (and should) be used again for infinitely looping paths.

Alternatively, if the "Relative" parameter on the Path event is set to 1, the Rocket Turtle will add the Path event's "Angle" parameter to its existing angle. So an "Angle" of 0 will cause no change: 2 will cause a 90 degree rightward turn; 6 will cause a 90 degree leftward turn; and so on.

If the "RandRev" parameter on the Path event is set to 1, there is a 50% chance the Rocket Turtle will move in the exact opposite direction that the event would otherwise send it in. This allows for more variation in the followed path. For example, Angle=2/Relative=0/RandRev=1 will sometimes send the Rocket Turtle upward and will sometimes send it downward.

The "WaitTime" parameter on the Path event works identically to the same parameter on the "Sucker Tube" event, and will cause the Rocket Turtle to stop at that tile for that number of seconds before continuing on the path.

    198=Rocket Turtle                   |-|Boss      |Rock   |Turt  |EndText:4|Velocity:6|Angle:3
    242=Path                            |-|Area      |Path   |      |Velocity:6|Angle:3|Relative:1|RandRev:1|WaitTime:3

Or, if using MLLE:

    198=Rocket Turtle                   |-|Boss      |Rock   |Turt  |EndText:t4|Velocity:6|Angle:{E,SE,S,SW,W,NW,N,NE}3
    242=Path                            |-|Area      |Path   |      |Velocity:6|Angle:{E,SE,S,SW,W,NW,N,NE}3|Relative:c1|RandRev:c1|WaitTime:3

The Butterfly enemy (event 236) has been recoded to also use the Path events, but as a simple enemy instead of a boss. It interacts with all the Path parameters in exactly the same way that the Rocket Turtle does.

If the Butterfly is created directly through a generator, crate, or three-event MCE, its velocity will default to 8 and its angle to 6 (up). Use a five-event MCE or place the Butterfly event directly in the level (non-generating) to use other initial velocity/angle values.

    236=Butterfly                       |-|Enemy     |Butter |Fly   |Velocity:6|Angle:3

Or, if using MLLE:

    236=Butterfly                       |-|Enemy     |Butter |Fly   |Velocity:6|Angle:{E,SE,S,SW,W,NW,N,NE}3

### Pre-2013 Additions

Lori Level Start (event 32) can be used to create a start position usable only by Lori.

    32=Lori Level Start                 |+|StartPos  |Lori   |Start

Generator (event 216) now has a maximum delay time for generated objects to 255 seconds and an extra parameter so that objects can optionally be delayed from initially spawning until after the delay time specified. The new maximum delay time and the optional initial delay can also be used with MCE events (see MCE Event below).

    216=Generator                       |+|Generator |Gene-  |rator  |Event:8|Delay Secs:8|Initial Delay:1

MCE Event (event 255) can be used to create MCE events with no unwanted side effects. It has the same parameters as the Generator event.

    255=MCE Event                       |+|Area      |MCE    |Event  |Event:8|Delay Secs:8|Initial Delay:1

The end-of-level events now have additional parameters to allow fast level cycling and a greater number of choices for the next level. The TextID parameter is used for the help string number, and each help string can contain multiple filenames separated by a vertical bar (|). If TextID is zero, the default next level filename is used. The Offset parameter is used to select the filename within the help string. For example, if the help string is "beachlevel|castlelevel" and Offset is 1, castlelevel is used end-of-level event.

See levels SPlevel1.j2l and SPlevel2.j2l for an example. Warning: Running these levels through JCS (via Save & Run) may cause the levels to break if JCS.ini is not properly updated first.

    17=Area End Of Level                |+|Area      |End    |Area   |Secret:1|Fast:1|TextID:4|Offset:4
    18=Area Warp EOL                    |+|Area      |End    |Warp   |Empty:1|Fast:1|TextID:4|Offset:4
    26=Area Warp Secret                 |+|Area      |Warp   |Secret |Coins:10|TextID:4|Offset:4

Hurt (event 2) can now hurt players from more than one direction, allowing it to be used to create ceiling and wall spikes as well as floor spikes. Set each parameter to 1 to have it hurt players in that direction. If all four are left at 0, JJ2 will act as if "Up" is still set to 1.

    2=Hurt                              |+|Modifier  |Hurt   |       |Up:1|Down:1|Left:1|Right:1

## Plus Only Features

Certain features are only available when Plus Only is enabled:

- When Friendly Fire is also enabled during a team game, teammates are able to hit each other.
- Players are unable to hit or push other players under certain conditions:
- In Roast Tag, when there is a ring holder and neither the killer or the victim is the ring holder or the bottom feeder.
- In Pestilence, zombies can't hit/push other zombies. And when there's at least one zombie, non-zombies can't hit/push other non-zombies.
- In Jailbreak, free players can't hit/push jailed players.
- When Passing and Friendly Fire are also enabled, a flag pass to another teammate can be done with any hit.
- In Roast Tag, players will see an arrow pointing to the ring holder if there is one.
- When Latest Version Only is also enabled, or in Single Player, levels can be enhanced with the AngelScript scripting language.
- When Latest Version Only is also enabled, or in Single Player, Trigger Crates can toggle or disable triggers (see JCS.ini section).
- When Latest Version Only is also enabled, or in Single Player, No Fire Zones can reverse players' gravity or permanently disable their guns.

## 3D Mode

This version of JJ2+ features special support for 3D TVs and 3D-capable computer displays. For most 3D screens, to enjoy 3D Mode the following conditions need to be met:

1. The display resolution is set to 1920x1080 ("1080p"), and
2. The JJ2 video image spans either the width or height of the screen (or both).

Since JJ2+ currently does not support the 1920x1080 resolution, the easiest way to accomplish this is to set the Windows desktop resolution to 1920x1080 (if it isn't already), and run JJ2 in a Maximized window so that it spans the width.

Once these conditions are met, to enable 3D mode, use the command `/3d on`. In offline games, choose the appropriate setting in the Video menu of JJ2's window menu. Then, find the '3D' button on your TV's remote and turn it on.

There are two 3D "arrangements": Side-By-Side (SBS) and Top-And-Bottom (TAB). Switch modes by typing `/3d sbs` or `/3d tab`, or use the Video menu. Ultimately, this setting must match the settings of your 3D TV. If you are running JJ2 in a maximized window, use SBS mode to get the desired effect.

Finally, the "depth" of the 3D effect may be tweaked by using the `/3ddepth` command. `/3ddepth 0` is completely flat, whereas `/3ddepth 25` is the maximum depth setting. This setting is not available from the window menus.

Please note that 3D Mode is still work in progress. The following things are not 3D-ified yet (and some may require you to switch back to 2D):

- The 3D Boll, poles, Rotating Rock, and Uterus Boss events are still 2D and may appear strangely offset.
- Local lightning effects (flicker etc.) are behaving suboptimal in 3D Mode.
- Text and HUD elements are still 2D.
- The ESC menu, 'Pause' text, player list, and chat ignore 3D Mode altogether and are visible by just one of your eyes (or partially by the one and partially by the other eye).
- The main menus are unaltered.

## Commands

### For Server and Remote Admins Only

#### Main Server Commands

/list
  Lists server.
/delist
  Delists server.
/relist
  Relists server.
/public
  Makes server public.
/private
  Makes server private
/servername <server_name>
  Renames server. Server name cannot exceed 30 characters.
/maxplayers <number>
  Sets the max number of players allowed in server. Must be between 1 and 32.
/gamemode <mode>
  Sets Game Mode. Mode must be either sp, coop, battle, race, treasure, or ctf.
  Warning: Game Mode changes causes glitches for splitscreeners not running JJ2+.
/password <password>
  Sets server password. Password cannot exceed 14 characters.
/bluescore <number>
  Sets Blue Team's score.
/redscore <number>
  Sets Red Team's score.
/maxscore <number>
  Sets Max Score.
  Warning: Max Score changes causes glitches for splitscreeners not running JJ2+.
  Note: In CTF mode, setting Max Score above any team's score will cause the level to cycle.
/alwaysupdatepos <on|off>
  Enables/disables always updating clients of other players' positions.
  This feature should only be used by servers with fast enough internet connections.
/blockdownloads <on|off>
  Enables/disables blocking downloads by clients.
/uploadmusic <on|off>
  Enables/disables uploading music to clients.
/maxuploadpacketsize <bytes>
  Sets the number bytes for the maximum upload packet size for clients using the latest version of JJ2+.*
/maxconnections <number>
  Sets the maximum number of connections allowed for the server. This is different than Max Players which accounts for splitscreeners. Note that clients running JJ2+ but not the latest version cannot join servers where there are 16 or more connections. However, non-Plus clients can join such a server, although they won't be able to see chat from any client (including themselves) who has a connection number above 15.
  Sprites will automatically display correctly for a player's character if clients do not edit their JJ2 version before joining.
/plusonly <on|off>
  Allows only players with JJ2+ to be in the server.
  All players not running JJ2+ are automatically kicked.
  See Plus Only Features section.
/latestversiononly <on|off>
  Restricts the players allowed in the server to all players not running JJ2+ and players running a JJ2+ version that is equal to or greater than the server's JJ2+ version.
  All JJ2+ players not running the latest JJ2+ version are automatically kicked.
  Note that to use Plus Only features, Plus Only must be enabled.
/nosplitscreeners <on|off>
  Allows only players who aren't splitscreeners join the server.
/welcomer <on|off>
  When enabled, clients joining the server are greeted with a custom message.
/welcomemessage <message>
  Sets the welcome message clients see when they join the server if the Welcomer is on.
  For longer messages, manually edit the setting in the configuration file.
  Welcome message cannot exceed 50 characters.
/rename <player> <new_name>
  Changes player's name to a new name.
/swapversion <player>
  Changes whether or not a player is using the same version as the server.
  This command is used to correctly display sprites of clients using other JJ2 versions.
/k <player>
  Kills player (not counted as a death).
/spawnobjects
  Forces all allowed objects created by generators to spawn if they aren't spawned already.
/allowready <on|off>
  Toggles the availability of the /ready command.
/allowmouseaim <on|off>
  Toggles the availability of clients using mouse aim.
/ip <client>
  Displays the client's IP address.
  Cannot be used by the server, since the IP addresses of all players are available to the server on the Game Info (F9) screen already.

#### Idle Player Management

/kickidlers <on|off>
  Enables/disables automatically kicking idlers.
/idletime <minutes>
  Sets the max number of minutes a client can idle.

#### Idle Server Commands

/idleserver <on|off>
  Enables/disables Idle Server mode.
  Automatically enabled after an hour (or 5 minutes if minimized) of server inactivity in a Battle or CTF game.

#### Resolution Command

/maxresolution <width>x<height>
  Sets the maximum viewable area for online games.
  Only players running the latest version of JJ2+ are affected.

#### Spectating

/spectating <on|off>
  Enables/disables spectating for all players running JJ2+.
/joinersspectate <on|off>
  Enables/disables automatic spectating for players joining with JJ2+.
  Players not running JJ2+ will not be able to join the server.
/maxspectators <number>
  Sets the maximum number of players who are allowed to spectate. If the limit is reached, players will not be able to spectate with the "/spectate" commands. Note that the limit also applies to joining players when Joiners Spectate is enabled.
/forcespectate <player|all> <on|off>
  Forces spectator mode to turned on/off for specified player or all players.
  Players not running JJ2+ cannot be forced to spectate.

#### Remote Admin

/remoteadmin <on|off>
  Enables/disables admin access.*
/admingroup <group> <on|off>
  Enables/disables the specified admin group.*
/setadminpass <group> <password>
  Sets password needed for admins to login for the specified group.*
  Password must be only letters and numbers and between 8 and 20 characters.
/getadminpass <group>
  Displays password needed for admins to login for the specified group.*
/addadminip <group> <ip_address>
  Adds an Auto Admin IP address for the specified group.*
/removeadminip <group> <ip_address>
  Removes an Auto Admin IP address for the specified group.*
/addallowedcommand <group> <command>
  Adds an allowed command for the specified group.*
/removeallowedcommand <group> <command>
  Removes an allowed command for the specified group.*
/addblockedcommand <group> <command>
  Adds a blocked command for the specified group.*
/removeblockedcommand <group> <command>
  Removes a blocked command for the specified group.*
/shutup <on|off>
  Only the server and any logged-in remote admins are allowed to chat.

#### Kick/Ban Commands

/kick <player> [<reason>]
  Kicks player. If reason is specified, all players running the latest version of JJ2+ will see the reason.
/ban [<time>{s|m|h|d}] {<player>|<ip_address>} [<reason>]
  Bans specified player or IP address. Asterisks can be used as wildcards for the IP address.
  When banning an IP address, players who have the banned IP will NOT be automatically kicked.
  The optional ban time can be set to a number of seconds, minutes, hours, or days, and ban time must be between 5 seconds and 30 days. If no ban time is specified, the player or IP address is banned indefinitely.
  If reason is specified, all players running the latest version of JJ2+ will see the reason.
  Examples: "/ban 30s 2 Bye" bans player 2 for 30 seconds with a reason of "Bye". "/ban 5h 127.0.0.1" bans IP 127.0.0.1 for 5 hours with no reason given.
/unban <ip_address|all>
  Removes ban for a single or all IP addresses. Asterisks can be used as wildcards.
  This command cannot be used to unban IP addressses banned through JJ2's default ban command or Banlist.lst.

#### Start/Stop, & Time-Based Commands

/start
  Starts game.
/stop
  Stops game
/cstart
  Starts game with a countdown.
/cstop
  Stops game with a countdown.
/nomovement <on|off>
  Enables/Disables no movement for when a game is stopped.
  When enabled and game is stopped: -Players running JJ2+ are restricted of movement. -Players not running JJ2+ are sent to the bottom-left corner.
  When enabled and game is started: -Players running JJ2+ are allowed to move again. -Players not running JJ2+ are roasted (and flags will be lost).
/autostart <on|off>
  Enables/disables Auto-Start. Game automatically starts after the level cycles.
/readystart <on|off>
  Enables/disables Start When All Are Ready. Game automatically starts (after a countdown) if all visible, non-spectating players in the server have used the /ready command. Obviously only applicable if Allow Ready is turned on.
/time
  Displays time limit and time left.
/pregame
  Enables/disables Pregame.
  Pregame is automatically extended if there is not enough active players in the server.
/pgtimelimit <minutes|30s|10s> [reset]
  Sets Pregame time limit.
/overtime <on|off>
  Enables/disables Overtime.
/otlimit <minutes> [reset]
  Sets Overtime limit.
/autocycle <on|off>
  Enables/disables Auto-Cycling. Level automatically cycles after the time limit is reached.
/autostop <on|off>
  Enables/disables Auto-Stop. Game automatically stops after the time limit is reached or after a player/team wins in a Battle- or CTF-based mode. (I'm still working on the command names...)
  Warning: Reaching the score limit with Auto-Stop enabled may cause clients not running JJ2+ or using an older version of JJ2+ to see the game end when the level is not cycling.
/timelimit <minutes> [reset]
  Sets time limit for when the game is in Normal (i.e. when it's not Pregame or Overtime).

#### Cycling and Next Level Commands

/c
  Cycles to the next level.
/c <level_filename>
  Sets next level to <level_filename> if it exists, then cycles.
/nr
  Sets next level to current level.
/n
  Displays level filename of the next level.
/n <level_filename>
  Sets next level to <level_filename> if it exists.
/r
  Restarts level (i.e. cycles to current level).
/levellist <on|off>
  Enables/disables Level List Cycling.
/levellist shuffle
  Shuffles levels within the Level List.
/levellist <number>
  Sets next level to the Level List file belonging to the specified number.
/llautoshuffle <on|off>
  Enables/disables automatic shuffling of the levels within the Level List.

#### General CTF Mode Commands

/eventeams <on|off>
  Enables/disables Even Teams. Teams are only made more even when a player joins.
/allblue <on|off>
  When enabled, all players in the server are changed to blue team, and all new players join on blue team.
  Mutually exclusive with /allred.
/allred <on|off>
  When enabled, all players in the server are changed to red team, and all new players join on red team.
  Mutually exclusive with /allblue.
/selfswap <on|off>
  Enables/disables clients to change their own team. When enabled, clients can use !swap, !blue, and !red to change teams.
/passing <on|off>
  Enables/disables Flag Passing between teammates.
  To pass a flag, the flag holder must hit at a teammate who is pressing up.
  If Friendly Fire and Plus Only are enabled, any hit can be used for passing, otherwise only RFs can be used.
/capturewait <on|off>
  Enables/disables Capture Wait.
/ctfmessages <on|off>
  Enables/disables CTF+ messages.
/shuffle
  Shuffles all players' teams. Must be done at the beginning of the game.
  Doesn't make sure splitscreeners stay on the same teams.
  Shuffling teams several seconds after a level cycles or while players are still connecting may cause players to spawn at the wrong start positions.
/autoshuffle <on|off>
  Automatically shuffles all player's teams at the start of the level.
  Doesn't make sure splitscreeners stay on the same teams.
  Also, players may not always start at the correct start positions.
/swap <player>
  Changes player's team.
  Doesn't make sure splitscreeners stay on the same teams.

#### Add-on Commands

/starthealth <number|default>
  Sets the amount of health players start with. Can be between 1 and 7.
  Setting Start Health to "default" sets Start Health to the default of the current game mode, which is 5 for Battle and 3 for CTF. If the start health is greater than max health, players will start with max health.
  Warning: If start health isn't equal to the game mode's default, clients not running JJ2+ will be glitched. It is HIGHLY recommended to enable Plus Only.
/maxhealth <number|default>
  Sets the maximum amount of health players can get. Can be between 1 and 7
  Setting Max Health to "default" sets Max Health to the default of the current game mode, which is 5 for Battle and 3 for CTF.
  Warning: If max health isn't equal to the game mode's default, and there are carrots in the level, clients not running JJ2+ will be glitched. It is HIGHLY recommended to enable Plus Only.
/smhealth <number|default>
  Sets both Start Health and Max Health at the same time. See above commands for more information.
/instagib <on|off>
  Enables/disables Instagib. When enabled, all unshielded hits roast opponents instantly.
/frustration <on|off>
  Enables/disables Frustration. When enabled, players who get a roast will also die themselves.
/hfk <on|off>
  Enables/disables Health From Kills. Roast gives players health.
/hfkmaxhealth <number>
  Sets HFK Max Health. Must be between 1 and 7.
  If HFK Max Health is greater than the general max health, players will start with general max health.
/hfkhealthinc <number>
  Sets HFK Health Increase. Must be between -6 and 6.
/da <on|off>
  Enables/disables Damage Amplifier. Fired shots do +1 extra damage.
/noblink <on|off>
  Enables/disables No Blink Mode.
/friendlyfire <on|off>
  Enables/disables Friendly Fire for team games.
  Note: To have an affect, Plus Only must be enabled.
/punishsds <on|off>
  Enables/disables Punishment for Self-Destructs.
/sdteampointdec <on|off>
  Enables/disables team point decreases for Self-Destructs.
  When disabled, a pit death causes a point increase for the other team.
/ffpointdec <on|off>
  Enables/disables point decreases for Friendly Fire.
  When disabled, friendly fire causes a point increase for the other team.
/fastammorespawn <on|off>
  Enables/disables Fast Ammo Respawn (every 5 seconds at the most).
/fastpoweruprespawn <on|off>
  Enables/disables Fast Powerup Respawn (every 5 seconds at the most).
/weakpowerups <on|off>
  Enables/disables Weak Powerups. Makes powerups only do 1 damage.
  Mutually exclusive with Strong Powerups.
/strongpowerups <on|off>
  Enables/disables Strong Powerups. Makes pepper spray and electro-blaster powerups do 2 damage.
  Mutually exclusive with Weak Powerups.
/nopowerups <on|off>
  Enables/disables No Powerups.
/noammocrates <on|off>
  Enables/disables No Ammo Crates.
/noseekerammo <on|off>
  Enables/disables No Seeker Ammo.
/noseekerpowerups <on|off>
  Enables/disables No Seeker Powerups.
/nocarrots <on|off>
  Enables/disables No Carrots.
/noshields <on|off>
  Enables/disables No Shields.
/extendedtnt <on|off>
  When enabled, the maximum distance a player can be hit by TNT in online games increases.
/tntdamage <number>
  Sets amount of damage TNT can inflict. Must be between -6 and 7.
/evilice <on|off>
  When enabled, ice shot by players does 1 heart damage if the victim isn't frozen already.
/fireball <on|off>
  When enabled, pepper spray is replaced with fireball gun from the beta versions of JJ2.
  The fireball gun does 2 damage when powered up even without /strongpowerups.

#### Settings

/resetsettings
  Loads configution settings of plus.ini (automatically done at startup).
  Mainly meant for admins. See "/loadsettings" commands below.

#### Player Stats

/stats
  Logs player stats.*

#### Logging Commands

/chatlog <on|off>
  Enables/disables Chatlog (requires restart).*
/playlog <on|off>
  Enables/disables Playlog (requires restart).*
/iplog <on|off>
  Enables/disables IPlog (requires restart).*
/autosavechatlog <on|off>
  Enables/disables automatic saving of the chatlog.*

#### The ALMIGHTY Trigger Commands

Note: Changing the trigger state of the Server Trigger or Team Trigger may cause unintended results.

/trigger <trigger|all> <on|off>
  Turns specified trigger or all triggers on/off for all players.
/ptrigger <player> <trigger|all> <on|off>
  Turns specified trigger or all triggers on/off for specified player.

#### Custom Mode Commands

/off
  Turns Custom Mode off.
/latejoiners <on|off>
  Enables/disables Allowing Late Joiners (affects LRS, XLRS, and Pestilence).
/resetallteams <on|off>
  When enabled, both teams have their ammo and health reset after a round ends in Death CTF or Jailbreak.
  For the time being, this means both teams get roasted after a round ends.
/maxlives <number>
  Sets Max Lives. Must be between 1 and 100.
/setlives <player> <lives>
  Sets player lives. Lives must be between 1 and 100.
  Can only be used for LRS, XLRS, and TLRS. Cannot be used during pregame in TLRS.
/livesperteam <lives>
  Sets number of lives each team receives in Team Last Rabbit Standing. Lives must be between 1 and 100.
/maxteamplayers <number>
  For Team Last Rabbit Standing, sets the max number of players allowed to have lives on each team.
  Must be between 1 and 16.
/rt
  Changes custom mode to Roast Tag.
/lrs
  Changes custom mode to Last Rabbit Standing.
/xlrs
  Changes custom mode to Extended Last Rabbit Standing.
/pest
  Changes custom mode to Pestilence.
/tb
  Changes custom mode to Team Battle.
/dctf
  Changes custom mode to Death CTF.
/jb
  Changes custom mode to Jailbreak.
/release
  Releases all players in jail if custom mode is Jailbreak.
/fr
  Changes custom mode to Flag Run.
/tlrs
  Changes custom mode to Team Last Rabbit Standing.
/dom
  Changes custom mode to Domination.
/reset
  Resets the game.

* This command cannot be used by admins.

### For Clients and Server running JJ2+

#### Settings

/loadsettings
  Loads configution settings of plus.ini (automatically done at startup).
  See "/resetsettings" command above.
/loadsettings <filename>
  Loads configution settings of the filename specified.
/savesettings
  Saves configution settings to plus.ini.
/savesettings <filename>
  Saves configution settings to the filename specified.
  Filename must be at least 5 characters long ending with the ".ini" extension.

#### Spectating

/spectate <on|off>
  Enables/disables Spectator Mode if user is in a JJ2+ server and Spectating is enabled. The limit of Max Spectators may prevent spectating. If you are spectating because you are out in a LRS/XLRS game, "/spectate on" will make you enter normal Spectator Mode.
/spectate <target>
  Spectate target if user is in a JJ2+ server and Spectating is enabled. The limit of Max Spectators may prevent spectating.
  Target can be:
  - A player number
  - "blue flag"
  - "red flag"
  - "flag" if Flag Run
  - "flag holder" if Roast Tag
  - "bottom feeder" if Roast Tag
  - "cp <number>" for Control Point if Domination

#### Music

/autovolumeleveling <on|off>
  Enables Auto Volume Leveling for music files loaded with BASS audio library.
  When enabled, it automatically attempts to raise the volume level of the music track if it is not loud enough. This feature may momentarily cause a slight slow down to JJ2 as the appropriate volume level is found. JJ2's music volume setting is never adjusted.
  Note that j2b files cannot use this feature.
/changemusic <music_filename>
  Changes next level to <music_filename> if it exists.
  May cause JJ2 to crash with an Amnesia error.
/restartmusic
  Restarts the music currently being played.
  May cause JJ2 to crash with an Amnesia error, but probably not.

#### 3D Commands

/3D <on|off>
  Switches 3D Mode on or off.
/3D <SBS|TAB>
  Switches 3D Mode on in Side-By-Side or Top-And-Bottom mode, respectively.
  See the 3D Mode section for details.
/3Ddepth <number>
  Sets the depth of the 3D effect. Must be between 0 and 25.
  0 means completely 'flat', whereas 25 is the most agressive 3D depth setting and may cause headaches since it requires you to cross your eyes badly.

#### Other

/wc <on|off>
  Enables/disables Wall Climbing. When disabled, it becomes harder to get stuck in ceilings.
/alwaysshowingamepings <on|off>
  Enables/disables always displaying in-game pings on the Game Info (F9) screen.
/mouseaim <on|off>
  Enables/disables mouse aim mode.
/mute <player>
  Mutes chat from specified player.
  If the server mutes a player, that player cannot use Self-Swap and admin commands.
/unmute <player>
  Unmutes chat from specified player.
/ready
  All local players acquire all available ammo, powerups, and fastfire (if Ready Gives Fast Fire is turned on) and are warped to their CTF base if applicable.
  Only available when the game is stopped at the very beginning, and only if the server has enabled Allow Ready.
/readyff <on|off>
  Enables/disables the /ready command giving you full fastfire when used, in levels with one or more fastfire pickups.
/run <on|off>
  Enables/disables permanent running. Unlike capslock, this works even when there is more than one local player, and has the side benefit of not making everything you type uppercase.
/weaponchange <on|off>
  Enables/disables automatically changing weapons upon picking up ammo for a new weapon/getting a new powerup.

### For Clients running JJ2+

/downloadmusic <on|off>
  Enables/disables downloading music from the server if the server allows it.
  Audio formats client can download: J2B, XM, IT, S3M, MOD, MTM, UMX, MO3, MP3, OGG.
  When downloading music, note that the escape key can be pressed to stop downloading while staying in the server.
/downloadsamemusicversion <on|off>
  When enabled with the Downloading Music setting also enabled, client always downloads music even if a music file with the same name already exists but is a different version (that is, the music file has a different CRC than the version the server has).

### For All Clients in JJ2+ Server

/login <password>
  Allows a client to login if the server allows remote admins and the password is correct.
  No other players, including the server, will be able to see the login attempt. If the server is running JJ2+, the login command and password will not be displayed locally in the chat and instead will be replaced by a message saying "Attempting to login". Password is NOT case sensitive.
/me <text>
  Displays <text> as an IRC-style action message. For example, typing "/me is waiting" would produce a "*BlurredD is waiting" message.

## New Command Line Arguments

### Basic

-port=<port>
  Sets server port used for listening for client connections. Default port is 10052.
-list
  Lists the server on the Internet. Requires -server.
-levellist [<number>]
  Enables Level List Cycling and loads the first level (or the level belonging to the specified number) from the Level List. Requires -server.
-spaz
  For offline games, sets character to Spaz.
  Added for 1.23 only since TSF already has this functionality.
-player <number>
  Sets number of local players.
  Added for TSF to fix a parsing issue.
-menu
  Skips the intro and goes directly to the menu screen.
-minimize
  Minimizes JJ2 to the tray on startup.
-servername=<name>
  Renames server. Server name cannot exceed 30 characters.
-settings=<filename>
  Sets the main configuration file (file must exist). If not specified, defaults to plus.ini.
-admin=<filename>
  Sets the admin configuration file (file must exist). If not specified, defaults to admin.ini.
-levellistfile=<filename>
  Sets the Level List file (file must exist). If not specified, defaults to level.ini.

### Custom Mode (requires -server)

-rt
  Changes custom mode to Roast Tag.
-lrs
  Changes custom mode to Last Rabbit Standing.
-xlrs
  Changes custom mode to Extended Last Rabbit Standing.
-pest
  Changes custom mode to Pestilence.
-tb
  Changes custom mode to Team Battle.
-dctf
  Changes custom mode to Death CTF.
-jb
  Changes custom mode to Jailbreak.
-fr
  Changes custom mode to Flag Run.
-tlrs
  Changes custom mode to Team Last Rabbit Standing.
-dom
  Changes custom mode to Domination.

### New formats for -connect

-connect <ip_address>[:<port>] [-password=<password>] [-version=<server_version>]
-connect <ip_address>[:<port>][/[<password>][/<server_version>]]
  Values for <server_version>
  - For 1.23, use: 1.23, 23, 1.21, or 21 (all map to "21 ")
  - For TSF, use: 1.24 or 24 (both map to "24 ")