I started playing [Spirit of the North](https://store.steampowered.com/app/1213700/Spirit_of_the_North/) on my Chromebook, and later got a Steam Deck. It's a decent game, but not excellent. One of its faults is that it doesn't support Steam Cloud. And I didn't enjoy it enough to start from the beginning. The [Borealis](https://chromeos.dev/en/posts/bringing-steam-to-chromeos) environment that makes Steam on Chromebooks possible is a restrictive, so it took some work to dig into it far enough to find the save file and export it.
First, start Steam on your Chromebook. While you wait for it to start up fully, go back to a browser window and press `Ctrl-Alt-T` (not to be confused with `Ctrl-Shift-T`, which reopens your last closed tab). This opens `crosh`, a limited shell that lets you do a few things that you can't easily do from the UI.
Within `crosh` you can run `vmc list` to confirm that the `borealis` VM is running. Unlike `crostini`, `borealis` doesn't run a container in the VM.
```
crosh> vmc list
borealis (27419668480 bytes, raw, sparse) running
termina (85899624448 bytes, raw)
Total Size (bytes): 113319292928
```
`termina` is the VM that hosts `crostini` and `borealis` is the VM that hosts Steam. If you're not using Linux on your Chromebook you won't have a `termina` VM. With the `borealis` VM running, you can basically log into it with `vmc start borealis`. `start` is a bit of a misnomer there.
```
crosh> vmc start borealis
[chronos@Chromebook ~]$
```
Woohoo! We're in! Now we need to find where _Spirit of the North_ keeps its save file. According to The Internet, it's in `%APPDATA%\Local\Infused\Saved` but Steam on Linux uses Valve's _Proton_ Windows emulation environment. We're already in `/home/chronos` where the data is hiding. Go to `.local/share/Steam/steamapps/compatdata/` to find a bunch of numbered directories.
```
[chronos@Chromebook ~]$ cd .local/share/Steam/steamapps/compatdata/
[chronos@Chromebook compatdata]$ ls
10110 1055540 1213700 1493710 1586800 1763200 18700 1927720 2705890 2805730 32360 504230
```
Which one is _Spirit of the North_? The number is the same as the [game listing](https://store.steampowered.com/app/1213700/Spirit_of_the_North/) on Steam (`1213700`). Go deeper to `1213700/pfx/drive_c/users/steamuser/AppData/Local/`
```
[chronos@Chromebook compatdata]$ cd 1213700/pfx/drive_c/users/steamuser/AppData/Local/
[chronos@Chromebook Local]$ ls
Infused Microsoft UnrealEngine
```
Ah, getting closer. Now even deeper to `Infused/Saved/SaveGames/`.
```
[chronos@Chromebook Local]$ cd Infused/Saved/SaveGames/
[chronos@Chromebook SaveGames]$ ls
SavedGame.sav
```
Huzzah! There it is! (Or go straight there with `cd .local/share/Steam/steamapps/compatdata/1213700/pfx/drive_c/users/steamuser/AppData/Local/Infused/Saved/SaveGames/`)
But our troubles aren't over... How do we get this file out of there? How big is it? And is it a text file we could just copy and paste?
```
[chronos@Chromebook SaveGames]$ du -h SavedGame.sav
24K SavedGame.sav
[chronos@Chromebook SaveGames]$ file SavedGame.sav
SavedGame.sav: data
```
Well `24K` is not _huge_, but it's too big to comfortably copy / paste, and it's a binary file. Fortunately the `borealis` VM includes a variety of useful tools. `xz` will compress the file down to about a tenth its original size, and `base64` will turn that compressed data into about a page of text we can reliably copy and paste. The whole command is `xz -c SavedGame.sav | base64`.
```
[chronos@Chromebook SaveGames]$ xz -c SavedGame.sav | base64
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
```
Yep, that's my (xz-compressed) save file, in like Chapter 4, and with a fair number of shamans left behind, and the resolution turned down embarrassingly low because my Chromebook is more than 4 years old and we're running a PC game under Linux on a VM on a Chromebook.
So copy the text somewhere (I copied it up there...) and get on your Steam Deck or whatever, where you've already installed and played _Spirit of the North_ so that it's got its own save file for you to overwrite. Make sure the game is _not_ running on the destination machine.
On the Steam Deck, you'll need to go to Desktop mode at `Steam > Power > Switch to Desktop`. This gets you a lovely [KDE](https://kde.org/) environment with a terminal and everything. You'll want to have a keyboard plugged in, and preferably a larger monitor. Open the terminal and... hold on I gotta switch to that machine to write the rest of this...
Open _Konsole_ (under System) and `cd .local/share/Steam/steamapps/compatdata/1213700/pfx/drive_c/users/steamuser/AppData/Local/Infused/Saved/SaveGames/`.
```
(1)(deck@steamdeck ~)$ cd .local/share/Steam/steamapps/compatdata/1213700/pfx/drive_c/users/steamuser/AppData/Local/Infused/Saved/SaveGames/
(deck@steamdeck SaveGames)$ ls
SavedGame.sav
```
Sweet! There it is. Now to overwrite it with our exported file. (Wouldn't it be so much easier to support Steam Cloud? Yes. Yes it would.) After copying the Base64 data from wherever you put it onto your clipboard, use `cat | base64 -d | unxz > SavedGame.sav` which will wait for you to paste the data with `Ctrl-Shift-V`, and then you can hit `Enter` and then `Ctrl-D` to stop entering data. The pipeline will decode the Base64 encoding, then decompress the xz-compressed data, and pipe the result into the `SavedGame.sav` file.
Now you can exit _Konsole_ with `Ctrl-D` also, and then go back to Gaming Mode by double-clicking on the `Return to Gaming Mode` button on the Desktop. If everything went well, you'll have your saved game from your source machine. Of course, another fault of _Spirit of the North_ is that it doesn't save nearly often enough, and there's no way to tell it to save, so you'll end up at some checkpoint before you made a bunch of progress, but that's the best you're going to get.