Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions include/scratchpad.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,10 @@ extern u8* pc_archive_slots[22];
#define SP_OT_CURSOR mmx4_sp_ordering_cursor
#define SP_AUX_CURSOR mmx4_sp_auxiliary_cursor
#define SP_AUX_POLY_F4_CURSOR ((POLY_F4*)mmx4_sp_auxiliary_cursor)
#define SP_BG_BLOCK_WIDTH (*MMX4_SP_PTR(0x10C, u32))
#define SP_BG_BLOCK_HEIGHT (*MMX4_SP_PTR(0x110, u32))
#define SP_CUR_BG_INDEX (*MMX4_SP_PTR(0x114, s32))
#define SP_BG_BLOCK (*MMX4_SP_PTR(0x118, u8))
#define SP_BG_SPRITE_COUNT (*MMX4_SP_PTR(0x11C, s32))
#define SP_SPRITE_COUNT (*MMX4_SP_PTR(0x124, s32))
#define SP_ARCHIVE_ENTRY(archive, index) \
Expand Down Expand Up @@ -113,7 +116,10 @@ extern u8* scratchpad_base;
#define SP_OT_CURSOR (*(void**)SP(0x10C))
#define SP_AUX_CURSOR (*(void**)SP(0x110))
#define SP_AUX_POLY_F4_CURSOR (*(POLY_F4**)SP(0x110))
#define SP_BG_BLOCK_WIDTH (*(u32*)SP(0x10C))
#define SP_BG_BLOCK_HEIGHT (*(u32*)SP(0x110))
#define SP_CUR_BG_INDEX (*(s32*)SP(0x114))
#define SP_BG_BLOCK (*(u8*)SP(0x118))
#define SP_BG_SPRITE_COUNT (*(s32*)SP(0x11C))
#define SP_SPRITE_COUNT (*(s32*)SP(0x124))
#define SP_ARCHIVE_ENTRY(archive, index) \
Expand Down
87 changes: 86 additions & 1 deletion src/main/165A0.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ void func_800264D0(s32 layer, s32 x, s32 y);
void func_80026720(void);
void func_800267D4(s32 input);
void func_8002728C(void);
void func_800270F8(s32 x, s32 y, s32 tile_x, s32 tile_y);

#ifdef MMX4_PC
#include <psyz/audio.h>
Expand Down Expand Up @@ -447,7 +448,91 @@ INCLUDE_ASM("main/nonmatchings/165A0", func_80026894);

INCLUDE_ASM("main/nonmatchings/165A0", func_80026AA0);

INCLUDE_ASM("main/nonmatchings/165A0", func_80026CEC);
void func_80026CEC(s32 arg0)
{
s32 x_hi;
s32 x_lo;
s32 y_lo;
s32 y_hi;
u32 width_a;
u32 width_c;
s32 height_a;
s32 height_b;
s32 x_b;
s32 x_c;
s32 y;
s32 x;
s32 y_pos, x_pos;
u32 width_b;

x_pos = background_objects[arg0].x_pos.i.hi;
y_pos = background_objects[arg0].y_pos.i.hi;

x_lo = (x_pos >> 8) & 0x1F;
x_hi = (x_pos >> 4) & 0xF;

y_lo = (y_pos >> 8) & 0x1F;
y_hi = (y_pos >> 4) & 0xF;

width_a = 0x10 - x_hi;
width_b = 0x15 - width_a;

height_a = 0x10 - y_hi;
height_b = 0x10 - height_a;

width_c = 0;
if (width_b > 0x10) {
width_c = width_b - 0x10;
width_b = 0x10;
}

x = -(x_pos & 0xF);
y = -(y_pos & 0xF);
x_b = x + (width_a * 0x10);
x_c = x_b + (width_b * 0x10);

SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 0];
if (SP_BG_BLOCK != 0) {
SP_BG_BLOCK_WIDTH = width_a;
SP_BG_BLOCK_HEIGHT = height_a;
func_800270F8(x, y, x_hi, y_hi);
}
SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 1];
if (SP_BG_BLOCK != 0) {
SP_BG_BLOCK_WIDTH = width_b;
func_800270F8(x_b, y, 0, y_hi);
}
if (width_c != 0) {
SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 2];
if (SP_BG_BLOCK != 0) {
SP_BG_BLOCK_WIDTH = width_c;
func_800270F8(x_c, y, 0, y_hi);
}
}

if (height_b != 0) {
y_lo++;
y += height_a * 0x10;
SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 0];
if (SP_BG_BLOCK != 0) {
SP_BG_BLOCK_WIDTH = width_a;
SP_BG_BLOCK_HEIGHT = height_b;
func_800270F8(x, y, x_hi, 0);
}
SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 1];
if (SP_BG_BLOCK != 0) {
SP_BG_BLOCK_WIDTH = width_b;
func_800270F8(x_b, y, 0, 0);
}
if (width_c != 0) {
SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 2];
if (SP_BG_BLOCK != 0) {
SP_BG_BLOCK_WIDTH = width_c;
func_800270F8(x_c, y, 0, 0);
}
}
}
}

INCLUDE_ASM("main/nonmatchings/165A0", func_800270F8);
void func_8002728C(void)
Expand Down
146 changes: 145 additions & 1 deletion src/main/1EC20.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,151 @@ void func_8002E8D4(struct EngineObj* arg0)
}

// engine_state_3_update_funcs state 4 (mission selection)
INCLUDE_ASM("main/nonmatchings/1EC20", func_8002E994);
void func_8002E994(struct EngineObj* arg0)
{
u8 var_a0;
u8 var_v1;

switch (controller_input.held & 0xF000) {
case PADLup:
if (!((controller_input.held ^ controller_input.pressed) & PADLup)) {
break;
}

if (arg0->unk8 == 0) {
if (arg0->unkA++ < 3) {
arg0->unk8 = 0x1E;
} else {
arg0->unk8 = 0xA;
}
if (arg0->unk5F >= 5) {
if (arg0->unk3 == 8) {
arg0->unk3 = 0;
func_8001540C(5, 0, 0);
} else if (arg0->unk3 >= 4) {
arg0->unk3 = 8;
func_8001540C(5, 0, 0);
}
} else {
if (arg0->unk3 >= 4) {
arg0->unk3 -= 4;
func_8001540C(5, 0, 0);
}
}
} else {
arg0->unk8--;
}
break;
case PADLdown:
if (!((controller_input.held ^ controller_input.pressed) & PADLdown)) {
break;
}

if (arg0->unk8 == 0) {
if (arg0->unkA++ < 3) {
arg0->unk8 = 0x1E;
} else {
arg0->unk8 = 0xA;
}
if (arg0->unk5F >= 5) {
if (arg0->unk3 == 8) {
arg0->unk3 = 4;
func_8001540C(5, 0, 0);
} else if (arg0->unk3 < 4) {
arg0->unk3 = 8;
func_8001540C(5, 0, 0);
}
} else {
if (arg0->unk3 < 4) {
arg0->unk3 += 4;
func_8001540C(5, 0, 0);
}
}
} else {
arg0->unk8--;
}
break;
case PADLright:
if (!((controller_input.held ^ controller_input.pressed) & PADLright)) {
break;
}

if (arg0->unk8 == 0) {
if (arg0->unkA++ < 3) {
arg0->unk8 = 0x1E;
} else {
arg0->unk8 = 0xA;
}
if (arg0->unk3 != 8) {
if ((arg0->unk3 & 3) != 3) {
arg0->unk3++;
func_8001540C(5, 0, 0);
}
}
} else {
arg0->unk8--;
}
break;
case PADLleft:
if (!((controller_input.held ^ controller_input.pressed) & PADLleft)) {
break;
}

if (arg0->unk8 != 0) {
arg0->unk8--;
break;
}

if (arg0->unkA++ < 3) {
arg0->unk8 = 0x1E;
} else {
arg0->unk8 = 0xA;
}
if (arg0->unk3 != 8) {
if (arg0->unk3 & 3) {
arg0->unk3--;
func_8001540C(5, 0, 0);
}
}
break;
default:
arg0->unk8 = 0;
arg0->unkA = 0;
break;
}

if (controller_input.pressed & (PADstart | PAD_CONFIRM)) {
if (arg0->unk3 == 8) {
var_a0 = 0x11;
if (arg0->unk5F < 7U) {
arg0->stage = 0xA;
if (arg0->cur_character == 0) {
var_a0 = 0x31;
}
arg0->unk40 = var_a0;
} else {
if (arg0->unk5F >= 0xAU) {
arg0->stage = 0xC;
} else {
arg0->stage = 0xB;
}
arg0->unk40 = 0x11;
}
D_8013B814 = 0;
} else {
var_v1 = 0x11;
if (arg0->cur_character == 0) {
var_v1 = 0x31;
}
arg0->unk40 = var_v1;
arg0->stage = mission_stage_order[arg0->unk3];
arg0->substage = D_8013B814;
}
func_8001540C(5, 1, 0);
arg0->unk2 = 0;
arg0->unk1++;
}
}

// engine_state_3_update_funcs state 5
void func_8002ED80(struct EngineObj* arg0)
Expand Down
Loading
Loading