summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kamek_pal.x1
-rw-r--r--src/tilesetfixer.cpp18
-rw-r--r--tilesetfixer.yaml6
3 files changed, 16 insertions, 9 deletions
diff --git a/kamek_pal.x b/kamek_pal.x
index 184eaef..a00b9e9 100644
--- a/kamek_pal.x
+++ b/kamek_pal.x
@@ -885,6 +885,7 @@ SECTIONS {
BGDatClass = 0x8042A0D0;
instance__10BGDatClass = 0x8042A0D0;
GetTilesetName__FPvii = 0x800813F0;
+ OriginalTilesetLoadingThing = 0x80083560;
getTilesetName__10BGDatClassFii = 0x800813F0;
diff --git a/src/tilesetfixer.cpp b/src/tilesetfixer.cpp
index 71bea9d..2fdb99e 100644
--- a/src/tilesetfixer.cpp
+++ b/src/tilesetfixer.cpp
@@ -3,14 +3,20 @@
const char *GetTilesetName(void *cls, int areaNum, int slotNum);
-void DoFixes(int slotNumber);
+void DoFixes(int areaNumber, int slotNumber);
void SwapObjData(u8 *data, int slotNumber);
+extern "C" void *OriginalTilesetLoadingThing(void *, void *, int, int);
+
// Main hook
-void TilesetFixerHack() {
- for (int i = 1; i < 4; i++) {
- DoFixes(i);
+void *TilesetFixerHack(void *cls, void *heap, int areaNum, int layerNum) {
+ if (layerNum == 0) {
+ for (int i = 1; i < 4; i++) {
+ DoFixes(areaNum, i);
+ }
}
+
+ return OriginalTilesetLoadingThing(cls, heap, areaNum, layerNum);
}
@@ -23,9 +29,9 @@ struct ObjLookupEntry {
};
-void DoFixes(int slotNumber) {
+void DoFixes(int areaNumber, int slotNumber) {
// This is where it all starts
- const char *tsName = GetTilesetName(BGDatClass, GetAreaNum(), slotNumber);
+ const char *tsName = GetTilesetName(BGDatClass, areaNumber, slotNumber);
if (tsName == 0 || tsName[0] == 0) {
return;
diff --git a/tilesetfixer.yaml b/tilesetfixer.yaml
index 409c443..e3850dd 100644
--- a/tilesetfixer.yaml
+++ b/tilesetfixer.yaml
@@ -3,7 +3,7 @@ source_files: [../src/tilesetfixer.cpp]
hooks:
- name: TilesetFixHack
type: branch_insn
- branch_type: b
- src_addr_pal: 0x80081694
- target_func: 'TilesetFixerHack(void)'
+ branch_type: bl
+ src_addr_pal: 0x80081718
+ target_func: 'TilesetFixerHack(void *, void *, int, int)'