Assembly ‐ saving numbers to flags - pk-hack/CoilSnake GitHub Wiki

Saving to flags

You're writing a cool asm patch when you realize that you want to save a number to the current save file, so it sticks around even if the player resets. How do you do that?

There are a bunch of ways, but the easiest is just to overwrite some flags. This has the advantage of being compatible with any patches that rearrange SRAM, such as coop's extended flags patch.

The easiest way to explain this is through an example:

  • flags 57 through 64 for the current save file are stored in RAM at 0x7E9C0F
  • make sure your hack isn't using any of those flags
  • write your assembly hack to LDA/STA your number from 0x7E9C0F (make sure you're using 8-bit mode!)
  • that's it! The game's save/load code will handle the rest

If you want a number that goes higher than 255, or just can't be bothered to use 8-bit mode:

  • pick two bytes in a row of flags, like 57 through 72, stored at 0x7E9C0F-0x7E9C10
  • LDA/STA to 0x7E9C0F
  • That's it!

The giant table of flag to address

Okay, well how do I know which flags correspond to which address? Glad you asked, here's a giant table.

First flag Last flag Address
1 8 9C08
9 16 9C09
17 24 9C0A
25 32 9C0B
33 40 9C0C
41 48 9C0D
49 56 9C0E
57 64 9C0F
65 72 9C10
73 80 9C11
81 88 9C12
89 96 9C13
97 104 9C14
105 112 9C15
113 120 9C16
121 128 9C17
129 136 9C18
137 144 9C19
145 152 9C1A
153 160 9C1B
161 168 9C1C
169 176 9C1D
177 184 9C1E
185 192 9C1F
193 200 9C20
201 208 9C21
209 216 9C22
217 224 9C23
225 232 9C24
233 240 9C25
241 248 9C26
249 256 9C27
257 264 9C28
265 272 9C29
273 280 9C2A
281 288 9C2B
289 296 9C2C
297 304 9C2D
305 312 9C2E
313 320 9C2F
321 328 9C30
329 336 9C31
337 344 9C32
345 352 9C33
353 360 9C34
361 368 9C35
369 376 9C36
377 384 9C37
385 392 9C38
393 400 9C39
401 408 9C3A
409 416 9C3B
417 424 9C3C
425 432 9C3D
433 440 9C3E
441 448 9C3F
449 456 9C40
457 464 9C41
465 472 9C42
473 480 9C43
481 488 9C44
489 496 9C45
497 504 9C46
505 512 9C47
513 520 9C48
521 528 9C49
529 536 9C4A
537 544 9C4B
545 552 9C4C
553 560 9C4D
561 568 9C4E
569 576 9C4F
577 584 9C50
585 592 9C51
593 600 9C52
601 608 9C53
609 616 9C54
617 624 9C55
625 632 9C56
633 640 9C57
641 648 9C58
649 656 9C59
657 664 9C5A
665 672 9C5B
673 680 9C5C
681 688 9C5D
689 696 9C5E
697 704 9C5F
705 712 9C60
713 720 9C61
721 728 9C62
729 736 9C63
737 744 9C64
745 752 9C65
753 760 9C66
761 768 9C67
769 776 9C68
777 784 9C69
785 792 9C6A
793 800 9C6B
801 808 9C6C
809 816 9C6D
817 824 9C6E
825 832 9C6F
833 840 9C70
841 848 9C71
849 856 9C72
857 864 9C73
865 872 9C74
873 880 9C75
881 888 9C76
889 896 9C77
897 904 9C78
905 912 9C79
913 920 9C7A
921 928 9C7B
929 936 9C7C
937 944 9C7D
945 952 9C7E
953 960 9C7F
961 968 9C80
969 976 9C81
977 984 9C82
985 992 9C83
993 1000 9C84
1001 1008 9C85
1009 1016 9C86
1017 1024 9C87

Another giant table for people with the expanded flags patch

But you're using the ever-popular expand_flags.ccs by cooprocks123e. Can you do this with all those expanded flags?

Yes.

First flag Last flag Address
1025 1032 B600
1033 1040 B601
1041 1048 B602
1049 1056 B603
1057 1064 B604
1065 1072 B605
1073 1080 B606
1081 1088 B607
1089 1096 B608
1097 1104 B609
1105 1112 B60A
1113 1120 B60B
1121 1128 B60C
1129 1136 B60D
1137 1144 B60E
1145 1152 B60F
1153 1160 B610
1161 1168 B611
1169 1176 B612
1177 1184 B613
1185 1192 B614
1193 1200 B615
1201 1208 B616
1209 1216 B617
1217 1224 B618
1225 1232 B619
1233 1240 B61A
1241 1248 B61B
1249 1256 B61C
1257 1264 B61D
1265 1272 B61E
1273 1280 B61F
1281 1288 B620
1289 1296 B621
1297 1304 B622
1305 1312 B623
1313 1320 B624
1321 1328 B625
1329 1336 B626
1337 1344 B627
1345 1352 B628
1353 1360 B629
1361 1368 B62A
1369 1376 B62B
1377 1384 B62C
1385 1392 B62D
1393 1400 B62E
1401 1408 B62F
1409 1416 B630
1417 1424 B631
1425 1432 B632
1433 1440 B633
1441 1448 B634
1449 1456 B635
1457 1464 B636
1465 1472 B637
1473 1480 B638
1481 1488 B639
1489 1496 B63A
1497 1504 B63B
1505 1512 B63C
1513 1520 B63D
1521 1528 B63E
1529 1536 B63F
1537 1544 B640
1545 1552 B641
1553 1560 B642
1561 1568 B643
1569 1576 B644
1577 1584 B645
1585 1592 B646
1593 1600 B647
1601 1608 B648
1609 1616 B649
1617 1624 B64A
1625 1632 B64B
1633 1640 B64C
1641 1648 B64D
1649 1656 B64E
1657 1664 B64F
1665 1672 B650
1673 1680 B651
1681 1688 B652
1689 1696 B653
1697 1704 B654
1705 1712 B655
1713 1720 B656
1721 1728 B657
1729 1736 B658
1737 1744 B659
1745 1752 B65A
1753 1760 B65B
1761 1768 B65C
1769 1776 B65D
1777 1784 B65E
1785 1792 B65F
1793 1800 B660
1801 1808 B661
1809 1816 B662
1817 1824 B663
1825 1832 B664
1833 1840 B665
1841 1848 B666
1849 1856 B667
1857 1864 B668
1865 1872 B669
1873 1880 B66A
1881 1888 B66B
1889 1896 B66C
1897 1904 B66D
1905 1912 B66E
1913 1920 B66F
1921 1928 B670
1929 1936 B671
1937 1944 B672
1945 1952 B673
1953 1960 B674
1961 1968 B675
1969 1976 B676
1977 1984 B677
1985 1992 B678
1993 2000 B679
2001 2008 B67A
2009 2016 B67B
2017 2024 B67C
2025 2032 B67D
2033 2040 B67E
2041 2048 B67F
2049 2056 B680
2057 2064 B681
2065 2072 B682
2073 2080 B683
2081 2088 B684
2089 2096 B685
2097 2104 B686
2105 2112 B687
2113 2120 B688
2121 2128 B689
2129 2136 B68A
2137 2144 B68B
2145 2152 B68C
2153 2160 B68D
2161 2168 B68E
2169 2176 B68F
2177 2184 B690
2185 2192 B691
2193 2200 B692
2201 2208 B693
2209 2216 B694
2217 2224 B695
2225 2232 B696
2233 2240 B697
2241 2248 B698
2249 2256 B699
2257 2264 B69A
2265 2272 B69B
2273 2280 B69C