Skip to content

Commit 5ff93a6

Browse files
authored
Fixed and added things
1 parent 1e681ff commit 5ff93a6

File tree

1 file changed

+36
-20
lines changed

1 file changed

+36
-20
lines changed

SADXOpenStates/Program.cs

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)