@@ -23,19 +23,17 @@ class Program
2323 public static int baseAddress ;
2424
2525 public static bool gameHooked = false ;
26-
27- //public static int[] memAddresses = { 0x03742E10, 0x0370EF35, 0x0370F128, 0x0370EF48, 0x0370EF34, 0x0370F0E4 }; // Character 1 offset, Time:(Frames, Seconds, Minutes), Lives, Rings
28-
26+
2927 public static SaveState [ ] saveStates = new SaveState [ 10 ] ; // Create 10 save states
3028 public static int curSaveState = 0 ;
3129
3230 public static bool isDInput = false ;
3331
3432 static void Main ( string [ ] args )
3533 {
36- if ( File . Exists ( "file .txt" ) )
34+ if ( File . Exists ( "states .txt" ) )
3735 {
38- using ( StreamReader reader = File . OpenText ( "file .txt" ) )
36+ using ( StreamReader reader = File . OpenText ( "states .txt" ) )
3937 using ( JsonTextReader treader = new JsonTextReader ( reader ) )
4038 {
4139 JObject jsonObj = ( JObject ) JToken . ReadFrom ( treader ) ;
@@ -120,6 +118,8 @@ public static void Run()
120118 bool hasSaved = false , hasLoaded = false , hasSwitched = false ;
121119 bool DLeft , DRight , DUp , DDown , LB ;
122120
121+ byte gameState = 21 ;
122+
123123 int invertCycle = UserSettings . Default . invertCycle ? - 1 : 1 ;
124124
125125 while ( true )
@@ -167,16 +167,16 @@ public static void Run()
167167 {
168168 if ( DLeft && ! hasSaved )
169169 {
170- if ( ProcessMemory . ReadByte ( gameProc , baseAddress + 0x3722DE4 ) != 16 )
170+ gameState = ProcessMemory . ReadByte ( gameProc , baseAddress + 0x3722DE4 ) ;
171+ if ( gameState != 16 && gameState != 21 )
171172 {
172173 saveStates [ curSaveState ] = new SaveState ( ref gameProc , ref baseAddress ) ;
173174
174175 Console . WriteLine ( "Saved to {0}" , curSaveState ) ;
175176 SaveStateSerializer SaveObjectToSerialize = new SaveStateSerializer ( saveStates ) ;
176177 string json = JsonConvert . SerializeObject ( SaveObjectToSerialize , Formatting . Indented ) ;
177178
178- System . IO . File . WriteAllText ( "file.txt" , json ) ;
179-
179+ System . IO . File . WriteAllText ( "states.txt" , json ) ;
180180 }
181181 hasSaved = true ;
182182 }
@@ -247,10 +247,6 @@ public static void LoadState(SaveState state)
247247 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x24 ) , state . yPos ) ;
248248 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x28 ) , state . zPos ) ;
249249
250- //ProcessMemory.Write("base+0372CAB0", "float", state.xPos.ToString());
251- //ProcessMemory.Write("base+0372CAB4", "float", state.xPos.ToString());
252- //ProcessMemory.Write("base+0372CAB8", "float", state.xPos.ToString());
253-
254250 // Write Rotation into memory
255251 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x14 ) , state . xRot ) ;
256252 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x18 ) , state . yRot ) ;
@@ -270,21 +266,25 @@ public static void LoadState(SaveState state)
270266 ProcessMemory . Write ( gameProc , baseAddress + 0x0370F128 , state . tSeconds ) ;
271267 ProcessMemory . Write ( gameProc , baseAddress + 0x0370EF48 , state . tMins ) ;
272268
269+ // Write more player info
270+ ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x0 ) , state . action ) ;
271+ ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0373CDF0 , 0x124 ) , state . anim ) ;
272+ ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0373CDF0 , 0x130 ) , state . animFrame ) ;
273+ ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x4 ) , state . playerStates ) ;
274+ ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x5 ) , state . playerStates2 ) ;
273275
274276
275277 // Write camera info into memory
276278 if ( ProcessMemory . ReadByte ( gameProc , 0x372CBA8 ) != 7 )
277279 {
278-
279280 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x20 ) , state . camX ) ;
280281 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x24 ) , state . camY ) ;
281282 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x28 ) , state . camZ ) ;
282283
283284 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x14 ) , state . camXRot ) ;
284285 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x18 ) , state . camYRot ) ;
285286 ProcessMemory . Write ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x1C ) , state . camZRot ) ;
286-
287- //ProcessMemory.Write("base+372CAE1", "byte", "0");
287+
288288 }
289289 }
290290 }
@@ -407,18 +407,22 @@ public class SaveStateSerializer
407407 [ JsonConstructor ]
408408 public SaveStateSerializer ( SaveState [ ] saves )
409409 {
410- Version = "1 " ;
410+ Version = "2 " ;
411411 SaveStates = saves ;
412412 }
413413 }
414414
415415 public class SaveState
416416 {
417- public float xPos , yPos , zPos , xRot , yRot , zRot , hSpeed , vSpeed ;
418- public int lives , rings , hover , tFrames , tSeconds , tMins ;
417+ public float xPos , yPos , zPos , hSpeed , vSpeed , animFrame ;
418+
419+ public byte tFrames , tSeconds , tMins , lives , action , anim , playerStates , playerStates2 ;
420+ public short xRot , yRot , zRot , rings , hover ;
421+
419422
420423 public float camX , camY , camZ ;
421- public int camXRot , camYRot , camZRot ;
424+ public short camXRot , camYRot , camZRot ;
425+
422426 public const SaveState Empty = default ( SaveState ) ;
423427 public SaveState ( ref Process gameProc , ref int baseAddress )
424428 {
@@ -446,9 +450,15 @@ public SaveState(ref Process gameProc, ref int baseAddress)
446450 this . camXRot = ProcessMemory . ReadInt16 ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x14 ) ) ;
447451 this . camYRot = ProcessMemory . ReadInt16 ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x18 ) ) ;
448452 this . camZRot = ProcessMemory . ReadInt16 ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0372CBB0 , 0x1C ) ) ;
453+
454+ this . action = ProcessMemory . ReadByte ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x0 ) ) ;
455+ this . anim = ProcessMemory . ReadByte ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0373CDF0 , 0x124 ) ) ;
456+ this . animFrame = ProcessMemory . ReadByte ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x0373CDF0 , 0x130 ) ) ;
457+ this . playerStates = ProcessMemory . ReadByte ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x4 ) ) ;
458+ this . playerStates2 = ProcessMemory . ReadByte ( gameProc , ProcessMemory . GetFinalAddress ( gameProc , baseAddress + 0x03742E10 , 0x5 ) ) ;
449459 }
450460 [ JsonConstructor ]
451- public SaveState ( float xPos , float yPos , float zPos , float xRot , float yRot , float zRot , float hSpeed , float vSpeed , int hover , int lives , int rings , int tFrames , int tSeconds , int tMins , float camX , float camY , float camZ , int camXRot , int camYRot , int camZRot )
461+ public SaveState ( float xPos , float yPos , float zPos , short xRot , short yRot , short zRot , float hSpeed , float vSpeed , short hover , byte lives , short rings , byte tFrames , byte tSeconds , byte tMins , float camX , float camY , float camZ , short camXRot , short camYRot , short camZRot , byte action , byte anim , float animFrame , byte playerStates , byte playerStates2 )
452462 {
453463 this . xPos = xPos ;
454464 this . yPos = yPos ;
@@ -474,6 +484,12 @@ public SaveState(float xPos, float yPos, float zPos, float xRot, float yRot, flo
474484 this . camXRot = camXRot ;
475485 this . camYRot = camYRot ;
476486 this . camZRot = camZRot ;
487+
488+ this . action = action ;
489+ this . anim = anim ;
490+ this . animFrame = animFrame ;
491+ this . playerStates = playerStates ;
492+ this . playerStates2 = playerStates2 ;
477493 }
478494 }
479495}
0 commit comments