Page 8 of 10
Re: Save game editing
Posted: Sat Sep 22, 2012 10:47 pm
by swixel
The Steam binary's protection aside, has anyone looked at the GOG binary? I've only got HumbleStore + Steam (Win32) binaries to poke around. I only ask because I'd like to get detours up and running on something other than the HS Win32 version to load additional ships ...
I haven't reversed much else out of the continue.sav binary (I've been reading the the save/load ASM, which is why I've been ignoring the repo posted here ... I don't want to jump to conclusions like I did with prof.sav). I finally traced back the enemy binary bit (long walk off a short pier there), so I might continue down the stack today to see what else turns out. I'm particularly interested in the starmap stuff (not for modifying, but for visualising/understanding the data for mod support; worst case we can reload the file, best case the locations in the save allow us to trace back storage values in the binaries).
Re: Save game editing
Posted: Sun Sep 23, 2012 9:42 pm
by v3gard
Evening!
Just wanted to let you know that I spent a few hours today and yesterday creating a basic savegame editor. You can't do very much with it at the moment except modifying scrap, fuel, missiles, drones and ship integrity - but its a start anyway!
The editor is available here:
https://github.com/v3gard/ftlsg
I have focused on reversing the continue.sav file, and every byte from the beginning until the last of the current crew members has been loaded into the editor (although you can't change everything yet).
Future updates will most likely come when I find the time. I haven't read through every post here yet, but I assume I'll find several variables that I haven't been able to decode myself yet
Oh, btw. I haven't tried compiling it on Windows yet, so if someone would give it a try that would be awesome.
Re: Save game editing
Posted: Tue Sep 25, 2012 12:44 pm
by a__gun
*Bump*
Anyone making any progress on this?
Re: Save game editing
Posted: Tue Sep 25, 2012 11:41 pm
by fparadis2
I can decode savegames up to cargo. After that it gets harder.. I guess it has something to do with the beacon map or system map. This is the part I'm most interested in
You can check my progress at
https://bitbucket.org/fparadis2/ftlsavegameeditor/src. Warning: lots of hacky code that might be somewhat specific to my machine (i.e. savegame locations)
Anyway, I'd be very interested in seeing if anyone has cracked the star map part!
Re: Save game editing
Posted: Wed Sep 26, 2012 3:04 am
by swixel
fparadis2 wrote:I can decode savegames up to cargo. After that it gets harder.. I guess it has something to do with the beacon map or system map. This is the part I'm most interested in

[...]
Anyway, I'd be very interested in seeing if anyone has cracked the star map part!
I've been clean room reversing it from the binaries. The starmap makes references to *everything*, so it's a slow process which is derailed by my "want custom race" mentality.
Re: Save game editing
Posted: Mon Oct 01, 2012 2:25 pm
by Striblezz
I've been playing around with the save data myself...
Most recently using the
010 Editor I saw mentioned in
this guide linked from a
stack overflow page earlier in the thread.
Running the template listed below on the sav file via 010 Editor allows you to easily change the
ship resources as well as
crew types and xp.
I added comments for the max values.
I think there is a way to insert bytes using the templates/scripts... but I just started using the editor a few hours ago, so I'm not sure.
I stubbed out the String_Write function, if anyone wants to take a stab at changing the string sizes.
The strings are prefixed with the size, rather than null terminated, but you can use a null to shorten the string (like human -> rock/slug/engi).
Here is my template so far:
Code: Select all
//--------------------------------------
//--- 010 Editor v4.0.2 Binary Template
//
// File: FTL_SAVTemplate.bt
// Author: Striblezz
// Revision: 0.1
// Purpose: FTL Experimentation
//--------------------------------------
typedef struct
{
int count;
char chars[count];
} String <read=String_Read/*, write=String_Write*/>;
string String_Read(String &v)
{
return v.chars;
}
/*
void String_Write(String &v, string s)
{
int count = 5; //Strlen(s);
DeleteBytes((int64)(v.chars), v.count);
InsertBytes((int64)(v.chars), count);
v.count = count;
Memcpy(v.chars, s, v.count);
}
*/
typedef struct
{
int var0; // 2 2
int var1; // 0 1
int var2; // 0 35
int var3; // 1 97
int var4; // 0 1949
int var5; // 3 14
} HEADER;
typedef struct
{
String ship_name;
String ship_type;
int sector; //?
int data1;
} SHIP_DATA;
typedef struct
{
String name;
int value;
} STAT;
typedef struct
{
int stat_count;
STAT stat[stat_count] <optimize=false>;
} STATS;
typedef struct
{
String crew_type;
String crew_name;
} START_CREW;
typedef struct
{
String ship_type;
String ship_name;
String ship_short_name;
int start_crew_count;
START_CREW start_crew[start_crew_count] <optimize=false>;
} START_DATA;
typedef struct
{
String crew_name;
String crew_type <comment="You can change between (engi, rock, slug) or from (human) to those, but you need a type with 6 characters to switch to (mantis, zoltan) or down to (human)">;
int data_0; //0
int health <comment="Max: 100(human, slug, engi, mantis), 70(zoltan), 150(rock)">;
int pos_x; //507
int pos_x; //157
int data_1; //0
int data_2; //0
int data_3; //1
int xp_control <comment="Max: 30">;
int xp_engines <comment="Max: 30">;
int xp_shields <comment="Max: 110">;
int xp_weapons <comment="Max: 130">;
int xp_repair <comment="Max: 36">;
int xp_combat <comment="Max: 16">;
int data_10; //1
int data_11; //0
int data_12; //0
int data_13; //0
int nodes_visited_maybe; //0
int data_15; //0
} CREW;
struct FILE
{
HEADER header;
SHIP_DATA ship_data;
STATS stats;
START_DATA start_data;
int hull <comment="Max: 30">;
int energy <comment="Max: 999+">;
int missiles <comment="Max: 999+">;
int drones <comment="Max: 999+">;
int scrap <comment="Max: 999999+">;
int crew_count;
CREW crew[crew_count] <optimize=false>;
} file;
Feel free to add to it, or update it if you figure out what the other values are for...
Re: Save game editing
Posted: Mon Oct 01, 2012 4:45 pm
by Agent_L
fparadis2 wrote:Anyway, I'd be very interested in seeing if anyone has cracked the star map part!
I belive there might be a bug there. I've saved game right before jump to "Rock homeworld" and when I loaded the game I had an option to jump to "Mantis homeworld".
So maybe not everything is saved.
Re: Save game editing
Posted: Mon Oct 01, 2012 8:22 pm
by v3gard
I've made some updates to my editor. You can now change crew attributes as well as resources and ship hull integrity. I tried compiling it on Windows with cygwin, but unfortunately no luck so far..
fparadis2 wrote:
Anyway, I'd be very interested in seeing if anyone has cracked the star map part!
Decoding that looks like a lot of work, but it would definitely be awesome. My next objective is to map out how the items and weapons are encoded, and after that I thought of looking at the star maps.
Re: Save game editing
Posted: Sun Oct 07, 2012 8:28 am
by Jessen
if you can get a version of this for windows, we will REALLY progress forward in the save cracking area.
Re: Save game editing
Posted: Sun Oct 07, 2012 6:01 pm
by Agent_L
fparadis2 wrote:Anyway, I'd be very interested in seeing if anyone has cracked the star map part!
Hmm, if the star map (and the sector map) is randomly generated, then I'd save just the RND seed and recreate the map exactly same way every load. It's the "what was visited and what was left" part that'd need serious saving.
Baseline: both beacons map and sectors map could be saved as just one int.