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:
- The No Fire Zone event has a new "Var" parameter which picks which property of players it messes with. Set "Var" to "1" for gravity. This can change your gravity permanently, or just flip it in a localized area, like the tractor beam under a UFO.
- Simply change jjPLAYER::antiGrav in AngelScript.
- The JJGRAV cheat code.
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:
- Intensity: 0–3, higher values create more particles and make the screen look busier.
- Outdoors: Causes snow to appear only where layer 4 specifically (the solid layer) is transparent, rather than also appearing inside of buildings for no obvious reason.
- Off: When an Off snow event is loaded into memory, any environmental effect is turned off. Not always useful, but not something unpatched JJ2 let you do.
- Type: Choose between 0 (snow sprites), 1 (falling white flowers), 2 (bubbly raindrops), and 3 (the leaves from Diamondus, which collide with masked tiles if "Outdoors" is set to 1).
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.
- Velocity: Higher numbers (0–63) move faster.
- Angle: The direction for the enemy to go next. 0 is right/east, and the other numbers rotate clockwise up to 7 (up-right/northeast).
- Relative: Causes the Angle parameter to be added to the enemy's previous 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.
- RandRev: Random 50% chance of reversing this node's usual angle (adding 4 to it), so the path can vary more. For example, Angle=2/Relative=0/RandRev=1 will sometimes send the enemy upward and will sometimes send it downward.
- WaitTime: Same as the WaitTime parameter on Sucker Tube events, causes the enemy to stop in place for 0–7 seconds before continuing along the path.
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:
- 0: Local. The effect only lasts while you're standing on this tile.
- 1: Off. The effect is turned off, if it had been turned on beforehand.
- 2: On. The effect is turned on and lasts until turned off by another event..
- 3: Toggle. The effect is turned on if it was off, or off if it was on.
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:
- Normal light
- Single point (ignores the "Size" parameter)
- Single point (brighter) (ignores the "Size" parameter)
- Flicker light
- Bright normal light
- Laser shield/Illuminate Surroundings
- Ring of light
- 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:
- Water couldn't be removed from levels, only added. It would still appear at the very bottom of the level (and turn off lighting) if you tried. Now, you can remove water just by setting its height to something farther down than the level height.
- 16-bit water in low detail mode was only drawn on the left half of the screen. (Though it still picks low-detail colors at random, instead of using the custom colors from AngelScript jjSetWaterGradient .)
- Entering/leaving low-gravity water didn't show the splash animation. (In unpatched JJ2, water in very tall levels reduces players' gravity instead of letting you swim. JJ2+ gives you more control over this AngelScript jjWaterInteraction.
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:
- Frozen: Transparent but using the blue colors of frozen objects/enemies, not the tile's own colors.
- Heat Effect: Draws pixel rows wavily as if seen through intense heat. (This feature was planned for JJ2 but never implemented by the original team.)
- Invisible: The tile is not drawn at all. Used for placing solid tiles that the player can stand on but not see.
- Opaque: Draws the tile normally. This is only useful in layers scripted to use different colors/blending. This tile type overrides those scripts to draw individual tiles normally.
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.
- Position 1: Team trigger
- When the trigger zone's "onoff" parameter is 0, the trigger is set on for red & off for blue. If 1, on for blue & off for red.
- Team triggers for the green and yellow teams are undefined.
- 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 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.