Jump to content

Jedi Academy turned 20 this year! We celebrated in a ton of different ways: mod contest, server event, podcast, etc. Thank you to all who have been a part of this game for the last two decades. Check out the anniversary content!

Read more

Welcome to JKHub

This community is dedicated to the games Star Wars: Jedi Outcast (2002) and Jedi Academy (2003). We host over 3,000 mods created by passionate fans around the world, and thousands of threads of people showcasing their works in progress and asking for assistance. From mods to art to troubleshooting help, we probably have it. If we don't, request or contribute!

Get started

This game turned 20 years old this year, and it is still one of the greatest Star Wars games of all time. If you're new or returning from a long hiatus, here are the basics of getting started with Star Wars Jedi Knight Jedi Academy in 2023.

Read more

Single Player Mission Design Part 1: Setup and Commands




Hello all and welcome to my tutorial series on how to script and create your very own levels for Jedi Academy!


Jedi Outcast and Jedi Academy have had a long history with mods, and ever since I could remember I always browsed the old Filefront site, looking for new SP maps and mods to try out. Remembering old favorites like the Dark Alliance series, Escape Yavin IV, Deception, and others, those mods and many more inspired me to want to learn how to make my own missions.


But there was a problem. There were no tutorials!


This was a huge turnoff for me, since of course with no tutorials, how could we learn?! This all changed for me back in 2012, when I noticed one day that the author of the Deception mod actually left behind the source files for his mod! Taking an interest, I began studying those files, and through those files I was able to learn how to create my own missions. If the author of that mod ever sees this, thank you so much!


With the knowledge I obtained from that mod, I was able to get started. But it wasn’t until 2017 when I made my recreation of The Phantom Menace’s iconic Duel of the Fates that I now create missions regularly. Now years later, I help to create missions for the Galactic Legacy mod.


I’m writing this series in hopes to inspire more members of this community to create your own stories.





  • I will be writing these tutorials from both an Entity Modding and Radiant perspective (as separate tutorials). This is strictly for my own personal preference and you can use whatever you want.

  • I’m writing these tutorials strictly for Jedi Academy. However, most (if not all) of what you can learn here should also be possible for Jedi Outcast.

  • I will be using Galactic Legacy for my test environment, but you can use whatever you want. I strongly recommend OpenJK.

  • I am using the CD version of Jedi Academy (old much?) but you can use any version of Jedi Academy you want (I hope you’re not pirating though)

  • This is NOT a mapping tutorial, but I will try my best to explain map entities as I use them during this series. You don’t need to be an expert mapper to perform well (my skill set with making maps is very limited), but I’d strongly recommend having some prior knowledge.

  • I will provide download links for every project we work on together to help you get started. I’ll provide downloads for the required starting files and the “solution”.

  • Don’t get discouraged! It’s very easy to get burned out on these projects. Tackle your work at your own pace and take any and all breaks you need.

  • You are more than welcome to Private Message me here and on Discord. I’ll always respond to you and will answer your questions to the best of my ability (just please don’t be rude)




Now that you’ve hopefully read my super cheesy introduction and downloaded everything I have suggested, let’s get started! I’ll first walk you through how to install the SDK for Jedi Academy 


Go ahead and download the BehavED file I linked for you. In reality this is just the full SDK for Jedi Academy. Once you’ve downloaded the file and opened it, you’ll notice an EXE file and a txt file. 




Run the EXE file provided and click on “OK” on the first prompt. On the next window, you’ll see “Unzip to Folder” and a dummy file path. Replace this with the file path to where you want to unzip everything. I personally have it extracted to my Gamedata folder, but you can extract everything to wherever you want.



Once you have your unzipping location set, click “Unzip” and let the program do its thing. If you get an error message, try removing the EXE file from the zip file and run it as an administrator.


Go to the location where you extracted the files and look for a folder called “Tools”. Open the folder and you should see an EXE file called “BehavED”.




Double-click on BehavED (recommend that you run as an administrator) and prepare to be amazed as you look at…….a blank screen….




Don’t worry, this is perfectly expected and perfectly safe. We just have a few things to sort out first.


On the right-side of the window, look for a button called “Prefs” and click on it (or just press the P key on your keyboard).


On the preferences window, you’ll see a few input dialogs expecting some file paths. If you have a W drive or K drive, you’re more than halfway there. For everyone else, just follow along as best you can.




We’re going to be changing 4 of these and the other 2 will be ignored. We’ll start from top to bottom starting with “Script Path”. 


Script Path will simply be the default location where BehavED will start from when you click on the “Load” and “Save” Buttons. However, BehavED will often remember where you last browsed your files from. I will set the path to my JKA’s base folder, and I’ll create a folder in my base folder called “Scripts”.


So for me personally, my path will be “C:\Program Files (x86)\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\base\scripts”


Next we’ll move past SourceSafe script path and SourceSafe INI file location and go to “Location of IBIZE.EXE”.


This file can be found in your Tools folder where the BehavED exe file is, so just set its path to there. My personal path is “C:\Program Files (x86)\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\Tools\IBIze.exe”


Moving right along we’ll go to “Command Description File”. The software is looking for something called “behavED.bhc” which (like IBIze.exe) is in your Tools folder. If you’d like, you can copy and paste your same file path to IBIze and you’re done! My personal path is C:\Program Files (x86)\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\Tools\behavED.bhc”


Finally we’ll head over to “Source Files path”, and like the last two, the initial file path will be exactly the same, with the folder it’s looking for being called “SourceForBehavED”. My personal path is “C:\Program Files (x86)\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\Tools\SourceForBehavED”.


Once you’ve filled in everything, make sure the checkbox labeled “Use SourceSafe?” is NOT checked, and your preferences section should look a little something like this.




Once you’re satisfied with everything, click OK and your BehavED window should change into something like this:




Congratulations! BehavED is now up and running and you can make your first mission!


However, before we go into our first project, let’s go over some of these commands! This will be a simple overview/description and I won’t go into the major details right now until we get to the appropriate tutorial. You can skip this section if you’d like, but this can give you a good start to play around with these commands as I continue writing these tutorials.


Starting from top to bottom:

  • Flush: Clears all script commands on an entity. Useful if you have situations where an NPC may be executing a script and another one is called too soon (as it’ll be ignored)

  • If: A conditional statement where the block of code is executed provided that certain conditions are met.

  • Else: An alternative statement where a different block of code is executed if the previously declared “IF” statement was not met.

  • Loop: Tells the game to perform the same action an “x” amount of times. If set to a negative value, the script will run forever.

  • Affect: Probably the most common command you’ll use, affect a specific entity, NPC, or even the player to have them perform an action. Commands executed in the “Affect” are ignored by the main script outside of the block and can be overwritten unless the script is told to wait.

  • Run: Runs another script.

  • Wait: Halts the execution of the script for an x amount of milliseconds. 1000 milliseconds = 1 second. This is another very common command.

  • WaitSignal: Halts the execution of the script until a “Signal Command” is passed.

  • Signal: Sends out a signal to continue the script if a “WaitSignal” command is present.

  • Sound: Tells the game, character, or entity to play a sound.

  • Move: Tells an entity to move from one location to another, only usable on Map Objects.

  • Rotate: Tells an entity to rotate from one angle to another, only usable on Map Objects.

  • Use: Uses an entity

  • Kill: Kills the NPC or Player

  • Remove: Removes an entity or NPC.

  • Print: Similar to a target_print map entity, prints text on the player’s screen (used during the JKA campaign when the game tells you to kill or spare Rosh)

  • Rem: This is a comment, it does nothing to the script but can be very useful for referring to your scripts in the future if you’re looking to edit them or release your source to the public.

  • Declare: Declares a variable in the map to be used for whatever you need.

  • Free: Removes your declared variable from memory.

  • Set: (E “Set_Types” only), used with the “Affect” Command, sets an attribute for an entity, NPC, or player, or tells an entity, NPC, or player what to do, also a very common command you’ll use.

  • Set: (<str> <str> only) Sets a value of a previously declared variable to whatever you need.

  • Camera: All the camera commands, your number 1 command for cutscenes.

  • Task: An independent block of code used with the “Affect” command to help organize telling what an entity or NPC to do.

  • Do: Used with a “task” command, tells the script to execute the task. However, the script continues to run while the task is being executed.

  • Wait: Tells the script to stop until a previously executed Task is completed.

  • DoWait: A combined use of the previously mentioned “Do” and “Wait” Commands, executes the aforementioned task and halts the rest of the script until the task is completed.

  • Play: Tells the game to play a ROFF file. I know nothing about them, but they’re apparently used during the Outcast and Academy campaigns to simulate certain map objects to use “physics” (like the pipes breaking in the first Artus Mine level or pushing the rock in the T3_Rift mission).

And that concludes the basic overview of each BehavED script command and the end of this tutorial. In the next tutorial, we’ll take a look at creating our first script and a very basic cutscene!

User Feedback

Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Create New...