Repository navigation
Expand file tree
/
Copy pathFezSaveFileStructure.xml
More file actions
160 lines (160 loc) · 9.54 KB
/
Copy pathFezSaveFileStructure.xml
File metadata and controls
160 lines (160 loc) · 9.54 KB
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
<?xml version="1.0" encoding="UTF-8"?>
<SaveFile>
<primitive name="BinaryWriter" type="long" notes="value written in EasyStorage.dll as (long)Date.now()" />
<container name="SaveData" type="SaveData">
<primitive name="Version" type="long" notes="const value (6)" />
<primitive name="CreationTime" type="long" notes="DateTime.Now.ToFileTimeUtc()" />
<primitive name="Finished32" type="bool" />
<primitive name="Finished64" type="bool" />
<primitive name="HasFPView" type="bool" />
<primitive name="HasStereo3D" type="bool" />
<primitive name="CanNewGamePlus" type="bool" />
<primitive name="IsNewGamePlus" type="bool" />
<collection name="OneTimeTutorials" type="Dictionary<string, bool>" notes="used to keep track of some of Dot's tutorial text; key is GameText key, and value should only ever really be true">
<primitive name="OneTimeTutorials.Count" type="int" />
<repeating-group name="OneTimeTutorials.Entry" occurs="OneTimeTutorials.Count">
<primitive name="string" type="string" />
<primitive name="bool" type="bool" />
</repeating-group>
</collection>
<primitive name="Level" type="string" notes="current level name" />
<primitive name="View" type="int" aliased-from="Viewpoint" />
<container name="Ground" type="Vector3">
<primitive name="X" type="float" />
<primitive name="Y" type="float" />
<primitive name="Z" type="float" />
</container>
<primitive name="TimeOfDay" type="long" aliased-from="TimeSpan" />
<collection name="UnlockedWarpDestinations" type="List<string>" notes="used for big hub warp gates; includes NATURE_HUB by default">
<primitive name="UnlockedWarpDestinations.Count" type="int" />
<repeating-group name="UnlockedWarpDestinations.Entry" occurs="UnlockedWarpDestinations.Count">
<primitive name="string" type="string" />
</repeating-group>
</collection>
<primitive name="Keys" type="int" />
<primitive name="CubeShards" type="int" />
<primitive name="SecretCubes" type="int" />
<primitive name="CollectedParts" type="int" />
<primitive name="CollectedOwls" type="int" />
<primitive name="PiecesOfHeart" type="int" />
<collection name="Maps" type="List<string>">
<primitive name="Maps.Count" type="int" />
<repeating-group name="Maps.Entry" occurs="Maps.Count">
<primitive name="string" type="string" />
</repeating-group>
</collection>
<collection name="Artifacts" type="List<ActorType>" notes="Note: ActorType is saved as int">
<primitive name="Artifacts.Count" type="int" />
<repeating-group name="Artifacts.Entry" occurs="Artifacts.Count">
<primitive name="int" type="int" />
</repeating-group>
</collection>
<collection name="EarnedAchievements" type="List<string>">
<primitive name="EarnedAchievements.Count" type="int" />
<repeating-group name="EarnedAchievements.Entry" occurs="EarnedAchievements.Count">
<primitive name="string" type="string" />
</repeating-group>
</collection>
<collection name="EarnedGamerPictures" type="List<string>">
<primitive name="EarnedGamerPictures.Count" type="int" />
<repeating-group name="EarnedGamerPictures.Entry" occurs="EarnedGamerPictures.Count">
<primitive name="string" type="string" />
</repeating-group>
</collection>
<primitive name="ScriptingState" type="string" />
<primitive name="FezHidden" type="bool" />
<primitive name="GlobalWaterLevelModifier" type="float?" nullable="true" />
<primitive name="HasHadMapHelp" type="bool" />
<primitive name="CanOpenMap" type="bool" />
<primitive name="AchievementCheatCodeDone" type="bool" />
<primitive name="AnyCodeDeciphered" type="bool" />
<primitive name="MapCheatCodeDone" type="bool" />
<collection name="World" type="Dictionary<string, LevelSaveData>" notes="level name -> LevelSaveData">
<primitive name="World.Count" type="int" />
<repeating-group name="World.Entry" occurs="World.Count">
<primitive name="string" type="string" />
<container name="LevelSaveData" type="LevelSaveData" nullable="true">
<collection name="DestroyedTriles" type="List<TrileEmplacement>" notes="bell cube, bombable walls, permanent despawning groups (dunno what that means), NameOfGodPuzzle treasure, treasure chest treasures, tuning fork treasures, cube bits, TetrisPuzzle treasure, and UnfoldPuzzle treasure">
<primitive name="DestroyedTriles.Count" type="int" />
<repeating-group name="DestroyedTriles.Entry" occurs="DestroyedTriles.Count">
<container name="TrileEmplacement" type="TrileEmplacement">
<primitive name="X" type="int" />
<primitive name="Y" type="int" />
<primitive name="Z" type="int" />
</container>
</repeating-group>
</collection>
<collection name="InactiveTriles" type="List<TrileEmplacement>" notes="doors">
<primitive name="InactiveTriles.Count" type="int" />
<repeating-group name="InactiveTriles.Entry" occurs="InactiveTriles.Count">
<container name="TrileEmplacement" type="TrileEmplacement">
<primitive name="X" type="int" />
<primitive name="Y" type="int" />
<primitive name="Z" type="int" />
</container>
</repeating-group>
</collection>
<collection name="InactiveArtObjects" type="List<int>" notes="clock tower cubes, bell, bit doors, the mailbox, NameOfGodPuzzle (hardcoded to 0), treasure chests, that one openable bookcase, turing forks, the spinning rings animation in STARGATE (hardcoded to 0), TetrisPuzzle (hardcoded to 0), and UnfoldPuzzle (hardcoded to 0). All the ones that are not hardcoded to 0 use the Id of the associated ArtObject ">
<primitive name="InactiveArtObjects.Count" type="int" />
<repeating-group name="InactiveArtObjects.Entry" occurs="InactiveArtObjects.Count">
<primitive name="int" type="int" />
</repeating-group>
</collection>
<collection name="InactiveEvents" type="List<int>" notes="keeps track of Level Scripts that have OneTime set to true and that have already been activated">
<primitive name="InactiveEvents.Count" type="int" />
<repeating-group name="InactiveEvents.Entry" occurs="InactiveEvents.Count">
<primitive name="int" type="int" />
</repeating-group>
</collection>
<collection name="InactiveGroups" type="List<int>" notes="Permanent PushSwitches (which I think is all the ones used in-game) and the glowing on the door in Waterfall">
<primitive name="InactiveGroups.Count" type="int" />
<repeating-group name="InactiveGroups.Entry" occurs="InactiveGroups.Count">
<primitive name="int" type="int" />
</repeating-group>
</collection>
<collection name="InactiveVolumes " type="List<int>" notes="typically used for Volumes that have codes that should only be activated once (e.g., the waterfall and the moria door in Waterfall)">
<primitive name="InactiveVolumes .Count" type="int" />
<repeating-group name="InactiveVolumes .Entry" occurs="InactiveVolumes .Count">
<primitive name="int" type="int" />
</repeating-group>
</collection>
<collection name="InactiveNPCs" type="List<int>" notes="Owls ">
<primitive name="InactiveNPCs.Count" type="int" />
<repeating-group name="InactiveNPCs.Entry" occurs="InactiveNPCs.Count">
<primitive name="int" type="int" />
</repeating-group>
</collection>
<collection name="PivotRotations" type="Dictionary<int, int>" notes="keeps track of the rotations of all the things you can spin around (time switches, tombstones, those big platforms you can push to rotate, that one bookcase, etc.)">
<primitive name="PivotRotations.Count" type="int" />
<repeating-group name="PivotRotations.Entry" occurs="PivotRotations.Count">
<primitive name="int" type="int" />
<primitive name="int" type="int" />
</repeating-group>
</collection>
<primitive name="LastStableLiquidHeight" type="float?" nullable="true" notes="null if no liquid" />
<primitive name="ScriptingState" type="string" />
<primitive name="FirstVisit" type="bool" />
<container name="FilledConditions" type="WinConditions" nullable="true" notes="could be dynamically recalculated">
<primitive name="LockedDoorCount" type="int" notes="doors that have locks" />
<primitive name="UnlockedDoorCount" type="int" notes="doors that don't have locks" />
<primitive name="ChestCount" type="int" notes="number of treasure chests" />
<primitive name="CubeShardCount" type="int" notes="number of larger golden cubes" />
<primitive name="OtherCollectibleCount" type="int" notes="used for maps, artifacts, anticubes, or any other collectible that isn't a golden cube" />
<primitive name="SplitUpCount" type="int" notes="number of cube bits" />
<collection name="ScriptIds" type="List<int>" notes="script IDs that count towards win conditions">
<primitive name="ScriptIds.Count" type="int" />
<repeating-group name="ScriptIds.Entry" occurs="ScriptIds.Count">
<primitive name="int" type="int" />
</repeating-group>
</collection>
<primitive name="SecretCount" type="int" notes="used for puzzles" />
</container>
</container>
</repeating-group>
</collection>
<primitive name="ScoreDirty" type="bool" />
<primitive name="HasDoneHeartReboot" type="bool" />
<primitive name="PlayTime" type="long" notes="play time, in ticks (for reference, there are 10000000 (ten million) ticks in a second)" />
<primitive name="IsNew" type="bool" notes="Should only be true if the save file exists, but the save data is clear" />
</container>
</SaveFile>