We just reached 30,000 articles on this wiki! 🥳
If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!

Jazz Jackrabbit 3

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Jazz Jackrabbit 3

Also known as: Jazz Jackrabbit 3D: Adventures of a Mean Green Hare
Developer: World Tree Games
Platform: Windows


AreasIcon.png This game has unused areas.
DevTextIcon.png This game has hidden development-related text.
MinigameIcon.png This game has unused modes / minigames.
ModelsIcon.png This game has unused models.
MusicIcon.png This game has unused music.
TextIcon.png This game has unused text.
LevelSelectIcon.png This game has a hidden level select.


This game was stuffed away in a cardboard box and found 30 years later in a garage
This game was never completed and/or given a public release.
As a result of this, keep in mind that the developers might have used or deleted some of the content featured here, had the game actually been released.

Jazz Jackrabbit 3 was set to be Jazz's first 3D game. featuring the return of Spaz and Lori as playable characters plus the introduction of Eva's cousin Razz, who would help create various items for the team.

The game was about 25% complete, but the developers were unable to find a publisher, and eventually the team went their own separate ways. An alpha build dated November 17, 1999 was eventually leaked to the internet.

Developer Console

Pressing the tilde key (~) will open up the Unreal console. This uses the original Unreal Engine commands, though not all of them work.

JJ3-Commands.png

Render Modes

Normal Gameplay Render 3
JJ3-Render2.png JJ3-Render3.png

One of the render modes makes it much easier to view areas darkened by shadows.

Another version includes wireframe mode:

JJ3-Render.png

Build Date

Nov 17 1999 19:46:02

Unused Levels

JLow.unr

The largest level in the alpha demo, matching some concept art. It features a small village with two residents, a huge waterfall, a cave, a cannon atop a beach, and an underwater city, complete with sunken ship. The level title is 'Lair of Wind'. Several collectibles are scattered around the level, and enemies also populate it.

Lair of Wind requires a patch to work correctly, otherwise the crankshaft won't spawn on the beach and the water won't function, causing Jazz to fall through to the bottom. The small ponds in the caves will work as normal regardless.

It's also possible to climb to the top of this level by running up the waterfall from the top.

Two pieces of dialogue explain what was going to happen in this level.

I'm glad you're here Jazz, my house is flooded with goons, if we don't get this Lair's key back, the Evil Devan Shell will take control! We gotta keep this real, you know what I'm sayin'.
Please rid us of Evil Devan's Henchman! The Red Lizard stole our key to the Lair Of Wind! Jazz, please return it to us! The Red Lizard is locked underwater, you must retrieve the Crankshaft that fell below, onto the beach and return it to the Gate House, only then you will be able to fight the Red Lizard. I know you can do it!

Tomslevel.unr

A small level where Jazz starts off inside a small space shuttle with some boxes. A small area leads outside to a forest with a large mushroom in the center, suggesting that perhaps the rocket would crash here at some stage.

JBoardin.unr

A very rough boarding level, as the filename implies. Jazz can get on and move around the empty level with it. The center of the level features a checkerboard texture, and the level ends abruptly. There are no warps anywhere in the level.

Surf.unr

Same as JBoardin, only Jazz dies upon pressing any button.

JJ3-BoardAlt.png

Entry.unr

A medium sized area with a lake in the center, and a small raised platform where the character will stand.

JJ3-Entry.png

DeanVillage004.unr

This level, titled Royal Carrotus Village, appears to be an early version of, well, Carrotus Village. The final level drops the 'Royal' from the name.

Dean Village J Village
JJ3-DeansVillage-1.png

JJ3-DeansVillage-2.png

JJ3-DeansVillage-3.png

JJ3-DeansVillage-4.png

JJ3-DeansVillage-5.png

JJ3-DeansVillage-6.png

JJ3-DeansVillage-7.png
JJ3-Village-1.png

JJ3-Village-2.png

JJ3-Village-3.png

JJ3-Village-4.png

JJ3-Village-5.png

JJ3-Village-6.png

JJ3-Village-7.png

There are many changes between the two. Many of these are texture changes, but some of the more significant changes include the lack of items, missing NPCs, placeholder textures, no fire effects, the carrot shop not having an entrance yet, and the entrance to the canyon being completely different. You can't enter the canyon though, as it leads to a dead end.

JJ3-DeansVillage-Block.png

This level also lacks any dialogue tags, and all of the warps are similarly missing, as is the music.

DeanDungeon07.unr

This level is an early version of the Basement.

Dean Dungeon J Dungeon
JJ3-DeanDun-1.png

JJ3-DeanDun-2.png

JJ3-DeanDun-3.png

JJ3-DeanDun-4.png

JJ3-DeanDun-5.png

JJ3-DeanDun-6.png

JJ3-DeanDun-7.png
JJ3-Dun-1.png

JJ3-Dun-2.png

JJ3-Dun-3.png

JJ3-Dun-04.png

JJ3-Dun-5.png

JJ3-Dun-6.png

JJ3-Dun-7.png

Much like Dean Village, this version lacks all of the collectables, the enemies, the music, the lighting effects and many other items. Some of the areas blocked off in the final can be accessed immediately in this version, and no switches are present.

The level ends just before the first valve when Jazz enters an invisible warp back to the water, yet the passage he should enter from here is replaced with a brick wall.

Tomswamp.unr

This level cannot be loaded, as it lacks a Player Start.

JJ3D.unr

What could potentially be an alternate title screen, JJ3D is a level that can't actually be played. When run, it shows a gun at the top of the screen and an auto-camera pans around the level. It starts off by focusing in on Jazz standing on a hill with a flag, and pans a bit before leading downwards and exploring the ground level, where a few enemies are wandering about.

Unused Music

Hmmm...
To do:
Upload the music itself

SunSong is not used at any point during gameplay.

(Source: Jazz2Online)

Developer Messages

JazzMultiplayer.u contains several messages and comments. Many of them relate to a ship which doesn't seem to exist anywhere in the game currently. JazzRace.u also contains the code for the ship. Given that a lot was planned for multiplayer, it's likely that this was another mode of play.

TODO: Remove Gravity and HoverAcceleration and make it look at the current zone
TODO: Re-do spark system, current one will be too slow
Ship's current position point
The actual velocity of the vehicle in the game
The actual acceleration of the vehicle in the game
The ship's height from the floor
The ship's hover push (z acceleration to fight gravity if too close to the ground)
If the vehicle has just recently hit a wall (debug)
How long the Just hit a wall message will stay up (debug)
If a speed burst is in affect
The amount of time left of the burst
The Height above the ground that the ship will hover
The acceleration to add to the ship due to bumps
The acceleration of the acceleration of the ship
The max acceleration of the ship
The current acceleration of the ship
The distance that is checked to make sparks
Function to create sparks
Function to find a certain rank point and set it to CurrentPoint
Function to see if the ship is near anything
Function to do a speed burst
TimeToBurst is the amount of time the speed burst will last
Try to see if the player is at the right height or not
Disable normal firing, hopefully this won't be too important
Disable Alt firing, again hopefully this won't be too important
Update the player's current rank point
Make the bounce accel die down
Attempt to make player hover while slowly moving or not moving at all
If the speed burst is in affect, then run the timer
Calculate ship's height
See if the ship is too close to something
Calculate Z Acceleration to get to desired vehice height
If the height is below the hoverdist, that means we're too close to the ground
If the height is above the hoverdist, that means we're too far away, go to the ground
If the height is the hoverdist, stay there!
If the height is zero, that means we don't know where we are! and shoot to the ground, damnit!
Limit the amount the vehicle can turn
If we're not moving, get rid of the burst time faster
If we are turning, strafe a bit and turn less
Eliminate Strafing and looking up and down
Update rotation then save this move and replicate it

These notes relate to other parts of the multiplayer.

Copied over from DeathMatch Game Info
Called when pawn has a chance to pick Item up (i.e. when the pawn touches a weapon pickup. Should return true if he wants to pick it up, false if he does not want it.

These notes can be found in CalyGame.u.

Just decrease money and keys here for now without any animation
If a player touches this, check how much money or whatnot they have and determine if they can
Since there is no way to have master state information spanning levels or anything of that kind, we'll fool the system by maintaining a time for each player. SinglePlayer : Easy, just use the current player's time. MultiPlayer DeathMatch/etc : Easy, start the map at 0. MultiPlayer Cooperative : If one map is used at a time, this is easy, however if running off a server with multiple cooperative maps (if such a thing will be possible for us) then it will be potentially confusing.  We can deal with this later if necessary. For now I'm going to implement a time-from-start variable called: 'float LifeTime' in the JazzPlayer class.  This will contain the entire life of the player in seconds, from which the level will determine the correct time based on this universal time.
IMPLEMENTING IN YOUR LEVEL: To add time/weather-based capability into your level, you will need to add: 1 LevelWeatherManager class actor anywhere into the level - this will be an invisible server actor that this class will update on creation. Use WeatherLight in place of normal lights in any place where a light is created by the world. All WeatherLights in a level will be controlled by the LevelWeatherManager class.
Old Unreal Stuff
What is this? - The item randomizer class is intended to take over item creation in the event that the creator wants to have a randomized item generated. In other words, 10% of the time no item, 80% of the time a health carrot, and 10% of the time a coin - With this class, a simple change can be made to a specific item randomizer, altering the item generation for every enemy using that randomizer. Items can be added or removed from the game easily, as can the difficulty of obtaining certain types of items like money to tweak the balance the game - Other actors only need to make a call to create this one, instead of handling randomization in every class.
Fixed Camera Point. Place this actor somewhere in a level.  If it sees a player, it will use this camera start location instead of the normal camera system. A master camera takes precedence over any secondary cameras that may also be visible. Keep in mind that a master camera may conflict with another master camera. That's why secondarycameras should be used anywhere near a master camera instead.  The most important view should be the master.
float.DistanceLoss; Not implemented - Intended to be maximum range camera will follow.
Override to stop the fish from jumping off of eachother 
Override bump so the fish don't jump off of eachother
Originally here to avoid infinite Decision loop
Base function that determines the desirability of an item for a 'bot' (Thinker)
See JazzPawnAI for Details.
Coins aren't really very desirable for thinkers right now - just enough to think about getting one.
This function Updates Jazz's visibility to other enemies. Primarily so he can hide with the GizmoGun.
Any strafing motion should take precedence over forward/backward, generally because it will be displayed less and his motion will seem more accurate, probably. Regardless, just whatever looks ok.
TODO: Remove until 'Press Fire to Play' message is displayed ok.

A message left for the JazzIntroMenu:

This is hardcoded right now until we have the capability to edit the C code.

In WeatherLight:

WeatherLight expands Light; For instructions also see: Class Info / GameInfo / UnrealGameInfo / CalyGame. JazzSinglePlayer contains further instructions on implementing weather / time lighting into your level.
One LevelWeatherManager actor must be placed anywhere in your level to automatically manage the various light actors correctly.                                                                                                    What this does: This class alters every WeatherLight contained within the level to give the effect of night and day It will be expanded to add simple weather patterns as well.
The variables below determine how long one day is, the color to fade the light to on certain conditions, etc.
Note that this actor will only do one sun specifically   We should avoid drawing certain specific things (and fortunately don't need to as the player should not be able to look     up much at all) like the sun clouds etc Drawing a sun is possible, though, through the use of fog and sprite-based coronas.  
Usage of this actor class: It is recommended to subclass this actor based on each planet's settings, then modify it if necessary for local area conditions
How WeatherLight works: The light settings for each WeatherLight represent optimal settings for a daytime environment
A light is intended to never go beyond the brightness level set in that light *unless* during a lightning strike Day and night are created by altering that brightness level and mixing in the current time weather color

Also present here is an old, unused item.

ItemName; Do not use this item.  It is old and pending deletion.
Note for inventory items:  Pickup message is now the item name.

GlowingPurchaseObject:

Purchase objects should detect when a player is within a certain range and display the price of the object
When moving in close and pressing the main (attack) button, the object is purchased
Using Purchase Objects
Place the GlowingPurchaseObject actor in the location that you want. There are a few provided object types which you may choose from already, such as for carrots or the missile launcher The actor will take care of itself, though you need to tell it a few things in the GlowingPurchaseObject group of the parameters for the actor.
AddInventory - Inventory class to add to the player In cases like the carrot, the purchase function is overridden to simply add more health
InventoryUnique - Is this a unique item?  If so, it won't let you buy another one
CostInCoins - Number of coins to spend to purchase item.
NameOfItem - Text Name for the item.  This can be anything you want, just don't make it too long.
Display Properties - The mesh and textures should be set to how the object will appear when rotating around.

In Spaceship, Airship and HangGlider (all of which are missing from the demo):

HangGlider must rotate forward & down when pressing forward - increase forward speed and downward speed
HangGlider must rotate back & up when pressing forward - decrease forward speed apply speed change to upward speed

ReplicateGameEvent has a bunch of notes:

This class is intended to operate only when the game level has started which it exists in.  It will destroy itself after the first check. It will perform a search on the active player and attempt to replicate the conditions which would have existed if the event had taken place. Note that this is a difficult concept and may not be capable of everything for some time. In other words, place a 'Triggers/ReplicateGameEvent' into your level for each event that  should be reconstructed.  Then set the classes to delete, actor tags to search for and  delete, and actor tags to trigger. (A tag is in the 'event' parameters.  If you know how  to use triggers, which you should by now, this will make sense.) The list of events is stored in the player's variables and should be saved with him in  Unreal's save file.  This would have been necessary, anyway, for creating a game that  could be ported over to a limited-storage device such as a console system. Events are currently set only when you pick up an item.  As more work is done and ideas  are come up with, this can be expanded on in the future.  The important thing is that it works and should do what we need it to. Setting Events: Events are set elsewhere by actors in a level - generally inventory items or triggers.
JazzItem contains a variable JazzItem. PickupEventSet which sets a new event when picked up. Restrictions: Events can only replicate basic actions.  It will not store the level state. In some cases you might want to just have an inventory item like a key rather than something like an event. Events should be used for important objects and the like, however. We do not have the luxury of infinite memory space for a console system.  So remember that items will appear in a level over and over again, meaning the player could get infinite of anything if it's lying around, accessable, and not deleted by an event. Events should be limited to 2 per level, however up to 4 should be considered a maximum. It is unknown how many events Unreal will allow the player to store and keep at this  point. EventName should be limited to 8 chars. Unreal won't mind, but try to keep memory size down for whoever might have to store the data to a console system backup.
Name of event Check with Player 'Events' array to see if the event has occurred.
Trigger Tag Triggers all of these tags when event is replicated.
Delete Tag Delete actors with this tag when event is replicated
Delete Tag Delete actors of this class when event is replicated
Player should call this in its TravelPostAccept function so we're assured the travel name variables necessary have been accepted.

For Green Gem:

NOTE: Gem worth 100 pts

In JazzBridgeHandler:

The JazzBridge is placed down so that pieces are facing forward towards the next piece. Each piece is, of course, directional, and *must* face in the direction of the next one. No exceptions, otherwise it won't work.
Important: In addition, the first bridge section must have the 'ThisIsFirstSection' set to true.  This is the piece that will initialize all the rest for play.
Tag of each bridge piece in order of travel.

JazzScoreBoard messages:

Parent class to use base scoreboard display routines to make future scoreboards more modular and easy to code
Also, base font routines are here for quick transition when new fonts are added and to adapt to different screen sizes and types.

Found for ActivationPlayerIcon:

This icon is intended to display above any object or person that can be activated.  While it may not be used ultimately, it may be quite interesting if done well.

HUD Initilization:

Note to Devon: Enabling this currently crashes Unreal while playing (instantly) Unknown error in the Unreal.log. 
Suggest Targeting is not getting initialized correctly?
Only draw the team info if it's a team game.

Located in JazzText:

If our little text system is busy displaying. This will hold the text to be displayed, and hopefully display the text to the screen when needed

Timed Effects has these messages:

Burn Effect As suggested by Devon, I modified the fire effect to no longer use a state to maintain compatibility. All effects consist of: [Name]Time (FireTime/PoisonTime) Time remaining on effect. [Name]Effect.(FireEffect/PoisonEffect).If effect is currently active Effect on and off functions should start and end an effect, in general.  While the effect timing is taken care of in PlayerTick
TODO: Check for some kind of resistance to affects
TODO: Stop player from taking damage when petrified. 
TODO: Stop player from being able to shoot when petrified. 
TODO: Let player edge around a bit when petrified and make it lower petrification time We should get out of the bubble state once we've been shot or taken any form of damage.

Found in Tutorial:

Every time some event happens in Jazz which corresponds to a tutorial #, that event should send a call to EventNum to see if this event has been handled before.  If not, the correct tutorial actor is called (JazzTutorial.u) to display the new information.

Spectator Mode

JJ3-Spectator.png

A spectator mode for multiplayer can be accessed. The spectator can travel anywhere over the map, even out of bounds. The method for accessing it is rather unstable - the player must start a multiplayer game without selecting a character. However, this doesn't always work, and sometimes the spectator mode is activated instead of the multiplayer battle. The option to be a spectator is never given.

Out of Bounds

JJ3-Crystals.png

Three crystals can be seen floating around the rocket, but you can't reach them.

Unused Textures

There are textures for Pyramidus, a level not included on the demo, and the whale, which would have been where Jazz rescued Razz ma Tazz.

Oddities

  • JMPClover.unr is considered a multiplayer map, but if loaded, it shows that it's actually an introduction to the game, with signposts welcoming players and asking them to choose a location to explore from the paths given. Some paths have no signs but lead off as though more levels were planned for the demo. Likewise, JMPClover2.unr suggests that it was intended for the same purpose.