# Kismet Overview
Kismet is a node-based programming system that presents a “cleaner” and “easier to use” interface than you would get writing your own code. Logical blocks take the place of code classes and functions, and lines on the page indicate data and program flow.
Kismet, much like the CSG tools, is not meant to be used to program a whole game. It is meant more as a tool for cheap and dirty testing, but in this case it is the only option we appear to have.
# Key Terms
Node
- A Kismet code snippet, represented by a shape with labels on itSequence
- A set of Kismet nodes packaged to appear as a single nodeLink
- An input or output of a Kismet NodeConnector/Connection
- A line connecting two Kismet nodes, indicating logic or data flowObject
- A Kismet reference to something in the map
The terms Link/Connector/Connection are used somewhat interchangeably, but they are closely related.
# The Hottest Hotkeys
Left click
- Pan around the EditorRight click
- Add nodes to the EditorScroll wheel
- Zoom viewAlt + Left click
- Destroy connector between nodesCtrl + Left click
- Select multiple nodesCtrl + Left click + Drag
- Move node(s)Ctrl + Alt + Left click + Drag
- Box select nodesA
- Zoom to fit selectionCtrl+A A
- Zoom to all nodes (if you’re ever hopelessly lost in the void)C (with node(s) selected)
- Add comment block
More Hotkeys
It is possible to add kismet nodes (opens new window) with your keyboard, and you can also change the hotkeys as you prefer!
# Kismet Editor Window important
1 - Toolbar - Various useful-ish functions, all in one place:
Go back to the previous sequence
Go forward to the returned-from sequence
Go up one sequence level
Rename the current sequence
Zoom to selected (
A
)Hide node’s unused connectors (also in a node’s right click menu)
Reveal all of node’s connectors (also in a node’s right click menu)
Search for nodes to place
Search for nodes already in editor
Update the list of nodes
Open a second Kismet window
2 - Node Editor - Place, move, and interconnect nodes
3 - Properties - Edit internal variables and functionality of nodes
4 - Sequences - Jump between sequences
# How Kismet Works
Kismet offers a hodge-podge of nodes which are essentially split into five groups. They will be explained in this order since you will need to understand all previous types going down the list:
Kismet offers a hodge-podge of nodes which are essentially split into five groups. They will be explained in this order since you will need to understand all previous types going down the list:
Type | Used for... |
---|---|
Variable | Storing information |
Event | Triggering code to run |
Action | Making things happen in the map |
Condition | Making decisions based on information |
Sequence | Packaging nodes into reusable groups |
These categories are visible (in a different order) in the right click menu in the Kismet Editor. Alongside these options is Matinee, which will be discussed in the next section. Each Kismet node represents a block of code, with inputs and outputs. Gameplay objects and logic can be controlled by connecting different nodes in different arrangements.
While there are severe limitations, there are already countless examples in the community of very impressive things made with Kismet (opens new window).
TIP
If you wish to completely abuse the game for things like Chaos Rumble or (the original version of) Curveball, you should probably use Bakkesmod. Kismet allows for a lot of control, but certain things are simply not accessible or would be prohibitively complex to do with nodes and connector lines.
# Variables
Type | Used for... |
---|---|
Bool | True/False data, like a door being open or shut |
External Variable | Named variables of any type from an external sequence (see Sequences) |
Float | Numbers with decimal precision, like speed or Z location |
Int | Numbers with integer precision, like number of players |
Matinee Data | Animation data (see Matinee) |
Named Variable | Named variables of any type |
Object | Objects in the map, like the ball |
Player | Players themselves |
String | Text data, like player names |
Vector | Sets of (typically) 3 numbers, like 3D location |
# Events
I encourage you to test out any Events which sound interesting. Here are some of the most frequently and generally useful:
Event | Used for... |
---|---|
Level Loaded | Running code as soon as the map is loaded |
Player > Player Spawned | Running code when a player spawns or respawns |
TAGame > Round Start | Running code when gameplay starts or resumes |
TriggerVolume Touch | Running code when the player or ball enters a region (more on this here) |
# Actions
Some Actions are basically Events or Conditions, but in general these will make up the majority of the Kismet code. Again, some of the most useful and frequently used nodes are:
Action | Used for... |
---|---|
Actor > Set Actor Location | Moving the ball or player |
Actor > Get Location and Rotation | Getting the location and rotation of an actor |
Actor > Teleport | Moving the ball or player, preserving velocity |
Math > | Manipulating numeric variables |
TAGame > | Manipulating RL-specific things |
Many of the nodes within TAGame
may not work as advertised. Don’t be afraid to think outside the box and come up with a weird workaround. Modding itself is a weird workaround.
# Conditions
In general, the only conditions you will need are the variable Comparison nodes. These allow you to trigger logic only when a variable has a certain value.
# Sequences
There are a few key nodes to keep in mind when working with Sequences, as they effectively serve as the inputs and ouputs:
Node | Used for... |
---|---|
Action > Event > Activate Remote Event | Triggering a Remote Event (asynchronous) |
Event > Remote Event | Activating a Sequence when that event is triggered |