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
- Saving your game is not supported for levels with script files or levels in subfolders.
- Gamemodes added by JJ2+ can't be selected from the main menu, only ingame or using the command line, making them hard to learn about.
- Unspectating sometimes gets you stuck in the top left corner of a level.
- Food should probably reset more often in servers.
- Sometimes clients can't see the emoji from plusEmoji.mut (issue with how
#pragma offeris handled). - If you change your language, some parts of the game are translated but many others are still in English.
- The timing for Corpses Drop Ammo is bad, players tend to drop ammo after respawning instead of in the place where they were roasted.
- Some player properties are not handled well by entering/leaving secret levels like Gargoyle's Lair, especially bird companions.
- Buttstomping onto very thinly masked tiles gets you stuck.
- jjSetDarknessColor corrupts the main menu colors in 8-bit.
- 1.24+ clients playing as Lori in 1.23+ servers are sometimes temporarily transformed into Jazz.
- jjPIXELMAP::save to sprites has a sort of memory leak.
Possibly fixable
- Some menu options corresponding to console commands are only available for the player hosting the server, not for remote admins.
- Sometimes sounds play briefly even when sound is muted.
- Many chat commands, including everything related to gamemodes introduced in JJ2+, do not work in local games.
- The tilesets from the Queen of Board fanmade episode don't display properly.
- Hurt events with the Ceiling parameter have an overly long range.
- Layers with the
SPRITE::MAPPINGsprite mode may react poorly to changing color depth or the mapping itself. - Bird companions that are scripted to shoot non-blaster bullets can sometimes get clients kicked for hacking.
- Clients who use /ready when powerups are disabled can get kicked for hacking.
- Shootable poles, bridges, pinball flippers, steam, and swinging vines work badly with players with reverse gravity.
- Enabling/disabling teams resends the "Game Mode has been changed to" alert
- 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.
- AngelScript metadata may stop working when there are multiple script modules.
- Auto Volume Leveling doesn't always work as expected.
- jjPLAYER::fireBullet does not position bullets correctly.
- jjPLAYER::kill behaves inconsistently.
- TLRS pregames may not end if empty teams are disabled.
- 1.23's odd ability to read text strings of IDs higher than 15 has been lost.
- The 3D TV support introduced in v4.0 is mostly broken nowadays.
- Sometimes "Failed to remove JJ2 icon from tray" appears in
chatlog001.txtwhen Shift+F2 hadn't been pressed.
Probably unfixable
- 1.24 (TSF) was released by two different publishers, with two different sets of memory addrsses. The version published by LK Avalon is not supported by JJ2+.
- Scrolling or selecting text in the chatlogger can react badly when new messages are logged.
- Downloaders cannot receive chat, for lag reasons.
- Downloaders running very old JJ2+ versions may get kicked upon level cycles.
- Game Mode and Max Score changes causes glitches for splitscreeners not running JJ2+.
- Reaching the score limit with Auto-Stop enabled may cause clients not running JJ2+ to incorrectly see the game end.
- The fireball gun will display as pepper spray for anyone not running JJ2+ v4.0 or above.
- Leaving the game running for a very long period of time (several weeks or more) may cause certain time-related features to misfunction.
- Hardware Acceleration and IPX have been removed from the game.
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:
- Update: Download and install the newest JJ2+ release! You may be asked to run the game as an admin.
- Later: Skips to the main menu. Anytime you open a level afterwards, there may be a nag screen reminding you to update.
- Explode: Don't touch this button!
- Changes: Graphical rendition of the changelog. If you're multiple updates behind, multiple changelog dates will be shown.
- Quit: Exits the game program.
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:
- AngelScript by Violet CLM—minor script edits from the original
- Ardent Exertion by Sampo "Blade" Vesanen—edited from six different original releases (1/2/3/4/5/6) to remove copyrighted music, make the levels follow each other, and remove a few text references to being "example levels"
- Burrowsville? by Slaz—edited from the original to remove copyrighted music and improve ghost enemy drawing code
- Decimation by Seren—edited from the original to remove copyrighted graphics and music
- Energized Action by Sampo "Blade" Vesanen—edited from the original to remove copyrighted music
- Jingle Jumble by Primpy—edited from the original to remove copyrighted graphics and music
- Mini Boss Rush by Violet CLM—no changes from the original
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
- Arjan Brussee | Lead Programmer
- Michiel Ouwehand | Programmer
- Nick Stadler | Art, Animation, Design
- Cliff Bleszinski | Design, Co-producer
- Alexander Brandon | Music
- Dean Dodrill | Cinematic Animation, Art
- Scotty Cone | Art, Animation
- Nando Eweg | Sound Effects
- Jon MacLellan | Additional Level Design, Webmaster
- Robert A. Allen | Producer, Additional Music
- Carlo Vogelsang | Sound Engine Programming
- Sean Hiler | Additional Music
- Cultural Fluency | Translations
- Craig Lafferty | Public Relations Manager
- Chris Hargett | Server Meister
- Mike Forge | Manual
- Mark Rein | Marketing
- Jay Wilbur | Marketing, Imperial Advisor
- Nigel Kent | Administration
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)