Where are the Course Save Files? - Android Tablet/Phone

  • Thread starter Imari
  • 119 comments
  • 17,801 views
Well I haven't got far, but it looks possible :D

Code:
//--------------------------------------
//--- 010 Editor v3.1 Binary Template
//
// File: TrackEditor.bt
// Author: Outspacer
// Revision: 1.0.0
// Purpose: cracking the tracks
//--------------------------------------

struct FILE
{
  struct HEADER
  {
    char fileid[6];
    int version; // =105 version???
    byte unknown[6]; // ={0,0,0,0,0,0}
    int name_section_start; // offset from start of file
    int name_section_count; // =1
    int info_section_start;
    int info_section_count; // =1
    int path_section_start;
    int path_section_count; // = number of anchors + 2 ???
    int section4_start;
    int section4_count;
    int section5_start;
    int section5_count;
  } header;

  struct NAME_SECTION
  {
    char name[header.info_section_start - header.name_section_start];
  } name_section;

  struct INFO_SECTION
  {
    int theme; // 1=death valley, 2=Eifel, 5=Eifel Flat, 3=Andalusia
    double track_width;
    byte unknown[6];
  } info_section;

  struct PATH_SECTION
  {
    struct HOME_STRAIGHT
    {
      byte type; // =1
      double x;
      double y;
      double a;
      // (missing byte here breaks the pattern of the path_section)
      byte type; // =1
      double x;
      double y;
      double a;
      byte unknown; // =0
    } start;
    struct ANCHOR
    {
      byte type; // 0=straight, 1=curve
      double x;
      double y;
      double a;
      byte unknown; // =0
    } anchors[header.path_section_count - 2];
  } path_section;
} file;

Presumably sections 4 and 5 are trackside objects and kerbs, not looked yet.

I've tested editing a file by changing the width of a track (downwards) - the App didn't moan when reloading it, and showed the altered width. So it looks like there's no tamper-checking :D

What will happen when the track data is invalid (re. tight turns etc)? I don't know yet. That'll be a problem for alternate editors; working out all of the rules for a 'correct' track.

Interesting in that they used C# when coding this, because of the struct reserved word.

https://msdn.microsoft.com/en-us/library/ms173109.aspx << (for nerds only) :D :D :D

but, hold on...

struct INFO_SECTION
{
int theme; // 1=death valley, 2=Eifel, 5=Eifel Flat, 3=Andalusia
double track_width;
byte unknown[6];
} info_section;

Death Valley is 1, Eifel is 2, Andalusia is 3, and Eifel Flat is 5. Where's 4 ??? :confused::confused:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Course Maker update which includes a 5th theme confirmed!! :lol::lol::lol:

EDIT:

Another hold on. However, since we're talking about a computer program made by Japanese here, they might have deliberately avoided the use of the number 4, since in Japanese folklore, the number 4 is usually associated with "death" and/or "bad luck".
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
:eek::eek::eek:
 
Last edited:
I checked, but in my ES File Manager I cannot find a setting "Root Explorer"!
Isn't the whole ES File Manager an App that automatically requires root?
Anyway... it must have root privileges, since every time there is an update to ES File Manager and I open it up the 1st time after the update, I am asked if I allow root acces for this App.
I didn't find an extra setting in the menu.

Root Explorer is the app I use vs ES File Manager it needs root but if you are using Titanium then you are good to go.

Root starts with a / so the path to the files is /data/data/...
 
Root Explorer is the app I use vs ES File Manager it needs root but if you are using Titanium then you are good to go.

Root starts with a / so the path to the files is /data/data/...

Many thanks Doc, you are my hero again!!! :bowdown: :bowdown: :bowdown:

Somebody just could have told me in simple words that with ES File Manager you can't see the
data/data/jp.co.polyphony.GTCourseMaker
and its subfolders, but with Root Explorer you can! :banghead:
Given that knowledge it was a matter of 1 Minute to copy the "files"-folder from my tablet to the Smartphone.
So the TPE now runs on the Smartphone too and has all the (2) tracks I have built so far.
That leaves 2 questions;
1.) Building a track on the 5,7" Display Smartphone would be a chore (if not close to impossible).
2.) I always thought that ES File Manager is an App with which one can also see hidden files and folders, bot apparently it is not! 👎
I'm a bit dumb maybe at times, but normally I am good enough to find a file or folder in a folder-structure. But if the tool you use just doesn't show them (even though it should), then you are simply out of luck!
By by ES File Manager, welcome Root Explorer! :D

Many thanks again, good night and good luck!
 
Somebody just could have told me in simple words that with ES File Manager you can't see the
data/data/jp.co.polyphony.GTCourseMaker

Sorry @EmaNymton .. I have never used 'ES File Manager' so I don't know what it does and does not do. Like @SCClockDr , I also use 'Root Explorer' to see my files as you can see from the BlueStacks screenshot in my first post in this thread.
Glad you've got it done now. 👍
 
Another hold on. However, since we're talking about a computer program made by Japanese here, they might have deliberately avoided the use of the number 4, since in Japanese folklore, the number 4 is usually associated with "death" and/or "bad luck". :eek::eek::eek:

You might be onto something there! Hacking theme 4 into a file-set causes the editor to die when opening it :guilty:

Hacking valid theme numbers in..... Choo-choo!
 
I checked, but in my ES File Manager I cannot find a setting "Root Explorer"!
Isn't the whole ES File Manager an App that automatically requires root? :confused:
Anyway... it must have root privileges, since every time there is an update to ES File Manager and I open it up the 1st time after the update, I am asked if I allow root acces for this App.
I didn't find an extra setting in the menu.

I've got this toggle on the menu, right near the bottom...

Screenshot_2015-10-09-20-08-04.png
 
Interesting in that they used C# when coding this, because of the struct reserved word.

https://msdn.microsoft.com/en-us/library/ms173109.aspx << (for nerds only) :D :D :D

but, hold on...



Death Valley is 1, Eifel is 2, Andalusia is 3, and Eifel Flat is 5. Where's 4 ??? :confused::confused:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Course Maker update which includes a 5th theme confirmed!! :lol::lol::lol:

EDIT:

Another hold on. However, since we're talking about a computer program made by Japanese here, they might have deliberately avoided the use of the number 4, since in Japanese folklore, the number 4 is usually associated with "death" and/or "bad luck".
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
:eek::eek::eek:

No hidden themes in game:

t_scenery_andalusia
t_scenery_deathvalley
t_scenery_eifel
t_scenery_eifel_flat


App mentions six:

ScrollScenery1
ScrollScenery2
ScrollScenery3
ScrollScenery4

Scenery1
Scenery2
Scenery3
Scenery4
Scenery5
Scenery6

SelectScenery1
SelectScenery2
SelectScenery3
SelectScenery4
SelectScenery5
 
Some :D

Screenshot_2015-10-13-01-46-33.png Screenshot_2015-10-13-01-57-14.png

Theme can be switched. Home straight can be anywhere, any angle (but still fixed at 600m). Anchors can be moved, and there seems to be no error checking as long as you don't edit them the app afterwards. Figure-of-8 just results in barriers across the track. Tighter corners are possible, but only to a certain extent since otherwise the barriers or skirtings poke out onto the tarmac. Reversing a track should be possible, as should scaling it, flipping/mirroring it, or moving it to another bit of terrain. Shrinking it might cause overlap issues though, of course. Track can be put in the grey bits of terrain, and work ok, but terrain/scenery has gaps out there (could be great for jump tracks...).

Latest file format info... may well contain errors!...

.meta
Code:
//--------------------------------------
//--- 010 Editor v3.1 Binary Template
//
// File: GT6 Track Path Editor .meta
// Author: Outspacer
// Revision: 1.0.0
// Purpose:
// Unknowns: an int
//--------------------------------------

enum <int> theme_t
{
  Death_Valley = 1,
  Eifel = 2,
  Andalusia = 3,
  Eifel_Flat = 5,
};

char file_id[6]; // ="GT6TEM"
int version; // =103 version???
byte reserved[6]; // ={0,0,0,0,0,0}
int file_name_start;
int file_name_end;
char file_name[file_name_end - file_name_start];
theme_t theme;
double track_length;
int unknown;
int reserved;
time_t timestamp;
short display_name_length;
char display_name[display_name_length];

.bin
Code:
//--------------------------------------
//--- 010 Editor v3.1 Binary Template
//
// File: GT6 Track Path Editor .bin
// Author: Outspacer
// Revision: 1.0.0
// Purpose:
// Unknowns: 4 bytes in INFO, 2 bytes in OBJECT
//--------------------------------------

typedef unsigned byte u_byte;

// HEADER

struct HEADER
{
  char file_id[6]; // ="GT6TER"
  int version; // =105 version ???
  byte reserved[6]; // ={0,0,0,0,0,0}
  int name_start; // offset from start of file
  int name_count; // =1
  int info_start;
  int info_count; // =1
  int path_start;
  int path_count; // = number of user anchors + 2 for the home straight
  int objects_start;
  int objects_count; // = number of trackside objects and curbs
  int section5_start;
  int section5_count;
};

// INFO

enum <int> theme_t
{
  Death_Valley = 1,
  Eifel = 2,
  Andalusia = 3,
  Eifel_Flat = 5,
};

struct INFO
{
  theme_t theme; // 1=death valley, 2=Eifel, 5=Eifel Flat, 3=Andalusia
  double track_width;
  byte connected; // 0=open, 1=connected
  u_byte unknown[4]; // timestamp???
  byte bank_angle; // 0=very gentle, ..., 4=very steep
};

// PATH

enum <byte> segment_type_t
{
  straight = 0,
  curve = 1,
};

enum <byte> radius_t
{
  increased = 0,
  decreased = 1,
};

struct HOME_STRAIGHT
{
  segment_type_t start_type; // =1, straight
  double start_x;
  double start_y;
  double start_a;
  // (missing byte here breaks the pattern of the path_section)
  segment_type_t end_type; // =1, straight
  double end_x;
  double end_y;
  double end_a;
  byte reserved; // =0
};

struct ANCHOR
{
  segment_type_t type; // 0=curve, 1=straight
  double x;
  double y;
  double a;
  radius_t radius; // for preceding segment
};

// OBJECTS

enum <byte> side_t
{
  right = 0,
  left = 1,
};

enum <byte> dist_from_track_t
{
  edge = 1, // used for curbing
  close = 2,
  far = 3,
  deep = 4, // both close and far regions
};

enum <byte> object_type_t
{
  curbing = 6,
  trees = 1,
  woods = 2,
  rapeseed = 3,
  billboard = 20,
  marshal = 14,
  tent = 21,
  grandstand = 13,
  gate = 12,
  bank = 9,
};

struct OBJECT
{
  side_t side;
  dist_from_track_t dist_from_track;
  object_type_t type;
  u_byte unknown1; // seen 40h (64)
  u_byte unknown2; // seen 39h (57) for curbing, 69h (105) for bank, 59h (89) for trees, woods, rapeseed, billboard, marshal, tent, grandstand, gate
  byte reserved[6]; // ={0,0,0,0,0,0}
  double position;
};

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

struct HEADER header;
char name[header.info_start - header.name_start];
struct INFO info;
struct PATH
{
  struct HOME_STRAIGHT home_straight;
  struct ANCHOR anchors[header.path_count - 2];
} path;
struct OBJECT objects[header.objects_count];
 
Neither being a nerd nor a programmer, I wished to understand the whole subject that is discussed here (not even sure if this is the right thread to discuss such items). :confused:
 
Neither being a nerd nor a programmer, I wished to understand the whole subject that is discussed here (not even sure if this is the right thread to discuss such items). :confused:

Yyeeaaaaahhhh, that's kinda hard, if you really want to understand how the guys here manipulate the source code, you're gonna have to be a computer geek yourself. But, in layman's terms, what these guys are trying to do is "open" the Course Maker app and see what kind of stuff they can do with it, like what can be done that you can't normally do. What @Outspacer did was that he was able to switch the theme of a track that was already created, set the track to Reverse, flip the track so that you can make a mirror image of the track, and so on. Read his comment below:

Some :D

View attachment 461665 View attachment 461666

Theme can be switched. Home straight can be anywhere, any angle (but still fixed at 600m). Anchors can be moved, and there seems to be no error checking as long as you don't edit them the app afterwards. Figure-of-8 just results in barriers across the track. Tighter corners are possible, but only to a certain extent since otherwise the barriers or skirtings poke out onto the tarmac. Reversing a track should be possible, as should scaling it, flipping/mirroring it, or moving it to another bit of terrain. Shrinking it might cause overlap issues though, of course. Track can be put in the grey bits of terrain, and work ok, but terrain/scenery has gaps out there (could be great for jump tracks...).

Very, very interesting. Those things I highlighted in bold, THOSE should have been features available right from the start. I was honestly annoyed at how placing the start line involved not placing the start line :dunce:, but selecting from preset locations. I mean, seriously, you can't put a straight in the middle of nowhere??? And the reversed/flipped bit, I think it's quite easy to implement them, they just have to put buttons in the screen that say "Reverse" and "Flip", respectively.

Latest file format info... may well contain errors!...

.meta
Code:
//--------------------------------------
//--- 010 Editor v3.1 Binary Template
//
// File: GT6 Track Path Editor .meta
// Author: Outspacer
// Revision: 1.0.0
// Purpose:
// Unknowns: an int
//--------------------------------------

enum <int> theme_t
{
  Death_Valley = 1,
  Eifel = 2,
  Andalusia = 3,
  Eifel_Flat = 5,
};

char file_id[6]; // ="GT6TEM"
int version; // =103 version???
byte reserved[6]; // ={0,0,0,0,0,0}
int file_name_start;
int file_name_end;
char file_name[file_name_end - file_name_start];
theme_t theme;
double track_length;
int unknown;
int reserved;
time_t timestamp;
short display_name_length;
char display_name[display_name_length];

.bin
Code:
//--------------------------------------
//--- 010 Editor v3.1 Binary Template
//
// File: GT6 Track Path Editor .bin
// Author: Outspacer
// Revision: 1.0.0
// Purpose:
// Unknowns: 4 bytes in INFO, 2 bytes in OBJECT
//--------------------------------------

typedef unsigned byte u_byte;

// HEADER

struct HEADER
{
  char file_id[6]; // ="GT6TER"
  int version; // =105 version ???
  byte reserved[6]; // ={0,0,0,0,0,0}
  int name_start; // offset from start of file
  int name_count; // =1
  int info_start;
  int info_count; // =1
  int path_start;
  int path_count; // = number of user anchors + 2 for the home straight
  int objects_start;
  int objects_count; // = number of trackside objects and curbs
  int section5_start;
  int section5_count;
};

// INFO

enum <int> theme_t
{
  Death_Valley = 1,
  Eifel = 2,
  Andalusia = 3,
  Eifel_Flat = 5,
};

struct INFO
{
  theme_t theme; // 1=death valley, 2=Eifel, 5=Eifel Flat, 3=Andalusia
  double track_width;
  byte connected; // 0=open, 1=connected
  u_byte unknown[4]; // timestamp???
  byte bank_angle; // 0=very gentle, ..., 4=very steep
};

// PATH

enum <byte> segment_type_t
{
  straight = 0,
  curve = 1,
};

enum <byte> radius_t
{
  increased = 0,
  decreased = 1,
};

struct HOME_STRAIGHT
{
  segment_type_t start_type; // =1, straight
  double start_x;
  double start_y;
  double start_a;
  // (missing byte here breaks the pattern of the path_section)
  segment_type_t end_type; // =1, straight
  double end_x;
  double end_y;
  double end_a;
  byte reserved; // =0
};

struct ANCHOR
{
  segment_type_t type; // 0=curve, 1=straight
  double x;
  double y;
  double a;
  radius_t radius; // for preceding segment
};

// OBJECTS

enum <byte> side_t
{
  right = 0,
  left = 1,
};

enum <byte> dist_from_track_t
{
  edge = 1, // used for curbing
  close = 2,
  far = 3,
  deep = 4, // both close and far regions
};

enum <byte> object_type_t
{
  curbing = 6,
  trees = 1,
  woods = 2,
  rapeseed = 3,
  billboard = 20,
  marshal = 14,
  tent = 21,
  grandstand = 13,
  gate = 12,
  bank = 9,
};

struct OBJECT
{
  side_t side;
  dist_from_track_t dist_from_track;
  object_type_t type;
  u_byte unknown1; // seen 40h (64)
  u_byte unknown2; // seen 39h (57) for curbing, 69h (105) for bank, 59h (89) for trees, woods, rapeseed, billboard, marshal, tent, grandstand, gate
  byte reserved[6]; // ={0,0,0,0,0,0}
  double position;
};

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

struct HEADER header;
char name[header.info_start - header.name_start];
struct INFO info;
struct PATH
{
  struct HOME_STRAIGHT home_straight;
  struct ANCHOR anchors[header.path_count - 2];
} path;
struct OBJECT objects[header.objects_count];

I'm seeing a 6-dimensional array. That's crazy if you ask me :crazy: I wonder what it's used for. Maybe it's the track itself and/or the anchor points that use it.
 
Well, if these rocket scientist-guys are as smart, maybe they can also create an "App" which could make use of all that stuff!?
Especially one thing would be urgently needed:
either
a) being able to underlay a picture in all 4 themes (not just in "Eifel Flat") or
b) copy a track created in "Eifel Flat" to any of the other 3 themes.

Meanwhile (waiting for these features) I have invented a method for myself to draw a track from a picture in the other 3 themes:
1.) I print my picture on a transparent foil (make sure you have added the scale not only in 1 place on the picture but in as many places as possible, otherewise the track would be out of scale in the end);
2.) Open one of the 3 themes other than "Eifel Flat" (say: "Eifel") and chose your Start/Finish-line.
3.) lay the transparent foil with the picture over the display of the tablet;
4.) Zoom in and out until the scale on the foil matches the scale in the TPE-Editor-App (I have found it most useful to chose a 500 m scale which you get at a certain point of zooming in);
5.) Position the transparent foil so that the Start/Finish-line is in the right place (it is recommended to fix the foil with a tape on the edges of the tablet, but not on the display!);
6.) you can now draw your track through the transparent foil using the pen of your Android-tablet (sorry for you Apple Fan Boys :D )
7.) It will be necessary to re-position the foil in the process of drawing the track, but avoid zooming in or out at this point, as you would change the scale again which has to be avoided.

If have built my 1st hilly track with this method already and it's not as cumbersome as I originally thought, it just takes a little bit longer than drawing from a picture in "Eifel Flat", but not much.
 
Meanwhile (waiting for these features) I have invented a method for myself to draw a track from a picture in the other 3 themes:
1.) I print my picture on a transparent foil (make sure you have added the scale not only in 1 place on the picture but in as many places as possible, otherewise the track would be out of scale in the end);
2.) Open one of the 3 themes other than "Eifel Flat" (say: "Eifel") and chose your Start/Finish-line.
3.) lay the transparent foil with the picture over the display of the tablet;
4.) Zoom in and out until the scale on the foil matches the scale in the TPE-Editor-App (I have found it most useful to chose a 500 m scale which you get at a certain point of zooming in);
5.) Position the transparent foil so that the Start/Finish-line is in the right place (it is recommended to fix the foil with a tape on the edges of the tablet, but not on the display!);
6.) you can now draw your track through the transparent foil using the pen of your Android-tablet (sorry for you Apple Fan Boys :D )
7.) It will be necessary to re-position the foil in the process of drawing the track, but avoid zooming in or out at this point, as you would change the scale again which has to be avoided.

If have built my 1st hilly track with this method already and it's not as cumbersome as I originally thought, it just takes a little bit longer than drawing from a picture in "Eifel Flat", but not much.

This is exactly what I do using Bluestacks on my laptop connected to a 39" screen and using a mouse.
 
Problem for me would be to find and print a 39" foil (I could also throw the Bluestacks screen from my notebook up to my 55" TV, which doesn't make it much easier!?)! :D
And I have read somewhere that doing it via Bluestacks with the mouse is not very comfortable to do? :confused:
 
I was honestly annoyed at how placing the start line involved not placing the start line :dunce:, but selecting from preset locations. I mean, seriously, you can't put a straight in the middle of nowhere???

There might well be glitches where the terrain isn't fairly flat, but I think in most cases it would be limited to being able to see a gap under the home straight when viewed from some other bit of track.

And the reversed/flipped bit, I think it's quite easy to implement them, they just have to put buttons in the screen that say "Reverse" and "Flip", respectively.

Reversing/flipping/scaling etc would be done by modifying all of the anchor positions, there isn't a simple flag. I haven't tried it yet. Reversing might be tricky to actually write because of the way the path is built; it's probably not as easy as reversing the order and turning the angles around 180 degrees.

I'm seeing a 6-dimensional array. That's crazy if you ask me :crazy: I wonder what it's used for. Maybe it's the track itself and/or the anchor points that use it.

It's not 6d :confused:

Well, if these rocket scientist-guys are as smart, maybe they can also create an "App" which could make use of all that stuff!?
Especially one thing would be urgently needed:
either
a) being able to underlay a picture in all 4 themes (not just in "Eifel Flat") or
b) copy a track created in "Eifel Flat" to any of the other 3 themes.

a) would require either hacking PD's app, or creating an alternative app.
b) is the practical option because it just means modifying the save files.
 
OK, I'm asking for one. :mischievous:
No problem :)
Debug possibly.jpg

You get this when you have a 0kb (empty) .bin and .meta file in your files folder. Once the app loads up, click the pencil down the bottom next to create. Afterwards to get your track list back delete the 0kb files :)

1: Death Valley
2: Eifel
3: Andalusia
4: Death Valley Flat
5: Eifel Flat
6: Andalusia Flat

When you click the light grey ones you get taken to that scenery, the faded ones (DV Flat and Andalusia Flat don't work) and the start button does nothing :)
 
Reversing might be tricky to actually write because of the way the path is built; it's probably not as easy as reversing the order and turning the angles around 180 degrees.

Actually, it is that easy, for circuits! (Almost... 'Straight' and 'Reduce Radius' flags need to move to the other end of the segment, and the last anchor needs to be set to the same as the other end of the home straight). Point-to-point would have to move the home straight to the other end as well, so can't be an exact reversal.

But circuits can be exact (apart from the pit lane swapping from inside to outside or vice-versa)...

Animation1.gif
 
Andalusia flat and death valley flat make no sense....

We just need to be able to overlay our maps on the regular non-flat with terrain themes...

And possibly being able to reposition the home straight wherever we want like in the Flat map.




Another question for the wizards among us:

Is there a way for me to transfer my created maps from my ipad air to my friend's tablet if he is interested in tweeking mine...?

That would be another breakthrough...
 
Problem for me would be to find and print a 39" foil (I could also throw the Bluestacks screen from my notebook up to my 55" TV, which doesn't make it much easier!?)! :D
And I have read somewhere that doing it via Bluestacks with the mouse is not very comfortable to do? :confused:

I only use the big screen for making fine adjustments as the editor on Bluestacks will not zoom in and out without issue. The mouse works great and for me at least is far easier. I use a tablet also, but with large fingers one can't see what one is doing easily :)
 
Back