fix memory.c and add ucode_small flag

This commit is contained in:
Fazana
2021-09-30 15:24:44 +01:00
parent d79dd5a51f
commit a8fd8c5172
4 changed files with 16 additions and 5 deletions

View File

@@ -49,6 +49,7 @@
#define OBJ_FLAG_SILHOUETTE (1 << 19) // 0x00080000
#define OBJ_FLAG_OCCLUDE_SILHOUETTE (1 << 20) // 0x00100000
#define OBJ_FLAG_OPACITY_FROM_CAMERA_DIST (1 << 21) // 0x00200000
#define OBJ_FLAG_UCODE_SMALL (1 << 22) // 0x00400000
#define OBJ_FLAG_HITBOX_WAS_SET (1 << 30) // 0x40000000
/* oHeldState */

View File

@@ -68,7 +68,6 @@ struct MemoryPool *gEffectsMemoryPool;
uintptr_t sSegmentTable[32];
uintptr_t sSegmentROMTable[32];
u32 sPoolFreeSpace;
u8 *sPoolStart;
u8 *sPoolEnd;
@@ -339,13 +338,13 @@ void *load_segment(s32 segment, u8 *srcStart, u8 *srcEnd, u32 side, u8 *bssStart
addr = dynamic_dma_read(srcStart, srcEnd, side, TLB_PAGE_SIZE, (uintptr_t)bssEnd - (uintptr_t)bssStart);
if (addr != NULL) {
u8 *realAddr = (u8 *)ALIGN((uintptr_t)addr, TLB_PAGE_SIZE);
set_segment_base_addr(segment, realAddr); sSegmentROMTable[segment] = (uintptr_t) srcStart;
set_segment_base_addr(segment, realAddr);
mapTLBPages(segment << 24, VIRTUAL_TO_PHYSICAL(realAddr), (srcEnd - srcStart) + ((uintptr_t)bssEnd - (uintptr_t)bssStart), segment);
}
} else {
addr = dynamic_dma_read(srcStart, srcEnd, side, 0, 0);
if (addr != NULL) {
set_segment_base_addr(segment, addr); sSegmentROMTable[segment] = (uintptr_t) srcStart;
set_segment_base_addr(segment, addr);
}
}
#if PUPPYPRINT_DEBUG
@@ -420,7 +419,7 @@ void *load_segment_decompress(s32 segment, u8 *srcStart, u8 *srcEnd) {
decompress(compressed, dest);
#endif
osSyncPrintf("end decompress\n");
set_segment_base_addr(segment, dest); sSegmentROMTable[segment] = (uintptr_t) srcStart;
set_segment_base_addr(segment, dest);
main_pool_free(compressed);
}
}
@@ -459,7 +458,7 @@ void *load_segment_decompress_heap(u32 segment, u8 *srcStart, u8 *srcEnd) {
#elif MIO0
decompress(compressed, gDecompressionHeap);
#endif
set_segment_base_addr(segment, gDecompressionHeap); sSegmentROMTable[segment] = (uintptr_t) srcStart;
set_segment_base_addr(segment, gDecompressionHeap);
main_pool_free(compressed);
}
return gDecompressionHeap;

View File

@@ -920,6 +920,7 @@ void cur_obj_update(void) {
f32 distanceFromMario;
BhvCommandProc bhvCmdProc;
s32 bhvProcResult;
s32 objListIndex;
// Calculate the distance from the object to Mario.
if (objFlags & OBJ_FLAG_COMPUTE_DIST_TO_MARIO) {
@@ -995,6 +996,15 @@ void cur_obj_update(void) {
COND_BIT((!(objFlags & OBJ_FLAG_UCODE_LARGE )), gCurrentObject->header.gfx.node.flags, GRAPH_RENDER_UCODE_REJ );
COND_BIT(( objFlags & OBJ_FLAG_SILHOUETTE ), gCurrentObject->header.gfx.node.flags, GRAPH_RENDER_SILHOUETTE );
COND_BIT(( objFlags & OBJ_FLAG_OCCLUDE_SILHOUETTE ), gCurrentObject->header.gfx.node.flags, GRAPH_RENDER_OCCLUDE_SILHOUETTE);
BehaviorScript *bhvScript = segmented_to_virtual(gCurrentObject->behavior);
if ((bhvScript[0] >> 24) == 0) {
objListIndex = (bhvScript[0] >> 16) & 0xFFFF;
}
if (objListIndex == OBJ_LIST_SURFACE && !(objFlags & OBJ_FLAG_UCODE_SMALL))
{
gCurrentObject->header.gfx.node.flags &= ~GRAPH_RENDER_UCODE_REJ;
gCurrentObject->header.gfx.node.flags |= GRAPH_RENDER_UCODE_ZEX;
}
#ifdef OBJ_OPACITY_BY_CAM_DIST
if (objFlags & OBJ_FLAG_OPACITY_FROM_CAMERA_DIST) {

View File

@@ -18,6 +18,7 @@
#define GRAPH_RENDER_SILHOUETTE (1 << 6) // 0x0040
#define GRAPH_RENDER_OCCLUDE_SILHOUETTE (1 << 7) // 0x0080
#define GRAPH_RENDER_UCODE_REJ (1 << 8) // 0x0100
#define GRAPH_RENDER_UCODE_ZEX (1 << 9) // 0x0200
// The amount of bits to use for the above flags out of a s16 variable.
// The remaining bits to the left are used for the render layers.