A timer for CrossCode! It can also be used as an AutoSplitter for LiveSplit.
- Install CCLoader.
- Download and extract CCTimer.
- Put the timer directory in the
assets/mods
directory. - To connect LiveSplit to CCTimer to LiveSplit add an AutoSplitter to your layout and set the script path to
<CrossCode Root Directory>/assets/mods/timer/CrossCode.asl
.
The options for the autosplitter are located in the settings.json
file.
There are two methods of time tracking:
If the "time"
entry is not set or has the value "time": "IGT"
the game takes the actual ingame time and sends it to livesplit.
{
"time": "IGT"
}
The time can be tracked using the states of the game if "time": "state"
. If this method is used, the time is independent of the ingame time and continues even after restarts or different saves.
The possible values for the state filter ("filter"
) can are:
- RUNNING
- TELEPORT
- LOADING
- NEWGAME
- RESET
- LOADGAME
- MENU
- PAUSE
- LEVELUP
- QUICK
- ONMAPMENU
- QUESTSOLVED
These values can be either used inclusive or exclusive (or both)
{
"time": "state",
"filter": {
"include": [
"RUNNING",
"MENU",
"LEVELUP",
"QUICK",
"ONMAPMENU",
"QUESTSOLVED"
],
"exclude": []
}
}
The splits that are automatically triggered are stored as an array in "splits"
. If the split contains "once": true
it is only triggered once gamestart. Otherwise it is triggered on every frame the condition is valid. There are four types of splits:
The "start"
split is a special split that starts the timer when any map is loaded.
{
"splits": [{
"type": "start"
}]
}
The "start"
split may include a condition that causes the run to start.
{
"splits": [{
"type": "start",
"on": {
"type": "loadmap",
"name": "rhombus-sqr.central-inner",
}
}]
}
"loadmap"
checks if the map that is loaded is the same that is in "name"
.
{
"splits": [{
"type": "loadmap",
"name": "rookie-harbor.south"
}]
}
"eventtriggered"
checks if a var condition is valid. To see which var conditions are possible enable Print all events
in the options menu.
{
"splits": [{
"type": "eventtriggered",
"name": "maps.cargoShip/cabins1.kitchenScene",
"value": true
}]
}
"damage"
checks if an entity is damaged. HP ranges can be filtered using "above"
and/or below
.
{
"splits": [{
"type": "damage",
"name": "shredder-alpha",
"below": 0
}]
}
"level"
checks for the start of a level up animation for a particular level. Levels can be bounded with "above"
, "below"
, and/or "equal"
.
{
"splits": [{
"type": "level",
"equal": 15
}]
}
"preset"
checks if a specific preset was loaded (see CCPresetRevival). "name"
will be checked against the "title"
property of the loaded preset.
{
"splits": [{
"type": "preset",
"name": "Temple Mines"
}]
}
The "combined"
split is triggered if all "conditions"
apply. Every condition is a split and can contain "once": true
.
{
"splits": [{
"type": "combined",
"conditions": [{
"type": "loadmap",
"name": "rookie-harbor.south",
"once": true
}, {
"type": "eventtriggered",
"name": "maps.cargoShip/cabins1.kitchenScene",
"value": true
}]
}]
}
{
"time": "state",
"filter": {
"include": [
"RUNNING",
"TELEPORT",
"LOADING",
"NEWGAME",
"RESET",
"LOADGAME",
"MENU",
"PAUSE",
"LEVELUP",
"QUICK",
"ONMAPMENU",
"QUESTSOLVED"
],
"exclude": []
},
"splits": [{
"type": "start"
}, {
"type": "loadmap",
"name": "rookie-harbor.south",
"once": true
}, {
"type": "eventtriggered",
"name": "maps.cargoShip/cabins1.kitchenScene",
"value": true,
"once": true
}, {
"type": "damage",
"name": "shredder-alpha",
"below": 0
}, {
"type": "combined",
"once": true,
"conditions": [{
"type": "loadmap",
"name": "rookie-harbor.south",
"once": true
}, {
"type": "eventtriggered",
"name": "maps.cargoShip/cabins1.kitchenScene",
"value": true,
"once": true
}]
}]
}
If desired, several autosplitters can be simultaneously loaded and selected from. This feature is most useful in combination with CCPresetRevival.
Upon loading a preset or starting at New Game, the timer mod will begin waiting for the first "start"
condition from one of the autosplitters to fire. Once this occurs, the autosplitter that fired will be used for splits.
Opening another preset or restarting at New Game will reset back to awaiting a "start"
condition, allowing for several autosplitters to be used in the same game session.
- If not present, create an
autosplitters
directory within thetimer
mod folder (<CrossCode Root Directory>/assets/mods/timer/autosplitters/
). - Place your additional autosplitters in this directory. These should be formatted the same way
settings.json
is, but they can be named however you'd like as long as they end in.json
.
Note: Time and State settings will be derived from the main settings.json
autosplitter.
A Reset Splits hotkey is also optionally included, which can be relevant in cases where you need a "start"
condition to fire without relying on loading a preset or starting at New Game.
To make use of this, you'll need to install input-api.