mirror of
https://github.com/zeldaret/tmc
synced 2026-07-10 07:06:52 -04:00
Decompile more intro code and palette loading code
This commit is contained in:
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#include "global.h"
|
||||
|
||||
extern void LoadPalettes(const u8*, int, int);
|
||||
|
||||
extern u32 gUsedPalettes;
|
||||
extern u16 gPaletteBuffer[][16];
|
||||
|
||||
typedef struct {
|
||||
u16 paletteId;
|
||||
u8 destPaletteNum;
|
||||
u8 numPalettes;
|
||||
} PaletteGroup;
|
||||
|
||||
extern const PaletteGroup* gPaletteGroups[];
|
||||
extern const u8 gGlobalPalettes[][32];
|
||||
|
||||
void LoadPaletteGroup(u32 arg0) {
|
||||
const PaletteGroup* paletteGroup = gPaletteGroups[arg0];
|
||||
while (1) {
|
||||
u32 destPaletteNum = paletteGroup->destPaletteNum;
|
||||
u32 numPalettes = paletteGroup->numPalettes & 0xF;
|
||||
if (numPalettes == 0) {
|
||||
numPalettes = 16;
|
||||
}
|
||||
LoadPalettes(gGlobalPalettes[paletteGroup->paletteId], destPaletteNum, numPalettes);
|
||||
if ((paletteGroup->numPalettes & 0x80) == 0) {
|
||||
break;
|
||||
}
|
||||
paletteGroup++;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadPalettes(const u8* src, int destPaletteNum, int numPalettes) {
|
||||
u16* dest;
|
||||
u32 size = numPalettes * 32;
|
||||
u32 usedPalettesMask = 1 << destPaletteNum;
|
||||
while (--numPalettes > 0) {
|
||||
usedPalettesMask |= (usedPalettesMask << 1);
|
||||
}
|
||||
gUsedPalettes |= usedPalettesMask;
|
||||
dest = gPaletteBuffer[destPaletteNum];
|
||||
DmaCopy32(3, src, dest, size);
|
||||
}
|
||||
+101
-10
@@ -3,10 +3,20 @@
|
||||
#include "main.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "readKeyInput.h"
|
||||
#include "screen.h"
|
||||
#include "structures.h"
|
||||
|
||||
extern void (*const gUnk_081320F0[])();
|
||||
static void sub_080AD3F4(void);
|
||||
static void sub_080AD474(void);
|
||||
static void sub_080AD670(void);
|
||||
static void sub_080AD834(void);
|
||||
|
||||
static void (*const gUnk_081320F0[])(void) = {
|
||||
sub_080AD3F4,
|
||||
sub_080AD474,
|
||||
sub_080AD834,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
@@ -18,11 +28,13 @@ typedef struct {
|
||||
|
||||
extern struct_03000FD0 gUnk_03000FD0;
|
||||
|
||||
extern const u16 gUnk_081320FC[];
|
||||
|
||||
u32 IntroSetTransition(u32 transition)
|
||||
{
|
||||
gUnk_02032EC0.transitionType = transition;
|
||||
gUnk_03001000.funcIndex = 2;
|
||||
_DmaZero((u32 *)&gMenu, 48);
|
||||
_DmaZero(&gMenu, sizeof(gMenu));
|
||||
DoFade(7, 8);
|
||||
}
|
||||
|
||||
@@ -49,7 +61,7 @@ void HandleIntroScreen(void)
|
||||
sub_080AD918();
|
||||
}
|
||||
|
||||
void sub_080AD3F4(void)
|
||||
static void sub_080AD3F4(void)
|
||||
{
|
||||
u32 iVar1;
|
||||
u32 uVar2;
|
||||
@@ -58,7 +70,7 @@ void sub_080AD3F4(void)
|
||||
if (gMenu.menuType == 0) {
|
||||
sub_0801DA90(1);
|
||||
gMenu.menuType = 1;
|
||||
gMenu.transitionTimer = 0x78;
|
||||
gMenu.transitionTimer = 120;
|
||||
sub_0801D7EC(0x10);
|
||||
sub_0801D7EC(1);
|
||||
if (((struct_02000000 *)0x2000000)->gameLanguage == 0) {
|
||||
@@ -67,7 +79,7 @@ void sub_080AD3F4(void)
|
||||
else {
|
||||
uVar2 = 2;
|
||||
}
|
||||
LoadPalettesByPaletteGroupIndex(uVar2);
|
||||
LoadPaletteGroup(uVar2);
|
||||
gScreen.lcd.lcdControl2 |= 0x400;
|
||||
gScreen.bg2.bg0xOffset = 1;
|
||||
DoFade(6, 8);
|
||||
@@ -92,7 +104,7 @@ extern u16 gUnk_03001010[5];
|
||||
|
||||
extern u8 gUnk_02024490;
|
||||
|
||||
void sub_080AD474(void)
|
||||
static void sub_080AD474(void)
|
||||
{
|
||||
int iVar2;
|
||||
u32 uVar3;
|
||||
@@ -115,7 +127,7 @@ void sub_080AD474(void)
|
||||
else {
|
||||
uVar3 = 4;
|
||||
}
|
||||
LoadPalettesByPaletteGroupIndex(uVar3);
|
||||
LoadPaletteGroup(uVar3);
|
||||
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
|
||||
gScreen.controls.windowOutsideControl = 0x844;
|
||||
gScreen.controls.mosaicSize = 0x909;
|
||||
@@ -198,7 +210,7 @@ void sub_080AD644(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
void sub_080AD670(void)
|
||||
static void sub_080AD670(void)
|
||||
{
|
||||
struct BgAffineSrcData aff;
|
||||
aff.texY = 0x8000;
|
||||
@@ -232,7 +244,7 @@ void sub_080AD6AC(void)
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (gUnk_03000FD0.field_0x0 == '\0') {
|
||||
if (gUnk_03000FD0.field_0x0 == 0) {
|
||||
gUnk_03000FD0.field_0x4 = -1;
|
||||
gMenu.overlayType++;
|
||||
gMenu.transitionTimer = 0x5a;
|
||||
@@ -249,4 +261,83 @@ void sub_080AD6AC(void)
|
||||
gMenu.transitionTimer = 0x3c;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080AD76C(void) {
|
||||
switch (gMenu.overlayType) {
|
||||
case 0:
|
||||
if (gUnk_03000FD0.field_0x0 == 0) {
|
||||
gMenu.overlayType = 1;
|
||||
gScreen.lcd.lcdControl2 |= 0x400;
|
||||
PlaySFX(0xF6);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
gMenu.field_0x2c += 16;
|
||||
if (gMenu.field_0x2c > 256) {
|
||||
gMenu.field_0x2c = 256;
|
||||
gMenu.transitionTimer = 40;
|
||||
gMenu.overlayType++;
|
||||
DoFade(6, 16);
|
||||
}
|
||||
sub_080AD670();
|
||||
break;
|
||||
case 2:
|
||||
if (--gMenu.transitionTimer == 0) {
|
||||
gMenu.transitionTimer = 300;
|
||||
gMenu.overlayType++;
|
||||
CreateObject(0xBD, 0, 0);
|
||||
DoFade(6, 16);
|
||||
PlaySFX(0xF8);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (gUnk_03000FD0.field_0x0 == 0 && sub_080AD84C()) {
|
||||
gMenu.menuType++;
|
||||
gMenu.transitionTimer = 60;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_080AD834(void) {
|
||||
if (gUnk_03000FD0.field_0x0 == 0) {
|
||||
InitScreen(SCREEN_CHOOSE_FILE);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_080AD84C(void) {
|
||||
u32 newKeys;
|
||||
|
||||
if (gUnk_03000FD0.field_0x0 != 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (gUnk_02000010.field_0x5 == 0) {
|
||||
newKeys = 0;
|
||||
} else {
|
||||
newKeys = gUnk_03000FF0.newKeys & (A_BUTTON | START_BUTTON);
|
||||
}
|
||||
|
||||
if (--gMenu.transitionTimer == 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (newKeys) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_080AD89C(void) {
|
||||
if ((gMenu.field_0x12 & 0x7) == 0) {
|
||||
gMenu.unk10[0] = (gMenu.unk10[0] + 1) & 0x3;
|
||||
LoadPaletteGroup(gMenu.unk10[0] + 5);
|
||||
}
|
||||
|
||||
if ((gMenu.field_0x12 & 0x1F) == 0) {
|
||||
gMenu.unk10[1] = (gMenu.unk10[1] + 1) & 0x7;
|
||||
gScreen.controls.mosaicSize = gUnk_081320FC[gMenu.unk10[1]];
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@
|
||||
#include "readKeyInput.h"
|
||||
|
||||
extern void sub_0804FF84(u32);
|
||||
extern u32 gUnk_020176A0;
|
||||
extern u32 gPaletteBuffer;
|
||||
extern void VBlankInterruptWait(void);
|
||||
extern void DisableInterruptsAndDMA(void);
|
||||
extern void sub_0801D66C(void*, u8*, int);
|
||||
@@ -34,7 +34,7 @@ void MainLoop(void) {
|
||||
sub_08056208();
|
||||
gUnk_02000010.field_0x4 = 193;
|
||||
sub_0804FFE4();
|
||||
DmaSet(3, 0x5000000U, &gUnk_020176A0, 0x84000080U);
|
||||
DmaSet(3, 0x5000000U, &gPaletteBuffer, 0x84000080U);
|
||||
sub_0804FF84(1);
|
||||
sub_08056418();
|
||||
sub_080ADD30();
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "functions.h"
|
||||
|
||||
extern u32 sub_0805C920(Entity*);
|
||||
extern void LoadPalettesByPaletteGroupIndex(u32);
|
||||
extern void LoadPaletteGroup(u32);
|
||||
extern void (*const gUnk_08108D10[])(Entity*);
|
||||
|
||||
extern u8 gUnk_08108D20[];
|
||||
@@ -58,7 +58,7 @@ void sub_0805C8B4(Entity *this)
|
||||
if (5 < ++this->field_0xf) {
|
||||
this->field_0xf = 0;
|
||||
}
|
||||
LoadPalettesByPaletteGroupIndex(gUnk_08108D20[this->field_0xf]);
|
||||
LoadPaletteGroup(gUnk_08108D20[this->field_0xf]);
|
||||
if (this->field_0xf == 0) {
|
||||
PlaySFX(0x11a);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "structures.h"
|
||||
|
||||
extern int sub_0807A094(int);
|
||||
extern u32 sub_0801D754(const u8*, u8, u8);
|
||||
extern void LoadPalettes(const u8*, int, int);
|
||||
extern u32 sub_080041EC(int, int);
|
||||
extern u32 sub_080045DA(int, int);
|
||||
|
||||
@@ -39,7 +39,7 @@ typedef struct {
|
||||
extern void (*const gUnk_08121C64[])(Entity*);
|
||||
extern void (*const gUnk_08121CCC[])(Entity*);
|
||||
extern const int gUnk_08133368[];
|
||||
extern const u8 gUnk_085A2E80[];
|
||||
extern const u8 gGlobalPalettes[];
|
||||
extern const struct_08121CD4 gUnk_08121CD4[][4];
|
||||
extern const u8 gUnk_08121D10[];
|
||||
extern const u8 gUnk_08121D38[][8];
|
||||
@@ -88,7 +88,7 @@ void sub_0808E818(Entity* this) {
|
||||
this->field_0x70.BYTES.byte0 = 4;
|
||||
this->animationState = 2;
|
||||
var1 = gUnk_08133368[sub_0807A094(1) - 22] & 0xFFFFFF;
|
||||
sub_0801D754(&gUnk_085A2E80[var1], 31, 1);
|
||||
LoadPalettes(&gGlobalPalettes[var1], 31, 1);
|
||||
}
|
||||
|
||||
if (gUnk_02032EC0.transitionType == 0) {
|
||||
|
||||
+4
-4
@@ -1740,7 +1740,7 @@ extern struct_086D4460 gUnk_086D4460;
|
||||
void sub_0804C918(void) {
|
||||
LoadAssetAsync(&gUnk_086D4460.LO, 0x6000000, 0x4000);
|
||||
LoadAssetAsync(&gUnk_086D4460.HI, 0x6008000, 0x4000);
|
||||
LoadPalettesByPaletteGroupIndex(0x19);
|
||||
LoadPaletteGroup(0x19);
|
||||
}
|
||||
|
||||
u32 sub_0804C948() {
|
||||
@@ -2224,7 +2224,7 @@ extern EntityData gUnk_080DF94C;
|
||||
|
||||
extern u8 gUnk_02000070;
|
||||
extern u8 gUnk_03000FD0;
|
||||
extern u32 gUnk_0200B644;
|
||||
extern u32 gUsedPalettes;
|
||||
|
||||
void sub_0804CD48(void) {
|
||||
|
||||
@@ -2233,7 +2233,7 @@ void sub_0804CD48(void) {
|
||||
MenuFadeIn(5, 0);
|
||||
gUnk_02000070 = 0;
|
||||
gUnk_03000FD0 = 0;
|
||||
gUnk_0200B644 = 0;
|
||||
gUsedPalettes = 0;
|
||||
*(u16*)0x5000000 = 0x7fff;
|
||||
sub_0801DA90(1);
|
||||
}
|
||||
@@ -6552,5 +6552,5 @@ void nullsub_106() {}
|
||||
void sub_0804FF84(u32 arg0)
|
||||
{
|
||||
((struct_02000000 * )0x02000000)->brightnessPref = arg0;
|
||||
gUnk_0200B644 = (u32)-1;
|
||||
gUsedPalettes = (u32)-1;
|
||||
}
|
||||
+5
-5
@@ -1,17 +1,17 @@
|
||||
#include "global.h"
|
||||
|
||||
extern u8 gUnk_020176E0;
|
||||
extern const u8 gUnk_020176E0[];
|
||||
|
||||
extern void sub_0807C960();
|
||||
extern u32 sub_0801D754(const u8*, u8, u8);
|
||||
extern void LoadPalettes(const u8*, int, int);
|
||||
|
||||
u32 sub_0807C9D8(u32* a1) {
|
||||
void sub_0807C9D8(u32* a1) {
|
||||
u32* v1; // r5@1
|
||||
|
||||
v1 = a1;
|
||||
sub_0807C960(0x6004000, *a1);
|
||||
sub_0807C960(0x6000000, v1[1]);
|
||||
sub_0807C960(0x6008000, v1[2]);
|
||||
sub_0807C960(&gUnk_020176E0, v1[3]);
|
||||
return sub_0801D754(&gUnk_020176E0, 2, 13);
|
||||
sub_0807C960(gUnk_020176E0, v1[3]);
|
||||
LoadPalettes(gUnk_020176E0, 2, 13);
|
||||
}
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@ typedef struct {
|
||||
|
||||
extern struct_03000000 gUnk_03000000;
|
||||
|
||||
extern u32 gUnk_0200B644;
|
||||
extern u32 gUsedPalettes;
|
||||
|
||||
extern void sub_0801E104();
|
||||
extern void DoFade(u32, u32);
|
||||
@@ -75,7 +75,7 @@ void DoFade(u32 fadeType, u32 fadeSpeed)
|
||||
if ((fadeType & 1) == 0) {
|
||||
gUnk_03000FD0.fadeType &= 0xfffb;
|
||||
sub_08050008();
|
||||
gUnk_0200B644 = 0xffffffff;
|
||||
gUsedPalettes = 0xffffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ void sub_080A3BD0(void)
|
||||
gMenu.field_0x1 = 1;
|
||||
gMenu.unk2a = 0;
|
||||
sub_080A4D34();
|
||||
LoadPalettesByPaletteGroupIndex(0xcb);
|
||||
LoadPaletteGroup(0xcb);
|
||||
sub_0801D7EC(0x75);
|
||||
|
||||
iVar1 = sub_080A4494();
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
|
||||
extern u8 gUnk_03000FD0;
|
||||
|
||||
void sub_080AD834(void) {
|
||||
if (gUnk_03000FD0 == 0) {
|
||||
InitScreen(SCREEN_CHOOSE_FILE);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user