-
Notifications
You must be signed in to change notification settings - Fork 0
/
1080-snowboarding.bt
160 lines (135 loc) · 3.07 KB
/
1080-snowboarding.bt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
//------------------------------------------------
//--- 010 Editor v13.0.1 Binary Template
//
// File:
// Authors: Shadow-Link
// Version:
// Purpose: 1080 Snowboarding save file format
// Category:
// File Mask:
// ID Bytes:
// History:
//------------------------------------------------
typedef struct {
uint value1;
uint value2;
} Checksum;
typedef struct {
byte minutes;
byte seconds;
byte miliseconds;
} Time;
typedef struct {
byte initials[3]; // A = 0, B = 1, C = 2 etc
} Initials;
typedef enum <byte> {
TAHOE_151,
MERLOT_147,
B_LINE_149,
SCOUT_156,
TAHOE_155,
SCOUT_LTD_162,
MERLOT_143,
B_LINE_154
} Board;
typedef enum <byte> {
DION_BLASTER,
KENSUKE_KIMACHI,
AKARI_HAYAMI,
RICKY_WINTERBORN,
ROB_HAYWOOD
} Boarder;
typedef struct {
Boarder boarder : 3;
Board board : 5;
} BoarderInfo;
typedef struct {
uint score;
} Score;
typedef struct {
BoarderInfo boarderInfo;
byte isBot; // 0 for CPU, -1 for player?
Initials initials;
Time time;
} TimeTrialRecordSlot;
typedef struct {
BoarderInfo boarderInfo;
Initials initials;
Score score;
} TrickAttackRecordSlot;
typedef struct {
TimeTrialRecordSlot timeTrialSlot[3];
TrickAttackRecordSlot trickAttackSlot[3];
} HighScores;
typedef struct {
byte unknown[3];
BoarderInfo boarderInfo;
byte unknown1[1];
Initials initials;
Score crystalLake;
Score airMake;
Score crystalPeak;
Score halfPipe;
Score goldenForest;
Score totalScore;
} ContestScores;
typedef struct {
HighScores levelAirMake;
HighScores levelHalfPipe;
HighScores levelCrystalLake;
HighScores levelCrystalPeak;
HighScores levelGoldenForest;
HighScores levelMountainVillage;
HighScores levelDragonCave;
HighScores levelDeadlyFall;
Checksum checksum; // ?
} HighScoreData;
typedef struct {
ContestScores contestScores[3];
Checksum checksum; // ?
} ContestScoreData;
typedef enum <byte> {
STEREO,
HEADSET,
MONO
} AudioSetup;
typedef enum <byte> {
ENGLISH,
JAPANESE
} Language;
typedef struct {
byte backgroundMusic; // 0 - 10
byte soundEffects; // 0 - 10
byte voice; // 0 - 10
byte padding[3];
} SoundSettings;
typedef enum <ushort> {
NORMAL = 1,
HARD = 2,
EXPERT = 3
} MatchRace;
typedef struct {
HighScoreData highScoreData;
ContestScoreData contestScoreData;
ushort unknown1; // Changes when finishing a level?
MatchRace unlockedMatchRace;
byte padding; // Or part of the AudioSetup / Language?
// Audio and language setting combined in single byte
AudioSetup audioSetup : 2;
Language language : 1;
byte unknown2[8];
byte unknown3; // Changes when finishing a level
byte unknown4[3];
SoundSettings soundSettings;
Checksum checksum; // ?
byte unknown5[16];
Checksum checksum2; // ?
} SaveData;
typedef struct {
Checksum checksum;
SaveData saveData;
byte padding[31656];
SaveData backup;
} SaveFile;
BigEndian();
SaveFile saveFile;