Difference between revisions of "Speedrunning"

From Cassette Beasts
 
(6 intermediate revisions by the same user not shown)
Line 28: Line 28:
 
Keyboard: Hold Ctrl and type <tt>modes</tt>
 
Keyboard: Hold Ctrl and type <tt>modes</tt>
  
Controller: Hold L + R and then press in sequence Up, Up, Up, Down, Down, Down, L3. (For L3, press the left stick in like a button, on a controller that supports this.)
+
Controller: Hold LB + RB and then press in sequence Up, Up, Up, Down, Down, Down, L3. (For L3, press the left stick in like a button, on a controller that supports this.)
 
</spoiler>
 
</spoiler>
  
Line 93: Line 93:
 
<pre>
 
<pre>
 
[options]
 
[options]
pause_while_loading=true
+
pause_while_loading=false
pause_for_character_creation=true
+
pause_for_character_creation=false
 
</pre>
 
</pre>
  
As mentioned earlier, the in-game timer pauses for loading screens and character creation. In <tt>autosplit.cfg</tt> you can decide whether you want the game to send pause commands to LiveSplit for loading screens and character creation. These settings also affect the in-game timer.
+
As mentioned earlier, the in-game timer pauses for loading screens and character creation. In <tt>autosplit.cfg</tt> you can decide whether you want the game to send pause commands to LiveSplit for loading screens and character creation.
  
 
<pre>
 
<pre>
Line 115: Line 115:
 
You can insert as many conditions you like into this list, and they don't have to start and end with <tt>story_starting=1</tt> and <tt>story_ending=1</tt>. However, you must make sure to add the same splits, in the same order, to LiveSplit, so that the game and LiveSplit are in sync.
 
You can insert as many conditions you like into this list, and they don't have to start and end with <tt>story_starting=1</tt> and <tt>story_ending=1</tt>. However, you must make sure to add the same splits, in the same order, to LiveSplit, so that the game and LiveSplit are in sync.
  
Each condition takes the format <tt>STAT_NAME=THRESHOLD</tt> or <tt>STAT_NAME:STAT_KEY=THRESHOLD</tt>. Cassette Beasts tracks a huge number of stats about your playthrough in your save file, which we use to unlock achievements when their conditions are met. LiveSplit integration also uses these stats - split commands are sent when a stat's value meets or exceeds the configured threshold.
+
===Split Conditions and Stats===
 +
 
 +
Each condition in the <tt>[splits]</tt> section of <tt>autosplit.cfg</tt> takes one of these formats:
 +
 
 +
* <tt>stat_name=threshold</tt>
 +
* <tt>stat_name:stat_key=threshold</tt>
  
The full list of available stats contains spoilers and won't be posted on the wiki until some time after the game is out. But if you take a look at the list of achievements in Cassette Beasts you'll get some idea of the sorts of conditions that can be set.
+
Cassette Beasts tracks a huge number of stats about your playthrough in your save file, which we use to unlock achievements when their conditions are met. LiveSplit integration also uses these stats--split commands are sent when a stat's value meets or exceeds the configured threshold.
  
If you're unafraid of digging around in the game's files, you can decompress your save file and check the <tt>stats</tt> section. Or decompile the game and check the list in <tt>Achievements.gd</tt>.
+
There are too many stats to list all here. If you're unafraid of digging around in the game's files, you can decompress your save file and check the <tt>stats</tt> section to find more.
 +
 
 +
<spoiler show="Show Available Stats (Contains Spoilers)" hide="Hide Available Stats">
 +
{| class="wikitable" style="margin:auto"
 +
! Condition !! Description
 +
|-
 +
| <tt>story_starting=1</tt> || Start a playthrough
 +
|-
 +
| <tt>story_ending=1</tt> || Enter the final input that locks you into the credits
 +
|-
 +
| <tt>quests_completed:TutorialQuest4=1</tt> || Complete quest 'This Is The World We Live in' (the tutorial)
 +
|-
 +
| <tt>registered_species:bansheep=1</tt> || Obtain [[Bansheep]]
 +
|-
 +
| <tt>registered_species:candevil=1</tt> || Obtain [[Candevil]]
 +
|-
 +
| <tt>kills_rogue_fusions=1</tt> || Defeat a Rogue Fusion
 +
|-
 +
| <tt>kills_rogue_fusions=20</tt> || Defeat 20 Rogue Fusions
 +
|-
 +
| <tt>kills_rogue_fusions:swarm=1</tt> || Defeat a Swarm Fusion
 +
|-
 +
| <tt>kills_rogue_fusions:unstable=1</tt> || Defeat an Unstable Fusion
 +
|-
 +
| <tt>kills_rogue_fusions:orb=1</tt> || Defeat an Orb Fusion
 +
|-
 +
| <tt>chunks_mapped_by_map:overworld=128</tt> || Uncover the entire overworld map
 +
|-
 +
| <tt>observed_species:unique_keys=120</tt> || See all 120 monster species
 +
|-
 +
| <tt>registered_species:unique_keys=120</tt> || Obtain all 120 monster species
 +
|-
 +
| <tt>maxed_tape_species:unique_keys=120</tt> || Record 5-star data on all 120 monster species
 +
|-
 +
| <tt>registered_bootleg_types:beast=1</tt> || Record a Beast-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:fire=1</tt> || Record a Fire-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:plastic=1</tt> || Record a Plastic-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:plant=1</tt> || Record a Plant-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:water=1</tt> || Record a Water-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:poison=1</tt> || Record a Poison-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:astral=1</tt> || Record an Astral-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:ice=1</tt> || Record an Ice-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:lightning=1</tt> || Record a Lightning-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:air=1</tt> || Record an Air-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:earth=1</tt> || Record an Earth-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:metal=1</tt> || Record a Metal-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:glass=1</tt> || Record a Glass-type bootleg
 +
|-
 +
| <tt>registered_bootleg_types:glitter=1</tt> || Record a Glitter-type bootleg
 +
|-
 +
| <tt>unlocked_abilities:glide=1</tt> || Unlock the glide ability
 +
|-
 +
| <tt>unlocked_abilities:dash=1</tt> || Unlock the dash ability
 +
|-
 +
| <tt>unlocked_abilities:magnetism=1</tt> || Unlock the magnetism ability
 +
|-
 +
| <tt>unlocked_abilities:swim=1</tt> || Unlock the swimming ability
 +
|-
 +
| <tt>unlocked_abilities:climb=1</tt> || Unlock the climb ability
 +
|-
 +
| <tt>unlocked_abilities:flight=1</tt> || Unlock the flight ability
 +
|-
 +
| <tt>unlocked_abilities:fusion_radar=1</tt> || Unlock the Fusion Radar
 +
|-
 +
| <tt>quests_started:CaptainQuest1=1</tt> || Sign up to the rangers (meet Ianthe)
 +
|-
 +
| <tt>obtained_rumors=1</tt> || Obtain a rumour
 +
|-
 +
| <tt>investigated_rumors=1</tt> || Investigate a rumour
 +
|-
 +
| <tt>unlocked_partners:kayleigh=1</tt> || Unlock Kayleigh as a partner
 +
|-
 +
| <tt>unlocked_partners:meredith=1</tt> || Unlock Meredith as a partner
 +
|-
 +
| <tt>unlocked_partners:eugene=1</tt> || Unlock Eugene as a partner
 +
|-
 +
| <tt>unlocked_partners:felix=1</tt> || Unlock Felix as a partner
 +
|-
 +
| <tt>unlocked_partners:viola=1</tt> || Unlock Viola as a partner
 +
|-
 +
| <tt>unlocked_partners:dog=1</tt> || Unlock Barkley as a partner
 +
|-
 +
| <tt>remasters=1</tt> || Remaster a tape
 +
|-
 +
| <tt>quests_started:KayleighQuest1=1</tt> || Start Kayleigh's quest (I Ran So Far Away)
 +
|-
 +
| <tt>offices_cleared=1</tt> || Clear the first Landkeeper stronghold (Eugene's quest, Acting On Your Best Behaviour)
 +
|-
 +
| <tt>quests_started:FelixQuest1=1</tt> || Start Felix's quest (Don't You Want Me)
 +
|-
 +
| <tt>quests_started:ViolaQuest4=1</tt> || Start Viola's quest (Everybody's Looking For Something)
 +
|-
 +
| <tt>mall_with_meredith=1</tt> || Visit Falldown Mall with Meredith (Meredith's quest, All I Ever Needed)
 +
|-
 +
| <tt>quests_completed:KayleighQuest2=1</tt> || Complete Kayleigh's quest (I Ran So Far Away)
 +
|-
 +
| <tt>quests_completed:MeredithQuest4=1</tt> || Complete Meredith's quest (All I Ever Needed)
 +
|-
 +
| <tt>quests_completed:EugeneQuest5=1</tt> || Complete Eugene's quest (Acting On Your Best Behaviour)
 +
|-
 +
| <tt>quests_completed:FelixQuest3=1</tt> || Complete Felix's quest (Don't You Want Me)
 +
|-
 +
| <tt>quests_completed:DogQuest=1</tt> || Complete Barkley's quest (Come Back And Stay)
 +
|-
 +
| <tt>relationship_level:kayleigh=5</tt> || Get Kayleigh to relationship level 5
 +
|-
 +
| <tt>relationship_level:meredith=5</tt> || Get Meredith to relationship level 5
 +
|-
 +
| <tt>relationship_level:eugene=5</tt> || Get Eugene to relationship level 5
 +
|-
 +
| <tt>relationship_level:felix=5</tt> || Get Felix to relationship level 5
 +
|-
 +
| <tt>relationship_level:viola=5</tt> || Get Viola to relationship level 5
 +
|-
 +
| <tt>relationship_level:dog=5</tt> || Get Barkley to relationship level 5
 +
|-
 +
| <tt>romance=1</tt> || Romance someone
 +
|-
 +
| <tt>reopened_stations:final=1</tt> || Unlock fast travel to the final station
 +
|-
 +
| <tt>reopened_stations=10</tt> || Unlock fast travel to all stations
 +
|-
 +
| <tt>encounters:aa_oldgante=1</tt> || Defeat Morgante (tutorial)
 +
|-
 +
| <tt>encounters:aa_puppet=1</tt> || Defeat Poppetox
 +
|-
 +
| <tt>encounters:aa_monarch=1</tt> || Defeat Nowhere Monarch
 +
|-
 +
| <tt>encounters:aa_mourningstar=1</tt> || Defeat Mourningstar
 +
|-
 +
| <tt>encounters:aa_cube=1</tt> || Defeat Heckahedron
 +
|-
 +
| <tt>encounters:aa_alice=1</tt> || Defeat Alice
 +
|-
 +
| <tt>encounters:aa_mammon=1</tt> || Defeat Mammon
 +
|-
 +
| <tt>encounters:aa_lamento_mori=1</tt> || Defeat Lamento Mori
 +
|-
 +
| <tt>encounters:aa_robin=1</tt> || Defeat Robin Goodfellow
 +
|-
 +
| <tt>encounters:aa_tower=1</tt> || Defeat Babelith
 +
|-
 +
| <tt>encounters:aa_aleph_null=1</tt> || Defeat the final boss
 +
|-
 +
| <tt>encounters:aa_morgante=1</tt> || Defeat an optional post-game boss in Harbourtown Station
 +
|-
 +
| <tt>encounters:aa_helia=1</tt> || Defeat an optional post-game boss in the East
 +
|-
 +
| <tt>song_parts=8</tt> || Complete Morgante's song
 +
|-
 +
| <tt>met_npc:magikrab=1</tt> || Meet a certain story NPC in a station
 +
|-
 +
| <tt>met_npc:amber=1</tt> || Meet a certain story NPC in another world
 +
|-
 +
| <tt>met_npc:merline=1</tt> || Meet a certain story NPC in the post-game
 +
|-
 +
| <tt>quests_completed:TravelingMerchantQuest=1</tt> || Meet the traveling merchant
 +
|-
 +
| <tt>encounters:captain_wallace=1</tt> || Defeat Captain Wallace
 +
|-
 +
| <tt>encounters:captain_skip=1</tt> || Defeat Captain Skip
 +
|-
 +
| <tt>encounters:captain_zedd=1</tt> || Defeat Captain Zedd
 +
|-
 +
| <tt>encounters:captain_judas=1</tt> || Defeat Captain Judas
 +
|-
 +
| <tt>encounters:captain_cleeo=1</tt> || Defeat Captain Clee-O
 +
|-
 +
| <tt>encounters:captain_lodestein=1</tt> || Defeat Captain Lodestein
 +
|-
 +
| <tt>encounters:captain_dreadful=1</tt> || Defeat Captain Penny Dreadful
 +
|-
 +
| <tt>encounters:captain_gladiola=1</tt> || Defeat Captain Gladiola
 +
|-
 +
| <tt>encounters:captain_heather=1</tt> || Defeat Captain Heather
 +
|-
 +
| <tt>encounters:captain_buffy=1</tt> || Defeat Captain Buffy
 +
|-
 +
| <tt>encounters:captain_codey=1</tt> || Defeat Captain Codey
 +
|-
 +
| <tt>encounters:ianthe=1</tt> || Defeat Ianthe
 +
|-
 +
| <tt>quests_completed:WorkingOvertimeQuest=1</tt> || Complete 'Working Overtime'
 +
|-
 +
| <tt>quests_completed:HoylakeQuest5=1</tt> || Complete Hoylake's quest (On The Hunt)
 +
|-
 +
| <tt>story_intermission=1</tt> || Return to New Wirral after having been sent away
 +
|}
 +
</spoiler>

Latest revision as of 16:37, 24 May 2023

This page describes how to use various features in Cassette Beasts that may be of interest to the speedrunning community.

In-Game Timer

On all platforms, Cassette Beasts features an in-game timer that can be enabled from the settings menu: Gameplay > Speedrun Timer.

Speedrun timer.png

The timer counts from the start of your playthrough to the end and persists between sessions. So if you save and quit, and later come back, it continues from where it left off. It will also helpfully display the message "(Cheated)" on your screen if it detects that you've enabled the cheat command console at any time during your playthrough.

The in-game timer will automatically pause on loading screens and during character customisation.

While the in-game timer is enabled, you can hold the middle mouse button (or Y on an Xbox controller / X on a Nintendo controller) to speed up dialogue, and automatically select the first dialogue option.

Seeding, Randomisation, and Permadeath

Once you've beaten the game, Cassette Beasts unlocks a number of options that can be used to customise subsequent playthroughs.

Of most interest to speedrunners will be the Random Seed option here, which will ensure chests and scripted battles reward you with the same items other players on the same seed get.

Custom modes.png

While we recommend that speedrunners familiarise themselves with the game with a normal playthrough first, these options can be unlocked with a cheat code--handy if you're playing the game on a different machine.

LiveSplit Integration

LiveSplit is a popular timer program used by speedrunners, available for Windows. A major feature of LiveSplit is the ability to use 'splits', which separately records time for different sections of a game. For example, speedrunners can split each time they complete a level in a level-based game, and then see how they fared in each level separately, compared with past playthroughs.

Various plugins for LiveSplit have been developed that can peek into the memory of a game and automatically split when things happen in the game. These plugins are useful because they allow the speedrunner to focus entirely on the game - they no longer need to worry about remembering to use key combinations to split manually.

Cassette Beasts has LiveSplit integration built in. No custom plugins or mods are necessary, and splits can be triggered by the game completely automatically. It's flexible, and fully configurable through an INI file. Almost anything you do in the game can be used to trigger a split if you want it to.

Prerequisites

  1. LiveSplit (available only for Windows).
  2. The LiveSplit Server component.
  3. Own Cassette Beasts on either Steam or the Microsoft Store.

Setup

To get LiveSplit ready you'll need to add some splits, and set up a layout that includes the LiveSplit Server component.

  1. We'll just add one split for this example (you can add more later). Right click the LiveSplit window > Edit Splits... Then under Segment Name enter the text "Credits" and click OK.
  2. To enable the LiveSplit Server component, add it to your layout: right click the LiveSplit window > Edit Layout... > Click the + button > Control > LiveSplit Server, then click OK.

Next you can start to configure the game. Create a text file called autosplit.cfg in this location: C:\Users\<username>\AppData\Roaming\CassetteBeasts\

In autosplit.cfg add the following text:

[client]
server_host="127.0.0.1"
server_port=16834

[options]
pause_while_loading=true
pause_for_character_creation=true

[splits]
story_starting=1
story_ending=1

Connecting LiveSplit and Cassette Beasts

With both LiveSplit and Cassette Beasts configured you can now start to test their connection. While LiveSplit is running, right click the window > Control > Start Server. Then start Cassette Beasts.

As it starts up, Cassette Beasts will attempt a TCP connection with the LiveSplit server using the host and port configuration set in its autosplit.cfg file. After a few seconds it'll display a message across the top of the screen to tell you if the connection was successful or not.

If connection was unsuccessful, you can hold Ctrl and type livesplit to reload autosplit.cfg and attempt connection again.

Configuration

Let's take a look at some of the settings in the autosplit.cfg file:

[client]
server_host="127.0.0.1"
server_port=16834

These settings tell Cassette Beasts how to connect to the LiveSplit Server. The values here assume LiveSplit is running on the same machine as Cassette Beasts, and that the server is using its default port number. If you're running LiveSplit on a different computer you'll want to change these values.

[options]
pause_while_loading=false
pause_for_character_creation=false

As mentioned earlier, the in-game timer pauses for loading screens and character creation. In autosplit.cfg you can decide whether you want the game to send pause commands to LiveSplit for loading screens and character creation.

[splits]
story_starting=1
story_ending=1

This section is the most important part. It's here that you define the conditions that trigger a split.

The first condition in the list - story_starting=1, which is met when you start a new run - is what's used to start the timer running.

The second (and further) conditions cause split commands to be sent to LiveSplit when met.

So the example here is extremely simple: the timer starts when you begin a new playthrough, and a split command is sent when story_ending=1 happens, which is when you enter the final input that locks you into the credits. Since it's the last split of the list, LiveSplit will stop the timer and mark your run finished.

You can insert as many conditions you like into this list, and they don't have to start and end with story_starting=1 and story_ending=1. However, you must make sure to add the same splits, in the same order, to LiveSplit, so that the game and LiveSplit are in sync.

Split Conditions and Stats

Each condition in the [splits] section of autosplit.cfg takes one of these formats:

  • stat_name=threshold
  • stat_name:stat_key=threshold

Cassette Beasts tracks a huge number of stats about your playthrough in your save file, which we use to unlock achievements when their conditions are met. LiveSplit integration also uses these stats--split commands are sent when a stat's value meets or exceeds the configured threshold.

There are too many stats to list all here. If you're unafraid of digging around in the game's files, you can decompress your save file and check the stats section to find more.