Code cleanup (#28)

Lots of code cleanup
This commit is contained in:
snesrev
2023-03-20 18:12:36 +01:00
committed by GitHub
parent 19c3651a3e
commit 51ac35a65d
42 changed files with 5746 additions and 7438 deletions

View File

@@ -6,23 +6,31 @@
#include "funcs.h"
#include "enemy_types.h"
#define kOffsetToSaveSlot ((uint16*)RomPtr(0x81812b))
#define kPackedBytesPerArea_Count ((uint8*)RomPtr(0x818131))
#define kPackedBytesPerArea_PackedOffs ((uint16*)RomPtr(0x818138))
#define kPackedBytesPerArea_UnpackedOffs ((uint16*)RomPtr(0x8182d6))
#define kMenuPalettes ((uint16*)RomPtr(0x8ee400))
#define kZebesAndStarsTilemap ((uint16*)RomPtr(0x8edc00))
#define kAreaMapForegroundSetDefs ((uint16*)RomPtr(0x81a4e6))
#define kAreaMapForegroundColors ((uint16*)RomPtr(0x81a40e))
#define kBg2RoomSelectMapTilemap ((uint16*)RomPtr(0xb6e000))
#define kFileSelectExpandingSquareTilemap ((uint16*)RomPtr(0x81b14b))
#define kMapIconDataPointers ((MapIconDataPointers*)RomPtr(0x82c7cb))
#define g_word_82C749 ((uint16*)RomPtr(0x82c749))
#define kRoomState_aa82_aa8f (*(RoomDefRoomstate*)RomPtr(0x8faa8f))
#define kLeftMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af32))
#define kRightMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af3c))
#define kUpMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af46))
#define kDownMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af50))
#define kOffsetToSaveSlot ((uint16*)RomFixedPtr(0x81812b))
#define kPackedBytesPerArea_Count ((uint8*)RomFixedPtr(0x818131))
#define kPackedBytesPerArea_PackedOffs ((uint16*)RomFixedPtr(0x818138))
#define kPackedBytesPerArea_UnpackedOffs ((uint16*)RomFixedPtr(0x8182d6))
#define kMenuPalettes ((uint16*)RomFixedPtr(0x8ee400))
#define kZebesAndStarsTilemap ((uint16*)RomFixedPtr(0x8edc00))
#define kAreaMapForegroundSetDefs ((uint16*)RomFixedPtr(0x81a4e6))
#define kAreaMapForegroundColors ((uint16*)RomFixedPtr(0x81a40e))
#define kBg2RoomSelectMapTilemap ((uint16*)RomFixedPtr(0xb6e000))
#define kFileSelectExpandingSquareTilemap ((uint16*)RomFixedPtr(0x81b14b))
#define kMapIconDataPointers ((MapIconDataPointers*)RomFixedPtr(0x82c7cb))
#define g_word_82C749 ((uint16*)RomFixedPtr(0x82c749))
#define kRoomState_aa82_aa8f (*(RoomDefRoomstate*)RomFixedPtr(0x8faa8f))
#define kLeftMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af32))
#define kRightMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af3c))
#define kUpMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af46))
#define kDownMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af50))
#define g_off_82C569 ((uint16*)RomFixedPtr(0x82c569))
#define kSamusSpritemapTable ((uint16*)RomFixedPtr(0x92808d))
#define g_off_93A1A1 ((uint16*)RomFixedPtr(0x93a1a1))
#define kExpandingSquareVels ((ExpandingSquareVels*)RomFixedPtr(0x81aa34))
static const uint16 kFileSelectMap_AreaIndexes[6] = { 0, 3, 5, 1, 4, 2 };
void SoftReset(void) {
@@ -30,18 +38,14 @@ void SoftReset(void) {
}
void SaveToSram(uint16 a) { // 0x818000
char v0 = a;
uint16 v2;
int16 v7;
int16 v11;
uint16 v7;
uint16 v11;
R20_ = 0;
R18_ = 2 * (v0 & 3);
uint16 R20 = 0;
uint16 R18 = 2 * (a & 3);
for (int i = 94; i >= 0; i -= 2)
player_data_saved[i >> 1] = *(uint16 *)((char *)&equipped_items + i);
LOBYTE(v2) = HIBYTE(area_index);
HIBYTE(v2) = area_index;
uint16 v3 = v2;
uint16 v3 = area_index * 256;
uint16 v4 = 0;
do {
explored_map_tiles_saved[v3 >> 1] = *(uint16 *)&map_tiles_explored[v4];
@@ -51,18 +55,18 @@ void SaveToSram(uint16 a) { // 0x818000
PackMapToSave();
sram_save_station_index = load_station_index;
sram_area_index = area_index;
uint16 v5 = kOffsetToSaveSlot[R18_ >> 1];
uint16 v5 = kOffsetToSaveSlot[R18 >> 1];
uint16 *v6 = player_data_saved;
do {
v7 = *v6++;
*(uint16 *)(&g_sram[2 * (v5 >> 1)]) = v7;
R20_ += v7;
R20 += v7;
v5 += 2;
} while (v6 != plm_instruction_timer);
uint16 v8 = R18_;
uint16 v9 = R20_;
int v10 = R18_ >> 1;
*(uint16 *)(&g_sram[2 * v10]) = R20_;
uint16 v8 = R18;
uint16 v9 = R20;
int v10 = R18 >> 1;
*(uint16 *)(&g_sram[2 * v10]) = R20;
*(uint16 *)(&g_sram[2 * v10 + 0x1FF0]) = v9;
v11 = ~v9;
*(uint16 *)(&g_sram[2 * v10 + 8]) = v11;
@@ -124,7 +128,7 @@ void UnpackMapFromSave(void) { // 0x8182E4
*(uint16 *)&R3_.bank = 126;
do {
uint16 v4 = R20_ + *RomPtr_81(R0_.addr);
IndirWriteByte(&R3_, v4, compressed_map_data[v3]);
IndirWriteByte(R3_, v4, compressed_map_data[v3]);
++R0_.addr;
++v3;
--R18_;
@@ -145,7 +149,7 @@ void PackMapToSave(void) { // 0x81834B
*(uint16 *)&R3_.bank = 126;
do {
int v3 = R24_ + *RomPtr_81(R0_.addr);
compressed_map_data[v1] = *IndirPtr(&R3_, v3);
compressed_map_data[v1] = IndirReadByte(R3_, v3);
++R0_.addr;
++v1;
--R22_;
@@ -160,7 +164,7 @@ void DrawSpritemap(uint8 db, uint16 j) { // 0x81879F
char v13;
char v15;
uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
const uint16 *v2 = (const uint16 *)RomPtrWithBank(db, j);
if (*v2) {
R24_ = *v2;
uint16 v3 = j + 2;
@@ -172,8 +176,8 @@ void DrawSpritemap(uint8 db, uint16 j) { // 0x81879F
uint16 v5 = oam_next_ptr;
while (1) {
uint8 *v6 = RomPtrWithBank(db, v3);
v7 = R20_ + *(uint16 *)v6;
const uint8 *v6 = RomPtrWithBank(db, v3);
v7 = R20_ + GET_WORD(v6);
v8 = gOamEnt(v5);
*(uint16 *)&v8->xcoord = v7;
if ((v7 & 0x100) != 0) {
@@ -212,7 +216,7 @@ LABEL_21:
{
LABEL_22:
v8->ycoord = v15;
*(uint16 *)&v8->charnum = R22_ | *(uint16 *)(v6 + 3) & 0xF1FF;
*(uint16 *)&v8->charnum = R22_ | GET_WORD(v6 + 3) & 0xF1FF;
v4 = v5 + 4;
if (((v5 + 4) & 0xFE00) != 0) {
oam_next_ptr = v4;
@@ -235,20 +239,19 @@ void DrawSpritemapOffScreen(uint16 j) { // 0x818853
char v12;
char v14;
uint16 *v1 = (uint16 *)RomPtr_8C(j);
const uint16 *v1 = (const uint16 *)RomPtr_8C(j);
if (*v1) {
R24_ = *v1;
uint16 v2 = j + 2;
uint16 v3 = oam_next_ptr;
if ((oam_next_ptr & 0xFE00) != 0) {
LABEL_25:
oam_next_ptr = v3;
return;
}
uint16 v4 = oam_next_ptr;
while (1) {
uint8 *v5 = RomPtrWithBank(0x8c, v2);
v6 = R20_ + *(uint16 *)v5;
const uint8 *v5 = RomPtrWithBank(0x8c, v2);
v6 = R20_ + GET_WORD(v5);
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
@@ -287,8 +290,10 @@ LABEL_22:
v7->ycoord = v14;
*(uint16 *)&v7->charnum = R22_ | *(uint16 *)(v5 + 3) & 0xF1FF;
v3 = v4 + 4;
if (((v4 + 4) & 0xFE00) != 0)
goto LABEL_25;
if (((v4 + 4) & 0xFE00) != 0) {
oam_next_ptr = v3;
return;
}
v4 += 4;
v2 += 5;
if (!--R24_) {
@@ -305,255 +310,178 @@ void SetXCoordToInvalidPos(uint16 k) { // 0x818907
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v1]) |= kOamExtra_X8Small_And_Large[v1];
}
#define g_off_82C569 ((uint16*)RomPtr(0x82c569))
void DrawMenuSpritemap(uint16 a, uint16 k, uint16 j) { // 0x81891F
int16 v8;
OamEnt *v9;
R18_ = j;
R20_ = k;
uint16 v3 = g_off_82C569[a];
uint16 *v4 = (uint16 *)RomPtr_82(v3);
if (*v4) {
R24_ = *v4;
uint16 v5 = v3 + 2;
uint16 v6 = oam_next_ptr;
const uint8 *pp = RomPtr_82(g_off_82C569[a]);
if (GET_WORD(pp + 0)) {
int n = GET_WORD(pp + 0);
pp += 2;
int v6 = oam_next_ptr;
do {
uint8 *v7 = RomPtr_82(v5);
v8 = R20_ + *(uint16 *)v7;
v9 = gOamEnt(v6);
*(uint16 *)&v9->xcoord = v8;
int v10 = v6 >> 1;
uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]);
uint16 v8 = k + GET_WORD(pp + 0);
OamEnt *v9 = gOamEnt(v6);
v9->xcoord = v8;
if ((v8 & 0x100) != 0) {
int v10 = v6 >> 1;
if (*(int16 *)v7 >= 0) {
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10];
if (*(int16 *)pp >= 0) {
*dst |= kOamExtra_X8Small_And_Large[v10];
} else {
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_Address_And_X8Large[v10 + 1];
*dst |= kOamExtra_Address_And_X8Large[v10 + 1];
}
} else if (*(int16 *)v7 < 0) {
int v12 = v6 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v12]) |= kOamExtra_X8Small_And_Large[v12 + 1];
} else if (*(int16 *)pp < 0) {
*dst |= kOamExtra_X8Small_And_Large[v10 + 1];
}
*(uint16 *)&v9->ycoord = R18_ + *((uint16 *)v7 + 1);
*(uint16 *)&v9->charnum = R3_.addr | *(uint16 *)(v7 + 3) & 0xF1FF;
v5 += 5;
v9->ycoord = j + GET_BYTE(pp + 2);
*(uint16 *)&v9->charnum = R3_.addr | GET_WORD(pp + 3) & 0xF1FF;
pp += 5;
v6 = (v6 + 4) & 0x1FF;
--R24_;
} while (R24_);
} while (--n);
oam_next_ptr = v6;
}
}
#define kSamusSpritemapTable ((uint16*)RomPtr(0x92808d))
void DrawSamusSpritemap(uint16 a, uint16 k, uint16 j) { // 0x8189AE
int16 v8;
OamEnt *v9;
uint16 v15;
R18_ = j;
R20_ = k;
uint16 v3 = kSamusSpritemapTable[a];
if (v3 == 0)
return;
uint16 *v4 = (uint16 *)RomPtr_92(v3);
if (*v4) {
R24_ = *v4;
uint16 v5 = v3 + 2;
uint16 v6 = oam_next_ptr;
do {
uint8 *v7 = RomPtr_92(v5);
v8 = R20_ + *(uint16 *)v7;
v9 = gOamEnt(v6);
*(uint16 *)&v9->xcoord = v8;
if ((v8 & 0x100) != 0) {
int v10 = v6 >> 1;
if (*(int16 *)v7 >= 0) {
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10];
} else {
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_Address_And_X8Large[v10 + 1];
}
} else if (*(int16 *)v7 < 0) {
int v12 = v6 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v12]) |= kOamExtra_X8Small_And_Large[v12 + 1];
const uint8 *pp = RomPtr_92(v3);
int n = GET_WORD(pp + 0);
pp += 2;
uint16 v6 = oam_next_ptr;
for(; n; n--) {
int v10 = v6 >> 1;
uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]);
uint16 v8 = k + GET_WORD(pp + 0);
OamEnt *v9 = gOamEnt(v6);
v9->xcoord = v8;
if ((v8 & 0x100) != 0) {
if (*(int16 *)pp >= 0) {
*dst |= kOamExtra_X8Small_And_Large[v10];
} else {
*dst |= kOamExtra_Address_And_X8Large[v10 + 1];
}
*(uint16 *)&v9->ycoord = R18_ + *((uint16 *)v7 + 1);
*(uint16 *)&v9->charnum = *(uint16 *)(v7 + 3);
v5 += 5;
v15 = (v6 + 4) & 0x1FF;
v6 = v15;
--R24_;
} while (R24_);
oam_next_ptr = v15;
} else if (*(int16 *)pp < 0) {
*dst |= kOamExtra_X8Small_And_Large[v10 + 1];
}
v9->ycoord = j + GET_BYTE(pp + 2);
*(uint16 *)&v9->charnum = GET_WORD(pp + 3);
pp += 5;
v6 = (v6 + 4) & 0x1FF;
}
oam_next_ptr = v6;
}
#define g_off_93A1A1 ((uint16*)RomPtr(0x93a1a1))
void DrawBeamGrappleSpritemap(uint16 a) { // 0x818A37
uint16 v1 = g_off_93A1A1[a];
R24_ = *(uint16 *)RomPtr_93(v1);
sub_818A5F(v1 + 2);
sub_818A5F(RomPtr_93(g_off_93A1A1[a]));
}
void DrawProjectileSpritemap(uint16 k) { // 0x818A4B
uint16 v1 = projectile_spritemap_pointers[k >> 1];
uint16 *v2 = (uint16 *)RomPtr_93(v1);
if (*v2) {
R24_ = *v2;
sub_818A5F(v1 + 2);
}
sub_818A5F(RomPtr_93(projectile_spritemap_pointers[k >> 1]));
}
void sub_818A5F(uint16 j) { // 0x818A5F
uint16 v0 = j;
int16 v3;
OamEnt *v4;
uint16 v10;
uint16 v1 = oam_next_ptr;
void sub_818A5F(const uint8 *pp) { // 0x818A5F
int n = GET_WORD(pp);
if (!n)
return;
pp += 2;
uint16 idx = oam_next_ptr;
do {
uint8 *v2 = RomPtr_93(v0);
v3 = R20_ + *(uint16 *)v2;
v4 = gOamEnt(v1);
*(uint16 *)&v4->xcoord = v3;
if ((v3 & 0x100) != 0) {
int v5 = v1 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v5]) |= kOamExtra_X8Small_And_Large[v5];
}
if (*(int16 *)v2 < 0) {
int v7 = v1 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v7]) |= kOamExtra_X8Small_And_Large[v7 + 1];
}
*(uint16 *)&v4->ycoord = R18_ + *((uint16 *)v2 + 1);
*(uint16 *)&v4->charnum = *(uint16 *)(v2 + 3);
v0 += 5;
v10 = (v1 + 4) & 0x1FF;
v1 = v10;
--R24_;
} while (R24_);
oam_next_ptr = v10;
int v5 = idx >> 1;
uint16 v3 = R20_ + GET_WORD(pp);
OamEnt *v4 = gOamEnt(idx);
v4->xcoord = v3;
uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v5]);
if ((v3 & 0x100) != 0)
*dst |= kOamExtra_X8Small_And_Large[v5];
if (*(int16 *)pp < 0)
*dst |= kOamExtra_X8Small_And_Large[v5 + 1];
v4->ycoord = R18_ + GET_BYTE(pp + 2);
*(uint16 *)&v4->charnum = GET_WORD(pp + 3);
pp += 5;
idx = (idx + 4) & 0x1FF;
} while (--n);
oam_next_ptr = idx;
}
void DrawSpritemapWithBaseTile(uint8 db, uint16 j) { // 0x818AB8
int16 v5;
OamEnt *v6;
uint16 v12;
if (j == 0)
return; // bug fix
uint16 *v1 = (uint16 *)RomPtrWithBank(db, j);
if (*v1) {
uint16 v2 = j + 2;
R24_ = *v1;
uint16 v3 = oam_next_ptr;
do {
uint8 *v4 = RomPtrWithBank(db, v2);
v5 = R20_ + *(uint16 *)v4;
v6 = gOamEnt(v3);
*(uint16 *)&v6->xcoord = v5;
if ((v5 & 0x100) != 0) {
int v7 = v3 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v7]) |= kOamExtra_X8Small_And_Large[v7];
}
if (*(int16 *)v4 < 0) {
int v9 = v3 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v9]) |= kOamExtra_X8Small_And_Large[v9 + 1];
}
v6->ycoord = R18_ + v4[2];
*(uint16 *)&v6->charnum = R3_.addr | (R0_.addr + *(uint16 *)(v4 + 3));
bool v11 = 0;// __CFADD__(v2, 5);
v2 += 5;
v12 = (v11 + v3 + 4) & 0x1FF;
v3 = v12;
--R24_;
} while (R24_);
oam_next_ptr = v12;
uint8 *pp = (uint8 *)RomPtrWithBank(db, j);
int n = GET_WORD(pp);
uint16 v3 = oam_next_ptr;
pp += 2;
for(; n != 0; n--) {
int v7 = v3 >> 1;
OamEnt *oam = gOamEnt(v3);
uint16 v5 = R20_ + GET_WORD(pp + 0);
oam->xcoord = v5;
uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v7]);
if ((v5 & 0x100) != 0)
*dst |= kOamExtra_X8Small_And_Large[v7];
if (*(int16 *)pp < 0)
*dst |= kOamExtra_X8Small_And_Large[v7 + 1];
oam->ycoord = R18_ + pp[2];
*(uint16 *)&oam->charnum = R3_.addr | (R0_.addr + GET_WORD(pp + 3));
pp += 5;
v3 = (v3 + 4) & 0x1FF;
}
oam_next_ptr = v3;
}
void DrawSpritemapWithBaseTile2(uint8 db, uint16 j) { // 0x818B22
int16 v6;
OamEnt *v7;
uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
if (*v2) {
uint16 v3 = j + 2;
R24_ = *v2;
uint16 v4 = oam_next_ptr;
while (1) {
uint8 *v5 = RomPtrWithBank(db, v3);
v6 = R20_ + *(uint16 *)v5;
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
int v8 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]) |= kOamExtra_X8Small_And_Large[v8];
}
if (*(int16 *)v5 < 0) {
int v10 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10 + 1];
}
int y = v5[2] + LOBYTE(R18_);
if ((v5[2] & 0x80) ? (y & 0x100) == 0 : (y & 0x100) != 0)
y = 0xf0;
v7->ycoord = y;
*(uint16 *)&v7->charnum = R3_.addr | (R0_.addr + *(uint16 *)(v5 + 3));
v3 += 5;
uint16 v16 = (v4 + 4) & 0x1FF;
v4 = v16;
if (!--R24_) {
oam_next_ptr = v16;
return;
}
}
const uint8 *pp = RomPtrWithBank(db, j);
uint16 v4 = oam_next_ptr;
int n = GET_WORD(pp);
pp += 2;
for (; n != 0; n--) {
int v8 = v4 >> 1;
OamEnt *oam = gOamEnt(v4);
uint16 v6 = R20_ + GET_WORD(pp + 0);
oam->xcoord = v6;
uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]);
if ((v6 & 0x100) != 0)
*dst |= kOamExtra_X8Small_And_Large[v8];
if (*(int16 *)pp < 0)
*dst |= kOamExtra_X8Small_And_Large[v8 + 1];
int y = pp[2] + LOBYTE(R18_);
if ((pp[2] & 0x80) ? (y & 0x100) == 0 : (y & 0x100) != 0)
y = 0xf0;
oam->ycoord = y;
*(uint16 *)&oam->charnum = R3_.addr | (R0_.addr + GET_WORD(pp + 3));
pp += 5;
v4 = (v4 + 4) & 0x1FF;
}
oam_next_ptr = v4;
}
void DrawSpritemapWithBaseTileOffscreen(uint8 db, uint16 j) { // 0x818B96
int16 v6;
OamEnt *v7;
char v12;
uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
if (*v2) {
uint16 v3 = j + 2;
R24_ = *v2;
uint16 v4 = oam_next_ptr;
while (1) {
uint8 *v5 = RomPtrWithBank(db, v3);
v6 = R20_ + *(uint16 *)v5;
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
int v8 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]) |= kOamExtra_X8Small_And_Large[v8];
}
if (*(int16 *)v5 < 0) {
int v10 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10 + 1];
}
v12 = v5[2];
bool v13 = __CFADD__uint8((uint8)R18_, v12);
v12 += R18_;
if (!!sign8(v5[2]) == (v13 != 0))
v12 = -16;
v7->ycoord = v12;
*(uint16 *)&v7->charnum = R3_.addr | (R0_.addr + *(uint16 *)(v5 + 3));
v3 += 5;
uint16 v16 = (v4 + 4) & 0x1FF;
v4 = v16;
if (!--R24_) {
oam_next_ptr = v16;
return;
}
}
void DrawSpritemapWithBaseTileOffscreen(uint8 db, uint16 j, uint16 r20_x, uint16 r18_y) { // 0x818B96
const uint8 *pp = RomPtrWithBank(db, j);
uint16 v4 = oam_next_ptr;
int n = GET_WORD(pp); pp += 2;
for (; n; n--) {
int v8 = v4 >> 1;
int v6 = r20_x + GET_WORD(pp + 0);
OamEnt *v7 = gOamEnt(v4);
v7->xcoord = v6;
uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]);
if ((v6 & 0x100) != 0)
*dst |= kOamExtra_X8Small_And_Large[v8];
if (*(int16 *)pp < 0)
*dst |= kOamExtra_X8Small_And_Large[v8 + 1];
uint8 v12 = pp[2];
bool v13 = __CFADD__uint8((uint8)R18_, v12);
v12 += r18_y;
if (!!sign8(pp[2]) == v13)
v12 = 0xf0;
v7->ycoord = v12;
*(uint16 *)&v7->charnum = R3_.addr | (R0_.addr + GET_WORD(pp + 3));
pp += 5;
v4 = (v4 + 4) & 0x1FF;
}
oam_next_ptr = v4;
}
void DrawEnemyProjectileSpritemapWithBaseTile(uint8 db, uint16 j) { // 0x818C0A
@@ -562,14 +490,14 @@ void DrawEnemyProjectileSpritemapWithBaseTile(uint8 db, uint16 j) { // 0x818C0A
char v10;
char v12; // cf
uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
const uint16 *v2 = (const uint16 *)RomPtrWithBank(db, j);
if (*v2) {
R24_ = *v2;
uint16 v3 = j + 2;
uint16 v4 = oam_next_ptr;
while (1) {
uint8 *v5 = RomPtrWithBank(db, v3);
v6 = R20_ + *(uint16 *)v5;
const uint8 *v5 = RomPtrWithBank(db, v3);
v6 = R20_ + GET_WORD(v5);
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
@@ -597,7 +525,7 @@ LABEL_10:
int v13 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v13]) |= kOamExtra_X8Small_And_Large[v13 + 1];
}
*(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + *(uint16 *)(v5 + 3));
*(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + GET_WORD(v5 + 3));
v4 = (v4 + 4) & 0x1FF;
v3 += 5;
if (!--R24_) {
@@ -614,14 +542,14 @@ void DrawEnemyProjectileSpritemapWithBaseTileOffscreen(uint8 db, uint16 j) { //
char v10;
char v12; // cf
uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
const uint16 *v2 = (const uint16 *)RomPtrWithBank(db, j);
if (*v2) {
R24_ = *v2;
uint16 v3 = j + 2;
uint16 v4 = oam_next_ptr;
while (1) {
uint8 *v5 = RomPtrWithBank(db, v3);
v6 = R20_ + *(uint16 *)v5;
const uint8 *v5 = RomPtrWithBank(db, v3);
v6 = R20_ + GET_WORD(v5);
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
@@ -650,7 +578,7 @@ LABEL_10:
int v13 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v13]) |= kOamExtra_X8Small_And_Large[v13 + 1];
}
*(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + *(uint16 *)(v5 + 3));
*(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + GET_WORD(v5 + 3));
v4 = (v4 + 4) & 0x1FF;
v3 += 5;
if (!--R24_) {
@@ -759,14 +687,14 @@ void LoadDebugGameOverMenuTilemaps(void) { // 0x818E7F
vram_write_queue_tail = v1 + 7;
uint16 v3 = v1 + 7;
for (int i = 0; ; i += 8) {
uint16 v5 = *(uint16 *)IndirPtr(&R0_, i);
uint16 v5 = IndirReadWord(R0_, i);
if (v5 == 0xFFFF)
break;
VramWriteEntry *v6 = gVramWriteEntry(v3);
v6->size = v5;
v6->src.addr = *(uint16 *)IndirPtr(&R0_, i + 2);
*(uint16 *)&v6->src.bank = *(uint16 *)IndirPtr(&R0_, i + 4);
v6->vram_dst = *(uint16 *)IndirPtr(&R0_, i + 6);
v6->src.addr = IndirReadWord(R0_, i + 2);
*(uint16 *)&v6->src.bank = IndirReadWord(R0_, i + 4);
v6->vram_dst = IndirReadWord(R0_, i + 6);
v3 += 7;
}
vram_write_queue_tail = v3;
@@ -2106,16 +2034,11 @@ void FileSelectMap_3_LoadAreaSelectBackgroundTilemap(void) { // 0x81A582
}
void LoadAreaSelectBackgroundTilemap(uint16 j) { // 0x81A58A
VramWriteEntry *v2;
int16 v3;
uint16 v1 = vram_write_queue_tail;
v2 = gVramWriteEntry(vram_write_queue_tail);
VramWriteEntry *v2 = gVramWriteEntry(vram_write_queue_tail);
v2->size = 2048;
LOBYTE(v3) = HIBYTE(j);
HIBYTE(v3) = j;
v2->src.addr = 8 * v3 - 16614;
*(uint16 *)&v2->src.bank = 129;
v2->src.addr = 8 * 256 * j + addr_kAreaSelectBackgroundTilemaps;
v2->src.bank = 0x81;
v2->vram_dst = (reg_BG3SC & 0xFC) << 8;
vram_write_queue_tail = v1 + 7;
}
@@ -2329,7 +2252,6 @@ uint16 WraparoundFrom6to0(uint16 a) { // 0x81A89F
}
void SelectFileSelectMapArea(void) { // 0x81A8A9
VoidP *v1;
char v2; // cf
int16 v3;
int16 v4;
@@ -2344,19 +2266,18 @@ void SelectFileSelectMapArea(void) { // 0x81A8A9
area_index = kFileSelectMap_AreaIndexes[file_select_map_area_index];
R18_ = *(uint16 *)&used_save_stations_and_elevators[(uint16)(2 * area_index)];
uint16 v0 = 0;
*(uint16 *)&R0_.bank = 130;
R0_.bank = 130;
R0_.addr = addr_kMapIconDataPointers + 64;
v1 = (VoidP *)IndirPtr(&R0_, 2 * area_index);
while (!*v1)
;
R0_.addr = *v1;
R0_.addr = IndirReadWord(R0_, 2 * area_index);
if (!R0_.addr)
InvalidInterrupt_Crash();
R20_ = 16;
while (1) {
v2 = R18_ & 1;
R18_ >>= 1;
if (!v2)
goto LABEL_10;
v3 = *(uint16 *)IndirPtr(&R0_, 4 * v0);
v3 = IndirReadWord(R0_, 4 * v0);
if (v3 == -2)
goto LABEL_10;
if (v3 != -1)
@@ -2366,7 +2287,7 @@ LABEL_10:
++v0;
if (!--R20_) {
while (1) {
v4 = *(uint16 *)IndirPtr(&R0_, 4 * v0);
v4 = IndirReadWord(R0_, 4 * v0);
if (v4 != -2) {
if (v4 != -1)
goto LABEL_16;
@@ -2409,52 +2330,38 @@ static const uint16 kAreaSelectMapLabelPositions[12] = { // 0x81A97E
0x87, 0x8b,
};
void DrawAreaSelectMapLabels(void) {
VoidP v0;
int16 v3;
char v4; // cf
int v5;
R3_.addr = 0;
DrawMenuSpritemap(g_word_82C749[0], 0x80, 0x10);
R28_ = 0;
do {
v0 = 512;
if (R28_ == file_select_map_area_index)
v0 = 0;
R3_.addr = v0;
uint16 v1 = 2 * kFileSelectMap_AreaIndexes[R28_];
R36 = *(uint16 *)&used_save_stations_and_elevators[v1];
uint16 v2 = *(VoidP *)((char *)&kMapIconDataPointers[4].crateria + v1);
g_word_7E001E = 16;
while (1) {
v3 = *(uint16 *)RomPtr_82(v2);
if (v3 == -1)
break;
v4 = R36 & 1;
R36 >>= 1;
if (v4 && v3 != -2)
for(int i = 0; i < 6; i++) {
R3_.addr = (i == file_select_map_area_index) ? 0 : 512;
uint16 v1 = 2 * kFileSelectMap_AreaIndexes[i];
uint16 r36 = *(uint16 *)&used_save_stations_and_elevators[v1];
const uint16 *v2 = (const uint16 *)RomPtr_82(*(VoidP *)((char *)&kMapIconDataPointers[4].crateria + v1));
int R30 = 16;
while (*v2 != 0xffff) {
int v4 = r36 & 1;
r36 >>= 1;
if (v4 && *v2 != 0xfffe)
goto LABEL_11;
v2 += 4;
if (!--g_word_7E001E) {
if (enable_debug && *(uint16 *)RomPtr_82(v2) != 0xFFFF) {
LABEL_11:
v5 = (uint16)(4 * kFileSelectMap_AreaIndexes[R28_]) >> 1;
v2 += 2;
if (!--R30) {
if (enable_debug && *v2 != 0xFFFF) {
LABEL_11:;
int j = 4 * kFileSelectMap_AreaIndexes[i] >> 1;
DrawMenuSpritemap(
g_word_82C749[0] + kFileSelectMap_AreaIndexes[R28_] + 1,
kAreaSelectMapLabelPositions[v5],
kAreaSelectMapLabelPositions[v5 + 1]);
g_word_82C749[0] + kFileSelectMap_AreaIndexes[i] + 1,
kAreaSelectMapLabelPositions[j],
kAreaSelectMapLabelPositions[j + 1]);
break;
}
break;
}
}
++R28_;
} while (sign16(R28_ - 6));
}
}
static const uint16 kRoomSelectMapExpandingSquareTimers[6] = { 0x33, 0x35, 0x2d, 0x33, 0x33, 0x22 };
#define kExpandingSquareVels ((ExpandingSquareVels*)RomPtr(0x81aa34))
void FileSelectMap_7_PrepExpandSquareTransToRoomMap(void) { // 0x81AAAC
VramWriteEntry *v1;
@@ -2648,14 +2555,14 @@ void FileSelectMap_10_RoomSelectMap(void) { // 0x81AD7F
;
R0_.addr = *v2;
v3 = 4 * load_station_index;
R18_ = *(uint16 *)IndirPtr(&R0_, 4 * load_station_index);
R20_ = *(uint16 *)IndirPtr(&R0_, v3 + 2);
R18_ = IndirReadWord(R0_, 4 * load_station_index);
R20_ = IndirReadWord(R0_, v3 + 2);
if (!sign16(load_station_index - 16))
goto LABEL_23;
do {
if (!sign16(++load_station_index - 16)) {
while (1) {
v5 = *(uint16 *)IndirPtr(&R0_, 4 * load_station_index);
v5 = IndirReadWord(R0_, 4 * load_station_index);
if (v5 == -1)
break;
if (v5 != -2)
@@ -2668,12 +2575,12 @@ LABEL_23:
}
v4 = R24_ & 1;
R24_ >>= 1;
} while (!v4 || *(uint16 *)IndirPtr(&R0_, 4 * load_station_index) >= 0xFFFEu);
} while (!v4 || IndirReadWord(R0_, 4 * load_station_index) >= 0xFFFEu);
LABEL_25:;
uint16 v6 = 4 * load_station_index;
uint8 *v7 = IndirPtr(&R0_, 4 * load_station_index);
if (sign16(*(uint16 *)v7 - reg_BG1HOFS) || !sign16(*(uint16 *)v7 - 256 - reg_BG1HOFS)) {
v8 = reg_BG1HOFS + *(uint16 *)IndirPtr(&R0_, v6) - R18_;
uint16 w7 = IndirReadWord(R0_, 4 * load_station_index);
if (sign16(w7 - reg_BG1HOFS) || !sign16(w7 - 256 - reg_BG1HOFS)) {
v8 = reg_BG1HOFS + IndirReadWord(R0_, v6) - R18_;
if (v8 >= 0) {
if ((int16)(v8 - map_min_x_scroll) >= 0)
v8 = map_min_x_scroll;
@@ -2683,9 +2590,9 @@ LABEL_25:;
reg_BG1HOFS = v8;
}
uint16 v9 = v6 + 2;
uint8 *v10 = IndirPtr(&R0_, v9);
if (sign16(*(uint16 *)v10 - reg_BG1VOFS) || !sign16(*(uint16 *)v10 - 161 - reg_BG1VOFS)) {
uint16 v11 = reg_BG1VOFS + *(uint16 *)IndirPtr(&R0_, v9) - R20_;
uint16 v10 = IndirReadWord(R0_, v9);
if (sign16(v10 - reg_BG1VOFS) || !sign16(v10 - 161 - reg_BG1VOFS)) {
uint16 v11 = reg_BG1VOFS + IndirReadWord(R0_, v9) - R20_;
if ((int16)(v11 - map_min_y_scroll) >= 0)
v11 = map_min_y_scroll;
reg_BG1VOFS = v11;
@@ -2945,4 +2852,4 @@ void LoadMenuTilemap(uint16 k, uint16 j) { // 0x81B3E2
k += 2;
j += 2;
}
}
}