diff options
Diffstat (limited to 'src')
43 files changed, 820 insertions, 265 deletions
diff --git a/src/code_0805436C.c b/src/code_0805436C.c index d0df011a..eade294e 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -3,7 +3,7 @@ #include "room.h" #include "menu.h" #include "area.h" -#include "utils.h" +#include "common.h" #include "save.h" #include "item.h" diff --git a/src/code_08078778.c b/src/code_08078778.c index 32e422ff..643cd7bc 100644 --- a/src/code_08078778.c +++ b/src/code_08078778.c @@ -1,14 +1,7 @@ #include "global.h" #include "entity.h" #include "functions.h" - -typedef struct { - u8 unk[4]; - u32 unk2; - u32 unk4; -} Unk_struct; - -extern Unk_struct gUnk_03003DF0[]; +#include "kinstone.h" void sub_08078778(Entity* ent) { sub_0807887C(ent, 1, 0); diff --git a/src/collision.c b/src/collision.c index d39cb4a2..44f53719 100644 --- a/src/collision.c +++ b/src/collision.c @@ -3,7 +3,7 @@ #include "entity.h" #include "player.h" #include "save.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "enemy.h" #include "object.h" diff --git a/src/color.c b/src/color.c new file mode 100644 index 00000000..8a69184a --- /dev/null +++ b/src/color.c @@ -0,0 +1,84 @@ +#include "global.h" +#include "entity.h" +#include "common.h" +#include "color.h" + +void LoadObjPaletteAtIndex(u32 a1, u32 a2); + +static void sub_0801CFD0(u32 a1); + +void sub_0801CFA8(u32 a1) { + u32 i; + + MemClear(gPaletteList, 0x40); + for (i = 0; i < 6; ++i) { + sub_0801CFD0(i); + } + sub_0801D000(a1); +} + +void sub_0801CFD0(u32 a1) { + Palette* p = &gPaletteList[a1]; + p->_0 = ((s8)p->_0 & ~0xf) | 4; + p->_0 = (p->_0 & 0xf) | 0x10; + p->_1 = 0x80; + p->_2 = 0xFFFF; +} + +ASM_FUNC("asm/non_matching/color/sub_0801D000.inc", void sub_0801D000(u32 a1)); + +ASM_FUNC("asm/non_matching/color/LoadObjPalette.inc", void LoadObjPalette(Entity* entity, u32 a2)); + +ASM_FUNC("asm/non_matching/color/FindPalette.inc", s32 FindPalette(u32 a1)); + +ASM_FUNC("asm/non_matching/color/FindFreeObjPalette.inc", u32 FindFreeObjPalette(u32 a1)); + +ASM_FUNC("asm/non_matching/color/SetEntityObjPalette.inc", void SetEntityObjPalette(Entity* entity, u32 palette)); + +void UnloadOBJPalette(Entity* entity) { + u8* p = &entity->spriteAnimation[1]; + u32 idx = *p; + *p = 0; + sub_0801D244(idx); +} + +ASM_FUNC("asm/non_matching/color/sub_0801D244.inc", void sub_0801D244(u32 a1)); + +void sub_0801D28C(Entity* entity, u32 palette) { + u32 c = entity->spriteAnimation[1]; + Palette* list = gPaletteList; + Palette* p = &list[c]; + u32 lo = (u32)(p->_0 << 0x1C) >> 0x1C; + + if (lo == 3) { + p->_2 = palette; + LoadObjPaletteAtIndex(palette, c); + } +} + +void ChangeObjPalette(Entity* entity, u32 a2) { + UnloadOBJPalette(entity); + LoadObjPalette(entity, a2); +} + +ASM_FUNC("asm/non_matching/color/LoadObjPaletteAtIndex.inc", void LoadObjPaletteAtIndex(u32 a1, u32 a2)); + +ASM_FUNC("asm/non_matching/color/CleanUpObjPalettes.inc", void CleanUpObjPalettes(void)); + +u32 sub_0801D458(u32 a1) { + u32 i; + for (i = a1; i < 16; i++) { + s32 tmp = ((u32)gPaletteList[i]._0 << 28) >> 28; + switch (tmp) { + case 0: + case 1: + case 4: + continue; + default: + return i; + } + } + return 0; +} + +ASM_FUNC("asm/non_matching/color/sub_0801D48C.inc", void sub_0801D48C(u32 a1, u32 a2)); diff --git a/src/common.c b/src/common.c new file mode 100644 index 00000000..2a8fef53 --- /dev/null +++ b/src/common.c @@ -0,0 +1,681 @@ +#include "global.h" +#include "asm.h" +#include "common.h" +#include "structures.h" +#include "screen.h" +#include "main.h" +#include "area.h" +#include "room.h" +#include "fileScreen.h" +#include "game.h" +#include "flags.h" +#include "kinstone.h" +#include "functions.h" +#include "message.h" + +typedef struct { + u8 _0; + u8 _1; + u8 _2; + u8 _3; +} DungeonLayout; + +extern u8 gUnk_03003DE0; +extern u8 gzHeap[0x1000]; +extern u8 gUnk_0201AEE0[0x2000]; +extern u8 gUnk_080CA11C[]; + +extern void (*gUnk_080C9CAC[])(void); + +static void StoreKeyInput(Input* input, u32 keyInput); +void ClearOAM(void); +void ResetScreenRegs(void); +void sub_0801E0E0(u32); +void sub_0801E24C(u32, u32); +void sub_0801E290(u32, u32, u32); +s32 sub_0801E8B0(u32); + +extern u32 sub_0807CB24(u32, u32); + +typedef struct { + u16 paletteId; + u8 destPaletteNum; + u8 numPalettes; +} PaletteGroup; + +typedef struct { + union { + int raw; + struct { + u8 filler0[0x3]; + u8 unk3; + } bytes; + } unk0; + u32 dest; + u32 unk8; +} GfxItem; + +typedef struct { + u8 filler[0xA00]; +} struct_02017AA0; +extern struct_02017AA0 gUnk_02017AA0[]; +extern u8 gUnk_03003DE4; + +typedef struct { + u8 _0[4]; + u8 evt_type; + u8 _5[3]; +} struct_080C9CBC; +extern struct_080C9CBC gUnk_080C9CBC[]; + +typedef struct { + u8 evt_type; + u8 entity_idx; + u8 _2[6]; + u16 x; + u16 y; + u8 _c[4]; + u8 _10; + u8 _11; + u16 flag; +} struct_080FE320; +extern struct_080FE320 gUnk_080FE320[]; + +extern const PaletteGroup* gPaletteGroups[]; +extern const u8 gGlobalGfxAndPalettes[]; +extern u32 gUsedPalettes; +extern u16 gPaletteBuffer[]; +extern const GfxItem* gGfxGroups[]; + +u32 DecToHex(u32 value) { + u32 result; + register u32 r1 asm("r1"); + + if (value >= 100000000) { + return 0x99999999; + } + + result = Div(value, 10000000) * 0x10000000; + result += Div(r1, 1000000) * 0x1000000; + result += Div(r1, 100000) * 0x100000; + result += Div(r1, 10000) * 0x10000; + result += Div(r1, 1000) * 0x1000; + result += Div(r1, 100) * 0x100; + result += Div(r1, 10) * 0x10; + return result + r1; +} + +u32 ReadBit(void* src, u32 bit) { + return (*((u8*)src + bit / 8) >> (bit % 8)) & 1; +} + +NONMATCH("asm/non_matching/common/WriteBit.inc", u32 WriteBit(void* src, u32 bit)) { + u8* b; + u32 mask; + u32 orig; + + b = (u8*)(bit / 8 + (u32)src); + mask = 1 << (bit % 8); + orig = *b; + *b |= mask; + orig &= mask; + return orig; +} +END_NONMATCH + +NONMATCH("asm/non_matching/common/ClearBit.inc", u32 ClearBit(void* src, u32 bit)) { + u8* b; + u32 mask; + u32 orig; + + b = (u8*)(bit / 8 + (u32)src); + mask = 1 << (bit % 8); + orig = *b; + *b &= ~mask; + orig &= mask; + return orig; +} +END_NONMATCH + +void MemFill16(u32 value, void* dest, u32 size) { + DmaFill16(3, value, dest, size); +} + +void MemFill32(u32 value, void* dest, u32 size) { + DmaFill32(3, value, dest, size); +} + +void MemClear(void* dest, u32 size) { + u32 zero = 0; + + // alignment check + switch (((uintptr_t)dest | size) % 4) { + case 0: + MemFill32(0, dest, size); + break; + case 2: + MemFill16(0, dest, size); + break; + default: + do { + *(u8*)dest = zero; + dest++; + size--; + } while (size != 0); + } +} + +void MemCopy(const void* src, void* dest, u32 size) { + switch (((uintptr_t)src | (uintptr_t)dest | size) % 4) { + case 0: + DmaCopy32(3, src, dest, size); + break; + case 2: + DmaCopy16(3, src, dest, size); + break; + default: + do { + *(u8*)dest = *(u8*)src; + src++; + dest++; + } while (--size); + } +} + +void ReadKeyInput(void) { + u32 keyInput = ~REG_KEYINPUT & KEYS_MASK; + StoreKeyInput(&gInput, keyInput); +} + +static void StoreKeyInput(Input* input, u32 keyInput) { + u32 heldKeys = input->heldKeys; + u32 difference = keyInput & ~heldKeys; + input->newKeys = difference; + if (keyInput == heldKeys) { + if (--input->unk7 == 0) { + input->unk7 = 4; + input->unk4 = keyInput; + } else { + input->unk4 = 0; + } + } else { + input->unk7 = 20; + input->unk4 = difference; + } + input->heldKeys = keyInput; +} + +void LoadPaletteGroup(u32 group) { + const PaletteGroup* paletteGroup = gPaletteGroups[group]; + while (1) { + u32 destPaletteNum = paletteGroup->destPaletteNum; + u32 numPalettes = paletteGroup->numPalettes & 0xF; + if (numPalettes == 0) { + numPalettes = 16; + } + LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes); + if ((paletteGroup->numPalettes & 0x80) == 0) { + break; + } + paletteGroup++; + } +} + +void LoadPalettes(const u8* src, s32 destPaletteNum, s32 numPalettes) { + u16* dest; + u32 size = numPalettes * 32; + u32 usedPalettesMask = 1 << destPaletteNum; + while (--numPalettes > 0) { + usedPalettesMask |= (usedPalettesMask << 1); + } + gUsedPalettes |= usedPalettesMask; + dest = &gPaletteBuffer[destPaletteNum * 16]; + DmaCopy32(3, src, dest, size); +} + +void SetColor(u32 colorIndex, u32 color) { + gPaletteBuffer[colorIndex] = color; + gUsedPalettes |= 1 << (colorIndex / 16); +} + +void SetFillColor(u32 color, u32 disable_layers) { + if (disable_layers) { + gScreen.lcd.displayControlMask = ~(DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON); + } else { + gScreen.lcd.displayControlMask = ~0; + } + SetColor(0, color); +} + +void LoadGfxGroup(u32 group) { + u32 terminator; + u32 dmaCtrl; + int gfxOffset; + const u8* src; + u32 dest; + int size; + const GfxItem* gfxItem = gGfxGroups[group]; + while (1) { + u32 loadGfx = FALSE; + u32 ctrl = gfxItem->unk0.bytes.unk3; + ctrl &= 0xF; + switch (ctrl) { + case 0x7: + loadGfx = TRUE; + break; + case 0xD: + return; + case 0xE: + if (gSaveHeader->gameLanguage != 0 && gSaveHeader->gameLanguage != 1) { + loadGfx = TRUE; + } + break; + case 0xF: + if (gSaveHeader->gameLanguage != 0) { + loadGfx = TRUE; + } + break; + default: + if (ctrl == gSaveHeader->gameLanguage) { + loadGfx = TRUE; + } + break; + } + + if (loadGfx) { + gfxOffset = gfxItem->unk0.raw & 0xFFFFFF; + src = &gGlobalGfxAndPalettes[gfxOffset]; + dest = gfxItem->dest; + size = gfxItem->unk8; + dmaCtrl = 0x80000000; + if (size < 0) { + if (dest >= VRAM) { + LZ77UnCompVram(src, (void*)dest); + } else { + LZ77UnCompWram(src, (void*)dest); + } + } else { + DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1)); + } + } + + terminator = gfxItem->unk0.bytes.unk3; + terminator &= 0x80; + gfxItem++; + if (!terminator) { + break; + } + } +} + +// regalloc +NONMATCH("asm/non_matching/common/sub_0801D898.inc", void sub_0801D898(void* dest, void* src, u32 word, u32 size)) { + u32 v6; + u32 i; + + if (size & 0x8000) + v6 = 0x40; + else + v6 = 0x20; + + i = size & ~0x8000; + do { + DmaSet(3, src, dest, word | 0x80000000) src += word * 2; + dest += v6 * 2; + } while (--i); +} +END_NONMATCH + +ASM_FUNC("asm/non_matching/common/zMalloc.inc", void* zMalloc(u32 size)); + +ASM_FUNC("asm/non_matching/common/zFree.inc", void zFree(void* ptr)); + +void zMallocInit(void) { + MemClear(gzHeap, sizeof(gzHeap)); +} + +void DispReset(bool32 refresh) { + gMain.interruptFlag = 1; + gUnk_03003DE0 = 0; + gFadeControl.active = 0; + gScreen._6d = 0; + gScreen._6c = 0; + DmaStop(0); + REG_DISPCNT = 0; + ClearOAM(); + ResetScreenRegs(); + MemClear((void*)0x600C000, 0x20); + MemClear(gBG0Buffer, 0x800); + gScreen.bg0.updated = refresh; +} + +void ClearOAM(void) { + u8* d = (u8*)gUnk_03000000.oam; + u8* mem = (u8*)0x07000000; + u32 i; + for (i = 128; i != 0; --i) { + *(u16*)d = 0x2A0; + d += 8; + *(u16*)mem = 0x2A0; + mem += 8; + } +} + +void ResetScreenRegs(void) { + MemClear(&gScreen, sizeof(gScreen)); + gScreen.bg0.tilemap = &gBG0Buffer; + gScreen.bg0.control = 0x1F0C; + gScreen.bg1.tilemap = &gBG1Buffer; + gScreen.bg1.control = 0x1C01; + gScreen.bg2.tilemap = &gBG2Buffer; + gScreen.bg2.control = 0x1D02; + gScreen.bg3.tilemap = &gBG3Buffer; + gScreen.bg3.control = 0x1E03; + gScreen.lcd.displayControl = 0x140; + gScreen.lcd.displayControlMask = 0xffff; +} + +u32 sub_0801DB94(void) { + return gScreenTransition.player_status.dungeon_map_y >> 11; +} + +ASM_FUNC("asm/non_matching/common/DrawDungeonMap.inc", void DrawDungeonMap(u32 floor, struct_02019EE0* data, u32 size)); + +void sub_0801DD58(u32 area, u32 room) { + RoomHeader* hdr = gAreaRoomHeaders[area] + room; + gArea.pCurrentRoomInfo->map_x = hdr->map_x; + gArea.pCurrentRoomInfo->map_y = hdr->map_y; +} + +void LoadDungeonMap(void) { + LoadResourceAsync(gUnk_0201AEE0, 0x6006000, sizeof(gUnk_0201AEE0)); +} + +ASM_FUNC("asm/non_matching/common/DrawDungeonFeatures.inc", void DrawDungeonFeatures(u32 room, void* data, u32 size)); + +u32 sub_0801DF10(DungeonLayout* lyt) { + u32 offset; + + if (lyt->_3 == 1) + offset = 0x300; + else + offset = GetFlagBankOffset(lyt->_0); + return offset; +} + +ASM_FUNC("asm/non_matching/common/sub_0801DF28.inc", void sub_0801DF28(u32 a1, u32 a2, u32 a3)); + +u32 sub_0801DF60(u32 a1, u8* p) { + return (p[a1 >> 2] >> (2 * (~a1 & 3))) & 3; +} + +u32 sub_0801DF78(u32 a1, u32 a2) { + switch (a1) { + case 0: + case 1: + default: + return a1; + case 2: + return a2; + case 3: + return 7; + } +} + +u32 sub_0801DF90(u8* a1, u32 a2) { + if (a1 == NULL) + return 0; + + for (; *a1 != 0; a1 += 8) { + if (*a1 == 1) + return CheckLocalFlagByBank(a2, a1[1]); + } + return 0; +} + +void sub_0801DFB4(Entity* entity, u32 a2, u32 a3, u32 a4) { + MemClear(&gFuseInfo, sizeof(gFuseInfo)); + gFuseInfo._6 = a2; + gFuseInfo._8 = a3; + gFuseInfo._a = a4; + gFuseInfo.ent = entity; + gFuseInfo._3 = gUnk_03003DF0[0].unk[2]; + if (entity != NULL) { + gFuseInfo._4 = entity->updatePriority; + entity->updatePriority = 2; + } + gFuseInfo._0 = 0; +} + +u32 sub_0801E00C(void) { + gUnk_080C9CAC[gFuseInfo.action](); + return gFuseInfo._0; +} + +void sub_0801E02C(void) { + sub_0801E0E0(gFuseInfo._6); + gFuseInfo._0 = 3; + gFuseInfo.action = 1; +} + +void sub_0801E044(void) { + if ((gMessage.doTextBox & 0x7F) == 0) { + MenuFadeIn(4, 0); + gFuseInfo._0 = 4; + gFuseInfo.action = 2; + SoundReq(0x6b); + } +} + +void sub_0801E074(void) { + u32 tmp; + switch (gFuseInfo._0) { + case 5: + tmp = gFuseInfo._8; + break; + case 6: + tmp = gFuseInfo._a; + break; + default: + return; + } + sub_0801E0E0(tmp); + gFuseInfo.action = 3; +} + +void sub_0801E0A0(void) { + if ((gMessage.doTextBox & 0x7f) == 0) { + if (gFuseInfo.ent != NULL) { + gFuseInfo.ent->updatePriority = gFuseInfo._4; + } + gFuseInfo._0 = gFuseInfo._0 == 6 ? 2 : 1; + } +} + +void sub_0801E0E0(u32 idx) { + if (idx != 0) { + if (gFuseInfo.ent != NULL) { + MessageNoOverlap(idx, gFuseInfo.ent); + } else { + MessageFromTarget(idx); + } + } +} + +void sub_0801E104(void) { + gScreen.lcd.displayControl &= ~0x6000; + gScreen._6c = 0; +} + +void sub_0801E120(void) { + gScreen.lcd.displayControl |= 0x2000; + gScreen.controls.windowInsideControl = 0x3F37; + gScreen.controls.windowOutsideControl = 0x3F; + gScreen.controls.window0HorizontalDimensions = 0; + gScreen.controls.window0VerticalDimensions = 160; +} + +void sub_0801E154(u32 a1) { + sub_0801E24C(a1, 0); +} + +void sub_0801E160(u32 a1, u32 a2, u32 a3) { + MemClear(&gUnk_02017AA0[gUnk_03003DE4], sizeof(gUnk_02017AA0[gUnk_03003DE4])); + sub_0801E290(a1, a2, a3); + sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4], 0x4000040, 0xA2600001); +} + +void sub_0801E1B8(u32 a1, u32 a2) { + gScreen.lcd.displayControl |= 0x2000; + gScreen.controls.windowInsideControl = a1; + gScreen.controls.windowOutsideControl = a2; + gScreen.controls.window0HorizontalDimensions = 0; + gScreen.controls.window0VerticalDimensions = 160; +} + +void sub_0801E1EC(u32 a1, u32 a2, u32 a3) { + MemClear(&gUnk_02017AA0[gUnk_03003DE4], sizeof(gUnk_02017AA0[gUnk_03003DE4])); + sub_0801E24C(a3, 0); + sub_0801E290(a1, a2, a3); + sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4], 0x4000040, 0xA2600001); +} + +ASM_FUNC("asm/non_matching/common/sub_0801E24C.inc", void sub_0801E24C(u32 a1, u32 a2)); + +ASM_FUNC("asm/non_matching/common/sub_0801E290.inc", void sub_0801E290(u32 a1, u32 a2, u32 a3)); + +ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u32 a2, u32 a3, u32 a4)); + +ASM_FUNC("asm/non_matching/common/sub_0801E49C.inc", void sub_0801E49C(u32 a1, u32 a2, u32 a3, u32 a4)); + +ASM_FUNC("asm/non_matching/common/sub_0801E64C.inc", void sub_0801E64C(u32 a1, u32 a2, u32 a3, u32 a4, u32 a5)); + +ASM_FUNC("asm/non_matching/common/sub_0801E6C8.inc", void sub_0801E6C8(u32 a1)); + +ASM_FUNC("asm/non_matching/common/sub_0801E738.inc", void sub_0801E738(u32 a1)); + +void sub_0801E798(u32 a1) { + s32 idx = sub_0801E8B0(a1); + if (idx >= 0) { + s32 next = gSave.unk12B[idx] - 1; + if (next <= 0) { + gSave.unk118[idx] = 0; + next = 0; + } + gSave.unk12B[idx] = next; + } +} + +u32 sub_0801E7D0(u32 a1) { + s32 tmp = sub_0801E8B0(a1); + if (tmp < 0) { + return 0; + } + return gSave.unk12B[tmp]; +} + +u32 CheckKinstoneFused(u32 idx) { + if (idx > 100 || idx < 1) { + return 0; + } + return ReadBit(&gSave.unk241, idx); +} + +u32 sub_0801E810(u32 idx) { + if (idx > 100 || idx < 1) { + return 0; + } + return ReadBit(&gSave.unk24E, idx); +} + +ASM_FUNC("asm/non_matching/common/sub_0801E82C.inc", void sub_0801E82C(void)); + +s32 sub_0801E8B0(u32 idx) { + u32 i; + + for (i = 0; i < 18; ++i) { + if (idx == gSave.unk118[i]) + return i; + } + return -1; +} + +void sub_0801E8D4(void) { + u32 i; + for (i = 10; i <= 100; ++i) { + if (CheckKinstoneFused(i) && !sub_0801E810(i)) { + u32 evt_type = gUnk_080C9CBC[i].evt_type; + struct_080FE320* s = &gUnk_080FE320[evt_type]; +#if !defined EU && !defined JP + u32 flag = s->flag; +#endif + u32 tmp; + switch (s->_10) { + case 0: + tmp = 0; + break; + case 1: + tmp = s->_11; + break; + case 2: + tmp = 0xf; + break; + case 3: + tmp = 0x10; + break; + case 4: + tmp = 0x11; + break; +#if !defined EU && !defined JP + case 5: + tmp = 4; + flag = 0x83; + break; + case 6: + tmp = 4; + flag = 0x84; + break; + case 7: + tmp = 4; + flag = 0x87; + break; + case 8: + tmp = 4; + flag = 0x88; + break; + case 9: + tmp = 4; + flag = 0x8b; + break; +#ifndef DEMO_JP + case 10: + tmp = 5; + flag = 0x88; + break; +#endif +#endif + } +#if !defined EU && !defined JP + if (sub_0807CB24(tmp, flag)) { +#else + if (sub_0807CB24(tmp, s->flag)) { +#endif + WriteBit(&gSave.unk24E, i); + } + } + } +} + +ASM_FUNC("asm/non_matching/common/sub_0801E99C.inc", u32 sub_0801E99C(u32 a1)); + +u32 sub_0801EA74(void) { + s32 r = (s32)Random() % 18; + u32 i; + for (i = 0; i < 18; ++i) { + u32 n = gUnk_080CA11C[r]; + if (!CheckKinstoneFused(n)) + return n; + r = (r + 1) % 18; + } + return 0xF2; +} diff --git a/src/coord.c b/src/coord.c index cf8548fc..3ee708e6 100644 --- a/src/coord.c +++ b/src/coord.c @@ -2,7 +2,7 @@ #include "area.h" #include "player.h" #include "coord.h" -#include "utils.h" +#include "common.h" #include "sound.h" #include "room.h" #include "functions.h" diff --git a/src/debugScreen.c b/src/debugScreen.c index b3300574..9eded432 100644 --- a/src/debugScreen.c +++ b/src/debugScreen.c @@ -1,6 +1,6 @@ #include "global.h" #include "sound.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "main.h" #include "menu.h" diff --git a/src/demoScreen.c b/src/demoScreen.c index daec74d7..2f6ad402 100644 --- a/src/demoScreen.c +++ b/src/demoScreen.c @@ -1,7 +1,7 @@ #include "global.h" #include "functions.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "message.h" #include "fileScreen.h" #include "screen.h" diff --git a/src/dungeon.c b/src/dungeon.c new file mode 100644 index 00000000..dc4f98a6 --- /dev/null +++ b/src/dungeon.c @@ -0,0 +1 @@ +#include "global.h" diff --git a/src/enemy/code_080300AC.c b/src/enemy/code_080300AC.c index d1af8248..e3f5c2ef 100644 --- a/src/enemy/code_080300AC.c +++ b/src/enemy/code_080300AC.c @@ -1,5 +1,5 @@ #include "global.h" -#include "utils.h" +#include "common.h" #include "functions.h" void sub_080300AC(void) { diff --git a/src/enterPortalSubtask.c b/src/enterPortalSubtask.c index c9f70c55..0387751a 100644 --- a/src/enterPortalSubtask.c +++ b/src/enterPortalSubtask.c @@ -2,7 +2,7 @@ #include "entity.h" #include "area.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "screen.h" #include "object.h" #include "functions.h" diff --git a/src/entity.c b/src/entity.c index 79040e23..bdbe2e55 100644 --- a/src/entity.c +++ b/src/entity.c @@ -1,5 +1,5 @@ #include "global.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "area.h" #include "message.h" @@ -15,7 +15,6 @@ void sub_0805EE88(void); void ClearAllDeletedEntities(void); void DeleteAllEntities(void); void sub_0805E98C(void); -extern void UnloadOBJPalette(); extern void sub_0806FE84(); extern void sub_08078954(); extern void sub_08017744(Entity*); @@ -2,7 +2,7 @@ #include "structures.h" #include "functions.h" #include "screen.h" -#include "utils.h" +#include "common.h" static u32 sub_080501C0(FadeControl* ctl); static u32 sub_08050230(FadeControl* ctl); diff --git a/src/fileScreen.c b/src/fileScreen.c index ae44ecb0..691c5999 100644 --- a/src/fileScreen.c +++ b/src/fileScreen.c @@ -1,6 +1,6 @@ #include "fileScreen.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "screen.h" #include "menu.h" #include "message.h" diff --git a/src/flags.c b/src/flags.c index 1c153b5a..57f49892 100644 --- a/src/flags.c +++ b/src/flags.c @@ -13,13 +13,13 @@ u32 CheckLocalFlag(u32 flag) { } u32 CheckFlags(u32 flags) { - s32 type; - s32 index; - s32 length; + u32 type; + u32 index; + u32 length; index = flags & 0x3ff; length = (((flags & (0xf0) << 0x6) >> 0xa) + 1); type = (flags & 0xc000) >> 0xe; - switch ((u32)type) { + switch (type) { case 2: return CheckRoomFlags(index, length); case 0: @@ -40,7 +40,6 @@ u32 CheckRoomFlag(u32 flag) { } u32 CheckLocalFlagsByBank(u32 offset, u32 flag, u32 length) { - return CheckBits(&gGlobalFlags, offset + flag, length); } @@ -67,13 +66,13 @@ void SetLocalFlag(u32 flag) { } void SetFlag(u32 flag) { - s32 uVar1; - s32 index; + u32 type; + u32 index; if (flag != 0) { index = flag & 0x3ff; - uVar1 = (flag & 0xc000) >> 0xe; - switch ((u32)uVar1) { + type = (flag & 0xc000) >> 0xe; + switch (type) { case 2: SetRoomFlag(index); return; @@ -104,12 +103,12 @@ void ClearLocalFlag(u32 flag) { } void ClearFlag(u32 flag) { - s32 uVar1; - s32 index; + u32 type; + u32 index; index = flag & 0x3ff; - uVar1 = (flag & 0xc000) >> 0xe; - switch ((u32)uVar1) { + type = (flag & 0xc000) >> 0xe; + switch (type) { case 2: ClearRoomFlag(index); return; @@ -7,7 +7,7 @@ #include "main.h" #include "flags.h" #include "save.h" -#include "utils.h" +#include "common.h" #include "fileScreen.h" #include "menu.h" #include "functions.h" @@ -2,7 +2,7 @@ #include "functions.h" #include "main.h" #include "screen.h" -#include "utils.h" +#include "common.h" #include "save.h" #include "message.h" #include "interrupts.h" @@ -244,7 +244,7 @@ void sub_08056208() { gScreen._6d = 0; } -void sub_0805622C(u32 a1, u32 a2, u32 a3) { +void sub_0805622C(void* a1, u32 a2, u32 a3) { gScreen._70 = a1; gScreen._74 = a2; gScreen._78 = a3; diff --git a/src/manager/manager10.c b/src/manager/manager10.c index adfbf44c..607463a5 100644 --- a/src/manager/manager10.c +++ b/src/manager/manager10.c @@ -5,7 +5,7 @@ #include "area.h" #include "sound.h" #include "screen.h" -#include "utils.h" +#include "common.h" #include "fileScreen.h" #include "functions.h" diff --git a/src/manager/manager14.c b/src/manager/manager14.c index 05c6a46e..a3771fe9 100644 --- a/src/manager/manager14.c +++ b/src/manager/manager14.c @@ -19,7 +19,6 @@ const u16 gUnk_08108588[] = { 0x1000, 0xF01, 0xE02, 0xD03, 0xC04, 0xB05, 0xA06, const u16 gUnk_0810859A[] = { 0x808, 0x907, 0xA06, 0x907 }; -extern void sub_0805622C(u16*, u32, u32); extern u16 gUnk_02017AA0[]; void sub_08059E80(Manager14*); diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index a0eb2a8b..2ad78228 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -3,7 +3,7 @@ #include "flags.h" #include "room.h" #include "screen.h" -#include "utils.h" +#include "common.h" #include "object.h" #include "functions.h" diff --git a/src/manager/manager2C.c b/src/manager/manager2C.c index 125dcc5b..c8b3f63d 100644 --- a/src/manager/manager2C.c +++ b/src/manager/manager2C.c @@ -1,7 +1,7 @@ #include "manager.h" #include "asm.h" #include "functions.h" -#include "utils.h" +#include "common.h" typedef struct { struct Manager manager; diff --git a/src/manager/manager32.c b/src/manager/manager32.c index 1e6580d8..77e3d955 100644 --- a/src/manager/manager32.c +++ b/src/manager/manager32.c @@ -3,7 +3,7 @@ #include "room.h" #include "functions.h" #include "area.h" -#include "utils.h" +#include "common.h" #include "game.h" typedef struct { diff --git a/src/manager/manager39.c b/src/manager/manager39.c index bf69d08a..b43de6e8 100644 --- a/src/manager/manager39.c +++ b/src/manager/manager39.c @@ -3,7 +3,7 @@ #include "screen.h" #include "area.h" #include "message.h" -#include "utils.h" +#include "common.h" #include "game.h" #include "functions.h" diff --git a/src/manager/managerB.c b/src/manager/managerB.c index 2219470c..6d0fc1fe 100644 --- a/src/manager/managerB.c +++ b/src/manager/managerB.c @@ -3,7 +3,7 @@ #include "flags.h" #include "room.h" #include "area.h" -#include "utils.h" +#include "common.h" #include "sound.h" /* diff --git a/src/manager/managerC.c b/src/manager/managerC.c index fc77cfc6..e8790891 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -9,7 +9,7 @@ #include "functions.h" #include "save.h" #include "area.h" -#include "utils.h" +#include "common.h" typedef struct { Manager manager; diff --git a/src/manager/managerF.c b/src/manager/managerF.c index 15fa53fa..3fb57bc2 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -7,7 +7,7 @@ #include "functions.h" #include "area.h" #include "message.h" -#include "utils.h" +#include "common.h" #include "tiles.h" #include "object.h" #include "item.h" diff --git a/src/message.c b/src/message.c index 586bee15..1383e0e6 100644 --- a/src/message.c +++ b/src/message.c @@ -2,7 +2,7 @@ #include "sound.h" #include "asm.h" #include "room.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "message.h" #include "save.h" @@ -35,7 +35,7 @@ extern void sub_0805EF40(Token* tok, const u8*); extern void RecoverUI(u32 bottomPt, u32 topPt); extern void RefreshUI(void); extern void sub_0805F918(u32, u32, u32); -extern u32 sub_0801D51C(u32, u8*, u32); +extern u32 DecToHex(u32, u8*, u32); u32 sub_08056FEC(u32, u8*); u32 GetCharacter(Token* tok); @@ -831,7 +831,7 @@ NONMATCH("asm/non_matching/textbox/sub_08056FEC.inc", u32 sub_08056FEC(u32 this, int iVar4; u8 local_1c[8]; - uVar1 = sub_0801D51C(this, param_2, this); + uVar1 = DecToHex(this, param_2, this); uVar1 = uVar1 & 0xfffffff; iVar4 = 0; do { diff --git a/src/npc/zeldaFollower.c b/src/npc/zeldaFollower.c index fc0890fb..5cbaa03f 100644 --- a/src/npc/zeldaFollower.c +++ b/src/npc/zeldaFollower.c @@ -1,7 +1,7 @@ #include "global.h" #include "entity.h" #include "functions.h" -#include "utils.h" +#include "common.h" extern void sub_08068318(Entity*); extern void sub_0806854C(Entity*, u32*); diff --git a/src/npcUtils.c b/src/npcUtils.c index e4739226..d44f3336 100644 --- a/src/npcUtils.c +++ b/src/npcUtils.c @@ -5,6 +5,7 @@ #include "definitions.h" #include "save.h" #include "npc.h" +#include "kinstone.h" extern const NPCDefinition gNPCDefinitions[]; @@ -287,7 +288,7 @@ u32 UpdateFuseInteraction(Entity* ent) { u32 ret; sub_0801E00C(); ret = -1; - switch (gUnk_02022740[0]) { + switch (gFuseInfo._0) { default: ret = 0; break; diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c index 6f23a9d8..5a38d7a1 100644 --- a/src/object/lockedDoor.c +++ b/src/object/lockedDoor.c @@ -6,6 +6,7 @@ #include "functions.h" #include "effects.h" #include "game.h" +#include "common.h" void sub_08083338(Entity*); void sub_080834B4(Entity*); diff --git a/src/player.c b/src/player.c index 65af62d8..dad3ec08 100644 --- a/src/player.c +++ b/src/player.c @@ -4,7 +4,7 @@ #include "entity.h" #include "player.h" #include "message.h" -#include "utils.h" +#include "common.h" #include "area.h" #include "item.h" #include "save.h" diff --git a/src/playerItem/playerItemPacciCane.c b/src/playerItem/playerItemPacciCane.c index 23d16cd3..471f180e 100644 --- a/src/playerItem/playerItemPacciCane.c +++ b/src/playerItem/playerItemPacciCane.c @@ -1,7 +1,7 @@ #include "entity.h" #include "sound.h" #include "functions.h" -#include "utils.h" +#include "common.h" #include "message.h" #include "save.h" diff --git a/src/playerItem/playerItemSwordBeam.c b/src/playerItem/playerItemSwordBeam.c index 0d72189d..671c13b5 100644 --- a/src/playerItem/playerItemSwordBeam.c +++ b/src/playerItem/playerItemSwordBeam.c @@ -4,6 +4,7 @@ #include "functions.h" #include "sound.h" #include "effects.h" +#include "common.h" extern void (*const gUnk_080B43F4[])(Entity*); diff --git a/src/playerItemUtils.c b/src/playerItemUtils.c index be571896..1dd23ad1 100644 --- a/src/playerItemUtils.c +++ b/src/playerItemUtils.c @@ -1,7 +1,7 @@ #include "entity.h" #include "functions.h" #include "save.h" -#include "utils.h" +#include "common.h" #include "sound.h" #include "flags.h" #include "message.h" diff --git a/src/projectile/winder.c b/src/projectile/winder.c index 0075763c..7a0471e6 100644 --- a/src/projectile/winder.c +++ b/src/projectile/winder.c @@ -1,7 +1,7 @@ #include "entity.h" #include "asm.h" #include "functions.h" -#include "utils.h" +#include "common.h" extern void (*const Winder_Actions[])(Entity*); extern const u8 gUnk_0812A6BC[]; @@ -3,7 +3,7 @@ #include "room.h" #include "flags.h" #include "functions.h" -#include "utils.h" +#include "common.h" #include "object.h" #include "game.h" diff --git a/src/roomInit.c b/src/roomInit.c index 384c7b79..3872b39e 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -1,7 +1,7 @@ #include "global.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "functions.h" diff --git a/src/script.c b/src/script.c index b2648251..96b6abf9 100644 --- a/src/script.c +++ b/src/script.c @@ -6,6 +6,7 @@ #include "object.h" #include "npc.h" +#include "kinstone.h" #include "functions.h" @@ -1154,7 +1155,7 @@ void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context) { u32 tmp; sub_0801E00C(); tmp = 1; - switch (gUnk_02022740[0]) { + switch (gFuseInfo._0) { case 2: gPlayerState.controlMode = CONTROL_DISABLED; gUnk_02034490[0] = tmp; diff --git a/src/sound.c b/src/sound.c index 32dc20c4..aa12853b 100644 --- a/src/sound.c +++ b/src/sound.c @@ -2,7 +2,7 @@ #include "main.h" #include "gba/m4a.h" #include "sound.h" -#include "utils.h" +#include "common.h" #define IS_BGM(song) ((song)-1 <= NUM_BGM - 1) #define IS_SFX(song) ((song)-1 > NUM_BGM - 1) diff --git a/src/sub_0807CA18.c b/src/sub_0807CA18.c index 6a342989..01768a24 100644 --- a/src/sub_0807CA18.c +++ b/src/sub_0807CA18.c @@ -1,6 +1,6 @@ #include "global.h" #include "save.h" -#include "utils.h" +#include "common.h" extern void sub_0807C960(); @@ -1,5 +1,5 @@ #include "global.h" -#include "utils.h" +#include "common.h" #include "structures.h" #include "functions.h" #include "asm.h" diff --git a/src/title.c b/src/title.c index b31c67e8..7f65c343 100644 --- a/src/title.c +++ b/src/title.c @@ -1,7 +1,7 @@ #include "sound.h" #include "main.h" #include "entity.h" -#include "utils.h" +#include "common.h" #include "screen.h" #include "object.h" #include "message.h" diff --git a/src/utils.c b/src/utils.c deleted file mode 100644 index f8ae7c2d..00000000 --- a/src/utils.c +++ /dev/null @@ -1,205 +0,0 @@ -#include "global.h" -#include "utils.h" -#include "structures.h" -#include "screen.h" - -static void StoreKeyInput(Input* input, u32 keyInput); - -typedef struct { - u16 paletteId; - u8 destPaletteNum; - u8 numPalettes; -} PaletteGroup; - -typedef struct { - union { - int raw; - struct { - u8 filler0[0x3]; - u8 unk3; - } bytes; - } unk0; - u32 dest; - u32 unk8; -} GfxItem; - -extern const PaletteGroup* gPaletteGroups[]; -extern const u8 gGlobalGfxAndPalettes[]; -extern u32 gUsedPalettes; -extern u16 gPaletteBuffer[]; -extern const GfxItem* gGfxGroups[]; - -void MemFill16(u32 value, void* dest, u32 size) { - DmaFill16(3, value, dest, size); -} - -void MemFill32(u32 value, void* dest, u32 size) { - DmaFill32(3, value, dest, size); -} - -void MemClear(void* dest, u32 size) { - u32 zero = 0; - - // alignment check - switch (((intptr_t)dest | size) % 4) { - case 0: - MemFill32(0, dest, size); - break; - case 2: - MemFill16(0, dest, size); - break; - default: - do { - *(u8*)dest = zero; - dest++; - size--; - } while (size != 0); - } -} - -void MemCopy(const void* src, void* dest, u32 size) { - switch (((intptr_t)src | (intptr_t)dest | size) % 4) { - case 0: - DmaCopy32(3, src, dest, size); - break; - case 2: - DmaCopy16(3, src, dest, size); - break; - default: - do { - *(u8*)dest = *(u8*)src; - src++; - dest++; - } while (--size); - } -} - -void ReadKeyInput(void) { - u32 keyInput = ~REG_KEYINPUT & KEYS_MASK; - StoreKeyInput(&gInput, keyInput); -} - -static void StoreKeyInput(Input* input, u32 keyInput) { - u32 heldKeys = input->heldKeys; - u32 difference = keyInput & ~heldKeys; - input->newKeys = difference; - if (keyInput == heldKeys) { - if (--input->unk7 == 0) { - input->unk7 = 4; - input->unk4 = keyInput; - } else { - input->unk4 = 0; - } - } else { - input->unk7 = 20; - input->unk4 = difference; - } - input->heldKeys = keyInput; -} - -void LoadPaletteGroup(u32 group) { - const PaletteGroup* paletteGroup = gPaletteGroups[group]; - while (1) { - u32 destPaletteNum = paletteGroup->destPaletteNum; - u32 numPalettes = paletteGroup->numPalettes & 0xF; - if (numPalettes == 0) { - numPalettes = 16; - } - LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes); - if ((paletteGroup->numPalettes & 0x80) == 0) { - break; - } - paletteGroup++; - } -} - -void LoadPalettes(const u8* src, s32 destPaletteNum, s32 numPalettes) { - u16* dest; - u32 size = numPalettes * 32; - u32 usedPalettesMask = 1 << destPaletteNum; - while (--numPalettes > 0) { - usedPalettesMask |= (usedPalettesMask << 1); - } - gUsedPalettes |= usedPalettesMask; - dest = &gPaletteBuffer[destPaletteNum * 16]; - DmaCopy32(3, src, dest, size); -} - -void SetColor(u32 colorIndex, u32 color) { - gPaletteBuffer[colorIndex] = color; - gUsedPalettes |= 1 << (colorIndex / 16); -} - -void SetFillColor(u32 color, u32 disable_layers) { - if (disable_layers) { - gScreen.lcd.displayControlMask = ~(DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON); - } else { - gScreen.lcd.displayControlMask = ~0; - } - SetColor(0, color); -} - -void LoadGfxGroup(u32 group) { - u32 terminator; - u32 dmaCtrl; - int gfxOffset; - const u8* src; - u32 dest; - int size; - const GfxItem* gfxItem = gGfxGroups[group]; - while (1) { - u32 loadGfx = FALSE; - u32 ctrl = gfxItem->unk0.bytes.unk3; - ctrl &= 0xF; - switch (ctrl) { - case 0x7: - loadGfx = TRUE; - break; - case 0xD: - return; - case 0xE: - if (gSaveHeader->gameLanguage != 0 && gSaveHeader->gameLanguage != 1) { - loadGfx = TRUE; - } - break; - case 0xF: - if (gSaveHeader->gameLanguage != 0) { - loadGfx = TRUE; - } - break; - default: - if (ctrl == gSaveHeader->gameLanguage) { - loadGfx = TRUE; - } - break; - } - - if (loadGfx) { - gfxOffset = gfxItem->unk0.raw & 0xFFFFFF; - src = &gGlobalGfxAndPalettes[gfxOffset]; - dest = gfxItem->dest; - size = gfxItem->unk8; - dmaCtrl = 0x80000000; - if (size < 0) { - if (dest >= VRAM) { - LZ77UnCompVram(src, (void*)dest); - } else { - LZ77UnCompWram(src, (void*)dest); - } - } else { - DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1)); - } - } - - terminator = gfxItem->unk0.bytes.unk3; - terminator &= 0x80; - gfxItem++; - if (!terminator) { - break; - } - } -} - -/* TODO: - clear OAM, zMalloc, etc. -*/ |
