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 |