Esc Menu Box

This is the little mini-menu that pops up when you press Esc while playing the game! In unpatched JJ2 it offers "New Game," "Load," "Save," "Options," and "Quit," although the middle three are only usable in local games.

JJ2+ therefore removes Load/Save from servers and adds four new actions instead:

Spectate/Unspectate: Toggle spectator mode. People do this a lot so it made sense to make it easily accessible in the Esc menu! Requires Allow Spectating.

Respawn: Kills you and respawns you somewhere, usually used if you got stuck in the level somewhere. Requires Allow Suicide (until we come up with a better name).

Controls: Brings up an ingame controls menu that lets you set your mouse aim controls.

Help

The fourth new Esc Menu Box action, Help, displays instructions for the current gamemode, to help players who aren't familiar with all sixteen multiplayer gamemodes. Just like this website, it's themed after JJ2's original printed manual!

In Single Player, the help display recounts JJ2's plot and then explains all the specific objects found in the current level: powerups, springs, enemies, and so on.

Scriptwriters may extend this display to explain custom level mechanics, mutators, and so on.

Translations

Unpatched JJ2 can only display six languages (.j2s files), but JJ2+ lets you pick any language file in your folder.

Four new translations (Afrikaans, Arabic, Polski, and Swedish) are included, for a total of ten.

Three more exist—Finnish, Romanian, and Serbian—but we couldn't contact their authors to get permission to distribute them with JJ2+. But you can just download & extract them (or any other .j2s file) into your JJ2+ folder. (For Romanian specifically, you should probably rename it so it doesn't overwrite Dutch).

Translations only cover the text that were originally part of JJ2. Any new text added by JJ2+ is currently only available in English, but we hope to change that, so let us know if you'd like to help!

Details about Polski

JJ2+'s Polski has more accurate/idiomatic translations than LK Avalon's original Polish. For example, the original confused "water level" (how high up the water is) with "water level" (a video game level featuring water).

It uses a new encoding of Polish characters, because the old one used by LK Avalon was incompatible with JJ2's use of the section character for altering spacing:

Ą0x90 Ć0x91 Ę0x92 Ł0x93 Ń0x94 Ó0xD3 Ś0x95 Ź0x96 Ż0x97 ą0xB0 ć0xB1 ę0xB2 ł0xB3 ń0xB4 ó0xF3 ś0xB5 ź0xB6 ż0xB7

You probably shouldn't use these Polish characters for chatting, though, because this is not a standard encoding. They'll be unreadable in the chatlogger and it would be difficult for you to type them anyway.

Even if you have a copy of the original Polish.j2s, JJ2+ will ignore it.

Known Issues

This isn't an exhaustive list, we may add things from time to time.

Problems we hope to fix

Possibly fixable

Probably unfixable

Anything else?

Found a bug we don't know about? Let us know!

Automatic Updates

JJ2+ is available to download from a whole lot of places, and probably even some we can't control, like piracy websites! But you generally need the latest version of JJ2+ to join in online multiplayer…

To solve this, JJ2+ features an automatic updater. If your JJ2+ is out of date (and you're connected to the internet) this screen replaces the splash screen with a special updater sequence, graphics based on the original installer on the Jazz 2 CD-ROM!

Choose one:

If you're running Windows XP, JJ2+ will let you know there's an update, but you can't autoinstall it. Use the manual download instead.

The -noUpdate command line option tells JJ2+ not to check for updates. This is particularly useful if you're testing an older release for some reason. Public test builds also often don't check for updates.

Integration

Helpful information if you want to write your own programs that interact with JJ2+. Anything not listed here—such as packets sent between JJ2+ instances—is neither public information, nor officially supported, nor guaranteed not to change.

Server Information Query Packet

JJ2+ adds functionality to allow third-party websites or applications to query a server running JJ2+ and receive detailed information about the status of that server (current game mode, players in the server, et cetera). This information can be retrieved by sending an UDP packet to the server on the port the server is hosted on (10052 by default).

The UDP packet should have the value \x07\x14\x05\x00\x01. Note that the first two bytes are the packet checksum, used by the server to verify data integrity; the actual packet value is \x05\x00\x01. If the server is running JJ2+, you will receive a packet with the following structure in return:

char[2]  header
long     uptime in seconds
long     version
char     number of connected clients
char     number of players
char     game mode
char     max players
char     length of server name
char[]   server name
char     custom mode
char     flags (if the server is not running at least JJ2+ 5.5, 
         this byte and all the following will be missing)
   & 1: server is private? (if this is the case none of the 
        data after this byte will be sent!)
   & 1 << 1: plus only?
   & 1 << 2: idle server mode?
char     max score
char     blue score
char     red score
char     green score
char     yellow score

then for each player (i.e. repeated ‘number of players’ times):
  char[]  player name (null-terminated)
  char    player score
  char    player flags
     & 3: player team
     & 1 << 2: player is spectating

char[] level filename

Extended File Formats

JJ2+ adds support for some new features in JJ2's existing file formats. Note that using such features may make unpatched JJ2/JCS unable to read your custom files.

Animation Sets (.j2a)

32-bit sprites are marked by setting the most significant bit on the "height" short in Data3/Image Data. Non-transparent pixels are four bytes long each, RGBA. (Format specification)

Episodes (.j2e)

JJ2+ accepts episodes using either the .j2e or .j2pe file formats, because unpatched JJ2 crashes if too many .j2e files are present.

Extended information stored in episode file headers (as interpreted by JJ2+) by: the condition of unlocking (currently only defined for 0 meaning "always unlocked" and 1 meaning "requires the previous episode to be finished", stored as a 4-byte-long integer starting at byte 0x4), binary flags of various purpose (currently supported flags are 1 and 2 used to reset respectively player ammo and lives when the episode begins; stored as a 4-byte-long integer starting at byte 0x8), file name of the preceding episode (used mostly to determine whether the episode should be locked, stored as a 32-byte-long chain of characters starting at byte 0x4C), file name of the following episode (that is cycled to after the episode ends, stored as a 32-byte-long chain of characters starting at byte 0x6C)

Levels (.j2l)

The "WaveX" and "WaveY" arrays are used for pixel offsets. The texture-related properties may be reinterpreted by other texture modes. (Format specification)

Tilesets (.j2t)

Tilesets containing 32-bit tiles use version 0x300 in the header. Individual 32-bit tiles are marked with 2 instead of 0 or 1 in the FullyOpaque array (if they contain at least one pixel with an alpha from 1–254), and by setting the most significant bit in the ImageAddress array. All 32-bit tile images are 32×32×4 bytes long, each pixel being RGBA. (Format specification)

stdout

Everything that goes into JJ2+'s chatlog is also written to stdout as an alternative to appending to potentially-massive files like chatlog001.txt.

Licenses

JJ2+ is distributed under the MIT License.

Copyright 2007-2010, 2013, 2015-present, The JJ2+ Team, https://jj2.plus

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

JJ2+ incorporates the curl library.

COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 1996 - 2018, Daniel Stenberg, , and many contributors, see the THANKS file.

All rights reserved.

Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder.

Credits

JJ2+ Credits

Programming

2006–2010: BlurredD; Neobeo, Monolith, Grytolle

2012–present: Violet CLM, Seren; ak-47, Grovespaz, Jerrythabest, minmay, Necrolyte, Salamander, Stijn, Superjazz, zepect

Artwork

Splash Screens: Hare (1.23+), DoubleGJ (1.24+)

Sprites: Bot-chan (Lori menu), DoubleGJ (page changes), Seren (gamemode-specific icons, gun8/gun9 ammo crates, laser shield, reticles, small font, sugar rush), TreyLina (destructible blocks, large font, Lori ingame), Violet CLM (other)

Textured Backgrounds: Blade (Forest), BlurredD (Desolation, Windstorm Fortress), cooba (WTF), Disguise (Corrupted Sanctuary), Haze (Muckamok Night), Mez (MEZ02), P4ul (IC - Tubelec), Pyromanus (Diamondus β), Spaztic (Xargon), Toxic Bunny (Wisetyness), Violet CLM (RaneforusV)

Tilesets

Part of JJ2+: BlurredD (Windstorm Fortress)

Example levels: GameArt2D.com (Free Desert Platformer)

Included in GOG distribution: Sampo "Blade" Vesanen (Aztec/Beton/Desert/Forest/Glacier/Oasis/Rocks/Space/Wasteland/Woodlands, Islands, Park, Fortress, Aztec 2, Rainbow Runner), Chandie (Halloween Hare), Lapper (Lapper Festive)

Web Presence

Stijn, Violet CLM; minmay (trailer)

Translations

Grytolle (Afrikaans, Swedish), Kyro (3rabi), Seren (Polski)

Testing/Feedback

cooba, FawFuL, Kev, Naps, Primpy, Shaker, and the whole community

AngelScript

Andreas Jönsson of AngelCode.com

Additional Thanks

Bobby aka Dizzy, Cataphract, Cpp, Emo, EvilMike, Foly, NinjaCC, Red Ninja, Shane Lillie, SuPrem, Syntax, Torkell, the guys at CodeProject, etc.

Fanmade Levels

The GOG distribution of JJ2+ includes several single player releases that were edited with their authors' explicit permission:

Mârtin's "70's Fever" levels from 1.24 were additionally edited to remove copyrighted music and to display better at 800×600. Some other fanmade levels from 1.24 are still included, others are not.

Original Game Credits

Jazz Team

Special Thanks: Michelle DiQuattro, Geo Lynch, DethMan, Brandon Gano, Tom Pearson, Paul Chandler, Aaron Levinson, Shelly Fuko, Diana Gowen, Will Sweat, The Epic Beta Testers

Original Fanmade Files

The Secret Files

Alpha Wolf (Battle Over Carrotus), Birdman (Falkenrace), BloodBunny (Swingin Jazz), Captain Spam (Diamonds in Diamondus, LabLocked) DanX (Diamond Rabbit), Dethman (Queen of Board), Dino (Dino Dynamics), Evil_Bill (Sting in Your Tail, Under Siegeness) Mârtin (70's Fever), Mez (MEZ01, MEZ03/D-Scape), Newspaz (Krype), Onag (ElectriChaos), PaSTE (PaSTE's City), Rocky Raccoon (A White Christmas), stripe (Diamond DASH) Wakeman (Peach Beach)