This page is about new stuff JJ2+ lets you do, while making levels! If you're not an experienced level designer, check out the Getting Started section instead.

Example Levels

Click here for a bunch of levels you can download. These are mostly not flashy gameplay experiences, rather they're demoing how to use some JJ2+ features, especially for scriptwriters. Let us know if you'd like to see examples for anything else!

Level Properties

Tiles

Tiles saved in levels with the 0x2000 bit set are vertically flipped. (Unpatched JJ2 only allows horizontally flipped tiles.) These are supported in all contexts except individual frames in animated tiles.

JJ2's original level editor, Jazz Creation Station (JCS.exe), can't handle vertically flipped tiles, so you'll need a fanmade level editor such as MLLE.

Tiles may also be 32-bit if the tileset/script allows it, and may use new tile types.

Lighting

The "Illuminate Surroundings" event checkbox now works for all objects, not just 1ups. (A few older levels, such as "Snow Bunnies" from HH98/CC99, now look different, but closer to how they were intended to look.)

Ambient lighting over 199 is now full white instead of undefined and prone to flickering.

Layers

Low Detail works differently in JJ2+ than in unpatched JJ2. In both, Layer 8 (background) is always shown. In unpatched JJ2, Layer 3 and Layer 4 are also always shown, but in JJ2+, all/only layers with XSpeed 1 and YSpeed 1 (and normal speed models) are shown. This means your level can stack more layers on top of each other without worrying about Low Detail.

Layer 4 (the solid/sprite layer) will display infinitely if "Tile Width" and/or "Tile Height" is checked. This is solely a visual effect.

Antigravity

A totally new feature in JJ2+. You fall up instead of down, you shoot down instead of up, your sprites are reversed and you walk on the ceiling. Great for making elaborate puzzles or just disorienting the player!

Antigravity is triggered in one of three ways:

Antigravity is still buggy with shootable poles, bridges, pinball flippers, steam, and swinging vines. Otherwise, though, the game should work as you expect.

Pits

Set the event in the bottom right corner of a level to Event 255 ("MCE Event"), to turn that level's bottom into an instant-death pit. This lets you make all sorts of classic platformer designs!

Fallen pickups (ammo, carrots, etc.) will be destroyed and regenerate later. Don't include death pits in Treasure Hunt levels, though—it's not really obvious what should happen to gems in that case.

Players get frustrated when they die from death pits that they didn't know about. Your level design should make the hazard obvious: darkness, skulls, warning signs, etc.

In online multiplayer, the Punishment for Self Destructs and Self Destruct Team Point Decrease settings control what else happens when someone falls.

Set the bottom-right event to Event 1 ("One Way Floor") instead of 255, to make the bottom of the level be solid ground instead. Currently, no other events besides 1 and 255 have any special effects here.

Specific Events

Because you can rename events freely by editing JCS.ini, some names may be different for you. JJ2+'s GOG distribution and MLLE both use names based on EvilMike's JCS.ini, so those names are preferred here.

Activate Snow Effect

Hugely expanded set of parameters, including several other environmental effects besides snowfall:

Airboard

Airboard (event 59) allows you to set the delay time, in seconds, between spawning airboards. This defaults to 30 seconds.

Ammo Crate (+15)

This is event 54, renamed from "Bouncer Ammo Crate (+15)."

The new "Weapon" parameter lets you place +15 ammo crates for any weapon, including TNT, Gun8, and Electro-Blaster, which can't otherwise be placed in levels.

To set Weapon on a generating ammo crate (for example, in a multiplayer level), try turning on jjDelayGeneratedCrateOrigins, and place the generator directly above an MCE Event with the proper parameter.

Bilsy & Xmas Bilsy

The new "Falls" parameter means that when teleporting, they're automatically adjusted down to the nearest masked surface. Originally they would simply float in midair if placed in levels with uneven floors.

Bolly

The new "NoCeiling" parameter allows Bolly to move higher than three tiles above its starting position.

Bomb Crate

The new "NoBomb" parameter removes the bomb, making this a crate with no contents at all (unless you use the "ExtraEvent" parameter). Makes it easier to sprinkle lots of crates around a level.

Butterfly, Path, Rocket Turtle

The unused Rocket Turtle boss was partially coded into unpatched JJ2, but it didn't work very well. The Butterfly enemy had sprites but no code at all. JJ2+ gives them both an all-new node-based movement pattern that lets you, the level designer, pick exactly where (and how fast) they move.

Each node is a "Path" event (confusingly named "Area ID" in unpatched JJ2). Paths have five parameters. Players touching Path events does nothing; instead, the parameters are used by Butterflies and Rocket Turtles.

Both Butterfly and Rocket Turtle have their own Velocity and Angle parameters too, to pick their starting movement before they reach their first Path events.

More Details

The original, buggy Rocket Turtle behavior is still included in JJ2+ for backwards compatibility. If you give a Rocket Turtle a 0 velocity, it uses the old behavior; any number other than 0 uses the new path movement behavior.

If a 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.

Besides Path, both Butterflies and Rocket Turtles can also be thrown off course a bit by the Wind Left, Wind Right, and Float Up events.

Jailbreak

The Path event is also used to place the corners of each jail in Jailbreak levels. Set Velocity to 0 for the blue jail, and 1 for the red jail.

End-of-Level events

The end-of-level events now let you skip the gem-counting sequence and pick which level comes next, instead of only ever the same level in a linear order. This lets you make branching episodes or even open worlds.

The TextID parameter picks one of the sixteen help strings. (If 0, the default next level filename is used.) The Offset parameter selects the filename within the help string, separated by | pipe characters. For example, if the help string is beachlevel|castlelevel and Offset is 1, castlelevel will be loaded next.

Extra Time

This object was present in unpatched JJ2, using the same sprite as the Stopwatch that extends shield timers, but it didn't do anything when you collected it, probably because JJ2 (unlike JJ1) doesn't have time limits.

JJ2+ uses it to extend the player timer. Its Seconds parameter (0–127) picks how many seconds it adds, defaulting to 10.

Gem Ring

The Length and Speed parameters are now actually used, both defaulting to 8. You can also create rings of any object (with Red Gem as the default pick). This works best with other pickups, but other objects may be used with varying success, including enemies, bullets, and more.

Generator

When you check the "Create a generator for this event" box, the maximum Delay is now 255 seconds instead of 31. There's also a new "Initial Delay" parameter which makes the event not spawn for the first time until Delay seconds have passed.

MCEs

Another related tool is "MCE Event," which has no code of its own, but uses the same parameters as Generator. This is used in some very complicated setups, but in general, it's just a good way to add parameters to a tile without worrying about any code running them, other than the code you yourself want to have be there. It goes well with jjDelayGeneratedCrateOrigins and such.

The only time MCE Event does something on its own is when you place it in the bottom right corner, to make an instant death pit.

Related bug 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.

Horizontal Springs

The new "Reverse" parameter lets you flip their direction from what it would otherwise be, like the "Ceiling" parameter on non-horizontal springs. This is mostly for placing leftward-facing springs in midair (they always face right by default).

H-Pole & V-Pole

Both pole events have a new "Delay" parameter, which chooses how many ticks (70ths of a second) players spin around the pole before launching away. If left at 0, it defaults to 70 (one second, the original behavior).

Hurt

You may now 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, like normal.

Limit 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

Morph Box (Bird)

Normally this morphs you into Chuck, the nosediving bird. Set its parameter to 1 to morph into Flip, the shooting bird added by JJ2+.

No Fire Zone

This event was included, but unused, in unpatched JJ2: whenever you stood in tiles with this event, you couldn't fire any bullets.

JJ2+'s new "Set To" parameter can make the effect last even after you exit this exact tile, more like the Set Ambient Lighting event, so that your level can have other events too:

The "Var" parameter adds two new effects besides not being able to fire bullets. 1 reverses your gravity, and 2 makes you completely invisible, both new in JJ2+ and both synced with other players in servers.

Slide

Players walking/running on this tile have reduced friction, kind of like the Belt events. The "Strength" parameter (0–3) sets how much the friction is reduced.

A "Slide" event was always present in JCS.ini, but it didn't work in unpatched JJ2. This is our guess for what the original team wanted it to do.

Start Position (Lori)

The same as Start Position (Jazz) and Start Position (Spaz), but for Lori! Added in JJ2+, unpatched JJ2 didn't use event 32 for anything.

Start Position (Multiplayer)

The "Teams" parameter lets you pick numbers from 0–3 instead of just 0–1. 0 for Blue, 1 for Red, 2 for Green, 3 for Yellow.

Team-specific start positions are used if, and only if, all enabled teams have at least one team-specific start position. If there is any gap, players spawn at any start position at random.

Steady Light and Pulse Light

You can now pick what type of light is produced, and how big the radius is. The types are:

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

Sucker Tube

In unpatched JJ2, you must place entire chains of Sucker Tube events so players don't fall out of tubes. JJ2+ adds a new "Noclip Mode" which ignores walls, gravity, and deceleration: whenever you touch a Sucker Tube event, you start moving in a specific direction and speed and don't stop/change until another Sucker Tube event tells you to.

Specifically, the "BecomeNoClip" parameter turns on Noclip Mode if set to 1, and the "Noclip Only" parameter makes Sucker Tube events that are used only by players already in Noclip Mode.

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.

This means that Noclip Mode sucker tubes may pass through areas of the level that players may walk normally, without those players accidentally entering the tubes.

Also, if you touch a Sucker Tube with the "Trig Sample" parameter set, it plays a short noise. (This parameter was included in unpatched JJ2, but it didn't work.)

Text

Because JJ2 only lets you write sixteen different help strings per level, JJ2+ adds an "Offset" parameter which displays only a substring from one of those strings, separated by the | pipe character.

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

There's also an "AngelScript" parameter which calls functions in script files.

Trigger Crate

Now can turn off and toggle triggers, not just turn them on. 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. Like for Ammo Crate (+15) above, jjDelayGeneratedCrateOrigins is the easiest way to add a generating trigger crate with specific parameters.

Warp

The new "Fast" parameter warps players instantaneously to their targets, without playing a sound effect or showing warping animations.

Also, "ShowAnim" now works with any number of coins (0–255), not just 10/20/50/100.

Water Level

In unpatched JJ2, any level with water could not also have ambient lighting. (Lighting slightly changes the water color, but only in 8-bit color; no effect in 16-bit color.)

The new "Lighting" event parameter fixes this. Set it to 1 to have a level with both water and lighting. Alternatively, 3 ignores the level's ambient lighting number but makes water get darker and darker as you swim farther down. Don't use 2, it doesn't do anything yet.

Water Bugs

JJ2+ also fixes some bugs as usual:

Help Strings

The strings that show up when you touch Text events, like the many signs in the official levels, normally only draw letters in their standard brown. The # symbol gives rainbow colors to all the characters after, but that was all the control unpatched JJ2 gave you.

JJ2+ introduces backslash colors which make all the later characters be the same color, not rainbow. For example, in a help string My name is \8Devan would draw the first three words in the default brown, and the last word in the turtley shade of green. Any number from 1–9 may be used to choose different colors.

The ~ (tilde) character can be used instead, to pause the rainbow coloring after a #. For example, Brown #rainbow ~paused. A second tilde stops the rainbow completely and goes back to brown coloring.

The AngelScript method jjPLAYER::showText lets you show any string of characters to players, not just the sixteen defined in your level. You can also increase the text size, as seen in levels like Jingle Jumble.

32-bit Graphics

In normal JJ2, all graphics are 8-bit, meaning that instead of containing actual color data they contain only a series of palette indices, and the combination of those indices and the game's current palette are what the user sees on screen. For example, turtles' shells are not inherently purple; instead, their sprite data contain a series of palette indices that happen to match up to sections of palettes that are usually purple, yet may not be purple in all tilesets or other contexts. Changing the current palette thus recolors all basic graphics, although certain effects are palette-independent when you are playing in 16-bit color, such as water, frozen sprites, and the fade color for some textured backgrounds.

JJ2+ expands your options by allowing for 32-bit graphics, which not only define palette-independent colors but also have full (instead of 1-bit) alpha channels for defining varying opacities. To accomplish this, JJ2+ allows certain modifications to the J2T (tileset) and J2A (animations) file formats, meaning that some tiles and/or sprites may be 32-bit while others are 8-bit. At present, the only tools capable of creating/editing such files are MLLE for building/using 32-bit tilesets and these python scripts for importing/exporting 32-bit sprites. You can also use AngelScript to load 24-bit or 32-bit PNG images.

Whenever one or more 32-bit graphics—either tiles or sprites—are used in a level, the option to play JJ2 in 8-bit color mode is disabled from the menu until the level ends, at which point it will become available again until such time as another 32-bit graphic is used.

32-bit graphics are completely usable in most contexts, but placing 32-bit tiles in a layer used as a textured background is undefined.

Tile Types

Unpatched JJ2 draws individual tiles in two different ways: normal, and transparent (like the tubes in the "Labrat" levels at the end of the first episode). A third tile type, "Caption," doesn't draw tiles differently, but does cause them to appear in the game window's title bar.

JJ2+ adds four new tile types:

Unfortunately, the JCS.exe that comes with 1.24—including in JJ2+'s GOG distribution—is broken and doesn't really support tile types. You can seek out the JCS.exe from 1.23 (although it doesn't support larger tilesets), or else use a fanmade level editor like MLLE.

Textures

Check out the "Layers" example level to see all these texture options in action!

Several new textured layer 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. Official campaign levels "Funky Grooveathon" and "Retro Rabbit" are examples of this.

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.

(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 chosen in AngelScript). 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. Checking the "Parallaxing Stars" checkbox doubles the size at which the layers are drawn to be closer to their normal size as tiles.

The "Wave" textured background draws the repeating texture, similar to an untextured 8×8 layer, but may apply sine wave distortions to the texture if either the "Hor Length" (horizontal wavelength, for horizontal distortions to the texture) and/or "Ver Length" (vertical wavelength) properties are non-zero. Recommended wavelength numbers are powers of two minus one: 255, 127, and so on, down to 0 for no distortion at all. "Wave Spd" (wave speed) moves the distortion waves along the texture at that constant speed, and is treated as a signed byte: positive values (e.g. 1 or 2) move the waves up and left, and negative values (e.g. 255 or 254, treated as -1 and -2 respectively) move the waves down/right. By checking the "Parallaxing Stars" checkbox you can rotate the wave speed to move up/right or down/left instead. The AngelScript jjLAYER properties wave.amplitudeX and wave.amplitudeY are used to determine the waves' amplitudes.

The "Cylinder" textured background is similar to "Warp Horizon" but more curved and with a fainter fade effect, as if the player is inside a horizontal tube. Checking the "Parallaxing Stars" checkbox zooms out from the tube a bit, drawing the texture at a reduced size and increasing the curvature.

The "Reflection" effect draws a 3D surface covering the bottom half of the screen, akin to those drawn by Warp Horizon, except that the surface is reflective, effectively mirroring the top half of the screen. Because only layers further away than the textured layer are mirrored, this effect is only useful when placed on layers other than the furthest background layer. In fact, Reflection may even mirror game sprites if placed on foreground layers.

The used texture determines the shape and size of distortions in the reflection. An entirely single-color texture will result in a perfectly symmetrical reflection, whereas most textures designed for textured backgrounds will give it the appearance of a body of water. Parameters of reflection modifiable in JCS are Alpha, Distance, and Amplitude. Alpha determines intensity of the color overlaid over the reflection (palette entry 192 by default unless changed using jjLAYER ::reflection.tintColor), Distance adjusts how close the water appears to be to the camera view, and Amplitude affects strength of the distortion. Additionally, the Parallaxing stars background box may be checked to apply a horizontal blur effect to the outcome in 16-bit color mode.

Other settings related to (textured) layers are only available in AngelScript or in MLLE, particularly spriteMode and textureSurface .

Manual JCS.ini changelist

Most ways of getting JJ2+ edit your JCS.ini automatically to let you use the new events, tile types, and texture effects, and MLLE updates include them too. But here are the changes you would need to make yourself, just in case.

#for editing JCS.ini
[Textures]
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
4=Wave                     |Hor Length|Ver Length |Wave Spd
5=Cylinder                 |Fade Red  |Fade Green |Fade Blue
6=Reflection               |Alpha     |Distance   |Amplitude
[Tiles]
1=Translucent
2=Opaque
3=Invisible
4=Caption
5=Heat Effect
6=Frozen
[Events]
2=Hurt                              |+|Modifier  |Hurt   |       |Up:1|Down:1|Left:1|Right:1
5=Slide                             |+|Modifier  |Slide  |       |Strength:2
6=H-Pole                            |+|Object    |H-Pole |       |Delay:7
7=V-Pole                            |+|Object    |V-Pole |       |Delay:7
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
24=Limit X Scroll                   |+|Modifier  |Limit  |Xscroll|Left:10|Width:10
26=Area Warp Secret                 |+|Area      |Warp   |Secret |Coins:10|TextID:4|Offset:4
31=Multiplayer Level Start          |+|StartPos  |MP     |Start  |Team:2
32=Lori Level Start                 |+|StartPos  |Lori   |Start
52=Bomb Crate                       |+|Goodies   |Bomb   |Crate  |ExtraEvent:8|NumEvent:4|RandomFly:1|NoBomb:1
54=Bouncer Ammo+15                  |+|Ammo      |Gun2   |Am+15  |Weapon:3
59=Airboard                         |+|Object    |Air    |Board  |Delay Secs:5
89=Extra Time                       |+|Goodies   |Extra  |Time   |Seconds:7
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
94=Morph Into Bird                  |-|Morph     |Bird   |Morph  |Flip: 1
95=Scenery Trigger Crate            |+|Trigger   |Trig   |Crate  |TriggerID:5|off:1|switch:1
114=Bilsy Boss                      |-|Boss      |Bilsy  |Boss   |EndText:4|Falls:1
148=Steady Light                    |+|Light     |Steady |Light  |Type:3 |Size:7
149=Pulse Light                     |+|Light     |Pulse  |Light  |Speed:8|Sync:4|Type:3|Size:5
192=Gem Ring                        |+|Gem       |Gem    |Ring   |Length:5|Speed:5|Event:8
198=Rocket Turtle                   |-|Boss      |Rock   |Turt   |EndText:4|Velocity:6|Angle:3
206=Sucker Tube                     |+|Object    |Suck   |       |X-Speed:-7|Y-Speed:-7|Trig Sample:1|BecomeNoclip:1|Noclip Only:1|WaitTime:3
207=Text                            |+|Trigger   |Text   |       |TextID:8|Vanish:1|AngelScript:1|Offset:8
208=Water Level                     |+|Scenery   |Water  |       |Height (Tiles):8|Instant:1|Lighting:2
216=Generator                       |+|Generator |Gene-  |rator  |Event:8|Delay Secs:8|Initial Delay:1
230=Warp                            |+|Area      |Warp   |       |ID:8|Coins:8|SetLap:1|ShowAnim:1|Fast:1
235=Bolly Boss                      |-|Boss      |Bolly  |Boss   |EndText:4|NoCeiling:1
236=Butterfly                       |-|Enemy     |Butter |Fly    |Velocity:6|Angle:3
238=Snow                            |-|Scenery   |Snow   |Particles|Intensity:2|Outdoors:1|Off:1|Type:2
242=Path                            |-|Area      |Path   |       |Velocity:6|Angle:3|Relative:1|RandRev:1|WaitTime:3
245=No Fire Zone                    |+|Area      |No Fire|Zone   |Set To:2|Var:2
251=Xmas Bilsy Boss                 |-|Boss      |XMBilsy|Boss   |EndText:4|Falls:1
255=MCE Event                       |+|Area      |MCE    |Event  |Event:8|Delay Secs:8|Initial Delay:1

#for editing .ini files for MLLE
[Textures]
0=3D Planes                   |+|Parallaxing stars|Fade Color
1=Tunnel                      |+|Spiral|Fade Color
2=Menu                        |-|Reverse gradients|Palrow 16|Palrow 32|Palrow 256
3=Tile Menu                   |-|Full size
4=Wave                        |-|Swap Angles|Hor Wlength|Ver Wavelength|WSpeed
5=Cylinder                    |+|Half size|Fade Color
6=Reflection                  |-|Blur|Alpha|Distance|Amplitude
[Tiles]
1=Translucent
2=Opaque
3=Invisible
4=Caption
5=Heat Effect
6=Frozen
[Events]
2=Hurt                              |+|Modifier  |Hurt   |       |Up:c1|Down:c1|Left:c1|Right:c1
5=Slide                             |+|Modifier  |Slide  |       |Strength:2
6=H-Pole                            |+|Object    |H-Pole |       |Delay:7
7=V-Pole                            |+|Object    |V-Pole |       |Delay:7
17=Area End Of Level                |+|Area      |End    |Area   |Secret:c1|Fast:c1|TextID:4|Offset:4
18=Area Warp EOL                    |+|Area      |End    |Warp   |Empty:1|Fast:c1|TextID:4|Offset:4
24=Limit X Scroll                   |+|Modifier  |Limit  |Xscroll|Left:10|Width:10
26=Area Warp Secret                 |+|Area      |Warp   |Secret |Coins:10|TextID:4|Offset:4
31=Start Position (Multiplayer)     |+|SignPost  |MP     |Start  |Team:{Blue, Red, Green, Yellow}2
32=Lori Level Start                 |+|StartPos  |Lori   |Start
52=Bomb Crate                       |+|Goodies   |Bomb   |Crate  |ExtraEvent:8|NumEvent:4|RandomFly:c1|NoBomb:c1
54=Ammo+15                          |+|Ammo      |Gun2   |Am+15  |Weapon:{Bouncer, Ice, Seeker, RF, Toaster, TNT, Gun8, EB}3
59=Airboard                         |+|Object    |Air    |Board  |Delay Secs:5
89=Extra Time                       |+|Goodies   |Extra  |Time   |Seconds:7
91=Hor Red Spring                   |+|Spring    |H-Red  |Spring |Empty:2|Keep Y-Speed:c1|Delay:4|Reverse:c1
92=Hor Green Spring                 |+|Spring    |H-Green|Spring |Empty:2|Keep Y-Speed:c1|Delay:4|Reverse:c1
93=Hor Blue Spring                  |+|Spring    |H-Blue |Spring |Empty:2|Keep Y-Speed:c1|Delay:4|Reverse:c1
94=Morph Into Bird                  |-|Morph     |Bird   |Morph  |Flip:c1
95=Scenery Trigger Crate            |+|Trigger   |Trig   |Crate  |TriggerID:5|off:c1|switch:c1
114=Bilsy                           |-|Boss      |Bilsy  |       |EndText:t4|Falls:c1
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
192=Gem Ring                        |+|Gem       |Gem    |Ring   |Length:5|Speed:5|Event:8
198=Rocket Turtle                   |-|Boss      |Rock   |Turt   |EndText:t4|Velocity:6|Angle:{E,SE,S,SW,W,NW,N,NE}3
206=Sucker Tube                     |+|Object    |Suck   |       |X-Speed:-7|Y-Speed:-7|Trig Sample:c1|BecomeNoclip:c1|Noclip Only:c1|WaitTime:3
207=Text                            |+|Trigger   |Text   |       |TextID:8|Vanish:c1|AngelScript:c1|Offset:8
208=Water Level                     |+|Scenery   |Water  |       |Height (Tiles):8|Instant:c1|Lighting:{Off, On, ???, Lagunicus}2
216=Generator                       |+|Generator |Gene-  |rator  |Event:8|Delay Secs:8|Initial Delay:c1
230=Warp                            |+|Area      |Warp   |       |ID:8|Coins:8|SetLap:c1|ShowAnim:c1|Fast:c1
235=Bolly                           |-|Boss      |Bolly  |       |EndText:t4|NoCeiling:c1
236=Butterfly                       |-|Enemy     |Butter |Fly    |Velocity:6|Angle:{E,SE,S,SW,W,NW,N,NE}3
238=Activate Snow Effect            |-|Scenery   |Snow   |Particles|Intensity:2|Outdoors:c1|Off:c1|Type:{Snow, Flowers, Rain, Leaf}2
242=Path                            |-|Area      |Path   |       |Velocity:6|Angle:{E,SE,S,SW,W,NW,N,NE}3|Relative:c1|RandRev:c1|WaitTime:3
245=No Fire Zone                    |+|Area      |No Fire|Zone   |Set To:{Local, Off, On, Toggle}2|Var:{No Fire, Anti-Grav, Invisibility}2
251=Xmas Bilsy                      |-|Boss      |XMBilsy|       |EndText:t4|Falls:c1
255=MCE Event                       |+|Area      |MCE    |Event  |Event:8|Delay Secs:8|Initial Delay:c1

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, such as those which use a trigger for team-based routes.

With JJ2+, the triggerIDs of the Trigger Zones (event 246) placed on the bottom row of a level receive special properties. When the server sends its trigger settings to clients, these triggerIDs are adjusted per client.

Here, "Position <number>" means place the trigger zone at position <number>, <level_height> in JCS. For example, the server trigger in a level with 50 as its height is a trigger zone at 2, 50. In MLLE, which uses 0-indexed positions instead of JCS's 1-indexed, this is 1, 49 instead.

Any other trigger zone placed on the bottom row of a level is set to off for clients.

Secret Levels

In unpatched JJ2, the entrance to the single completed secret level—Gargoyle's Lair, entered from Medieval Kineval—is unplayably broken. Beating the secret level just sends you right back into the secret level again, because you keep touching the secret level event.

JJ2+ fixes this. If you enter a secret level using either Event 17 (Area End Of Level) or 26 (Area Warp Secret), the event you touched is removed from the level's event map, and so are all neighboring copies of the same event, and their neighboring copies, and so on, like a fill tool in a graphics program.

Also, JJ2+ fixes the glitch of continuing to think you were in a secret level if you returned to the main menu from a secret level and then started a new game.