mirror of https://github.com/snesrev/smw.git
Clean up
This commit is contained in:
parent
de17193ed9
commit
b3ae9a90cc
|
|
@ -1623,17 +1623,17 @@ void UploadStripeImage() {
|
|||
WriteReg(A1B1, 0);
|
||||
R6_ = 0;
|
||||
v0 = 0;
|
||||
for (i = *IndirPtr(&R0_, 0); i >= 0; i = *IndirPtr(&R0_, v0)) {
|
||||
for (i = *IndirPtr((LongPtr *)&R0_, 0); i >= 0; i = *IndirPtr((LongPtr *)&R0_, v0)) {
|
||||
R4_ = i;
|
||||
v2 = v0 + 1;
|
||||
R3_ = *IndirPtr(&R0_, v2++);
|
||||
v3 = *IndirPtr(&R0_, v2) & 0x80;
|
||||
R3_ = *IndirPtr((LongPtr *)&R0_, v2++);
|
||||
v3 = *IndirPtr((LongPtr *)&R0_, v2) & 0x80;
|
||||
R7_ = 4 * v3 + __CFSHL__(v3, 1);
|
||||
R5_ = *IndirPtr(&R0_, v2) & 0x40;
|
||||
R5_ = *IndirPtr((LongPtr *)&R0_, v2) & 0x40;
|
||||
WriteReg(DMAP1, (R5_ >> 3) | 1);
|
||||
WriteReg(BBAD1, 0x18u);
|
||||
WriteRegWord(VMADDL, *(uint16 *)&R3_);
|
||||
v4 = IndirPtr(&R0_, v2);
|
||||
v4 = IndirPtr((LongPtr *)&R0_, v2);
|
||||
LOBYTE(v5) = HIBYTE(*(uint16 *)v4);
|
||||
HIBYTE(v5) = *(uint16 *)v4;
|
||||
v6 = (v5 & 0x3FFF) + 1;
|
||||
|
|
|
|||
|
|
@ -646,7 +646,7 @@ void SpawnCastleTilesWithPriority() {
|
|||
v0 = *(uint16 *)&vram_buffer1_offset;
|
||||
v1 = 0;
|
||||
do {
|
||||
v2 = IndirPtr(&tempF3, v1);
|
||||
v2 = IndirPtr((LongPtr *)&tempF3, v1);
|
||||
v3 = *(uint16 *)v2;
|
||||
*(uint16 *)&vram_buffer1[v0 + 1] = *(uint16 *)v2;
|
||||
v1 += 2;
|
||||
|
|
@ -765,7 +765,7 @@ void DecodeAreaData_Sub2_New(uint16 j) {
|
|||
tempF3 = area_data_ptr.addr;
|
||||
tempF4 = area_data_ptr.addr >> 8;
|
||||
tempF5 = area_data_ptr.bank;
|
||||
v1 = *IndirPtr(&tempF3, (j + 2)) & 0x7F;
|
||||
v1 = *IndirPtr((LongPtr *)&tempF3, (j + 2)) & 0x7F;
|
||||
R0_ = *((uint8 *)kDATA_048E43 + v1);
|
||||
R1_ = *((uint8 *)kDATA_048E43 + v1 + 1);
|
||||
v2 = object_index;
|
||||
|
|
@ -1014,8 +1014,8 @@ uint8 CODE_0491C0(uint8 k) {
|
|||
uint16 v1; // di
|
||||
|
||||
v1 = area_obj_offset_buffer[(uint16)(2 * k) >> 1] + 1;
|
||||
R7_ = *IndirPtr(&tempF3, v1) >> 4;
|
||||
return *IndirPtr(&tempF3, v1) & 0xF;
|
||||
R7_ = *IndirPtr((LongPtr *)&tempF3, v1) >> 4;
|
||||
return *IndirPtr((LongPtr *)&tempF3, v1) & 0xF;
|
||||
}
|
||||
|
||||
uint8 CODE_0491DD() {
|
||||
|
|
@ -1385,7 +1385,7 @@ PairU16 CODE_049724(uint8 k, uint8 j) {
|
|||
*(uint16 *)&R4_ = 1;
|
||||
*(uint16 *)&R0_ = 16;
|
||||
do {
|
||||
palette_mirror[k >> 1] = *(uint16 *)IndirPtr(&R2_, j);
|
||||
palette_mirror[k >> 1] = *(uint16 *)IndirPtr((LongPtr *)&R2_, j);
|
||||
j += 2;
|
||||
k += 2;
|
||||
--*(uint16 *)&R0_;
|
||||
|
|
@ -1429,7 +1429,7 @@ void CODE_04973C() {
|
|||
tempF7 = *((uint8 *)kDATA_04B683 + (uint16)(*(uint16 *)&tempF8 + 1)) & 0x3F;
|
||||
while (1) {
|
||||
uint16 t = g_ram[0xf3] | g_ram[0xf4] << 8;
|
||||
IndirWriteByte(&tempF3, v2, tempF7);
|
||||
IndirWriteByte((LongPtr *)&tempF3, v2, tempF7);
|
||||
if (!tempF6 || (v2 & 0xF0) == 0xD0)
|
||||
break;
|
||||
LOBYTE(v1) = v2 + 16;
|
||||
|
|
|
|||
|
|
@ -1112,12 +1112,12 @@ void GenerateLayer2Map16() {
|
|||
v3 = *(uint16 *)&tempE4;
|
||||
v4 = 8 * (uint8)v2;
|
||||
v5 = *(uint16 *)&tempE4 >> 1;
|
||||
layer2_map16_table[v5] = *(uint16 *)IndirPtr(&R0_, v4);
|
||||
layer2_map16_table[v5] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4);
|
||||
v4 += 2;
|
||||
layer2_map16_table[v5 + 1] = *(uint16 *)IndirPtr(&R0_, v4);
|
||||
layer2_map16_table[v5 + 1] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4);
|
||||
v4 += 2;
|
||||
layer2_map16_table[v5 + 32] = *(uint16 *)IndirPtr(&R0_, v4);
|
||||
layer2_map16_table[v5 + 33] = *(uint16 *)IndirPtr(&R0_, v4 + 2);
|
||||
layer2_map16_table[v5 + 32] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4);
|
||||
layer2_map16_table[v5 + 33] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4 + 2);
|
||||
v1 = v6 + 1;
|
||||
if ((v1 & 0xF) == 0) v3 += 64;
|
||||
v0 = v3 + 4;
|
||||
|
|
|
|||
|
|
@ -59,10 +59,10 @@ void HandleSPCUploads_Main() {
|
|||
LOBYTE(v1) = -52;
|
||||
while (1) {
|
||||
v13 = v1;
|
||||
v9 = IndirPtr(&R0_, v0);
|
||||
v9 = IndirPtr((LongPtr *)&R0_, v0);
|
||||
v10 = v0 + 2;
|
||||
v4 = *(uint16 *)v9;
|
||||
v11 = *(uint16 *)IndirPtr(&R0_, v10);
|
||||
v11 = *(uint16 *)IndirPtr((LongPtr *)&R0_, v10);
|
||||
v12 = v10 + 2;
|
||||
WriteRegWord(APUI02, v11);
|
||||
WriteReg(APUI01, v4 != 0);
|
||||
|
|
@ -71,14 +71,14 @@ void HandleSPCUploads_Main() {
|
|||
;
|
||||
if (Unreachable())
|
||||
break;
|
||||
v2 = IndirPtr(&R0_, v12);
|
||||
v2 = IndirPtr((LongPtr *)&R0_, v12);
|
||||
v0 = v12 + 1;
|
||||
HIBYTE(v1) = *v2;
|
||||
for (LOBYTE(v1) = 0;; LOBYTE(v1) = v1 + 1) {
|
||||
WriteRegWord(APUI00, v1);
|
||||
if (!--v4)
|
||||
break;
|
||||
v3 = IndirPtr(&R0_, v0++);
|
||||
v3 = IndirPtr((LongPtr *)&R0_, v0++);
|
||||
HIBYTE(v1) = *v3;
|
||||
while ((uint8)v1 != ReadReg(APUI00))
|
||||
;
|
||||
|
|
|
|||
|
|
@ -155,6 +155,9 @@ RESET_GAME:
|
|||
}
|
||||
}
|
||||
|
||||
static void Smb1DrawPpuFrame(void) {
|
||||
|
||||
}
|
||||
|
||||
const RtlGameInfo kSmb1GameInfo = {
|
||||
"smb1",
|
||||
|
|
@ -164,5 +167,6 @@ const RtlGameInfo kSmb1GameInfo = {
|
|||
&Smb1CpuInitialize,
|
||||
&Smb1RunOneFrameOfGame,
|
||||
&Smb1RunOneFrameOfGame_Emulated,
|
||||
&Smb1DrawPpuFrame,
|
||||
&Smb1FixSnapshotForCompare,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -69,7 +69,6 @@ typedef struct SmasSpcPlayer {
|
|||
SpcPlayer base;
|
||||
DspRegWriteHistory *reg_write_history;
|
||||
uint8 new_value_from_snes[4];
|
||||
uint8 port_to_snes_a[4];
|
||||
uint8 last_value_from_snes[4];
|
||||
uint8 var_c;
|
||||
uint8 last_written_edl; // TODO:persist
|
||||
|
|
@ -202,7 +201,7 @@ static const MemMap kChannel_Maps[] = {
|
|||
};
|
||||
static const MemMapSized kSpcPlayer_Maps[] = {
|
||||
{offsetof(SmasSpcPlayer, new_value_from_snes), 0x0, 4},
|
||||
{offsetof(SmasSpcPlayer, port_to_snes_a), 0x4, 4},
|
||||
{offsetof(SmasSpcPlayer, base.port_to_snes), 0x4, 4},
|
||||
{offsetof(SmasSpcPlayer, last_value_from_snes), 0x8, 4},
|
||||
{offsetof(SmasSpcPlayer, var_c), 0xc, 1},
|
||||
{offsetof(SmasSpcPlayer, counter_sf0d), 0xd, 1},
|
||||
|
|
@ -431,7 +430,7 @@ static void Spc_Loop_Part2(SmasSpcPlayer *p, uint8 ticks) {
|
|||
ReadPortFromSnes(p, 2);
|
||||
return;
|
||||
}
|
||||
if (p->port_to_snes_a[2]) {
|
||||
if (p->base.port_to_snes[2]) {
|
||||
Channel *c = p->channel;
|
||||
for (p->cur_chan_bit = 1; p->cur_chan_bit != 0; p->cur_chan_bit <<= 1, c++) {
|
||||
if (HIBYTE(c->pattern_cur_ptr))
|
||||
|
|
@ -574,7 +573,7 @@ static void Port2_HandleMusic(SmasSpcPlayer *p) {
|
|||
|
||||
if (a == 0) {
|
||||
handle_cmd_00:
|
||||
if (p->var_3F8 != 0 || p->port_to_snes_a[2] == 0)
|
||||
if (p->var_3F8 != 0 || p->base.port_to_snes[2] == 0)
|
||||
return;
|
||||
if (p->pause_music_ctr != 0 && --p->pause_music_ctr == 0)
|
||||
goto HandleCmd_0xf0_PauseMusic;
|
||||
|
|
@ -696,7 +695,7 @@ label_a:
|
|||
goto handle_cmd_00;
|
||||
} else if (a == 0xf0) HandleCmd_0xf0_PauseMusic: {
|
||||
p->key_OFF = p->is_chan_on ^ 0xff;
|
||||
p->port_to_snes_a[2] = 0;
|
||||
p->base.port_to_snes[2] = 0;
|
||||
p->port_to_snes_b[2] = 0;
|
||||
p->cur_chan_bit = 0;
|
||||
} else if (a == 0xf3) {
|
||||
|
|
@ -720,10 +719,10 @@ less_0xf3:
|
|||
}
|
||||
p->pause_music_ctr = 0;
|
||||
p->some_volume_flag = 0;
|
||||
p->port_to_snes_a[2] = a;
|
||||
p->base.port_to_snes[2] = a;
|
||||
t = WORD(p->ram[0xc000 + (a - 1) * 2]);
|
||||
if ((t >> 8) == 0) {
|
||||
p->port_to_snes_a[2] = 0;
|
||||
p->base.port_to_snes[2] = 0;
|
||||
return;
|
||||
}
|
||||
p->music_ptr_toplevel = t;
|
||||
|
|
@ -925,14 +924,14 @@ static void SmasSpcPlayer_Upload(SpcPlayer *p_in, const uint8_t *data) {
|
|||
} while (--numbytes);
|
||||
}
|
||||
p->pause_music_ctr = 0;
|
||||
p->port_to_snes_a[0] = 0;
|
||||
p->port_to_snes_a[1] = 0;
|
||||
p->port_to_snes_a[3] = 0;
|
||||
p->base.port_to_snes[0] = 0;
|
||||
p->base.port_to_snes[1] = 0;
|
||||
p->base.port_to_snes[3] = 0;
|
||||
p->enable_some_randomstuff = 0;
|
||||
p->is_chan_on = 0;
|
||||
p->extra_tempo = 0;
|
||||
if (!p->var_3F8)
|
||||
p->port_to_snes_a[2] = 0;
|
||||
p->base.port_to_snes[2] = 0;
|
||||
memset(p->base.input_ports, 0, sizeof(p->base.input_ports));
|
||||
memset(p->last_value_from_snes, 0, sizeof(p->last_value_from_snes));
|
||||
memset(p->new_value_from_snes, 0, sizeof(p->new_value_from_snes));
|
||||
|
|
@ -1131,11 +1130,11 @@ static void HandleEffect(SmasSpcPlayer *p, Channel *c, uint8 effect) {
|
|||
}
|
||||
|
||||
static void Sfx_TerminateSfx4(SmasSpcPlayer *p) {
|
||||
if (p->port_to_snes_a[0] == 17) {
|
||||
if (p->base.port_to_snes[0] == 17) {
|
||||
p->var_3F8 = 0xff;
|
||||
Dsp_Write(p, KOF, 0xff);
|
||||
}
|
||||
p->port_to_snes_a[0] = 0;
|
||||
p->base.port_to_snes[0] = 0;
|
||||
p->port_to_snes_b[0] = 0;
|
||||
p->is_chan_on &= ~0x10;
|
||||
if (p->echo_channels & 0x10) {
|
||||
|
|
@ -1158,7 +1157,7 @@ static void Port0_HandleCmd(SmasSpcPlayer *p) {
|
|||
}
|
||||
if (p->new_value_from_snes[0] == 0x43 || p->new_value_from_snes[0] == 0x12 ||
|
||||
p->new_value_from_snes[0] == 0x11 ||
|
||||
p->port_to_snes_a[0] != 0x11 && p->port_to_snes_a[0] != 0x1d) {
|
||||
p->base.port_to_snes[0] != 0x11 && p->base.port_to_snes[0] != 0x1d) {
|
||||
|
||||
if (p->new_value_from_snes[0] == 0x7f) {
|
||||
p->extra_tempo = 10;
|
||||
|
|
@ -1172,13 +1171,13 @@ static void Port0_HandleCmd(SmasSpcPlayer *p) {
|
|||
}
|
||||
if (p->var_c)
|
||||
goto label_b;
|
||||
if (!p->port_to_snes_a[0])
|
||||
if (!p->base.port_to_snes[0])
|
||||
return;
|
||||
goto label_c;
|
||||
|
||||
label_a:
|
||||
p->port_to_snes_a[0] = cmd;
|
||||
if (p->var_3F8 && p->port_to_snes_a[0] == 18)
|
||||
p->base.port_to_snes[0] = cmd;
|
||||
if (p->var_3F8 && p->base.port_to_snes[0] == 18)
|
||||
p->var_3F8 = 0;
|
||||
p->var_c = 2;
|
||||
Dsp_Write(p, KOF, 0x10);
|
||||
|
|
@ -1188,7 +1187,7 @@ label_a:
|
|||
p->channel[4].pitch_slide_length = 0;
|
||||
p->channel[4].fine_tunea = 0;
|
||||
p->channel[4].channel_transpositionb = 0;
|
||||
if (p->port_to_snes_a[0] == 0x3b || p->port_to_snes_a[0] == 0x43) {
|
||||
if (p->base.port_to_snes[0] == 0x3b || p->base.port_to_snes[0] == 0x43) {
|
||||
p->reg_EON &= ~0x10;
|
||||
Dsp_Write(p, EON, p->reg_EON);
|
||||
}
|
||||
|
|
@ -1251,7 +1250,7 @@ label_c:
|
|||
goto note_continue;
|
||||
} else if (cmd == 0xff) {
|
||||
is_ff:
|
||||
p->sfx_sound_ptr_cur = WORD(p->ram[0x17D8 + (p->port_to_snes_a[0] - 1) * 2]);
|
||||
p->sfx_sound_ptr_cur = WORD(p->ram[0x17D8 + (p->base.port_to_snes[0] - 1) * 2]);
|
||||
} else {
|
||||
PlayNote(p, &p->channel[4], cmd);
|
||||
Write_KeyOn(p, 0x10);
|
||||
|
|
@ -1273,7 +1272,7 @@ note_continue:
|
|||
}
|
||||
|
||||
static void Sfx_TerminateSfx6(SmasSpcPlayer *p) {
|
||||
p->port_to_snes_a[3] = 0;
|
||||
p->base.port_to_snes[3] = 0;
|
||||
p->port_to_snes_b[3] = 0;
|
||||
p->is_chan_on &= ~0x40;
|
||||
p->reg_NON = 0;
|
||||
|
|
@ -1293,18 +1292,18 @@ static void Port3_HandleCmd(SmasSpcPlayer *p) {
|
|||
p->new_value_from_snes[3] &= 0x7f;
|
||||
}
|
||||
|
||||
if (p->port_to_snes_a[3] == 29 ||
|
||||
(p->new_value_from_snes[3] != 5 && p->port_to_snes_a[3] == 5) ||
|
||||
if (p->base.port_to_snes[3] == 29 ||
|
||||
(p->new_value_from_snes[3] != 5 && p->base.port_to_snes[3] == 5) ||
|
||||
p->new_value_from_snes[3] == 0) {
|
||||
|
||||
if (p->port3_timeout)
|
||||
goto label_b;
|
||||
if (p->port_to_snes_a[3])
|
||||
if (p->base.port_to_snes[3])
|
||||
goto label_c;
|
||||
return;
|
||||
}
|
||||
|
||||
p->port_to_snes_a[3] = p->new_value_from_snes[3];
|
||||
p->base.port_to_snes[3] = p->new_value_from_snes[3];
|
||||
p->port3_timeout = 2;
|
||||
Dsp_Write(p, KOF, 0x40);
|
||||
p->is_chan_on |= 0x40;
|
||||
|
|
@ -1317,7 +1316,7 @@ static void Port3_HandleCmd(SmasSpcPlayer *p) {
|
|||
label_b:
|
||||
if (--p->port3_timeout)
|
||||
return;
|
||||
p->port3_cur_ptr = WORD(p->ram[0x173c + (p->port_to_snes_a[3] - 1) * 2]);
|
||||
p->port3_cur_ptr = WORD(p->ram[0x173c + (p->base.port_to_snes[3] - 1) * 2]);
|
||||
goto lbl_begin;
|
||||
|
||||
|
||||
|
|
@ -1490,7 +1489,7 @@ static void Port1_HandleCmd(SmasSpcPlayer *p) {
|
|||
p->new_value_from_snes[1] &= 0xf;
|
||||
|
||||
if (p->new_value_from_snes[1] == 1) {
|
||||
p->port_to_snes_a[1] = 1;
|
||||
p->base.port_to_snes[1] = 1;
|
||||
p->chan7_timer = 4;
|
||||
Dsp_Write(p, KOF, 0x80);
|
||||
p->is_chan_on |= 0x80;
|
||||
|
|
@ -1498,8 +1497,8 @@ static void Port1_HandleCmd(SmasSpcPlayer *p) {
|
|||
p->channel[7].pitch_slide_length = 0;
|
||||
p->channel[7].fine_tunea = 0;
|
||||
p->channel[7].channel_transpositionb = 0;
|
||||
} else if (p->port_to_snes_a[1] != 1 && p->new_value_from_snes[1] == 4) {
|
||||
p->port_to_snes_a[1] = 4;
|
||||
} else if (p->base.port_to_snes[1] != 1 && p->new_value_from_snes[1] == 4) {
|
||||
p->base.port_to_snes[1] = 4;
|
||||
p->chan7_timer = 2;
|
||||
Dsp_Write(p, KOF, 0x80);
|
||||
p->is_chan_on |= 0x80;
|
||||
|
|
@ -1507,7 +1506,7 @@ static void Port1_HandleCmd(SmasSpcPlayer *p) {
|
|||
p->channel[7].pitch_slide_length = 0;
|
||||
p->channel[7].channel_transpositionb = 0;
|
||||
p->channel[7].fine_tunea = 0;
|
||||
} else if (p->port_to_snes_a[1] == 1) {
|
||||
} else if (p->base.port_to_snes[1] == 1) {
|
||||
if (p->chan7_timer) {
|
||||
if (--p->chan7_timer)
|
||||
return;
|
||||
|
|
@ -1527,7 +1526,7 @@ static void Port1_HandleCmd(SmasSpcPlayer *p) {
|
|||
ComputePitchAdd(&p->channel[7], 0xb9);
|
||||
}
|
||||
} else {
|
||||
p->port_to_snes_a[1] = 0;
|
||||
p->base.port_to_snes[1] = 0;
|
||||
p->is_chan_on &= ~0x80;
|
||||
p->channel[7].pitch_slide_length = 0;
|
||||
p->channel[7].channel_transpositionb = p->channel[7].channel_transpositiona;
|
||||
|
|
@ -1545,7 +1544,7 @@ static void Port1_HandleCmd(SmasSpcPlayer *p) {
|
|||
p->cur_chan_bit = 0;
|
||||
WritePitch(p, &p->channel[7], p->channel[7].pitch);
|
||||
}
|
||||
} else if (p->port_to_snes_a[1] == 4) {
|
||||
} else if (p->base.port_to_snes[1] == 4) {
|
||||
Chan7_Func1605(p);
|
||||
}
|
||||
}
|
||||
|
|
@ -1569,7 +1568,7 @@ static void Chan7_Func1605(SmasSpcPlayer *p) {
|
|||
Dsp_Write(p, V7VOLR, 20);
|
||||
Write_KeyOn(p, 0x80);
|
||||
} else {
|
||||
p->port_to_snes_a[1] = 0;
|
||||
p->base.port_to_snes[1] = 0;
|
||||
p->is_chan_on &= ~0x80;
|
||||
p->channel[7].pitch_slide_length = 0;
|
||||
p->channel[7].channel_transpositionb = p->channel[7].channel_transpositiona;
|
||||
|
|
|
|||
|
|
@ -1594,17 +1594,17 @@ void Smbll_UploadStripeImage() {
|
|||
|
||||
R6_ = 0;
|
||||
v0 = 0;
|
||||
for (i = *IndirPtr(&R0_, 0); i >= 0; i = *IndirPtr(&R0_, v0)) {
|
||||
for (i = *IndirPtr((LongPtr *)&R0_, 0); i >= 0; i = *IndirPtr((LongPtr *)&R0_, v0)) {
|
||||
R4_ = i;
|
||||
v2 = v0 + 1;
|
||||
R3_ = *IndirPtr(&R0_, v2++);
|
||||
v3 = *IndirPtr(&R0_, v2) & 0x80;
|
||||
R3_ = *IndirPtr((LongPtr *)&R0_, v2++);
|
||||
v3 = *IndirPtr((LongPtr *)&R0_, v2) & 0x80;
|
||||
R7_ = 4 * v3 + __CFSHL__(v3, 1);
|
||||
R5_ = *IndirPtr(&R0_, v2) & 0x40;
|
||||
R5_ = *IndirPtr((LongPtr *)&R0_, v2) & 0x40;
|
||||
WriteReg(DMAP1, (R5_ >> 3) | 1);
|
||||
WriteReg(BBAD1, 0x18u);
|
||||
WriteRegWord(VMADDL, *(uint16 *)&R3_);
|
||||
v4 = IndirPtr(&R0_, v2);
|
||||
v4 = IndirPtr((LongPtr *)&R0_, v2);
|
||||
LOBYTE(v5) = HIBYTE(*(uint16 *)v4);
|
||||
HIBYTE(v5) = *(uint16 *)v4;
|
||||
v6 = (v5 & 0x3FFF) + 1;
|
||||
|
|
|
|||
|
|
@ -401,7 +401,7 @@ void Smbll_SpawnCastleTilesWithPriority() {
|
|||
v0 = *(uint16 *)vram_buffer1;
|
||||
v1 = 0;
|
||||
do {
|
||||
v2 = IndirPtr(&tempF3, v1);
|
||||
v2 = IndirPtr((LongPtr *)&tempF3, v1);
|
||||
v3 = *(uint16 *)v2;
|
||||
*(uint16 *)&vram_buffer1[v0 + 2] = *(uint16 *)v2;
|
||||
v1 += 2;
|
||||
|
|
@ -544,7 +544,7 @@ void Smbll_DecodeAreaData_Sub2_New(uint16 j) {
|
|||
tempF4 = HIBYTE(addr);
|
||||
tempF3 = addr;
|
||||
tempF5 = area_data_ptr.bank;
|
||||
v3 = IndirPtr(&tempF3, j + 2);
|
||||
v3 = IndirPtr((LongPtr *)&tempF3, j + 2);
|
||||
v4 = *v3 & 0x7F;
|
||||
v5 = (int)(uint8)v4 >> 1;
|
||||
R0_ = *((uint8 *)koff_188C1 + (*v3 & 0x7F));
|
||||
|
|
@ -848,8 +848,8 @@ uint8 Smbll_CODE_0491C0(uint8 k) {
|
|||
uint16 v1; // di
|
||||
|
||||
v1 = area_obj_offset_buffer[(uint16)(2 * k) >> 1] + 1;
|
||||
R7_ = *IndirPtr(&tempF3, v1) >> 4;
|
||||
return *IndirPtr(&tempF3, v1) & 0xF;
|
||||
R7_ = *IndirPtr((LongPtr *)&tempF3, v1) >> 4;
|
||||
return *IndirPtr((LongPtr *)&tempF3, v1) & 0xF;
|
||||
}
|
||||
|
||||
uint8 Smbll_CODE_0491DD() {
|
||||
|
|
@ -1199,7 +1199,7 @@ PairU16 Smbll_CODE_049724(uint8 k, uint8 j) {
|
|||
*(uint16 *)&R4_ = 1;
|
||||
*(uint16 *)&R0_ = 16;
|
||||
do {
|
||||
palette_mirror[k >> 1] = *(uint16 *)IndirPtr(&R2_, j);
|
||||
palette_mirror[k >> 1] = *(uint16 *)IndirPtr((LongPtr *)&R2_, j);
|
||||
j += 2;
|
||||
k += 2;
|
||||
--*(uint16 *)&R0_;
|
||||
|
|
@ -1242,7 +1242,7 @@ void Smbll_CODE_04973C() {
|
|||
*(uint16 *)&tempF6 = v3;
|
||||
tempF7 = *((uint8 *)kword_1B4BA + (uint16)(*(uint16 *)&tempF8 + 1)) & 0x3F;
|
||||
while (1) {
|
||||
IndirWriteByte(&tempF3, v2, tempF7);
|
||||
IndirWriteByte((LongPtr *)&tempF3, v2, tempF7);
|
||||
if (!tempF6 || (v2 & 0xF0) == 0xD0)
|
||||
break;
|
||||
LOBYTE(v1) = v2 + 16;
|
||||
|
|
|
|||
|
|
@ -1103,12 +1103,12 @@ void Smbll_GenerateLayer2Map16() {
|
|||
v3 = *(uint16 *)&tempE4;
|
||||
v4 = 8 * (uint8)v2;
|
||||
v5 = *(uint16 *)&tempE4 >> 1;
|
||||
layer2_map16_table[v5] = *(uint16 *)IndirPtr(&R0_, v4);
|
||||
layer2_map16_table[v5] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4);
|
||||
v4 += 2;
|
||||
layer2_map16_table[v5 + 1] = *(uint16 *)IndirPtr(&R0_, v4);
|
||||
layer2_map16_table[v5 + 1] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4);
|
||||
v4 += 2;
|
||||
layer2_map16_table[v5 + 32] = *(uint16 *)IndirPtr(&R0_, v4);
|
||||
layer2_map16_table[v5 + 33] = *(uint16 *)IndirPtr(&R0_, v4 + 2);
|
||||
layer2_map16_table[v5 + 32] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4);
|
||||
layer2_map16_table[v5 + 33] = *(uint16 *)IndirPtr((LongPtr *)&R0_, v4 + 2);
|
||||
v1 = v6 + 1;
|
||||
if ((((uint8)v6 + 1) & 0xF) == 0)
|
||||
v3 += 64;
|
||||
|
|
|
|||
|
|
@ -58,10 +58,10 @@ void Smbll_HandleSPCUploads_Main() {
|
|||
LOBYTE(v1) = -52;
|
||||
while (1) {
|
||||
v13 = v1;
|
||||
v9 = IndirPtr(&R0_, v0);
|
||||
v9 = IndirPtr((LongPtr *)&R0_, v0);
|
||||
v10 = v0 + 2;
|
||||
v4 = *(uint16 *)v9;
|
||||
v11 = *(uint16 *)IndirPtr(&R0_, v10);
|
||||
v11 = *(uint16 *)IndirPtr((LongPtr *)&R0_, v10);
|
||||
v12 = v10 + 2;
|
||||
WriteRegWord(APUI02, v11);
|
||||
WriteReg(APUI01, v4 != 0);
|
||||
|
|
@ -70,14 +70,14 @@ void Smbll_HandleSPCUploads_Main() {
|
|||
;
|
||||
if (Unreachable())
|
||||
break;
|
||||
v2 = IndirPtr(&R0_, v12);
|
||||
v2 = IndirPtr((LongPtr *)&R0_, v12);
|
||||
v0 = v12 + 1;
|
||||
HIBYTE(v1) = *v2;
|
||||
for (LOBYTE(v1) = 0;; LOBYTE(v1) = v1 + 1) {
|
||||
WriteRegWord(APUI00, v1);
|
||||
if (!--v4)
|
||||
break;
|
||||
v3 = IndirPtr(&R0_, v0++);
|
||||
v3 = IndirPtr((LongPtr *)&R0_, v0++);
|
||||
HIBYTE(v1) = *v3;
|
||||
while ((uint8)v1 != ReadReg(APUI00))
|
||||
;
|
||||
|
|
|
|||
|
|
@ -154,7 +154,9 @@ RESET_GAME:
|
|||
}
|
||||
}
|
||||
|
||||
static void SmbllDrawPpuFrame(void) {
|
||||
|
||||
}
|
||||
const RtlGameInfo kSmbllGameInfo = {
|
||||
"smbll",
|
||||
kGameID_SMBLL,
|
||||
|
|
@ -163,5 +165,6 @@ const RtlGameInfo kSmbllGameInfo = {
|
|||
&SmbllCpuInitialize,
|
||||
&SmbllRunOneFrameOfGame,
|
||||
&SmbllRunOneFrameOfGame_Emulated,
|
||||
&SmbllDrawPpuFrame,
|
||||
&SmbllFixSnapshotForCompare,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -186,6 +186,19 @@ static void VerifySnapshotsEq(Snapshot *b, Snapshot *a, Snapshot *prev) {
|
|||
}
|
||||
}
|
||||
|
||||
if (memcmp(b->cgram, a->cgram, sizeof(uint16) * 0x100)) {
|
||||
fprintf(stderr, "@%d: VRAM cgram compare failed (mine != theirs, prev):\n", snes_frame_counter);
|
||||
for (size_t i = 0, j = 0; i < 0x100; i++) {
|
||||
if (a->cgram[i] != b->cgram[i]) {
|
||||
fprintf(stderr, "0x%.6X: %.4X != %.4X (%.4X)\n", (int)i, b->cgram[i], a->cgram[i], prev->cgram[i]);
|
||||
g_fail = true;
|
||||
if (++j >= 16)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -200,6 +213,7 @@ static void MakeSnapshot(Snapshot *s) {
|
|||
memcpy(s->sram, g_snes->cart->ram, g_snes->cart->ramSize);
|
||||
memcpy(s->vram, g_snes->ppu->vram, sizeof(uint16) * 0x8000);
|
||||
memcpy(s->oam, g_snes->ppu->oam, sizeof(uint16) * 0x120);
|
||||
memcpy(s->cgram, g_snes->ppu->cgram, sizeof(uint16) * 0x100);
|
||||
}
|
||||
|
||||
static void MakeMySnapshot(Snapshot *s) {
|
||||
|
|
@ -207,6 +221,7 @@ static void MakeMySnapshot(Snapshot *s) {
|
|||
memcpy(s->sram, g_snes->cart->ram, g_snes->cart->ramSize);
|
||||
memcpy(s->vram, g_snes->ppu->vram, sizeof(uint16) * 0x8000);
|
||||
memcpy(s->oam, g_snes->ppu->oam, sizeof(uint16) * 0x120);
|
||||
memcpy(s->cgram, g_snes->ppu->cgram, sizeof(uint16) * 0x100);
|
||||
}
|
||||
|
||||
static void RestoreSnapshot(Snapshot *s) {
|
||||
|
|
@ -220,6 +235,7 @@ static void RestoreSnapshot(Snapshot *s) {
|
|||
memcpy(g_snes->cart->ram, s->sram, g_snes->cart->ramSize);
|
||||
memcpy(g_snes->ppu->vram, s->vram, sizeof(uint16) * 0x8000);
|
||||
memcpy(g_snes->ppu->oam, s->oam, sizeof(uint16) * 0x120);
|
||||
memcpy(g_snes->ppu->cgram, s->cgram, sizeof(uint16) * 0x100);
|
||||
}
|
||||
|
||||
static bool loadRom(const char *name, Snes *snes) {
|
||||
|
|
@ -344,11 +360,13 @@ static void RtlRunFrameCompare(uint16 input, int run_what) {
|
|||
|
||||
if (g_runmode == RM_THEIRS) {
|
||||
g_use_my_apu_code = false;
|
||||
g_snes->ppu = g_snes->snes_ppu;
|
||||
g_snes->runningWhichVersion = 1;
|
||||
g_rtl_game_info->run_frame_emulated();
|
||||
g_snes->runningWhichVersion = 0;
|
||||
} else if (g_runmode == RM_MINE) {
|
||||
g_use_my_apu_code = true;
|
||||
g_snes->ppu = g_snes->snes_ppu;
|
||||
g_snes->runningWhichVersion = 2;
|
||||
g_rtl_game_info->run_frame();
|
||||
g_snes->runningWhichVersion = 0;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ typedef struct RtlGameInfo {
|
|||
CpuInfraInitializeFunc *initialize;
|
||||
RunOneFrameOfGameFunc *run_frame;
|
||||
RunOneFrameOfGameFunc *run_frame_emulated;
|
||||
RunOneFrameOfGameFunc *draw_ppu_frame;
|
||||
FixSnapshotForCompareFunc *fix_snapshot_for_compare;
|
||||
} RtlGameInfo;
|
||||
|
||||
|
|
@ -44,6 +45,7 @@ typedef struct Snapshot {
|
|||
uint8 sram[0x2000];
|
||||
|
||||
uint16 oam[0x120];
|
||||
uint16 cgram[0x100];
|
||||
} Snapshot;
|
||||
|
||||
extern const RtlGameInfo kSmwGameInfo;
|
||||
|
|
|
|||
243
src/common_rtl.c
243
src/common_rtl.c
|
|
@ -9,7 +9,10 @@ struct StateRecorder;
|
|||
|
||||
static void RtlSaveMusicStateToRam_Locked();
|
||||
static void RtlRestoreMusicAfterLoad_Locked(bool is_reset);
|
||||
static uint8 RtlApuReadReg(int reg);
|
||||
|
||||
void SmwSavePlaythroughSnapshot();
|
||||
void SmwLoadNextPlaybackSnapshot();
|
||||
|
||||
uint8 g_ram[0x20000];
|
||||
uint8 *g_sram;
|
||||
|
|
@ -18,6 +21,7 @@ const uint8 *g_rom;
|
|||
bool g_is_uploading_apu;
|
||||
bool g_did_finish_level_hook;
|
||||
uint8 game_id;
|
||||
bool g_playback_mode;
|
||||
|
||||
static uint8 *g_rtl_memory_ptr;
|
||||
static RunFrameFunc *g_rtl_runframe;
|
||||
|
|
@ -392,11 +396,6 @@ void RtlStopReplay(void) {
|
|||
StateRecorder_StopReplay(&state_recorder);
|
||||
}
|
||||
|
||||
enum {
|
||||
// Version was bumped to 1 after I fixed bug #1
|
||||
kCurrentBugFixCounter = 1,
|
||||
};
|
||||
|
||||
bool RtlRunFrame(int inputs) {
|
||||
if (g_did_finish_level_hook) {
|
||||
if (game_id == kGameID_SMW && !state_recorder.replay_mode && g_config.save_playthrough) {
|
||||
|
|
@ -404,6 +403,8 @@ bool RtlRunFrame(int inputs) {
|
|||
RtlClearKeyLog();
|
||||
}
|
||||
g_did_finish_level_hook = false;
|
||||
if (g_playback_mode)
|
||||
SmwLoadNextPlaybackSnapshot();
|
||||
}
|
||||
|
||||
// Avoid up/down and left/right from being pressed at the same time
|
||||
|
|
@ -422,6 +423,17 @@ bool RtlRunFrame(int inputs) {
|
|||
inputs = state_recorder.last_inputs;
|
||||
}
|
||||
StateRecorder_Record(&state_recorder, inputs);
|
||||
|
||||
if (game_id == kGameID_SMW) {
|
||||
// This is whether APUI02 is true or false, this is used by the ancilla code.
|
||||
uint8 apui02 = RtlApuReadReg(2);
|
||||
if (apui02 != g_ram[kSmwRam_APUI02]) {
|
||||
g_ram[kSmwRam_APUI02] = apui02;
|
||||
StateRecorder_RecordPatchByte(&state_recorder, kSmwRam_APUI02, &apui02, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
g_rtl_runframe(inputs, 0);
|
||||
|
|
@ -441,12 +453,48 @@ void RtlSaveSnapshot(const char *filename, bool saving_with_bug) {
|
|||
fclose(f);
|
||||
}
|
||||
|
||||
static void RtlLoadFromFile(FILE *f, bool replay) {
|
||||
RtlApuLock();
|
||||
|
||||
Ppu *ppu = g_snes->ppu;
|
||||
g_snes->ppu = g_snes->snes_ppu;
|
||||
|
||||
StateRecorder_Load(&state_recorder, f, replay);
|
||||
ppu_copy(g_snes->my_ppu, g_snes->ppu);
|
||||
|
||||
g_snes->ppu = ppu;
|
||||
RtlApuUnlock();
|
||||
RtlSynchronizeWholeState();
|
||||
}
|
||||
|
||||
static const char *const kBugSaves[] = {
|
||||
"smb1-bug-1685653215",
|
||||
"playthrough/1_1",
|
||||
};
|
||||
|
||||
|
||||
static int g_playback_ctr = ( 89 - 1) * 2; // 49
|
||||
void SmwLoadNextPlaybackSnapshot() {
|
||||
char name[128];
|
||||
for (int i = 0; i < 100; i++) {
|
||||
g_playback_ctr++;
|
||||
sprintf(name, "saves/playthrough/%d_%d.sav", g_playback_ctr >> 1, (g_playback_ctr & 1) + 1);
|
||||
FILE *f = fopen(name, "rb");
|
||||
if (f) {
|
||||
printf("Playthrough %s\n", name);
|
||||
RtlLoadFromFile(f, true);
|
||||
fclose(f);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RtlSaveLoad(int cmd, int slot) {
|
||||
char name[128];
|
||||
if (cmd == kSaveLoad_Replay && slot == 256) {
|
||||
g_playback_mode = 1;
|
||||
SmwLoadNextPlaybackSnapshot();
|
||||
return;
|
||||
}
|
||||
if (slot >= 256) {
|
||||
int i = slot - 256;
|
||||
if (cmd == kSaveLoad_Save || i >= sizeof(kBugSaves) / sizeof(kBugSaves[0]))
|
||||
|
|
@ -461,23 +509,19 @@ void RtlSaveLoad(int cmd, int slot) {
|
|||
printf("*** %s slot %d: %s\n",
|
||||
cmd == kSaveLoad_Save ? "Saving" : cmd == kSaveLoad_Load ? "Loading" : "Replaying", slot, name);
|
||||
if (cmd != kSaveLoad_Save) {
|
||||
|
||||
FILE *f = fopen(name, "rb");
|
||||
if (f == NULL) {
|
||||
printf("Failed fopen: %s\n", name);
|
||||
return;
|
||||
}
|
||||
RtlApuLock();
|
||||
StateRecorder_Load(&state_recorder, f, cmd == kSaveLoad_Replay);
|
||||
ppu_copy(g_snes->my_ppu, g_snes->ppu);
|
||||
RtlApuUnlock();
|
||||
RtlSynchronizeWholeState();
|
||||
RtlLoadFromFile(f, cmd == kSaveLoad_Replay);
|
||||
fclose(f);
|
||||
} else {
|
||||
RtlSaveSnapshot(name, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MemCpy(void *dst, const void *src, int size) {
|
||||
memcpy(dst, src, size);
|
||||
}
|
||||
|
|
@ -548,7 +592,7 @@ void WriteRegWord(uint16 reg, uint16 value) {
|
|||
WriteReg(reg + 1, value >> 8);
|
||||
}
|
||||
|
||||
uint8 *IndirPtr(void *ptr, uint16 offs) {
|
||||
uint8 *IndirPtr(LongPtr *ptr, uint16 offs) {
|
||||
uint32 a = (*(uint32 *)ptr & 0xffffff) + offs;
|
||||
if ((a >> 16) >= 0x7e && (a >> 16) <= 0x7f || (a & 0xffff) < 0x2000) {
|
||||
return &g_ram[a & 0x1ffff];
|
||||
|
|
@ -557,12 +601,12 @@ uint8 *IndirPtr(void *ptr, uint16 offs) {
|
|||
}
|
||||
}
|
||||
|
||||
void IndirWriteWord(void *ptr, uint16 offs, uint16 value) {
|
||||
void IndirWriteWord(LongPtr *ptr, uint16 offs, uint16 value) {
|
||||
uint8 *p = IndirPtr(ptr, offs);
|
||||
WORD(*p) = value;
|
||||
}
|
||||
|
||||
void IndirWriteByte(void *ptr, uint16 offs, uint8 value) {
|
||||
void IndirWriteByte(LongPtr *ptr, uint16 offs, uint8 value) {
|
||||
uint8 *p = IndirPtr(ptr, offs);
|
||||
p[0] = value;
|
||||
}
|
||||
|
|
@ -604,7 +648,7 @@ void RtlSetUploadingApu(bool uploading) {
|
|||
RtlApuUnlock();
|
||||
}
|
||||
|
||||
void RtlApuWrite(uint32 adr, uint8 val) {
|
||||
void RtlApuWrite(uint16 adr, uint8 val) {
|
||||
assert(adr >= APUI00 && adr <= APUI03);
|
||||
|
||||
if (g_is_uploading_apu) {
|
||||
|
|
@ -685,6 +729,12 @@ void RtlApuReset() {
|
|||
RtlApuUnlock();
|
||||
}
|
||||
|
||||
static uint8 RtlApuReadReg(int reg) {
|
||||
if (g_use_my_apu_code)
|
||||
return g_spc_player->port_to_snes[reg];
|
||||
return g_snes->apu->outPorts[reg];
|
||||
}
|
||||
|
||||
void RtlRestoreMusicAfterLoad_Locked(bool is_reset) {
|
||||
if (g_use_my_apu_code) {
|
||||
memcpy(g_spc_player->ram, g_snes->apu->ram, 65536);
|
||||
|
|
@ -764,3 +814,164 @@ void RtlWriteSram(void) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SmwCopyToVram(uint16 vram_addr, const uint8 *src, int n) {
|
||||
for (size_t i = 0; i < (n >> 1); i++)
|
||||
g_snes->ppu->vram[vram_addr + i] = WORD(src[i * 2]);
|
||||
}
|
||||
|
||||
void SmwCopyToVramPitch32(uint16 vram_addr, const uint8 *src, int n) {
|
||||
for (size_t i = 0; i < (n >> 1); i++)
|
||||
g_snes->ppu->vram[vram_addr + i * 32] = WORD(src[i * 2]);
|
||||
}
|
||||
|
||||
void SmwCopyToVramLow(uint16 vram_addr, const uint8 *src, int n) {
|
||||
for (size_t i = 0; i < n; i++)
|
||||
g_snes->ppu->vram[vram_addr + i] = (g_snes->ppu->vram[vram_addr + i] & 0xff00) | src[i];
|
||||
}
|
||||
|
||||
void RtlUpdatePalette(const uint16 *src, int dst, int n) {
|
||||
for(int i = 0; i < n; i++)
|
||||
g_snes->ppu->cgram[dst + i] = src[i];
|
||||
}
|
||||
|
||||
void SmwClearVram(uint16 vram_addr, uint16 value, int n) {
|
||||
for (int i = 0; i < n; i++)
|
||||
g_snes->ppu->vram[vram_addr + i] = value;
|
||||
}
|
||||
|
||||
uint16 *RtlGetVramAddr() {
|
||||
return g_snes->ppu->vram;
|
||||
}
|
||||
|
||||
void RtlPpuWrite(uint16 addr, uint8 value) {
|
||||
assert((addr & 0xff00) == 0x2100);
|
||||
ppu_write(g_snes->ppu, addr, value);
|
||||
}
|
||||
|
||||
void RtlPpuWriteTwice(uint16 addr, uint16 value) {
|
||||
RtlPpuWrite(addr, value);
|
||||
RtlPpuWrite(addr, value >> 8);
|
||||
}
|
||||
|
||||
void RtlHdmaSetup(uint8 which, uint8 transfer_unit, uint8 reg, uint32 addr, uint8 indirect_bank) {
|
||||
Dma *dma = g_snes->dma;
|
||||
dma_write(dma, DMAP0 + which * 16, transfer_unit);
|
||||
dma_write(dma, BBAD0 + which * 16, reg);
|
||||
dma_write(dma, A1T0L + which * 16, addr);
|
||||
dma_write(dma, A1T0H + which * 16, addr >> 8);
|
||||
dma_write(dma, A1B0 + which * 16, addr >> 16);
|
||||
dma_write(dma, DAS00 + which * 16, indirect_bank);
|
||||
}
|
||||
|
||||
void RtlEnableVirq(int line) {
|
||||
g_snes->vIrqEnabled = line >= 0;
|
||||
if (line >= 0)
|
||||
g_snes->vTimer = line;
|
||||
}
|
||||
|
||||
static const uint8 kSetupHDMAWindowingEffects_DATA_00927C[] = { 0xF0,0xA0, 4,0xF0,0x80, 5, 0 };
|
||||
static const uint8 *SimpleHdma_GetPtr(uint32 p) {
|
||||
if (game_id == kGameID_SMW) {
|
||||
switch (p) {
|
||||
case 0x927c: return kSetupHDMAWindowingEffects_DATA_00927C;
|
||||
}
|
||||
if (p < 0x2000)
|
||||
return g_ram + p;
|
||||
}
|
||||
printf("SimpleHdma_GetPtr: bad addr 0x%x\n", p);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void SimpleHdma_Init(SimpleHdma *c, DmaChannel *dc) {
|
||||
if (!dc->hdmaActive) {
|
||||
c->table = 0;
|
||||
return;
|
||||
}
|
||||
c->table = SimpleHdma_GetPtr(dc->aAdr | dc->aBank << 16);
|
||||
c->rep_count = 0;
|
||||
c->mode = dc->mode | dc->indirect << 6;
|
||||
c->ppu_addr = dc->bAdr;
|
||||
c->indir_bank = dc->indBank;
|
||||
}
|
||||
|
||||
void SimpleHdma_DoLine(SimpleHdma *c) {
|
||||
static const uint8 bAdrOffsets[8][4] = {
|
||||
{0, 0, 0, 0},
|
||||
{0, 1, 0, 1},
|
||||
{0, 0, 0, 0},
|
||||
{0, 0, 1, 1},
|
||||
{0, 1, 2, 3},
|
||||
{0, 1, 0, 1},
|
||||
{0, 0, 0, 0},
|
||||
{0, 0, 1, 1}
|
||||
};
|
||||
static const uint8 transferLength[8] = {
|
||||
1, 2, 2, 4, 4, 4, 2, 4
|
||||
};
|
||||
|
||||
if (c->table == NULL)
|
||||
return;
|
||||
bool do_transfer = false;
|
||||
if ((c->rep_count & 0x7f) == 0) {
|
||||
c->rep_count = *c->table++;
|
||||
if (c->rep_count == 0) {
|
||||
c->table = NULL;
|
||||
return;
|
||||
}
|
||||
if(c->mode & 0x40) {
|
||||
c->indir_ptr = SimpleHdma_GetPtr(c->indir_bank << 16 | c->table[0] | c->table[1] * 256);
|
||||
c->table += 2;
|
||||
}
|
||||
do_transfer = true;
|
||||
}
|
||||
if(do_transfer || c->rep_count & 0x80) {
|
||||
for(int j = 0, j_end = transferLength[c->mode & 7]; j < j_end; j++) {
|
||||
uint8 v = c->mode & 0x40 ? *c->indir_ptr++ : *c->table++;
|
||||
RtlPpuWrite(0x2100 + c->ppu_addr + bAdrOffsets[c->mode & 7][j], v);
|
||||
}
|
||||
}
|
||||
c->rep_count--;
|
||||
}
|
||||
|
||||
|
||||
void LoadStripeImage_UploadToVRAM(const uint8 *pp) { // 00871e
|
||||
while (1) {
|
||||
if ((*pp & 0x80) != 0)
|
||||
break;
|
||||
uint16 vram_addr = pp[0] << 8 | pp[1];
|
||||
uint8 vmain = __CFSHL__(pp[2], 1);
|
||||
uint8 fixed_addr = (uint8)(pp[2] & 0x40) >> 3;
|
||||
uint16 num = (swap16(WORD(pp[2])) & 0x3FFF) + 1;
|
||||
uint16 *dst = g_snes->ppu->vram + vram_addr;
|
||||
pp += 4;
|
||||
|
||||
if (fixed_addr) {
|
||||
uint16 src_data = WORD(*pp);
|
||||
int ctr = (num + 1) >> 1;
|
||||
if (vmain) {
|
||||
for (int i = 0; i < ctr; i++)
|
||||
dst[i * 32] = src_data;
|
||||
} else {
|
||||
// uhm...?
|
||||
uint8 *dst_b = (uint8 *)dst;
|
||||
for (int i = 0; i < num; i++)
|
||||
dst_b[i + ((i & 1) << 1)] = src_data;
|
||||
for (int i = 0; i < num; i += 2)
|
||||
dst_b[i + 1] = src_data >> 8;
|
||||
}
|
||||
pp += 2;
|
||||
} else {
|
||||
uint16 *src = (uint16 *)pp;
|
||||
if (vmain) {
|
||||
for (int i = 0; i < (num >> 1); i++)
|
||||
dst[i * 32] = src[i];
|
||||
} else {
|
||||
for (int i = 0; i < (num >> 1); i++)
|
||||
dst[i] = src[i];
|
||||
}
|
||||
pp += num;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,29 @@ enum {
|
|||
kGameID_SMBLL = 3,
|
||||
};
|
||||
|
||||
enum {
|
||||
// Version was bumped to 1 after I fixed bug #1
|
||||
kCurrentBugFixCounter = 1,
|
||||
|
||||
kSmwRam_APUI02 = 0x18c5,
|
||||
};
|
||||
|
||||
typedef struct SimpleHdma {
|
||||
const uint8 *table;
|
||||
const uint8 *indir_ptr;
|
||||
uint8 rep_count;
|
||||
uint8 mode;
|
||||
uint8 ppu_addr;
|
||||
uint8 indir_bank;
|
||||
} SimpleHdma;
|
||||
|
||||
typedef struct DmaChannel DmaChannel;
|
||||
|
||||
void SimpleHdma_Init(SimpleHdma *c, DmaChannel *dc);
|
||||
void SimpleHdma_DoLine(SimpleHdma *c);
|
||||
void RtlHdmaSetup(uint8 which, uint8 transfer_unit, uint8 reg, uint32 addr, uint8 indirect_bank);
|
||||
|
||||
|
||||
extern uint8 g_ram[0x20000];
|
||||
extern uint8 *g_sram;
|
||||
extern int g_sram_size;
|
||||
|
|
@ -61,7 +84,6 @@ static inline const uint8 *RomPtr_0E(uint16_t addr) { return RomPtr(0x0e0000 | a
|
|||
static inline const uint8 *RomPtr_0F(uint16_t addr) { return RomPtr(0x0f0000 | addr); }
|
||||
static inline const uint8 *RomPtrWithBank(uint8 bank, uint16_t addr) { return RomPtr((bank << 16) | addr); }
|
||||
|
||||
extern void RtlApuWrite(uint32 adr, uint8 val);
|
||||
uint16 Mult8x8(uint8 a, uint8 b);
|
||||
uint16 SnesDivide(uint16 a, uint8 b);
|
||||
uint16 SnesModulus(uint16 a, uint8 b);
|
||||
|
|
@ -71,9 +93,9 @@ void WriteReg(uint16 reg, uint8 value);
|
|||
void WriteRegWord(uint16 reg, uint16 value);
|
||||
uint16 ReadRegWord(uint16 reg);
|
||||
uint8 ReadReg(uint16 reg);
|
||||
uint8_t *IndirPtr(void *ptr, uint16 offs);
|
||||
void IndirWriteWord(void *ptr, uint16 offs, uint16 value);
|
||||
void IndirWriteByte(void *ptr, uint16 offs, uint8 value);
|
||||
uint8_t *IndirPtr(LongPtr *ptr, uint16 offs);
|
||||
void IndirWriteWord(LongPtr *ptr, uint16 offs, uint16 value);
|
||||
void IndirWriteByte(LongPtr *ptr, uint16 offs, uint8 value);
|
||||
|
||||
|
||||
typedef void RunFrameFunc(uint16 input, int run_what);
|
||||
|
|
@ -104,6 +126,14 @@ void RtlReadSram();
|
|||
void RtlWriteSram();
|
||||
void RtlSaveSnapshot(const char *filename, bool saving_with_bug);
|
||||
|
||||
void RtlUpdatePalette(const uint16 *src, int dst, int n);
|
||||
uint16 *RtlGetVramAddr();
|
||||
void RtlPpuWrite(uint16 addr, uint8 value);
|
||||
void RtlPpuWriteTwice(uint16 addr, uint16 value);
|
||||
void RtlApuWrite(uint16 adr, uint8 val);
|
||||
void RtlEnableVirq(int line);
|
||||
|
||||
|
||||
enum {
|
||||
kJoypadL_A = 0x80,
|
||||
kJoypadL_X = 0x40,
|
||||
|
|
|
|||
1736
src/consts.h
1736
src/consts.h
File diff suppressed because it is too large
Load Diff
414
src/funcs.h
414
src/funcs.h
|
|
@ -1,4 +1,31 @@
|
|||
#include "types.h"
|
||||
#include "smw_rtl.h"
|
||||
|
||||
typedef struct CollInfo {
|
||||
uint8 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
|
||||
} CollInfo;
|
||||
|
||||
typedef struct HdmaPtrs {
|
||||
uint16 r4, r6;
|
||||
} HdmaPtrs;
|
||||
|
||||
typedef struct PairU8 {
|
||||
uint16 first, second;
|
||||
} PairU8;
|
||||
|
||||
|
||||
typedef struct CalcTiltPlatformArgs {
|
||||
uint16 temp14b0;
|
||||
uint16 temp14b2;
|
||||
uint16 temp14bc;
|
||||
uint16 temp14bf;
|
||||
} CalcTiltPlatformArgs;
|
||||
|
||||
typedef struct CheckPlatformCollRet {
|
||||
PointU16 pt;
|
||||
bool retval;
|
||||
bool out_of_bounds;
|
||||
} CheckPlatformCollRet;
|
||||
|
||||
// Bank 0
|
||||
PairU16 BufferFileSelectText_009DB5(uint8 k);
|
||||
PairU16 GetPlayerLevelCollisionMap16ID_Entry2(uint8 k);
|
||||
|
|
@ -7,32 +34,30 @@ PairU16 GetPlayerLevelCollisionMap16ID_WallRun(uint8 k);
|
|||
PairU16 HexToDec(uint8 a);
|
||||
PairU16 OwPrompt03_OverworldLifeExchanger_00974C(uint8 a);
|
||||
uint8 CheckWaterSlope(uint8 a);
|
||||
uint8 CheckWhatSlopeSpriteIsOn(uint8 a);
|
||||
uint8 CheckWhatSlopeSpriteIsOn(uint8 a, uint8 r10, uint8 r12, uint8 *r8_slope_type);
|
||||
uint8 GameMode07_TitleScreenDemo_009CBE(void);
|
||||
uint8 GraphicsDecompressionRoutines_ReadByte(void);
|
||||
uint8 HandleMenuCursor_Main_ReturnsTwice(uint8 j);
|
||||
uint16 ManipulateMode7Image_008B2B(uint16 k);
|
||||
uint16 ManipulateMode7Image_008B2B(uint16 k, uint8 r0);
|
||||
uint8 ModifyMap16IDForSpecialBlocks(uint8 a);
|
||||
uint8 PlayerGFXRt_00E45D(uint8 j);
|
||||
uint8 PlayerState00_00F9A8(void);
|
||||
uint8 PlayerState00_00F9BC(void);
|
||||
uint8 PlayerGFXRt_00E45D(uint8 j, uint8 r4, uint8 r5, uint8 r6);
|
||||
uint8 RunPlayerBlockCode_00F3E9(uint8 a, uint8 j);
|
||||
uint8 RunPlayerBlockCode_00F43F(void);
|
||||
uint8 RunPlayerBlockCode_00F443(void);
|
||||
uint8 UpdateHDMAWindowBuffer_00CC14(uint16 j);
|
||||
PairU8 UpdateHDMAWindowBuffer_00CC14(uint16 j, HdmaPtrs hptr, uint8 r1);
|
||||
uint8 sub_F40A(uint8 k, uint8 j, uint8 a);
|
||||
void BufferFileSelectText_Entry3(uint8 k);
|
||||
void BufferFileSelectText_Entry3(uint8 k, uint8 r5);
|
||||
void BufferFileSelectText(void);
|
||||
void BufferLoadingLetterTiles(void);
|
||||
void BufferPalettesRoutines_IggyLarryPlatform(void);
|
||||
void BufferPalettesRoutines_Levels(void);
|
||||
void BufferPalettesRoutines_LoadColorInVerticalStrip(uint16 k);
|
||||
void BufferPalettesRoutines_LoadColors(void);
|
||||
void BufferPalettesRoutines_LoadColorInVerticalStrip(uint16 k, uint16 r4);
|
||||
void BufferPalettesRoutines_LoadColors(uint16 r0, uint16 r4, uint16 r6, uint16 r8);
|
||||
void BufferPalettesRoutines_Overworld(void);
|
||||
void BufferPalettesRoutines_Overworld(void);
|
||||
void BufferPalettesRoutines_ReznorAndMode7KoopaBosses(void);
|
||||
void BufferPalettesRoutines_TitleScreen(void);
|
||||
void ChangeNetDoorTiles(void);
|
||||
void ChangeNetDoorTiles(GenTileArgs *gta);
|
||||
void CheckPowerUpSpecificPlayerAttacks(void);
|
||||
void CheckIfBlockWasHit_Entry3(uint8 a, uint8 j);
|
||||
void CheckIfBlockWasHit(uint8 a, uint8 j);
|
||||
|
|
@ -51,19 +76,15 @@ void DamagePlayer_PitFall(void);
|
|||
void DamagePlayer_SetHurtAnimationTimer(uint8 a);
|
||||
void DisplayingContinueEnd(uint8 a);
|
||||
void DisplayingContinueEnd(uint8 a);
|
||||
void DrawLoadingLetters_Draw(uint8 k, uint8 j);
|
||||
uint16 DrawLoadingLetters_Draw(uint8 k, uint8 j, uint16 r0w);
|
||||
void DrawLoadingLetters(void);
|
||||
void EraseLargeSwitch(void);
|
||||
void EraseYoshiCoin(void);
|
||||
void EraseLargeSwitch(GenTileArgs *gta);
|
||||
void EraseYoshiCoin(GenTileArgs *gta);
|
||||
void FileSelectColorMath(uint16 a, uint8 j);
|
||||
void GameMode00_LoadNintendoPresents_0093CA(void);
|
||||
void GameMode00_LoadNintendoPresents_0093EA(uint8 k, uint8 j);
|
||||
void GameMode00_LoadNintendoPresents_0093F4(void);
|
||||
void GameMode00_LoadNintendoPresents(void);
|
||||
void GameMode00_LoadNintendoPresents_Mode04Finish(void);
|
||||
void GameMode01_ShowNintendoPresents_009417(void);
|
||||
void GameMode01_ShowNintendoPresents(void);
|
||||
void GameMode01_ShowNintendoPresents_Return00941A(void);
|
||||
void GameMode04_PrepareTitleScreen(void);
|
||||
void GameMode06_CircleEffect_009440(uint8 a);
|
||||
void GameMode06_CircleEffect_009443(void);
|
||||
|
|
@ -84,7 +105,7 @@ void GameMode10_BufferLevelLoadMessage(void);
|
|||
void GameMode11_LoadSublevel_0096CF(uint8 j, uint8 a);
|
||||
void GameMode11_LoadSublevel_00A796(void);
|
||||
void GameMode11_LoadSublevel_GameMode03Entry(void);
|
||||
void GameMode11_LoadSublevel_SA1Pack_OptimizeThisRoutine1(void);
|
||||
void GameMode11_LoadSublevel_0096D5(void);
|
||||
void GameMode12_PrepareLevel_00919B(void);
|
||||
void GameMode12_PrepareLevel_009860(void);
|
||||
void GameMode12_PrepareLevel_009A1F(uint8 k);
|
||||
|
|
@ -120,18 +141,17 @@ void GameModeXX_FadeInOrOut_MosaicFade(void);
|
|||
void Gamemode_9_A_Common(void);
|
||||
void GenerateTile_00BFBC(void);
|
||||
void GenerateTile(void);
|
||||
void GenericPage01Tile_00C0FB(uint16 j);
|
||||
void GenericPage01Tile(void);
|
||||
void GenericPage01Tile_00C0FB(GenTileArgs *gta, uint16 j);
|
||||
void GenericPage01Tile(GenTileArgs *gta);
|
||||
void GenericPage01Tile_Return00C1AB(void);
|
||||
void GenericPage01Tile_SetItemMemory(void);
|
||||
void GraphicsDecompressionRoutines_BeginDecompression(void);
|
||||
void GenericPage01Tile_SetItemMemory(GenTileArgs *gta);
|
||||
void GraphicsDecompressTo(uint8 *pdst);
|
||||
void GraphicsDecompressionRoutines_DecompressGFX32And33(void);
|
||||
void GraphicsDecompressionRoutines(uint8 j);
|
||||
const uint8 *GraphicsDecompress(uint8 j);
|
||||
void HandleMenuCursor_009E82(uint8 j);
|
||||
void HandleMenuCursor_009ED4(uint8 k);
|
||||
void HandlePaletteFades_00AF35(void);
|
||||
void HandlePaletteFades_00AFA3(uint8 a);
|
||||
void HandlePaletteFades_00AFC0(uint16 a);
|
||||
void HandlePaletteFades_00AF35(bool run_code_at_end);
|
||||
uint16 HandlePaletteFades_00AFC0(uint16 a, uint16 r2, uint16 r12, uint16 r14);
|
||||
void HandlePaletteFades(void);
|
||||
void HandlePlayerLevelColl_00E98C(void);
|
||||
void HandlePlayerLevelColl_00E9C8(uint8 j, uint8 cr);
|
||||
|
|
@ -154,14 +174,14 @@ void HandlePlayerPhysics_Swimming(void);
|
|||
void HandlePlayerPhysics_UpdatePMeter(void);
|
||||
uint8 HandlePlayerPhysics_UpdatePMeterEx(uint8 j);
|
||||
void HandleSPCUploads_008134(void);
|
||||
void HandleSPCUploads_StrtSPCMscUpld(void);
|
||||
void HandleSPCUploads_StrtSPCMscUpld(const uint8 *p);
|
||||
void HandleSPCUploads_UploadCreditsMusicBank(void);
|
||||
void HandleSPCUploads_UploadDataToSPC(void);
|
||||
void HandleSPCUploads_UploadDataToSPC(const uint8 *p);
|
||||
void HandleSPCUploads_UploadOverworldMusicBank(void);
|
||||
void HandleSPCUploads_UploadSPCEngine(void);
|
||||
void HandleSPCUploads_UploadSamples(void);
|
||||
void HandleStandardLevelCameraScroll_00F7F4(uint16 a);
|
||||
void HandleStandardLevelCameraScroll_00F8AB(void);
|
||||
uint16 HandleStandardLevelCameraScroll_00F8AB(uint16 r2w);
|
||||
void HandleStandardLevelCameraScroll(void);
|
||||
void IncrementSublevelsEnteredAndPrepareToLoadSublevel(void);
|
||||
void InitAndMainLoop_ProcessGameMode(void);
|
||||
|
|
@ -178,11 +198,11 @@ void InitializeStatusBarTilemap(void);
|
|||
void LoadSaveBufferData(void);
|
||||
void LoadStripeImage(void);
|
||||
void LoadStripeImage(void);
|
||||
void LoadStripeImage_UploadToVRAM(uint8 a);
|
||||
void ManipulateMode7Image_008AE8(void);
|
||||
void LoadStripeImage_UploadToVRAM(const uint8 *pp);
|
||||
void ManipulateMode7Image_008AE8(uint8 r0);
|
||||
void ManipulateMode7Image(void);
|
||||
void OwEventProcess04_FadeInLayer2Tile_00B006(uint8 a);
|
||||
void PlayerGFXRt_00F636(void);
|
||||
void PlayerGFXRt_00F636(uint8 r10, uint8 r11, uint8 r12, uint8 r13);
|
||||
void PlayerDraw(void);
|
||||
void PlayerState00_00B03E(void);
|
||||
void PlayerState00_00C95B(void);
|
||||
|
|
@ -200,7 +220,7 @@ void PlayerState00_00CD8B(void);
|
|||
void PlayerState00_00CD8F(void);
|
||||
void PlayerState00_00CD95(uint8 j);
|
||||
void PlayerState00_00F8F2(void);
|
||||
void PlayerState00_00F9C9(void);
|
||||
void PlayerState00_00F9C9(uint16 temp14b4, uint16 temp14b6, PointU16 pt);
|
||||
void PlayerState00_CheckPlayerPitFall(void);
|
||||
void PlayerState00_HandleEndOfLevel(void);
|
||||
void PlayerState00_HandleLRScrolling(void);
|
||||
|
|
@ -289,23 +309,23 @@ void UnusedAddToWarpPipeTimerRoutine(void);
|
|||
void UnusedYoshiRelatedRoutine(void);
|
||||
void UpdateCurrentPlayerPositionRAM(void);
|
||||
void UpdateEntirePalette(void);
|
||||
void UpdateHDMAWindowBuffer_IrisInOnPlayerEntry(uint8 a);
|
||||
void UpdateHDMAWindowBuffer_KeyholeEntry(uint8 a);
|
||||
void UpdateHDMAWindowBuffer_SetCircleHDMAPointer(void);
|
||||
void UpdateHDMAWindowBuffer_IrisInOnPlayerEntry(uint8 a, HdmaPtrs hptr);
|
||||
void UpdateHDMAWindowBuffer_KeyholeEntry(HdmaPtrs hptr, uint8 r0, uint8 r1);
|
||||
HdmaPtrs UpdateHDMAWindowBuffer_SetCircleHDMAPointer(void);
|
||||
void UpdatePaletteFromIndexedTable_00AE47(void);
|
||||
void UpdatePaletteFromIndexedTable(void);
|
||||
void UpdatePlayerSpritePosition(void);
|
||||
void UpdateStatusBarCounters_009051(uint8 k, uint8 j);
|
||||
void UpdateStatusBarCounters_009051(uint8 k, uint8 j, uint16 r2w);
|
||||
void UpdateStatusBarCounters_DrawItemBoxItem(void);
|
||||
void UpdateStatusBarCounters_Loop2(uint8 k, uint8 j);
|
||||
void UpdateStatusBarCounters_Loop2(uint8 k, uint8, uint16 r0w, uint16 r2w);
|
||||
void UpdateStatusBarCounters(void);
|
||||
void UploadBigLayer3LettersToVRAM(void);
|
||||
void ConvertGFX27IntoNormallFormat(void);
|
||||
void ConvertGFX27IntoNormallFormat(uint16 *dst);
|
||||
void UploadGraphicsFiles_Layer3(void);
|
||||
void UploadGraphicsFiles(void);
|
||||
void UploadGraphicsFiles_UploadGFXFile(uint8 j);
|
||||
void UploadGraphicsFiles_UploadGFXFile(uint16 dst_addr, uint8 j);
|
||||
void UploadLevelExAnimationData(void);
|
||||
void UploadLevelAnimations_RedFlash(uint8 a);
|
||||
void UploadLevelAnimations_RedFlash(uint8 a, uint8 r0);
|
||||
void UploadLevelAnimations_YellowFlash(uint8 a);
|
||||
void UploadLevelLayer1And2Tilemaps(void);
|
||||
void UploadLoadingLettersTiles(void);
|
||||
|
|
@ -317,8 +337,8 @@ void UploadPlayerGFX(void);
|
|||
void UploadStatusBarTilemap(void);
|
||||
void sub_9291(uint16 k);
|
||||
void sub_9F4C(uint8 j);
|
||||
void sub_C074(void);
|
||||
void sub_C077(void);
|
||||
void sub_C074(GenTileArgs *gta);
|
||||
void sub_C077(GenTileArgs *gta);
|
||||
|
||||
// Bank 1
|
||||
uint8 CheckAvailableExtendedSpriteSlot(uint8 k);
|
||||
|
|
@ -329,41 +349,46 @@ uint8 CheckPlayerToNormalSpriteCollision(uint8 k);
|
|||
uint8 CheckPlayerToNormalSpriteColl_ProcessInteract(uint8 k);
|
||||
uint8 CheckPlayerToNormalSpriteColl_ReturnNoContact(void);
|
||||
uint8 CheckPlayerToNormalSpriteColl_ReturnNoContact2(void);
|
||||
uint8 CheckTiltingPlatformCollision(void);
|
||||
CheckPlatformCollRet CheckTiltingPlatformCollision(uint16 temp14b4, uint16 temp14b6);
|
||||
uint8 CheckIfNormalSpriteOffScreen(uint8 k);
|
||||
uint8 CheckNormalSpriteLevelColl_Ceiling(uint8 k);
|
||||
uint8 CheckNormalSpriteLevelColl_Floor(uint8 k);
|
||||
uint8 CheckNormalSpriteLevelColl_Wall(uint8 k);
|
||||
uint8 CheckPlayerPositionRelativeToSprite_Bank01_X(uint8 k);
|
||||
uint8 CheckPlayerPositionRelativeToSprite_Bank01_Y(uint8 k);
|
||||
uint8 FinishOAMWrite_01B844(void);
|
||||
uint8 GetDrawInfo_Bank01_ReturnsTwice(uint8 k);
|
||||
uint8 FinishOAMWrite_01B844(uint16 r4w);
|
||||
typedef struct GetDrawInfoRes {
|
||||
uint8 idx;
|
||||
uint8 x, y;
|
||||
} GetDrawInfoRes;
|
||||
|
||||
GetDrawInfoRes GetDrawInfo_Bank01_ReturnsTwice(uint8 k);
|
||||
uint8 GetRand(void);
|
||||
uint8 GetRand_01AD07(uint8 j);
|
||||
uint8 HandleNormalSpriteLevelColl_019441(uint8 k, uint8 j);
|
||||
uint8 HandleNormalSpriteLevelColl_01944D(uint8 k, uint8 j);
|
||||
uint8 HandleNormalSpriteLevelColl_019523(uint8 k);
|
||||
uint8 HandleNormalSpriteLevelColl_019441(uint8 k, uint8 j, PointU16 *pt_out);
|
||||
uint8 HandleNormalSpriteLevelColl_01944D(uint8 k, uint8 j, PointU16 *pt_out);
|
||||
uint8 HandleNormalSpriteLevelColl_019523(uint16 r5);
|
||||
uint8 SolidSpriteBlock_Entry2(uint8 k);
|
||||
uint8 SolidSpriteBlock(uint8 k);
|
||||
uint8 Spr029_KoopaKid_MortonRoyLudwig_01D0C0(uint8 k);
|
||||
uint8 Spr04C_ExplodingBlock_Init(uint8 k);
|
||||
void Spr04C_ExplodingBlock_Init_MainV(uint8 k);
|
||||
uint8 Spr05F_BrownChainedPlatform_01C9BF(void);
|
||||
uint8 Spr05F_BrownChainedPlatform_01CA9C(uint8 k);
|
||||
uint8 Spr0A7_IggyBall_CheckTiltingPlatformCollision(uint8 k);
|
||||
uint8 Spr05F_BrownChainedPlatform_01C9BF(uint16 r9);
|
||||
uint8 Spr05F_BrownChainedPlatform_01CA9C(uint8 k, PointU16 pt);
|
||||
CheckPlatformCollRet Spr0A7_IggyBall_CheckTiltingPlatformCollision(uint8 k);
|
||||
uint8 SprXXX_Generic_Init_MakeSpriteFacePlayer(uint8 k);
|
||||
void SprXXX_Generic_Init_MakeSpriteFacePlayerV(uint8 k);
|
||||
uint8 SprXXX_LineGuided_01D94D(void);
|
||||
uint8 SprXXX_LineGuided_01D94D(uint16 r0w, uint16 r2w);
|
||||
uint8 SprXXX_SmallMontyMole_01E3EF_ReturnsTwice(uint8 k);
|
||||
uint8 SprXXX_TurnBlockBridge_01B8FF(uint8 k);
|
||||
uint8 SprXXX_TurnBlockBridge_01B8FF(uint8 k, uint16 R0, uint16 r2);
|
||||
uint8 sub_1B505(uint8 k);
|
||||
uint8 sub_1EC50(void);
|
||||
void AimTowardsPlayer_Bank01(uint8 k, uint8 a);
|
||||
PointU8 AimTowardsPlayer_Bank01(uint8 k, uint8 a);
|
||||
void BoostMarioSpeed(void);
|
||||
void BreakThrowBlock(uint8 k);
|
||||
void BreakThrowBlock_MontyMoleEntry(uint8 k, uint8 j);
|
||||
void CalculateCircleCoordinatesForTiltingPlaform_01CC28(void);
|
||||
void CalculateCircleCoordinatesForTiltingPlaform(void);
|
||||
uint32 CalculateCircleCoordinatesForTiltingPlaform_01CC28(uint16 R0_W_, uint16 R2_W_);
|
||||
PointU16 CalculateCircleCoordinatesForTiltingPlaform(CalcTiltPlatformArgs inp);
|
||||
void ChangeNormalSpriteDirection_CheckIfTouchingWall(uint8 k);
|
||||
void ChangeNormalSpriteDirection_FlipXSpeedAndDirection(uint8 k);
|
||||
void ChangeNormalSpriteDirection(uint8 k);
|
||||
|
|
@ -384,16 +409,16 @@ void CheckTiltingPlatformColl_01CCC7(void);
|
|||
void CheckTiltingPlatformColl_Return01CCEA(void);
|
||||
void CheckTiltingPlatformColl_Return01CCEB(void);
|
||||
void DrawWingTiles_019E35(uint8 k, uint8 j);
|
||||
void DrawWingTiles_019E37(uint8 k);
|
||||
void DrawWingTiles_019E37(uint8 k, uint8 r2);
|
||||
void DrawWingTiles(uint8 k);
|
||||
void DrawWingTiles_ParaKoopaEntry(uint8 k);
|
||||
void FinishOAMWrite(uint8 k, uint8 j, uint8 a);
|
||||
void FinishOAMWrite(uint8 k, uint8 j, uint8 a);
|
||||
void GenericGFXRtDraw1Tile16x16_019F0F(uint8 k);
|
||||
void GenericGFXRtDraw1Tile16x16_019F0F(uint8 k, uint8 r4);
|
||||
void GenericGFXRtDraw1Tile16x16(uint8 k);
|
||||
void GenericGFXRtDraw1Tile16x16_Sub(uint8 k, uint8 a);
|
||||
void GenericGFXRtDraw1Tile16x16(uint8 k);
|
||||
void GenericGFXRtDraw2Tiles16x16sStacked_019DA9(uint8 k, uint8 j);
|
||||
void GenericGFXRtDraw2Tiles16x16sStacked_019DA9(uint8 k, uint8 j, uint8 r0);
|
||||
void GenericGFXRtDraw2Tiles16x16sStacked_Sub(uint8 k);
|
||||
void GenericGFXRtDraw2Tiles16x16sStacked_UpsideDown(uint8 k);
|
||||
void GenericGFXRtDraw4Tiles8x8Square_Entry1(uint8 k, uint8 a, uint8 j);
|
||||
|
|
@ -407,9 +432,9 @@ void HandleNormalSpriteLevelColl_019211(uint8 k);
|
|||
void HandleNormalSpriteLevelColl_01928E(uint8 k, uint8 a);
|
||||
void HandleNormalSpriteLevelColl_0192C9(uint8 k);
|
||||
void HandleNormalSpriteLevelColl_019330(uint8 k);
|
||||
void HandleNormalSpriteLevelColl_01933B(uint8 k, uint8 a);
|
||||
void HandleNormalSpriteLevelColl_019425(uint8 k);
|
||||
void HandleNormalSpriteLevelColl_019435(uint8 k);
|
||||
void HandleNormalSpriteLevelColl_01933B(uint8 k, uint8 a, uint8 r10, uint8 r12, uint8 r15);
|
||||
void HandleNormalSpriteLevelColl_019425(uint8 k, uint16 xpos_r10w, uint16 ypos_r12w, uint8 r15);
|
||||
void HandleNormalSpriteLevelColl_019435(uint8 k, uint8 r15);
|
||||
void HandleNormalSpriteLevelCollision(uint8 k);
|
||||
void HandleNormalSpriteLevelCollision(uint8 k);
|
||||
void KickHelplessSprite(uint8 k);
|
||||
|
|
@ -449,7 +474,7 @@ void SetXSpeedBasedOnNormalSpriteFacingDirection(uint8 k);
|
|||
void SpawnContactEffectFromAbove(uint8 k);
|
||||
void SpawnContactEffectFromSide(uint8 k);
|
||||
void SpawnContactEffectFromSide_NoKickSound(uint8 k);
|
||||
void SpawnNormalSpriteTurnAroundSmoke_Entry2(uint8 k);
|
||||
void SpawnNormalSpriteTurnAroundSmoke_Entry2(uint8 k, uint8 r0, uint8 r1);
|
||||
void SpawnNormalSpriteTurnAroundSmoke(uint8 k);
|
||||
void SpawnSparkles_GoalSphereEntry(uint8 k, uint8 a);
|
||||
void SpawnSparklesSpriteEntry(uint8 k);
|
||||
|
|
@ -498,12 +523,12 @@ void Spr026_Thwomp(uint8 k);
|
|||
void Spr026_Thwomp_Rising(uint8 k);
|
||||
void Spr026_Thwomp_Waiting(uint8 k);
|
||||
void Spr027_Thwimp(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_01FC62(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_01FD50(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_Draw(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_InShellDraw(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_01FC62(uint8 k, PointU16 pt);
|
||||
PointU16 Spr029_KoopaKid_IggyLarry_01FD50(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_Draw(uint8 k, PointU16 pt);
|
||||
void Spr029_KoopaKid_IggyLarry_InShellDraw(uint8 k, PointU16 pt);
|
||||
void Spr029_KoopaKid_IggyLarry(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_ThrowBall(uint8 k);
|
||||
void Spr029_KoopaKid_IggyLarry_ThrowBall(uint8 k, PointU16 pt);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_01D309(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_01CE1E(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_01CE3E(uint8 k);
|
||||
|
|
@ -512,7 +537,7 @@ void Spr029_KoopaKid_MortonRoyLudwig_01D059(uint8 k);
|
|||
void Spr029_KoopaKid_MortonRoyLudwig_01D2A8(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_01D351(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_01D3B1(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_01D40B(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_01D40B(uint8 k, CollInfo *ci);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_GetDrawInfo(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig(uint8 k);
|
||||
void Spr029_KoopaKid_MortonRoyLudwig_ProcessLudwigsAttacks(uint8 k);
|
||||
|
|
@ -539,13 +564,13 @@ void Spr035_Yoshi_Init(uint8 k);
|
|||
void Spr035_Yoshi_Init_Return(uint8 k);
|
||||
void Spr035_Yoshi_01EDCC(uint8 k);
|
||||
void Spr035_Yoshi_01EDCE(uint8 k, uint8 j);
|
||||
void Spr035_Yoshi_01EF18(uint8 k);
|
||||
uint8 Spr035_Yoshi_01EF18(uint8 k);
|
||||
void Spr035_Yoshi_01F0A2(uint8 k);
|
||||
void Spr035_Yoshi_01F295(uint8 k);
|
||||
void Spr035_Yoshi_01F295(uint8 k, uint8 r0);
|
||||
void Spr035_Yoshi_01F2DF(uint8 j);
|
||||
void Spr035_Yoshi_01F309(void);
|
||||
void Spr035_Yoshi_01F3FE(uint8 k);
|
||||
void Spr035_Yoshi_01F4B2(uint8 k);
|
||||
uint8 Spr035_Yoshi_01F3FE(uint8 k);
|
||||
void Spr035_Yoshi_01F4B2(uint8 k, uint8 r13);
|
||||
void Spr035_Yoshi_01F622(uint8 k);
|
||||
void Spr035_Yoshi_01F668(uint8 k, uint8 j);
|
||||
void Spr035_Yoshi_01F6CD(uint8 j);
|
||||
|
|
@ -557,7 +582,7 @@ void Spr035_Yoshi_MouthState01_ExtendTongue(uint8 k);
|
|||
void Spr035_Yoshi_MouthState02_RetractTongue(uint8 k);
|
||||
void Spr035_Yoshi_MouthState03_Spitting(uint8 k);
|
||||
void Spr035_Yoshi_Return01F3FD(void);
|
||||
void Spr035_Yoshi_TryEatSprite(uint8 k, uint8 j);
|
||||
void Spr035_Yoshi_TryEatSprite(uint8 k, uint8 j, CollInfo *ci);
|
||||
void Spr03D_RipVanFish(uint8 k);
|
||||
void Spr03E_PSwitch_Init(uint8 k);
|
||||
void Spr03E_PSwitch(uint8 k);
|
||||
|
|
@ -575,13 +600,13 @@ void Spr04C_ExplodingBlock(uint8 k);
|
|||
void Spr04E_LedgeMontyMole(uint8 k);
|
||||
void Spr052_MovingLedgeHole_Init(uint8 k);
|
||||
void Spr054_ClimbingNetDoor_Init(uint8 k);
|
||||
void Spr054_ClimbingNetDoor_01BC1D(void);
|
||||
void Spr054_ClimbingNetDoor_01BC1D(CollInfo *ci);
|
||||
void Spr054_ClimbingNetDoor(uint8 k);
|
||||
void Spr057_VerticalCheckerboardPlatform_Init(uint8 k);
|
||||
void Spr058_VerticalRockPlatform(uint8 k);
|
||||
void Spr05F_BrownChainedPlatform_Init(uint8 k);
|
||||
void Spr05F_BrownChainedPlatform_01C9E2(uint8 k);
|
||||
void Spr05F_BrownChainedPlatform_01CACB(uint8 k);
|
||||
CalcTiltPlatformArgs Spr05F_BrownChainedPlatform_01CACB(uint8 k);
|
||||
void Spr05F_BrownChainedPlatform(uint8 k);
|
||||
void Spr05F_BrownChainedPlatform_UpdateAngle(uint8 k);
|
||||
void Spr060_FlatPalaceSwitch_Init(uint8 k);
|
||||
|
|
@ -781,8 +806,8 @@ void SprXXX_SmallMontyMole_State02_PopOutOfGround(uint8 k);
|
|||
void SprXXX_SmallMontyMole_State03_Walking(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_01B6B2(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_01B6E7(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_01B852(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_Draw(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_01B852(uint8 k, uint16 t);
|
||||
uint16 SprXXX_TurnBlockBridge_Draw(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_HorizontalAndVerticalTurnBlockBridgeEntry(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_HorizontalTurnBlockBridgeEntry(uint8 k);
|
||||
void SprXXX_TurnBlockBridge_Return01B851(void);
|
||||
|
|
@ -797,7 +822,7 @@ void SprXXX_WallSpringboard(uint8 k);
|
|||
void StunnedShellGFXRt_01980F(uint8 k, uint8 a);
|
||||
void StunnedShellDraw(uint8 k);
|
||||
void SubOffscreen_Bank01_01AC2D(uint8 k, uint8 a);
|
||||
void SubOffscreen_Bank01_01AC33(uint8 k);
|
||||
void SubOffscreen_Bank01_01AC33(uint8 k, uint8 r3);
|
||||
void SubOffscreen_Bank01_Entry1(uint8 k);
|
||||
void SubOffscreen_Bank01_Entry2(uint8 k);
|
||||
void SubOffscreen_Bank01_Entry3(uint8 k);
|
||||
|
|
@ -810,7 +835,7 @@ void sub_1A64A(uint8 k, uint8 j);
|
|||
void sub_1A685(uint8 k, uint8 j);
|
||||
void sub_1A72E(uint8 k, uint8 j);
|
||||
void sub_1C9DA(uint8 k);
|
||||
void sub_1C9EC(uint8 k);
|
||||
void sub_1C9EC(uint8 k, PointU16 pt);
|
||||
void sub_1D31E(uint8 k);
|
||||
void sub_1D334(uint8 k);
|
||||
void sub_1F8E1(uint8 k, uint8 a);
|
||||
|
|
@ -819,22 +844,26 @@ void sub_1F8E1(uint8 k, uint8 a);
|
|||
uint8 CheckAvailableScoreSpriteSlot(void);
|
||||
uint8 CheckPlayerPositionRelativeToSprite_Bank23_X(uint8 k);
|
||||
uint8 CheckPlayerPositionRelativeToSprite_Bank23_Y(uint8 k);
|
||||
uint8 CheckPlayerPositionRelativeToSprite_Y_R15(uint8 k);
|
||||
uint8 ExtSpr04_Hammer_ThrownBoneEntry(uint8 k);
|
||||
uint8 FindFreeNormalSpriteSlot_02A9E6(void);
|
||||
uint8 FindFreeNormalSpriteSlot_02A9E6(uint8 r14);
|
||||
uint8 FindFreeNormalSpriteSlot_HighPriority(void);
|
||||
uint8 FindFreeNormalSpriteSlot_LowPriority(void);
|
||||
uint8 FindFreeNormalSpriteSlot_02A9E6(void);
|
||||
uint8 GetDrawInfo_Bank23_ReturnsTwice(uint8 k);
|
||||
uint8 FindFreeNormalSpriteSlot_02A9E6(uint8 r14);
|
||||
GetDrawInfoRes GetDrawInfo_Bank23_ReturnsTwice(uint8 k);
|
||||
uint8 GrabThrowBlockBlock(void);
|
||||
uint8 HandleExtendedSpriteLevelColl_02A611(uint8 k);
|
||||
uint8 HandleExtendedSpriteLevelCollision(uint8 k);
|
||||
|
||||
typedef struct ExtCollOut {
|
||||
uint8 r10, r11, r12, r13;
|
||||
} ExtCollOut;
|
||||
|
||||
uint8 HandleExtendedSpriteLevelColl_02A611(uint8 k, uint8 r15, ExtCollOut *out);
|
||||
uint8 HandleExtendedSpriteLevelCollision(uint8 k, ExtCollOut *out);
|
||||
uint8 InitializeBlockPunchAttack(void);
|
||||
uint8 Spr08F_ScalePlatform_02E524(uint8 k, uint8 j);
|
||||
uint8 Spr0A3_GreyChainedPlatform_02D870(uint8 k, uint8 a);
|
||||
uint8 UpdateNormalSpritePosition_X(uint8 k);
|
||||
uint8 UpdateNormalSpritePosition_Y(uint8 k);
|
||||
void AimTowardsPlayer_Bank23(uint8 k, uint8 a);
|
||||
PointU8 AimTowardsPlayer_Bank23(uint8 k, uint8 a);
|
||||
void BobOmbExplosion_ExplodeKillSpr(uint8 k, uint8 j);
|
||||
void BobOmbExplosion_ExplodeSprites(uint8 k);
|
||||
void BobOmbExplosion(uint8 k);
|
||||
|
|
@ -842,17 +871,17 @@ void BobOmbExplosion(uint8 k);
|
|||
void BounceSpr01_TurnBlock(uint8 k);
|
||||
void BounceSpr07_SpinningTurnBlock(uint8 k);
|
||||
void BounceSpriteDraw(uint8 k);
|
||||
void CheckBerryTileCollisionWithYoshiTongue(void);
|
||||
void CheckBerryTileCollisionWithYoshiTongue(CollInfo *ci);
|
||||
void CheckMarioToExtendedSpriteColl_02A469(uint8 k);
|
||||
void CheckMarioToExtendedSpriteColl_02A4DE(uint8 k);
|
||||
void CheckMarioToExtendedSpriteColl_LoseYoshi(void);
|
||||
void CheckMarioToExtendedSpriteCollision(uint8 k);
|
||||
void CheckPlayerAttackToNormalSpriteColl_029404(uint8 k);
|
||||
void CheckPlayerAttackToNormalSpriteColl_CapeSwingEntry(void);
|
||||
void CheckPlayerAttackToNormalSpriteColl_GetBounceSpriteClipping(uint8 j);
|
||||
void CheckPlayerAttackToNormalSpriteColl_GetCapeSwingOrNetPunchClipping(void);
|
||||
void CheckPlayerAttackToNormalSpriteColl_029404(uint8 k, uint8 r14);
|
||||
void CheckPlayerAttackToNormalSpriteColl_CapeSwingEntry(uint8 r14);
|
||||
void CheckPlayerAttackToNormalSpriteColl_GetBounceSpriteClipping(uint8 j, CollInfo *ci);
|
||||
void CheckPlayerAttackToNormalSpriteColl_GetCapeSwingOrNetPunchClipping(CollInfo *ci);
|
||||
void CheckPlayerAttackToNormalSpriteCollision(uint8 k);
|
||||
void CheckPlayerFireballToNormalSpriteColl_GetPlayerFireballClipping(uint8 j);
|
||||
void CheckPlayerFireballToNormalSpriteColl_GetPlayerFireballClipping(uint8 j, CollInfo *ci);
|
||||
void CheckPlayerFireballToNormalSpriteCollision(uint8 k);
|
||||
void CheckPlayerToEnemyClusterSpriteCollision(uint8 k);
|
||||
void CheckPlayerToNormalSpriteColl_02B9D9(uint8 j);
|
||||
|
|
@ -876,7 +905,7 @@ void ClusterSpr06_SumoBroFlame_02F9F5(void);
|
|||
void ClusterSpr06_SumoBroFlame_CheckPlayerContact(uint8 k);
|
||||
void ClusterSpr06_SumoBroFlame(uint8 k);
|
||||
void ClusterSpr07_ReappearingBoo(uint8 k);
|
||||
void DrawBigCastleGate_DrawBigCastleGate(void);
|
||||
void DrawBigCastleGate_DrawBigCastleGate(uint8 r0);
|
||||
void DrawBigCastleGate(void);
|
||||
void DrawGhostHouseEntranceDoor(void);
|
||||
void DrawGhostHouseEntranceDoor(void);
|
||||
|
|
@ -896,7 +925,7 @@ void ExtSpr07_LavaSplash(uint8 k);
|
|||
void EraseExtSprite(uint8 k);
|
||||
void ExtSpr08_LauncherArm(uint8 k);
|
||||
void ExtSpr09_Unused(uint8 k);
|
||||
void ExtSpr0A_CloudCoin_029D45(uint8 j);
|
||||
void ExtSpr0A_CloudCoin_029D45(uint8 j, uint8 r1);
|
||||
void ExtSpr0A_CloudCoin_029D36(uint8 j, uint8 a);
|
||||
void ExtSpr0A_CloudCoin(uint8 k);
|
||||
void ExtSpr0C_VolcanoLotusFire(uint8 k);
|
||||
|
|
@ -909,7 +938,7 @@ void GameMode14_InLevel_Bank02(void);
|
|||
void GameMode14_InLevel_02827D(void);
|
||||
void GameMode14_InLevel_0283CE(void);
|
||||
void GameMode14_InLevel_0283F8(uint8 k);
|
||||
void GameMode14_InLevel_028439(uint8 k);
|
||||
void GameMode14_InLevel_028439(uint8 k, uint8 xpos);
|
||||
void GenSpr01_GenerateEerie(void);
|
||||
void GenSpr02_GenParachuteEnemy(void);
|
||||
void GenSpr07_GenerateFish(void);
|
||||
|
|
@ -917,21 +946,21 @@ void GenSpr08_TurnOffRespawningSprite(void);
|
|||
void GenSpr09_GenerateSuperKoopa(void);
|
||||
void GenSpr0A_GenerateBubbles(void);
|
||||
void GenSpr0B_GenerateBullet(void);
|
||||
void GenSpr0C_GenerateSurroundingBullets(void);
|
||||
void GenSpr0C_GenerateSurroundingBullets(uint8 r13);
|
||||
void GenSpr0D_GenerateDiagnalBullets(void);
|
||||
void GenSpr0E_GenerateFire(void);
|
||||
void GenSpr0F_TurnOffGenerator(void);
|
||||
void GenSprXX_GenerateDolphins(void);
|
||||
void GenericExtendedSpriteGFXRt_FireballEntry(uint8 k, uint8 j);
|
||||
void GenericExtendedSpriteDraw(uint8 k);
|
||||
uint8 GenericExtendedSpriteGFXRt_FireballEntry(uint8 k, uint8 j);
|
||||
uint8 GenericExtendedSpriteDraw(uint8 k);
|
||||
void GetBounceSpriteLevelCollisionMap16ID_029356(uint8 k);
|
||||
void GetBounceSpriteLevelCollisionMap16ID(uint8 k);
|
||||
void GetExtendedSpriteClipping(uint8 k);
|
||||
void GetExtendedSpriteClipping(uint8 k, CollInfo *ci);
|
||||
void GivePoints_02ACEF(uint8 k, uint8 a);
|
||||
void GivePoints_Entry2(uint8 j, uint8 a);
|
||||
void GivePoints(uint8 k, uint8 a);
|
||||
void HandleCapeInteraction(void);
|
||||
void HandleCapeLevelColl_029540(void);
|
||||
void HandleCapeLevelColl_029540(uint8 r15);
|
||||
void HandleCapeLevelCollision(void);
|
||||
void HandleCapeToExtendedSpriteCollision(void);
|
||||
void HandleHeldPBalloonAndInLakituCloudMovement(uint8 k);
|
||||
|
|
@ -948,7 +977,7 @@ void MExtSpr0A_BooStream(uint8 k);
|
|||
void MExtSpr0B_UnusedYoshiSmoke(uint8 k);
|
||||
void MExtSpr_Delete(uint8 k);
|
||||
void ParseLevelSpriteList_Entry2(void);
|
||||
void ParseLevelSpriteList_LoadSpriteLoopStrt(uint8 k, uint8 j);
|
||||
void ParseLevelSpriteList_LoadSpriteLoopStrt(uint8 k, uint8 j, uint16 r0w);
|
||||
void ParseLevelSpriteList(void);
|
||||
void ProcessBounceAndSmokeSprites_BounceSprites(uint8 k);
|
||||
void ProcessBounceAndSmokeSprites(void);
|
||||
|
|
@ -987,8 +1016,8 @@ void EraseSmokeSprite(uint8 k);
|
|||
void SmokeSpr02_ContactEffect(uint8 k);
|
||||
void SmokeSpr03_TurnAroundSmoke(uint8 k);
|
||||
void SmokeSpr05_Glitter(uint8 k);
|
||||
void SpawnBounceSprite_02887D(void);
|
||||
void SpawnBounceSprite(void);
|
||||
void SpawnBounceSprite_02887D(uint8 r5);
|
||||
void SpawnBounceSprite(uint8 r4, uint8 r5, uint8 r6, uint8 r7);
|
||||
void SpawnBounceSprite_SpawnSpinningCoins(void);
|
||||
void SpawnBrickPieces(uint8 a);
|
||||
void SpawnLavaSplash(uint8 k);
|
||||
|
|
@ -999,20 +1028,20 @@ void SpawnMusicNoteOrZ_02C0DB(uint8 k, uint8 a);
|
|||
void SpawnMusicNoteOrZ_MusicNote(uint8 k);
|
||||
void SpawnMusicNoteOrZ_Z(uint8 k);
|
||||
void SpawnSmokePuff(void);
|
||||
void SpawnSparkles(void);
|
||||
void SpawnSparkles(uint8 r0, uint8 r2);
|
||||
void SpawnSparkles_PlayerEntry(void);
|
||||
void SpawnWaterSplash_0284C2(uint8 k, uint8 a);
|
||||
void SpawnWaterSplash_0284D8(uint8 k);
|
||||
void SpawnWaterSplash_0284D8(uint8 k, uint8 r0, uint8 r2);
|
||||
void SpawnWaterSplash(uint8 k);
|
||||
void SpawnWaterSplash_VerticalCheepCheepEntry(uint8 k);
|
||||
void SpawnYoshiStompSmoke(void);
|
||||
void SpawnYoshiStompSmoke_SpawnFirstSmoke(void);
|
||||
void SpawnYoshiStompSmoke_SpawnFirstSmoke(uint8 r0);
|
||||
void Spr01E_Lakitu(uint8 k);
|
||||
void Spr01E_Lakitu_LakituFishingLineDraw(uint8 k);
|
||||
void Spr02B_SumoLightning(uint8 k);
|
||||
void Spr02B_SumoLightning_02DF2C(uint8 k);
|
||||
void Spr033_Podoboo_SpawnPodobooFire(uint8 k);
|
||||
void Spr035_Yoshi_028BC0(uint8 k);
|
||||
void Spr035_Yoshi_028BC0(uint8 k, uint8 r0);
|
||||
void Spr035_Yoshi_02D0E6(uint8 k);
|
||||
void Spr035_Yoshi_ChangeBerryIntoBushTile(void);
|
||||
void Spr035_Yoshi_CheckBerryTileCollisionWithAdultYoshiMouth(uint8 k);
|
||||
|
|
@ -1051,9 +1080,8 @@ void Spr06A_CoinGameCloud(uint8 k);
|
|||
void Spr070_Pokey(uint8 k);
|
||||
void Spr070_Pokey_Bank02SpriteEntry(uint8 k, uint8 j, uint8 a);
|
||||
void Spr070_Pokey_02B7AC(uint8 k);
|
||||
void Spr070_Pokey_02B82E(uint8 k);
|
||||
void Spr070_Pokey_RemovePokeySegment(uint8 k, uint8 a);
|
||||
void Spr070_Pokey_RemovePokeySgmntRt(uint8 k, uint8 a);
|
||||
void Spr070_Pokey_02B82E(uint8 k, uint8 r13);
|
||||
uint8 Spr070_Pokey_RemovePokeySegment(uint8 k, uint8 a);
|
||||
void Spr070_Pokey_Sub(uint8 k);
|
||||
void Spr086_Wiggler_Init(uint8 k);
|
||||
void Spr086_Wiggler_Init_GetWigglerSegmentPosIndex(uint8 k);
|
||||
|
|
@ -1091,10 +1119,10 @@ void Spr091_CharginChuck_02C579(uint8 k);
|
|||
void Spr091_CharginChuck_02C5BC(uint8 k);
|
||||
void Spr091_CharginChuck_02C602(uint8 k);
|
||||
void Spr091_CharginChuck_02C628(uint8 k);
|
||||
void Spr091_CharginChuck_DrawBody(void);
|
||||
void Spr091_CharginChuck_DrawDigginChuckExtraTiles(uint8 k);
|
||||
void Spr091_CharginChuck_DrawExtraTiles(uint8 k);
|
||||
void Spr091_CharginChuck_DrawHead(uint8 k);
|
||||
void Spr091_CharginChuck_DrawBody(uint8 k, PointU8 pt);
|
||||
void Spr091_CharginChuck_DrawDigginChuckExtraTiles(uint8 k, PointU8 pt);
|
||||
void Spr091_CharginChuck_DrawExtraTiles(uint8 k, PointU8 pt);
|
||||
PointU8 Spr091_CharginChuck_DrawHead(uint8 k, PointU8 pt);
|
||||
void Spr091_CharginChuck_Draw(uint8 k);
|
||||
void Spr091_CharginChuck_ProcessPlayerInteraction(uint8 k);
|
||||
void Spr091_CharginChuck_Return02CBFC(void);
|
||||
|
|
@ -1130,19 +1158,19 @@ void Spr09E_BallNChain_Sub(uint8 k);
|
|||
void Spr09E_BallNChain(uint8 k);
|
||||
void Spr09F_BanzaiBill_Draw(uint8 k);
|
||||
void Spr09F_BanzaiBill_Sub(uint8 k);
|
||||
void Spr0A3_GreyChainedPlatform_02D813(uint8 k);
|
||||
void Spr0A3_GreyChainedPlatform_02D848(uint8 k);
|
||||
void Spr0DE_Load5Eeries(uint8 k);
|
||||
void Spr0E0_Load3Platforms(void);
|
||||
void Spr0E1_LoadBooCeiling(uint8 k, uint8 a);
|
||||
PointU8 Spr0A3_GreyChainedPlatform_02D813(uint8 k);
|
||||
PointU8 Spr0A3_GreyChainedPlatform_02D848(uint8 k);
|
||||
void Spr0DE_Load5Eeries(uint8 k, uint16 r0w, uint8 r2, uint8 r3);
|
||||
void Spr0E0_Load3Platforms(uint16 r0w, uint8 r2, uint8 r3);
|
||||
void Spr0E1_LoadBooCeiling(uint8 k, uint8 a, uint16 r0w, uint8 r2, uint8 r3);
|
||||
void SprXXX_Dolphins(uint8 k);
|
||||
void SprXXX_Dolphins_Draw(uint8 k);
|
||||
void SprXXX_JumpingPiranhaPlant_02E17F(uint8 k);
|
||||
void SprXXX_JumpingPiranhaPlant_02E1C0(uint8 k, uint8 a);
|
||||
void Spr04F_JumpingPiranhaPlant(uint8 k);
|
||||
void SprXXX_LoadShooter(uint8 k, uint8 j, uint8 a);
|
||||
void SprXXX_LoadShooter(uint8 k, uint8 j, uint8 a, uint16 r0w);
|
||||
void SprXXX_SuperKoopas_02EB3D(uint8 k, uint8 j);
|
||||
void SprXXX_SuperKoopas_02EBB5(uint8 k);
|
||||
void SprXXX_SuperKoopas_02EBB5(uint8 k, uint8 r0);
|
||||
void SprXXX_SuperKoopas_02EBCA(uint8 k);
|
||||
void SprXXX_SuperKoopas_02EBF8(uint8 k);
|
||||
void SprXXX_SuperKoopas_Draw(uint8 k);
|
||||
|
|
@ -1154,12 +1182,12 @@ void Spr0A5_Sparky(uint8 k);
|
|||
void SprXXX_WallFollowers_SparkyDraw(uint8 k);
|
||||
void SprXXX_WallFollowers_UrchinDraw(uint8 k);
|
||||
void SprXXX_WallSpringboard_Draw(uint8 k);
|
||||
void SprXXX_WallSpringboard_HandlePlayerCollision(uint8 k, uint8 j);
|
||||
void SprXXX_WallSpringboard_HandlePlayerCollision(uint8 k, uint8 j, uint8 r2);
|
||||
void SprXXX_WallSpringboard_Return02CDFE(uint8 k);
|
||||
void SprXXX_WallSpringboard_State01_PlayerIsOnTop(uint8 k);
|
||||
void SprXXX_WallSpringboard_State02_Rebound(uint8 k);
|
||||
void SprXXX_WallSpringboard(uint8 k);
|
||||
void SubOffscreen_Bank02_02D027(uint8 k);
|
||||
void SubOffscreen_Bank02_02D027(uint8 k, uint8 r3);
|
||||
void SubOffscreen_Bank02_Entry1(uint8 k);
|
||||
void SubOffscreen_Bank02_Entry2(uint8 k);
|
||||
void SubOffscreen_Bank02_Entry3(uint8 k);
|
||||
|
|
@ -1175,27 +1203,27 @@ void UpdateExtendedSpritePosition_Y(uint8 k);
|
|||
void UpdateMinorExtendedSpritePosition_X(uint8 k);
|
||||
void UpdateMinorExtendedSpritePosition_Y(uint8 k);
|
||||
void YoshiStompRoutine(void);
|
||||
void sub_284A6(uint8 k, uint8 a);
|
||||
void sub_284A6(uint8 k, uint8 a, uint8 r0, uint8 r2);
|
||||
void sub_2D091(uint8 k);
|
||||
void sub_2DFD0(uint8 k, uint8 a);
|
||||
void sub_2E980(uint8 k, uint8 a);
|
||||
|
||||
// Bank 3
|
||||
uint8 InitializeMode7TilemapsAndPalettes_03DE39(uint8 k, uint8 j);
|
||||
uint8 InitializeMode7TilemapsAndPalettes_03DE3C(uint8 k, uint8 j);
|
||||
uint8 InitializeMode7TilemapsAndPalettes_03DE39(uint8 k, uint8 j, const uint8 *p0);
|
||||
uint8 InitializeMode7TilemapsAndPalettes_03DE3C(uint8 k, uint8 j, const uint8 *p0);
|
||||
uint8 Spr07C_PrincessPeach_03ADCC(uint8 k);
|
||||
uint8 Spr0A0_ActivateBowserBattle_ReturnsTwice_03A5AD(uint8 k);
|
||||
uint8 Spr0A0_ActivateBowserBattle_ReturnsTwice_03A661(uint8 k);
|
||||
uint8 StandardSpriteToSpriteCollisionChecks_CheckContact(void);
|
||||
uint8 StandardSpriteToSpriteCollisionChecks_CheckContact(CollInfo *ci);
|
||||
void DespawnNonBossSprites(void);
|
||||
void FadingBooPaletteAnimation(void);
|
||||
void GameMode12_PrepareLevel_03D991(void);
|
||||
void GameMode12_PrepareLevel_03D991(const uint8 *p5, uint16 r0w);
|
||||
void GameMode12_PrepareLevel_UploadTiltingPlatformTilemap(void);
|
||||
void GameMode14_InLevel_03C0C6(void);
|
||||
void GameMode14_InLevel_03C11E(void);
|
||||
void HandleNormalSpriteLevelColl_03C1CA(uint8 k);
|
||||
void InitializeMode7TilemapsAndPalettes_BufferReznorWallTilemap(void);
|
||||
void InitializeMode7TilemapsAndPalettes_BufferTilemap(void);
|
||||
const uint8 *InitializeMode7TilemapsAndPalettes_BufferTilemap(uint16 **dstp, const uint8 *p0);
|
||||
void InitializeMode7TilemapsAndPalettes(uint8 k);
|
||||
void NormalSpriteBooDraw(uint8 k);
|
||||
void SpawnFootball(uint8 k);
|
||||
|
|
@ -1220,7 +1248,7 @@ void Spr030_ThrowingDryBones_SpawnDryBonesBone(uint8 k);
|
|||
void Spr051_Ninji(uint8 k);
|
||||
void Spr054_ClimbingNetDoor_UpdateClimbingNetDoorTiles(uint8 k, uint8 a);
|
||||
void Spr06F_DinoTorch(uint8 k);
|
||||
void Spr06F_DinoTorch_DinoFlameClipping(uint8 k);
|
||||
void Spr06F_DinoTorch_DinoFlameClipping(uint8 k, CollInfo *ci);
|
||||
void Spr06F_DinoTorch_DinoSetGfxFrame(uint8 k);
|
||||
void Spr06F_DinoTorch_Draw(uint8 k);
|
||||
void Spr06F_DinoTorch_Return039F37(void);
|
||||
|
|
@ -1240,8 +1268,8 @@ void Spr07C_PrincessPeach_DisplayPeachRescueMessage(void);
|
|||
void Spr07C_PrincessPeach_FadeText(uint8 k);
|
||||
void Spr07C_PrincessPeach_Fireworks(uint8 k);
|
||||
void Spr07C_PrincessPeach_FloatingDown(uint8 k);
|
||||
void Spr07C_PrincessPeach_GFXRt_DrawHELP(uint8 k, uint8 j);
|
||||
void Spr07C_PrincessPeach_GFXRt_DrawPeach(uint8 k, uint8 j);
|
||||
void Spr07C_PrincessPeach_GFXRt_DrawHELP(uint8 k, uint8 j, uint8 r2, uint8 r3);
|
||||
void Spr07C_PrincessPeach_GFXRt_DrawPeach(uint8 k, uint8 j, PointU8 pt, uint8 r3);
|
||||
void Spr07C_PrincessPeach_KissBro(uint8 k);
|
||||
void Spr07C_PrincessPeach_StandByBro(uint8 k);
|
||||
void Spr07C_PrincessPeach_WaitAfterFall(uint8 k);
|
||||
|
|
@ -1257,7 +1285,7 @@ void Spr0A0_ActivateBowserBattle_03A8D6(uint8 k);
|
|||
void Spr0A0_ActivateBowserBattle_03AC63(uint8 k);
|
||||
void Spr0A0_ActivateBowserBattle_03AF59(uint8 k);
|
||||
void Spr0A0_ActivateBowserBattle_03B019(uint8 k);
|
||||
void Spr0A0_ActivateBowserBattle_03B020(uint8 k);
|
||||
void Spr0A0_ActivateBowserBattle_03B020(uint8 k, uint8 r2);
|
||||
void Spr0A0_ActivateBowserBattle_03B078(uint8 k);
|
||||
void Spr0A0_ActivateBowserBattle_03B0D2(uint8 k);
|
||||
void Spr0A0_ActivateBowserBattle_03B0D6(uint8 k);
|
||||
|
|
@ -1317,7 +1345,7 @@ void Spr0B1_CreateEatBlock_GenTileFromSpr1(uint8 k, uint8 a);
|
|||
void Spr0B2_FallingSpike(uint8 k);
|
||||
void Spr0B3_BowserStatueFire(uint8 k);
|
||||
void Spr0B3_BowserStatueFire_Draw(uint8 k);
|
||||
void Spr0B7_CarrotTopLiftUpperRight_038CE4(uint8 k);
|
||||
void Spr0B7_CarrotTopLiftUpperRight_038CE4(uint8 k, CollInfo *ci);
|
||||
void Spr0B7_CarrotTopLiftUpperRight_Draw(uint8 k);
|
||||
void Spr0B8_CarrotTopLiftUpperLeft(uint8 k);
|
||||
void Spr0B9_MessageBox(uint8 k);
|
||||
|
|
@ -1368,10 +1396,10 @@ void SprXXX_ReflectingEnemy_ReflectingBooBuddiesEntry(uint8 k);
|
|||
void SprXXX_ReflectingEnemy_ReflectingPodobooEntry(uint8 k);
|
||||
void SprXXX_ReflectingEnemy_ReflectingPodobooDraw(uint8 k);
|
||||
void SprXXX_ReflectingEnemy_SpawnTrailingBoo(uint8 k);
|
||||
void StandardSpriteToSpriteCollisionChecks_GetMarioClipping(void);
|
||||
void StandardSpriteToSpriteCollisionChecks_GetSpriteClippingA(uint8 k);
|
||||
void StandardSpriteToSpriteCollisionChecks_GetSpriteClippingB(uint8 k);
|
||||
void SubOffscreen_Bank03_03B85F(uint8 k);
|
||||
void StandardSpriteToSpriteCollisionChecks_GetMarioClipping(CollInfo *ci);
|
||||
void StandardSpriteToSpriteCollisionChecks_GetSpriteClippingA(uint8 k, CollInfo *ci);
|
||||
void StandardSpriteToSpriteCollisionChecks_GetSpriteClippingB(uint8 k, CollInfo *ci);
|
||||
void SubOffscreen_Bank03_03B85F(uint8 k, uint8 r3);
|
||||
void SubOffscreen_Bank03_Entry1(uint8 k);
|
||||
void SubOffscreen_Bank03_Entry4(uint8 k);
|
||||
void TriggerHidden1up(void);
|
||||
|
|
@ -1380,51 +1408,56 @@ void UpdateMode7SpriteAnimations(uint8 k);
|
|||
void sub_3CDDA(uint8 k, uint8 a);
|
||||
|
||||
// Bank 4
|
||||
uint16 CalculateOverworldPlayerPosition(uint8 k);
|
||||
uint16 CalculateOverworldPlayerPosition(uint8 k, uint16 r0w, uint16 r2w);
|
||||
uint16 LoadOverworldLayer1AndEvents_InitializedOverworldLayer1Tilemap(uint16 k, uint8 a);
|
||||
void AddZPositionToTempYPos(uint8 k);
|
||||
uint8 CheckPlayerToOverworldSpriteCollision(uint8 k);
|
||||
uint8 CheckIfXIsAllowedOnYSubmap_Lightning(uint8 a);
|
||||
uint8 CheckIfXIsAllowedOnYSubmap_Sprites(uint8 k);
|
||||
uint8 DrawFlyingSwitchBlocks_04F39C(uint8 k, uint8 j);
|
||||
uint8 DrawOverworldPlayer_DrawCurrentPlayer(uint8 k, uint8 j);
|
||||
uint8 DrawOverworldSpriteShadow_04FE45(uint8 j, uint8 a);
|
||||
uint16 DrawFlyingSwitchBlocks_04F39C(uint8 k, uint8 j);
|
||||
uint8 DrawOverworldPlayer_DrawCurrentPlayer(uint8 k, uint8 j, PointU8 pt, uint8 tmp8c, uint16 r4w, uint8 r6);
|
||||
uint8 DrawOverworldSpriteShadow_04FE45(uint8 j, uint8 a, PointU16 pt, uint8 r4, uint8 r5);
|
||||
bool HandleOverworldStarPipeWarp_GetIndex(void);
|
||||
uint8 OWSpr03_CheepCheep_GenericOverworldSpriteGFXRt_Draw8x8(uint8 j, uint16 a);
|
||||
uint8 OWSpr04_PiranhaPlant_GenericOverworldSpriteGFXRt_Entry2(uint8 j, uint16 a, uint8 cr);
|
||||
uint8 OWSpr03_CheepCheep_GenericOverworldSpriteGFXRt_Draw8x8(uint8 j, uint16 a, PointU16 pt);
|
||||
uint8 OWSpr04_PiranhaPlant_GenericOverworldSpriteGFXRt_Entry2(uint8 j, uint16 a, uint8 cr, PointU16 pt);
|
||||
uint8 SetOverworldSpriteFrameIndex(uint8 k);
|
||||
void BufferEventTileToLayer2Tilemap_Buffer2x2Tile(uint16 k, uint16 j);
|
||||
void BufferEventTileToLayer2Tilemap_Buffer6x6Tile(uint16 k, uint16 j);
|
||||
void BufferEventTileToLayer2Tilemap_Entry2(uint16 k, uint16 j);
|
||||
void BufferEventTileToLayer2Tilemap_Buffer2x2Tile(uint16 k, uint16 j, uint16 r4, const uint8 *r6, const uint8 *r9);
|
||||
void BufferEventTileToLayer2Tilemap_Buffer6x6Tile(uint16 k, uint16 j, uint16 r4, const uint8 *r6, const uint8 *r9);
|
||||
void BufferEventTileToLayer2Tilemap_Entry2(uint16 k, uint16 j, uint16 r4);
|
||||
void BufferEventTileToLayer2Tilemap(void);
|
||||
uint16 BufferEventTileToStripeImageTable_Buffer2x2Tile(void);
|
||||
uint16 BufferEventTileToStripeImageTable_Buffer6x6Tile(void);
|
||||
void BufferOverworldLayer2Tilemap(uint16 k, uint16 j);
|
||||
void CheckPlayerToOverworldSpriteColl_SubOverworldHorizAndVertPos(uint8 k);
|
||||
uint16 BufferEventTileToStripeImageTable_Buffer2x2Tile(uint16 r0w, uint16 r2w, uint16 r10, const uint8 *r12);
|
||||
uint16 BufferEventTileToStripeImageTable_Buffer6x6Tile(uint16 r0w, uint16 r2w, uint16 r10, const uint8 *r12);
|
||||
void BufferOverworldLayer2Tilemap(uint16 k, uint16 j, uint16 r14w, const uint8 *p0);
|
||||
typedef struct OwHvPos {
|
||||
uint16 r0;
|
||||
uint16 r2;
|
||||
uint16 r6;
|
||||
uint16 r8;
|
||||
} OwHvPos;
|
||||
OwHvPos CheckPlayerToOverworldSpriteColl_SubOverworldHorizAndVertPos(uint8 k);
|
||||
uint16 CheckIfDestroyTileEventIsActive(uint8 a);
|
||||
void DisplayOwPrompt(uint8 a);
|
||||
void DrawFlyingSwitchBlocks(void);
|
||||
void DrawOverworldPlayer_DrawHalo(uint16 k);
|
||||
void DrawOverworldPlayer_DrawHalo(uint16 k, uint16 r4, PointU8 pt);
|
||||
void DrawOverworldPlayer(void);
|
||||
void DrawOverworldSpriteShadow(uint8 k, uint8 cr);
|
||||
void GameMode0C_LoadOverworld_048D91(void);
|
||||
void GameMode0C_LoadOverworld_048E55(void);
|
||||
void GameMode0E_ShowOverworld_Bank04(void);
|
||||
void GameMode0E_ShowOverworld_UpdateMainMapFreeScrollingPosition(uint8 k, uint8 a);
|
||||
void GetOverworldSpriteOnScreenPosition(uint8 k);
|
||||
void GetOverworldSpriteOnScreenPosition_Y(uint8 k, uint8 j);
|
||||
void GetXAndYDispOfCurrentEventTileSprite(void);
|
||||
PointU16 GetOverworldSpriteOnScreenPosition(uint8 k);
|
||||
uint16 GetOverworldSpriteOnScreenPosition_Y(uint8 k, uint8 j);
|
||||
PointU8 GetXAndYDispOfCurrentEventTileSprite(void);
|
||||
void HandleCurrentOverworldProcess(void);
|
||||
void HandleOverworldPathExits(void);
|
||||
void HandleOverworldPathExits_SetLayerPositions(void);
|
||||
void HandleOverworldStarPipeWarp_SetPlayerDestination(void);
|
||||
void InitializeOverworldTilemaps(void);
|
||||
void LoadOverworldLayer1AndEvents_04D7F2(void);
|
||||
void LoadOverworldLayer1AndEvents_04DA49(void);
|
||||
void LoadOverworldLayer1AndEvents_04DA49(uint8 r15);
|
||||
void LoadOverworldLayer1AndEvents(void);
|
||||
void LoadOverworldLayer2AndEventsTilemaps_04DD40(void);
|
||||
void LoadOverworldLayer2AndEventsTilemaps_04DD57(uint16 k, uint16 j);
|
||||
void LoadOverworldLayer2AndEventsTilemaps_04E453(void);
|
||||
void LoadOverworldLayer2AndEventsTilemaps_04DD57(uint16 k, uint16 j, const uint8 *p2);
|
||||
void LoadOverworldLayer2AndEventsTilemaps_04E453(uint8 r15);
|
||||
void LoadOverworldLayer2AndEventsTilemaps(void);
|
||||
void LoadOverworldLayer2AndEventsTilemaps_Sub(void);
|
||||
void LoadOverworldSprites(void);
|
||||
|
|
@ -1435,22 +1468,22 @@ void OWSpr02_BlueBird(uint8 k);
|
|||
void OWSpr03_CheepCheep_04FA7D(uint8 k);
|
||||
void OWSpr03_CheepCheep_04FA83(uint8 k);
|
||||
void OWSpr03_CheepCheep(uint8 k);
|
||||
uint8 OWSpr04_PiranhaPlant_GenericOverworldSpriteDraw(uint8 k, uint16 a);
|
||||
uint8 OWSpr04_PiranhaPlant_GenericOverworldSpriteDraw(uint8 k, uint16 a, PointU16 pt);
|
||||
void OWSpr04_PiranhaPlant(uint8 k);
|
||||
void OWSpr05_Cloud_04FB77(uint8 a);
|
||||
void OWSpr05_Cloud_04FB7A(uint16 a);
|
||||
void OWSpr05_Cloud_04FB7B(uint16 a, uint8 cr);
|
||||
void OWSpr05_Cloud_04FB77(uint8 a, PointU16 pt);
|
||||
void OWSpr05_Cloud_04FB7A(uint16 a, PointU16 pt);
|
||||
void OWSpr05_Cloud_04FB7B(uint16 a, uint8 cr, PointU16 pt);
|
||||
void OWSpr05_Cloud(uint8 k);
|
||||
void OWSpr06_KoopaKid(uint8 k);
|
||||
void OWSpr07_Smoke(uint8 k);
|
||||
void OWSpr08_BowserSign(uint8 k);
|
||||
void OWSpr09_Bowser_04FD55(uint8 k, uint8 j);
|
||||
void OWSpr09_Bowser(uint8 k);
|
||||
void OWSpr0A_Boo_04FDD2(uint8 k, uint8 a);
|
||||
void OWSpr0A_Boo_04FDD2(uint8 k, uint8 a, uint8 r0);
|
||||
void OWSpr0A_Boo(uint8 k);
|
||||
void OwEventProcess00_CheckIfEventShouldRun(void);
|
||||
void OwEventProcess01_DestroyTileAnimation_04ED83(void);
|
||||
void OwEventProcess01_DestroyTileAnimation_04EDE6(uint16 k, uint16 j);
|
||||
void OwEventProcess01_DestroyTileAnimation_04EDE6(uint16 k, uint16 j, uint16 r0w, const uint8 *p);
|
||||
void OwEventProcess01_DestroyTileAnimation_04EEAA(void);
|
||||
void OwEventProcess02_SetEventTileIndexes(void);
|
||||
void OwEventProcess03_GetLayer2Tile_04EA62(void);
|
||||
|
|
@ -1484,7 +1517,7 @@ void OwPrompt02_ExpandPromptWindow(void);
|
|||
void OwPrompt03_OverworldLifeExchanger_04F60E(uint8 k, uint8 j, uint8 a);
|
||||
void OwPrompt03_OverworldLifeExchanger(void);
|
||||
void OwPrompt07_DisplayingSavePrompt(void);
|
||||
void OwTileAnimations_0480B9(uint16 k);
|
||||
void OwTileAnimations_0480B9(uint16 k, const uint8 *p0);
|
||||
void OwTileAnimations_048172(uint8 k);
|
||||
void OwTileAnimations(void);
|
||||
void OwTileAnimations_ShiftWaterTiles(void);
|
||||
|
|
@ -1494,8 +1527,8 @@ void SubmapSwitchProcess05_UpdatePalette(void);
|
|||
void SubmapSwitchProcess06_EndWindowHDMA(void);
|
||||
void SubmapSwitchProcess07_EndSubmapSwitch(void);
|
||||
void UnlockOverworldPathBasedOnExit(void);
|
||||
uint16 UpdateLevelName_049D7F(uint16 j, uint16 k);
|
||||
void UpdateLevelName(void);
|
||||
uint16 UpdateLevelName_049D7F(uint16 j, uint16 k, uint16 r2w);
|
||||
void UpdateLevelName(uint16 r0w);
|
||||
void UpdateOverworldSpritePosition(uint8 k);
|
||||
void UpdateOverworldSpritePosition_X(uint8 k);
|
||||
void UpdateSaveBuffer(void);
|
||||
|
|
@ -1506,9 +1539,9 @@ void sub_485A7(void);
|
|||
uint16 InitializeLevelData_Hi(uint16 k, uint8 a);
|
||||
uint16 InitializeLevelData_Lo(uint16 k, uint8 a);
|
||||
uint8 UnusedOverworldEventPassedCheck(uint8 j);
|
||||
void AdjustTimeBonusDisplay(uint8 k, uint8 j);
|
||||
void AdjustTimeBonusDisplay(uint8 k, uint8 j, uint16 R0_W_, uint16 r2w);
|
||||
void BeginLoadingLevelData(void);
|
||||
void BufferBGTilemap(void);
|
||||
void BufferBGTilemap(uint8 *r13);
|
||||
void BufferScrollingTiles_Layer1_Main(void);
|
||||
void BufferScrollingTiles_Layer1_Init(void);
|
||||
void BufferScrollingTiles_Layer1(void);
|
||||
|
|
@ -1521,7 +1554,7 @@ void BufferScrollingTiles_Layer2(void);
|
|||
void BufferScrollingTiles_Layer2_NoScroll(void);
|
||||
void BufferScrollingTiles_Layer2_VerticalLevel(void);
|
||||
void CalculateRowOrColumnOfTilemapToUpdate(void);
|
||||
void CalculateTimeBonusDigits(void);
|
||||
uint16 CalculateTimeBonusDigits(void);
|
||||
void CheckIfLevelTilemapsNeedScrollUpdate(void);
|
||||
void DisplayCourseClearTextBonusStars(void);
|
||||
void DisplayMessage_DrawSwitchBlocks(uint8 k);
|
||||
|
|
@ -1606,7 +1639,7 @@ void UpdateLayerPositionWithScrollSprite(uint8 k);
|
|||
void sub_5B165(uint8 a);
|
||||
|
||||
// Bank 7
|
||||
uint8 Spr07B_GoalTape_07F200(uint8 k, uint8 j);
|
||||
uint8 Spr07B_GoalTape_07F200(uint8 k, uint8 j, uint16 R2, uint16 r4);
|
||||
void InitializeNormalSpriteRAMTables_ClearTables(uint8 k);
|
||||
void InitializeNormalSpriteRAMTables(uint8 k);
|
||||
void InitializeNormalSpriteRAMTables_PropertyTables(uint8 k);
|
||||
|
|
@ -1617,8 +1650,8 @@ void Spr07B_GoalTape_BonusStarNumbersDraw(uint8 k);
|
|||
void Spr07B_GoalTape_GiveBonusStars(uint8 k);
|
||||
|
||||
// Bank C
|
||||
void BufferCreditsBackgrounds_0C944C(void);
|
||||
void BufferCreditsBackgrounds_0C94C0(void);
|
||||
void BufferCreditsBackgrounds_0C944C(uint16 r13w, const uint8 *src);
|
||||
void BufferCreditsBackgrounds_0C94C0(uint16 mask);
|
||||
void BufferCreditsBackgrounds(void);
|
||||
void CarryEggAwayFromCastle(void);
|
||||
void CheckIfPlayerCanEndCastleDestructionCutscene(void);
|
||||
|
|
@ -1630,22 +1663,22 @@ void CreditsFadeOut(void);
|
|||
void CreditsFadeOut(void);
|
||||
void DelayTNTExplosionUntilPlayerComesBy(void);
|
||||
void DisplayCastleDestructionText(void);
|
||||
void DrawCameraFacingEndingYoshis_BlueYoshi(uint8 k, uint8 j);
|
||||
void DrawCastleDestructionCastleDoor_Entry3(uint8 k);
|
||||
void DrawCameraFacingEndingYoshis_BlueYoshi(uint8 k, uint8 j, uint8 r14, uint8 r0, uint8 r2);
|
||||
void DrawCastleDestructionCastleDoor_Entry3(uint8, uint8 r0, uint8 r1, uint8 r2);
|
||||
void DrawCastleDestructionCastleDoor(void);
|
||||
void DrawCreditsPeachRedAndYellowYoshi_Peach(uint8 k, uint8 j);
|
||||
void DrawCreditsPeachRedAndYellowYoshi_Peach(uint8 k, uint8 j, uint16 r0w, uint8 r2);
|
||||
void DrawCutsceneContactEffect(void);
|
||||
void DrawEndingBabyYoshis(void);
|
||||
void DrawEndingThankYou_0CA183(uint8 k, uint8 j);
|
||||
void DrawEndingThankYou_Entry2(uint8 k, uint8 j);
|
||||
void DrawEndingBabyYoshis(uint8 r2);
|
||||
uint8 DrawEndingThankYou_0CA183(uint8 k, uint8 j, uint16 r8, uint16 r0w, uint16 r2);
|
||||
void DrawEndingThankYou_Entry2(uint8 k, uint8 j, uint16 r0w, uint16 r4, uint16 r8);
|
||||
void DrawEndingThankYou(void);
|
||||
void DrawLeaningEndingYoshis(uint8 k, uint8 j);
|
||||
void DrawLeaningEndingYoshis(uint8 k, uint8 j, uint8 r0, uint8 r2);
|
||||
void DrawPlayerCough_MortonCutscene(void);
|
||||
void DrawPlayerCough_RoyCutscene(void);
|
||||
void DrawQuestionMark(void);
|
||||
void DrawTNTFuseBox(void);
|
||||
void DrawThankYouSpeechBubble(void);
|
||||
void DrawWhiteFlag(uint8 k);
|
||||
void DrawWhiteFlag(uint8 k, uint8 r0);
|
||||
void DrawWoodHammer(void);
|
||||
void DrawingTheEndMarioLuigiAndPeach(void);
|
||||
void EveryoneCheeringDuringEnding(void);
|
||||
|
|
@ -1660,7 +1693,7 @@ void GameMode19_Cutscene_RoyCutscene(void);
|
|||
void GameMode19_Cutscene_WendyCutscene(void);
|
||||
void GameMode1B_EndingCinema_Bank0C(void);
|
||||
void GameMode1B_EndingCinema_BufferNextRowOfCredits(void);
|
||||
void GameMode1B_EndingCinema_0C9FCB(uint8 k);
|
||||
uint16 GameMode1B_EndingCinema_0C9FCB(uint8 k);
|
||||
void GameMode1B_EndingCinema_Sub(void);
|
||||
void GameMode1D_LoadYoshisHouse_Bank0C(void);
|
||||
void GameMode1D_LoadYoshisHouse_0CA1D4(void);
|
||||
|
|
@ -1701,7 +1734,7 @@ void InitializeFarawayCastleRocket(void);
|
|||
void InitializeTNTExplosion(void);
|
||||
void KickCastleAway(void);
|
||||
void KickedCastleCreatesQuake(void);
|
||||
void MakeCreditsEggsBounce(void);
|
||||
void MakeCreditsEggsBounce(uint8 r14);
|
||||
void PlayerDropkicksAndStompsCastle(void);
|
||||
void ProcessCheeringYoshis(void);
|
||||
void ProcessHammerDebris(void);
|
||||
|
|
@ -1872,6 +1905,7 @@ void RopeObj3E_HorizontalLog(uint8 k);
|
|||
void RopeObj3F_VerticalLog(uint8 k);
|
||||
void SetMap16HighByteForCurrentObject_Page00(uint8 j);
|
||||
void SetMap16HighByteForCurrentObject_Page01(uint8 j);
|
||||
void SetMap16LowByte(uint16 j, uint8 a);
|
||||
void StdObj05_Coins(uint8 k);
|
||||
void StdObj0F_VerticalPipes(uint8 k);
|
||||
void StdObj10_HorizontalPipes(uint8 k);
|
||||
|
|
@ -1899,15 +1933,15 @@ void StdObj1E_ClimbingNetWithSideEdge_0DB4FE(uint8 k, uint8 j, uint8 a);
|
|||
void StdObj1E_ClimbingNetWithSideEdge(uint8 k);
|
||||
void StdObj1F_SkinnyVerticalPipeBoneLog(uint8 k);
|
||||
void StdObj20_SkinnyHorizontalPipeBoneLog(uint8 k);
|
||||
void StdObj21_WideScaleGroundLedge_0DB1E3(uint8 k);
|
||||
void StdObj21_WideScaleGroundLedge_0DB1E3(uint8 k, uint8 r0, uint8 r2);
|
||||
void StdObj21_WideScaleGroundLedge(uint8 k);
|
||||
void StdObj21_WideScaleGroundLedge_StandardLedgeEntry(uint8 k);
|
||||
void StdObjXX_Generic1RepeatedTileObject_IcyTurnBlockEntry(uint8 k);
|
||||
void UndergroundObj36_4SidedGround(uint8 k);
|
||||
void UndergroundObj37_LargeCanvas(uint8 k);
|
||||
void UndergroundObj38_RightLavaEdge_0DDAE8(uint8 k, uint8 j, uint8 a);
|
||||
void UndergroundObj38_RightLavaEdge_0DDAE8(uint8 k, uint8 j, uint8 a, uint8 r0);
|
||||
void UndergroundObj38_RightLavaEdge(uint8 k);
|
||||
void UndergroundObj39_SlopedCaveLava_0DDBA4(uint8 j);
|
||||
void UndergroundObj39_SlopedCaveLava_0DDBA4(uint8 j, uint8 r0, uint8 r2);
|
||||
void UndergroundObj39_SlopedCaveLava(uint8 k);
|
||||
void UndergroundObj39_SlopedCaveLavaLeftSlope(void);
|
||||
void UndergroundObj39_SlopedCaveLavaRightSlope(void);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ void OpenGLRenderer_Create(struct RendererFuncs *funcs);
|
|||
bool g_debug_flag;
|
||||
bool g_want_dump_memmap_flags;
|
||||
bool g_new_ppu = true;
|
||||
bool g_other_image;
|
||||
bool g_other_image = false;
|
||||
struct SpcPlayer *g_spc_player;
|
||||
static uint32_t button_state;
|
||||
|
||||
|
|
@ -157,6 +157,8 @@ static SDL_HitTestResult HitTestCallback(SDL_Window *win, const SDL_Point *pt, v
|
|||
}
|
||||
|
||||
void RtlDrawPpuFrame(uint8 *pixel_buffer, size_t pitch, uint32 render_flags) {
|
||||
g_rtl_game_info->draw_ppu_frame();
|
||||
|
||||
uint8 *ppu_pixels = g_other_image ? g_my_pixels : g_pixels;
|
||||
for (size_t y = 0, y_end = g_snes_height; y < y_end; y++)
|
||||
memcpy((uint8 *)pixel_buffer + y * pitch, ppu_pixels + y * 256 * 4, 256 * 4);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
|
|
@ -131,6 +131,7 @@
|
|||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>DebugFastLink</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
|
|
|
|||
2442
src/smw_00.c
2442
src/smw_00.c
File diff suppressed because it is too large
Load Diff
2256
src/smw_01.c
2256
src/smw_01.c
File diff suppressed because it is too large
Load Diff
2803
src/smw_02.c
2803
src/smw_02.c
File diff suppressed because it is too large
Load Diff
1638
src/smw_03.c
1638
src/smw_03.c
File diff suppressed because it is too large
Load Diff
1705
src/smw_04.c
1705
src/smw_04.c
File diff suppressed because it is too large
Load Diff
874
src/smw_05.c
874
src/smw_05.c
File diff suppressed because it is too large
Load Diff
10
src/smw_07.c
10
src/smw_07.c
|
|
@ -2,6 +2,16 @@
|
|||
#include "funcs.h"
|
||||
#include "smw_rtl.h"
|
||||
#include "variables.h"
|
||||
|
||||
static const uint8 kInitializeNormalSpriteRAMTables_Sprite1656Vals[201] = { 0x70, 0x70, 0x70, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0, 0x10, 0x10, 0x10, 0x14, 0x0, 0x0, 0x0, 0x0, 0x10, 0x10, 0x11, 0x81, 0x10, 0x10, 0x80, 0x11, 0x11, 0x82, 0x0, 0x13, 0x13, 0x13, 0x13, 0x1, 0x0, 0x0, 0x0, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x80, 0x0, 0x0, 0x0, 0x7, 0x7, 0x7, 0x0, 0x0, 0x30, 0x30, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x0, 0x10, 0x10, 0x8c, 0x8c, 0x10, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0xb, 0xb, 0xb, 0xb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x19, 0x30, 0xa, 0x10, 0x10, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x10, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, };
|
||||
static const uint8 kInitializeNormalSpriteRAMTables_Sprite1662Vals[201] = { 0x0, 0x0, 0x0, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0, 0xa, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x80, 0x80, 0x81, 0x1, 0x80, 0x80, 0x0, 0x81, 0x81, 0x0, 0x0, 0x81, 0x81, 0x81, 0x81, 0x6, 0x0, 0x7, 0x6, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0x0, 0x37, 0x0, 0x0, 0x9, 0x1, 0x0, 0x0, 0x0, 0xe, 0xe, 0xe, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x10, 0x14, 0x0, 0xd, 0x80, 0x0, 0x1d, 0x0, 0x80, 0x80, 0x80, 0x80, 0x0, 0x0, 0x80, 0x2, 0xc, 0x3, 0x5, 0x4, 0x5, 0x4, 0x0, 0x0, 0x4, 0x5, 0x4, 0x5, 0x0, 0x1d, 0xc, 0x4, 0x4, 0x12, 0x20, 0x21, 0x2c, 0x34, 0x4, 0x4, 0x4, 0x4, 0xc, 0x16, 0x0, 0x17, 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x35, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0xc, 0xc, 0x0, 0x0, 0x3a, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x8, 0x38, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0x0, 0xd, 0x80, 0x1d, 0x0, 0x0, 0xb6, 0x24, 0x23, 0x3b, 0x1f, 0x22, 0x0, 0x27, 0x0, 0x0, 0x28, 0x0, 0x2a, 0x2b, 0x2b, 0x0, 0x0, 0x0, 0xc, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x2e, 0x2e, 0xc, 0x1d, 0x2f, 0xc, 0x0, 0x80, 0x30, 0x32, 0x31, 0x0, 0x0, 0x33, 0x7, 0xff, 0x0, 0xc, };
|
||||
static const uint8 kInitializeNormalSpriteRAMTables_Sprite166EVals[201] = { 0xa, 0x8, 0x6, 0x4, 0xa, 0x8, 0x6, 0x4, 0xa, 0xa, 0x8, 0x8, 0x4, 0x17, 0x32, 0x4, 0x4, 0x1d, 0x3d, 0x9, 0x9, 0x45, 0x45, 0x85, 0x85, 0xb, 0x8, 0x1, 0x12, 0x15, 0x9, 0x4f, 0x1c, 0x24, 0xb, 0x9, 0xb, 0x9, 0x33, 0x33, 0xfd, 0x2b, 0x8, 0x35, 0x3b, 0x3a, 0x19, 0x3a, 0x13, 0x13, 0x13, 0x34, 0x39, 0x2a, 0x15, 0xf3, 0xfd, 0xfd, 0x37, 0x37, 0x37, 0xc7, 0x30, 0x5, 0x15, 0x37, 0x37, 0x37, 0x33, 0x30, 0x8b, 0x85, 0x1d, 0x3b, 0x3b, 0x9, 0x34, 0x1, 0x1, 0x8, 0x8, 0x9, 0x20, 0x30, 0x20, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe1, 0xe1, 0xeb, 0xeb, 0xe3, 0xe3, 0xe3, 0xe1, 0xe1, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xe3, 0xf0, 0xe3, 0xf3, 0x3f, 0x3f, 0xf, 0x35, 0xb, 0x9, 0x7, 0x8, 0xa, 0x20, 0x24, 0xa, 0x3a, 0x3a, 0x20, 0x20, 0x21, 0x28, 0x20, 0x20, 0x0, 0x20, 0x20, 0x20, 0x20, 0xf5, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x3b, 0xf3, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0x9b, 0x93, 0x0, 0x30, 0x31, 0x31, 0x31, 0xfb, 0xfb, 0xbb, 0xe3, 0xf3, 0x35, 0x35, 0x39, 0x35, 0x35, 0x7d, 0x7, 0x37, 0x37, 0x3d, 0x3f, 0x3f, 0x30, 0x31, 0x31, 0x31, 0x4, 0x35, 0x3b, 0x3b, 0x36, 0x7b, 0x3b, 0x33, 0x6, 0xb, 0x11, 0xf5, 0xf5, 0xcb, 0xcd, 0xf3, 0x3f, 0xff, 0x20, 0x38, };
|
||||
static const uint8 kInitializeNormalSpriteRAMTables_Sprite167AVals[201] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x2, 0x18, 0x0, 0x0, 0x81, 0x0, 0x1, 0x99, 0x99, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x83, 0x0, 0x0, 0x9a, 0x1e, 0x1, 0xbe, 0x81, 0x81, 0x81, 0x2, 0x18, 0x87, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x3e, 0x1, 0x1, 0x82, 0x82, 0x82, 0x1, 0x2, 0x81, 0x0, 0x0, 0xa2, 0x82, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa2, 0x8, 0x2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x22, 0x22, 0x22, 0x22, 0xa2, 0xa2, 0xa2, 0xa2, 0xe2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x82, 0xa2, 0xa2, 0x9a, 0x80, 0x82, 0x3e, 0xc2, 0x82, 0x82, 0x82, 0x92, 0x80, 0x82, 0x82, 0x82, 0x2, 0x2, 0x2, 0x2, 0xa2, 0xa2, 0x1, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x1, 0x1, 0x1, 0xa2, 0x81, 0x0, 0x1, 0x80, 0x0, 0x19, 0xa2, 0x1, 0x1, 0x1, 0x0, 0x0, 0x81, 0x1, 0x81, 0x81, 0x81, 0x0, 0x1, 0x1, 0xa2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa0, 0x1, 0x1, 0xa1, 0xa2, 0xa2, 0x1, 0x1, 0xa2, 0xa3, 0xff, 0x82, 0xa2, };
|
||||
static const uint8 kInitializeNormalSpriteRAMTables_Sprite1686Vals[201] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x42, 0x52, 0x52, 0x52, 0x52, 0x0, 0x9, 0x0, 0x40, 0x0, 0x1, 0x0, 0x0, 0x10, 0x10, 0x90, 0x90, 0x1, 0x10, 0x10, 0x90, 0x0, 0x11, 0x1, 0x1, 0x8, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x19, 0x80, 0x0, 0x39, 0x9, 0x9, 0x10, 0xa, 0x9, 0x9, 0x9, 0x99, 0x18, 0x29, 0x8, 0x19, 0x19, 0x19, 0x11, 0x11, 0x15, 0x10, 0xa, 0x40, 0x40, 0x8d, 0x8d, 0x8d, 0x11, 0x18, 0x11, 0x80, 0x0, 0x29, 0x29, 0x10, 0x10, 0x10, 0x10, 0x0, 0x0, 0x10, 0x29, 0x20, 0x29, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0x29, 0x29, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x29, 0x19, 0x29, 0x29, 0x59, 0x59, 0x18, 0x18, 0x10, 0x10, 0x50, 0x28, 0x28, 0x28, 0x28, 0x8, 0x29, 0x29, 0x39, 0x39, 0x29, 0x28, 0x28, 0x3a, 0x28, 0x29, 0x31, 0x31, 0x29, 0x0, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x11, 0x1, 0x39, 0x10, 0x19, 0x19, 0x19, 0x19, 0x1, 0x29, 0x98, 0x14, 0x14, 0x10, 0x18, 0x18, 0x18, 0x0, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1d, 0x1d, 0x19, 0x19, 0x18, 0x18, 0x19, 0x19, 0x19, 0x1d, 0x19, 0x18, 0x0, 0x10, 0x0, 0x99, 0x99, 0x10, 0x90, 0xa9, 0xb9, 0xff, 0x39, 0x19, };
|
||||
const uint8 kInitializeNormalSpriteRAMTables_Sprite190FVals[201] = { 0x0, 0x0, 0x0, 0x0, 0xa0, 0xa0, 0xa0, 0xa0, 0xb0, 0xb0, 0xb0, 0xb0, 0xa0, 0x80, 0x44, 0x80, 0x80, 0x80, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x20, 0x0, 0x0, 0x0, 0x60, 0x20, 0x4, 0x4, 0x20, 0x20, 0x20, 0x20, 0x24, 0x4, 0x0, 0x44, 0x20, 0x4, 0x44, 0xc4, 0x0, 0xc4, 0x24, 0x24, 0x24, 0x4, 0x4, 0x46, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0xc4, 0x0, 0x0, 0x5, 0x5, 0x5, 0x4, 0x44, 0x48, 0x0, 0x0, 0x40, 0x40, 0x40, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0xc4, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x45, 0x45, 0x45, 0x65, 0x65, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x5, 0x5, 0x44, 0x44, 0x44, 0x44, 0x46, 0x0, 0x0, 0x0, 0x10, 0x10, 0x10, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x42, 0x42, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x0, 0x0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x1, 0x0, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x0, 0x40, 0x40, 0x40, 0x0, 0x4, 0x4, 0x40, 0x40, 0x0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x40, 0x40, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x41, 0x41, 0x40, 0x41, 0x40, 0x0, 0x0, 0x0, 0x20, 0x47, 0x45, 0x0, 0x0, 0x41, 0x41, 0xff, 0x40, 0x40, };
|
||||
static const uint8 kSpawnSpinJumpStars_InitialXSpeed[4] = { 0xe0, 0x20, 0xe0, 0x20, };
|
||||
static const uint8 kSpawnSpinJumpStars_InitialYSpeed[4] = { 0xf0, 0xf0, 0x10, 0x10, };
|
||||
|
||||
void InitializeNormalSpriteRAMTables_ClearTables(uint8 k) { // 07f722
|
||||
spr_table164a[k] = 0;
|
||||
spr_table1632[k] = 0;
|
||||
|
|
|
|||
809
src/smw_0c.c
809
src/smw_0c.c
File diff suppressed because it is too large
Load Diff
1616
src/smw_0d.c
1616
src/smw_0d.c
File diff suppressed because it is too large
Load Diff
|
|
@ -12,7 +12,6 @@ static const uint32 kPatchedCarrys_SMW[] = {
|
|||
0x18081,
|
||||
0x1A2CC,
|
||||
0x1B066,
|
||||
|
||||
0x0fe79,
|
||||
0x0fe80,
|
||||
0x0fe88,
|
||||
|
|
@ -28,7 +27,6 @@ static const uint32 kPatchedCarrys_SMW[] = {
|
|||
0x2B2F6,
|
||||
0x3AD9B,
|
||||
0x498A2,
|
||||
|
||||
0x2FBF5,
|
||||
0x2FBF7,
|
||||
0x2FC11,
|
||||
|
|
@ -46,6 +44,7 @@ static const uint32 kPatchedCarrys_SMW[] = {
|
|||
0x2C06C,
|
||||
0x2AD15,
|
||||
0x02DDA1,
|
||||
|
||||
0x0399DB,
|
||||
|
||||
0x1BC75,
|
||||
|
|
@ -88,14 +87,14 @@ uint32 PatchBugs_SMW1(void) {
|
|||
g_cpu->y = 0;
|
||||
} else if (FixBugHook(0xCC32)) {
|
||||
// UpdateHDMAWindowBuffer_00CC14 reads bad ptr
|
||||
if (R6_W == 0) {
|
||||
if (WORD(g_ram[6]) == 0) {
|
||||
g_cpu->a = 0;
|
||||
return 0xCC34;
|
||||
}
|
||||
} else if (FixBugHook(0x04FC00)) { // OWSpr06_KoopaKid uninited Y
|
||||
g_cpu->y = owspr_table0df5[(uint8)g_cpu->x];
|
||||
} else if (FixBugHook(0x03B830)) { // CheckPlayerPositionRelativeToSprite_Y in bank 3 writes to R15 instead of R14
|
||||
R14_ = g_cpu->a;
|
||||
g_ram[0xe] = g_cpu->a;
|
||||
return 0x3b832;
|
||||
} else if (FixBugHook(0x2F2FC)) { // Wiggler reads from spr_ylos_lo instead of hi
|
||||
g_cpu->a = spr_ypos_hi[g_cpu->x & 0xff];
|
||||
|
|
@ -112,10 +111,10 @@ uint32 PatchBugs_SMW1(void) {
|
|||
if (LOBYTE(g_cpu->a) == 255 || LOBYTE(g_cpu->a) == 0) g_cpu->a = 1;
|
||||
} else if (FixBugHook(0x4862E)) {
|
||||
// DrawOverworldPlayer doesn't init
|
||||
R0_W = 0;
|
||||
R4_W = 0;
|
||||
WORD(g_ram[0]) = 0;
|
||||
WORD(g_ram[4]) = 0;
|
||||
} else if (FixBugHook(0x3A0A7)) { // Spr0A8_Blargg OOB
|
||||
R3_ = (spr_table1602[g_cpu->x] != 0) * 5;
|
||||
g_ram[3] = (spr_table1602[g_cpu->x] != 0) * 5;
|
||||
} else if (FixBugHook(0x811D)) {
|
||||
if (g_use_my_apu_code)
|
||||
return 0x8125;
|
||||
|
|
@ -126,17 +125,45 @@ uint32 PatchBugs_SMW1(void) {
|
|||
RtlSetUploadingApu(true);
|
||||
} else if (FixBugHook(0x80FB)) {
|
||||
RtlSetUploadingApu(false);
|
||||
} else if (FixBugHook(0xE3FB)) {
|
||||
g_ram[12] = g_ram[13] = 0; // R13 not initialized
|
||||
} else if (FixBugHook(0x1FD50)) {
|
||||
// Spr029_KoopaKid_Status08_IggyLarry_01FD50 may not init its outputs
|
||||
WORD(g_ram[0x14b8]) = spr_xpos_lo[g_cpu->x];
|
||||
WORD(g_ram[0x14ba]) = spr_ypos_lo[g_cpu->x];
|
||||
} else if (FixBugHook(0x1d7f4)) {
|
||||
WORD(g_ram[8]) = GetSprYPos(g_cpu->x);
|
||||
WORD(g_ram[10]) = GetSprXPos(g_cpu->x);
|
||||
} else if (FixBugHook(0x1ec36)) {
|
||||
g_cpu->a = 1;
|
||||
} else if (FixBugHook(0x19F1C)) {
|
||||
if (g_cpu->y >= 84)
|
||||
g_cpu->y = 0;
|
||||
} else if (FixBugHook(0x817e)) {
|
||||
g_cpu->y = g_ram[kSmwRam_APUI02];
|
||||
return 0x8181;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SmwCpuInitialize(void) {
|
||||
*SnesRomPtr(0x843B) = 0x60; // remove WaitForHBlank_Entry2
|
||||
*SnesRomPtr(0x2DDA2) = 5;
|
||||
*SnesRomPtr(0xCA5AC) = 7;
|
||||
}
|
||||
|
||||
static void SmwFixSnapshotForCompare(Snapshot *b, Snapshot *a) {
|
||||
memcpy(&b->ram[0x0], &a->ram[0x0], 16); // temps
|
||||
memcpy(&b->ram[0x10b], &a->ram[0x10b], 0x100 - 0xb); // stack
|
||||
|
||||
memcpy(&b->ram[0x17bb], &a->ram[0x17bb], 1); // unusedram_7e17bb
|
||||
|
||||
memcpy(&b->ram[0x65], &a->ram[0x65], 12); // temp66, etc
|
||||
memcpy(&b->ram[0x8a], &a->ram[0x8a], 6); // temp8a, etc
|
||||
|
||||
memcpy(&b->ram[0x14B0], &a->ram[0x14B0], 0x11); // temp14b0 etc
|
||||
|
||||
memcpy(&b->ram[0x1436], &a->ram[0x1436], 4); // temp14b0 etc
|
||||
}
|
||||
|
||||
static uint32 RunCpuUntilPC(uint32 pc1, uint32 pc2) {
|
||||
|
|
@ -171,6 +198,8 @@ void SmwRunOneFrameOfGame_Emulated(void) {
|
|||
|
||||
// Right after NMI completes, draw the frame, possibly triggering IRQ.
|
||||
assert(!snes->cpu->i);
|
||||
|
||||
/*
|
||||
snes->vPos = snes->hPos = 0;
|
||||
snes->cpu->nmiWanted = snes->cpu->irqWanted = false;
|
||||
snes->inVblank = snes->inNmi = false;
|
||||
|
|
@ -183,6 +212,44 @@ void SmwRunOneFrameOfGame_Emulated(void) {
|
|||
snes_runCpu(snes);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void SmwDrawPpuFrame(void) {
|
||||
SimpleHdma hdma_chans[3];
|
||||
|
||||
Snes *snes = g_snes;
|
||||
|
||||
dma_startDma(snes->dma, mirror_hdmaenable, true);
|
||||
// dma_initHdma(snes->dma);
|
||||
|
||||
SimpleHdma_Init(&hdma_chans[0], &g_snes->dma->channel[5]);
|
||||
SimpleHdma_Init(&hdma_chans[1], &g_snes->dma->channel[6]);
|
||||
SimpleHdma_Init(&hdma_chans[2], &g_snes->dma->channel[7]);
|
||||
|
||||
int trigger = snes->vIrqEnabled ? snes->vTimer + 1 : -1;
|
||||
|
||||
for (int i = 0; i <= 224; i++) {
|
||||
ppu_runLine(snes->ppu, i);
|
||||
SimpleHdma_DoLine(&hdma_chans[0]);
|
||||
SimpleHdma_DoLine(&hdma_chans[1]);
|
||||
SimpleHdma_DoLine(&hdma_chans[2]);
|
||||
// dma_doHdma(snes->dma);
|
||||
if (i == trigger) {
|
||||
SmwVectorIRQ();
|
||||
trigger = snes->vIrqEnabled ? snes->vTimer + 1 : -1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
while (!snes->inNmi) {
|
||||
snes_handle_pos_stuff(snes);
|
||||
|
||||
if (snes->cpu->irqWanted) {
|
||||
snes->cpu->irqWanted = false;
|
||||
SmwVectorIRQ();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void SmwRunOneFrameOfGame(void) {
|
||||
|
|
@ -198,19 +265,6 @@ void SmwRunOneFrameOfGame(void) {
|
|||
SmwRunOneFrameOfGame_Internal();
|
||||
|
||||
SmwVectorNMI();
|
||||
|
||||
snes->vPos = snes->hPos = 0;
|
||||
snes->cpu->nmiWanted = snes->cpu->irqWanted = false;
|
||||
snes->inVblank = snes->inNmi = false;
|
||||
|
||||
while (!snes->inNmi) {
|
||||
snes_handle_pos_stuff(snes);
|
||||
|
||||
if (snes->cpu->irqWanted) {
|
||||
snes->cpu->irqWanted = false;
|
||||
SmwVectorIRQ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const RtlGameInfo kSmwGameInfo = {
|
||||
|
|
@ -221,5 +275,6 @@ const RtlGameInfo kSmwGameInfo = {
|
|||
&SmwCpuInitialize,
|
||||
&SmwRunOneFrameOfGame,
|
||||
&SmwRunOneFrameOfGame_Emulated,
|
||||
&SmwDrawPpuFrame,
|
||||
&SmwFixSnapshotForCompare,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include "smw_rtl.h"
|
||||
#include "variables.h"
|
||||
#include <time.h>
|
||||
#include "common_cpu_infra.h"
|
||||
#include "snes/snes.h"
|
||||
|
||||
void AddSprXPos(uint8 k, uint16 x) {
|
||||
AddHiLo(&spr_xpos_hi[k], &spr_xpos_lo[k], x);
|
||||
|
|
@ -43,3 +45,9 @@ void SmwSavePlaythroughSnapshot() {
|
|||
snprintf(buf, sizeof(buf), "playthrough/%d_%d_%d.sav", ow_level_number_lo, misc_exit_level_action, (int)time(NULL));
|
||||
RtlSaveSnapshot(buf, false);
|
||||
}
|
||||
|
||||
void UploadOAMBuffer() { // 008449
|
||||
memcpy(g_snes->ppu->oam, g_ram + 0x200, 0x220);
|
||||
RtlPpuWrite(OAMADDH, 0x80);
|
||||
RtlPpuWrite(OAMADDL, mirror_oamaddress_lo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,11 @@ void SmwVectorNMI();
|
|||
void SmwVectorIRQ();
|
||||
void SmwSavePlaythroughSnapshot();
|
||||
|
||||
void SmwCopyToVram(uint16 vram_addr, const uint8 *src, int n);
|
||||
void SmwClearVram(uint16 vram_addr, uint16 value, int n);
|
||||
void SmwCopyToVramPitch32(uint16 vram_addr, const uint8 *src, int n);
|
||||
void SmwCopyToVramLow(uint16 vram_addr, const uint8 *src, int n);
|
||||
|
||||
extern bool g_did_finish_level_hook;
|
||||
|
||||
void AddSprXPos(uint8 k, uint16 x);
|
||||
|
|
@ -42,3 +47,10 @@ typedef struct LevelTileAnimations {
|
|||
} LevelTileAnimations;
|
||||
|
||||
#pragma pack (pop)
|
||||
|
||||
typedef struct GenTileArgs {
|
||||
uint8 r6, r7;
|
||||
uint16 r8;
|
||||
uint16 r12, r14;
|
||||
uint16 r10;
|
||||
} GenTileArgs;
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ typedef struct SmwSpcPlayer {
|
|||
SpcPlayer base;
|
||||
DspRegWriteHistory *reg_write_history;
|
||||
uint8 new_value_from_snes[4];
|
||||
uint8 port_to_snes[4];
|
||||
|
||||
uint8 last_value_from_snes[4];
|
||||
uint8 timer_cycles;
|
||||
uint8 counter_sf0c;
|
||||
|
|
@ -174,7 +174,7 @@ static const MemMap kChannel_Maps[] = {
|
|||
};
|
||||
static const MemMapSized kSpcPlayer_Maps[] = {
|
||||
{offsetof(SmwSpcPlayer, new_value_from_snes), 0x0, 4},
|
||||
{offsetof(SmwSpcPlayer, port_to_snes), 0x4, 4},
|
||||
{offsetof(SmwSpcPlayer, base.port_to_snes), 0x4, 4},
|
||||
{offsetof(SmwSpcPlayer, last_value_from_snes), 0x8, 4},
|
||||
{offsetof(SmwSpcPlayer, counter_sf0c), 0xc, 1},
|
||||
{offsetof(SmwSpcPlayer, sfx3_timer), 0xd, 1},
|
||||
|
|
@ -345,7 +345,7 @@ static void Spc_Loop_Part2(SmwSpcPlayer *p, uint8 ticks) {
|
|||
if (!p->smw_pause_music)
|
||||
Music_Process(p);
|
||||
ReadPortFromSnes(p, 2);
|
||||
} else if (p->port_to_snes[2]) {
|
||||
} else if (p->base.port_to_snes[2]) {
|
||||
Channel *c = p->channel + 7;
|
||||
for (p->cur_chan_bit = 0x80; p->cur_chan_bit != 0; p->cur_chan_bit >>= 1, c--) {
|
||||
if (HIBYTE(c->pattern_cur_ptr))
|
||||
|
|
@ -424,11 +424,11 @@ static void WritePitch(SmwSpcPlayer *p, Channel *c, uint16 pitch) {
|
|||
}
|
||||
|
||||
static void Sfx0_TurnOffChannel(SmwSpcPlayer *p) {
|
||||
if (p->port_to_snes[0] == 0x11) {
|
||||
if (p->base.port_to_snes[0] == 0x11) {
|
||||
p->smw_pause_music = 0x60;
|
||||
Dsp_Write(p, FLG, 0x60);
|
||||
}
|
||||
p->port_to_snes[0] = 0;
|
||||
p->base.port_to_snes[0] = 0;
|
||||
p->is_chan_on &= ~0x10;
|
||||
if (p->channel[4].instrument_id)
|
||||
Channel_SetInstrument(p, &p->channel[4], p->channel[4].instrument_id);
|
||||
|
|
@ -450,16 +450,16 @@ static void Sfx0_Process(SmwSpcPlayer *p) {
|
|||
uint8 cmd;
|
||||
|
||||
if (p->new_value_from_snes[0] == 0x12 || p->new_value_from_snes[0] == 0x11 ||
|
||||
p->port_to_snes[0] != 0x11 && p->port_to_snes[0] != 0x1d) {
|
||||
p->base.port_to_snes[0] != 0x11 && p->base.port_to_snes[0] != 0x1d) {
|
||||
|
||||
if (p->new_value_from_snes[0] & 0x80) {
|
||||
p->smw_tempo_increase = 10;
|
||||
p->tempo = (p->tempo + (p->smw_tempo_increase << 8)) & ~0xff;
|
||||
p->new_value_from_snes[3] = 0x1d;
|
||||
p->port_to_snes[0] = 0x1d;
|
||||
p->base.port_to_snes[0] = 0x1d;
|
||||
goto play_it;
|
||||
} else if (p->new_value_from_snes[0] != 0) {
|
||||
p->port_to_snes[0] = p->new_value_from_snes[0];
|
||||
p->base.port_to_snes[0] = p->new_value_from_snes[0];
|
||||
goto play_it;
|
||||
}
|
||||
}
|
||||
|
|
@ -468,7 +468,7 @@ static void Sfx0_Process(SmwSpcPlayer *p) {
|
|||
if (--p->sfx0_countdown)
|
||||
return;
|
||||
goto restart_sfx;
|
||||
} else if (p->port_to_snes[0]) {
|
||||
} else if (p->base.port_to_snes[0]) {
|
||||
goto keep_playing;
|
||||
} else {
|
||||
return;
|
||||
|
|
@ -488,7 +488,7 @@ play_it:
|
|||
}
|
||||
|
||||
p->sfx0_countdown = 2;
|
||||
if (p->port_to_snes[0] == 0x11 && p->echo_channels) {
|
||||
if (p->base.port_to_snes[0] == 0x11 && p->echo_channels) {
|
||||
SetEchoOff(p);
|
||||
}
|
||||
|
||||
|
|
@ -546,7 +546,7 @@ note_pitch_envelope_to:
|
|||
goto note_continue;
|
||||
} else if (cmd == 0xff) {
|
||||
restart_sfx:
|
||||
p->sfx0_sound_ptr_cur = WORD(p->ram[0x5681 + (uint8)(p->port_to_snes[0] * 2)]);
|
||||
p->sfx0_sound_ptr_cur = WORD(p->ram[0x5681 + (uint8)(p->base.port_to_snes[0] * 2)]);
|
||||
goto start_sfx;
|
||||
} else {
|
||||
PlayNote(p, &p->channel[4], cmd);
|
||||
|
|
@ -565,7 +565,7 @@ note_continue:
|
|||
}
|
||||
|
||||
static void Sfx3_TurnOffChannel(SmwSpcPlayer *p) {
|
||||
p->port_to_snes[3] = 0;
|
||||
p->base.port_to_snes[3] = 0;
|
||||
p->is_chan_on &= ~0x40;
|
||||
p->chan_bit_flags = 0;
|
||||
Dsp_Write(p, NON, 0);
|
||||
|
|
@ -576,9 +576,9 @@ static void Sfx3_TurnOffChannel(SmwSpcPlayer *p) {
|
|||
static void Sfx3_Process(SmwSpcPlayer *p) {
|
||||
uint8 cmd;
|
||||
|
||||
if (p->port_to_snes[3] != 0x24 && (p->new_value_from_snes[3] == 0x24 || p->port_to_snes[3] != 0x1d && p->port_to_snes[3] != 5)) {
|
||||
if (p->base.port_to_snes[3] != 0x24 && (p->new_value_from_snes[3] == 0x24 || p->base.port_to_snes[3] != 0x1d && p->base.port_to_snes[3] != 5)) {
|
||||
if (p->new_value_from_snes[3] != 0) {
|
||||
p->port_to_snes[3] = p->new_value_from_snes[3];
|
||||
p->base.port_to_snes[3] = p->new_value_from_snes[3];
|
||||
p->sfx3_timer = 2;
|
||||
Dsp_Write(p, KOF, 0x40);
|
||||
p->is_chan_on |= 0x40;
|
||||
|
|
@ -590,9 +590,9 @@ static void Sfx3_Process(SmwSpcPlayer *p) {
|
|||
if (p->sfx3_timer) {
|
||||
if (--p->sfx3_timer)
|
||||
return;
|
||||
p->sfx3_sound_ptr_cur = WORD(p->ram[0x5619 + (uint8)(p->port_to_snes[3] * 2)]);
|
||||
p->sfx3_sound_ptr_cur = WORD(p->ram[0x5619 + (uint8)(p->base.port_to_snes[3] * 2)]);
|
||||
goto start_sfx;
|
||||
} else if (!p->port_to_snes[3]) {
|
||||
} else if (!p->base.port_to_snes[3]) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -706,7 +706,7 @@ static void Sfx1_Process(SmwSpcPlayer *p) {
|
|||
|
||||
if (p->new_value_from_snes[1] == 2) {
|
||||
// enable yoshi drums
|
||||
if ((p->port_to_snes[2] == 6 || !(p->port_to_snes[2] & ~3)) && !p->smw_player_on_yoshi) {
|
||||
if ((p->base.port_to_snes[2] == 6 || !(p->base.port_to_snes[2] & ~3)) && !p->smw_player_on_yoshi) {
|
||||
Port1_WriteInstrument(p, 9);
|
||||
p->smw_player_on_yoshi = 1;
|
||||
}
|
||||
|
|
@ -714,9 +714,9 @@ static void Sfx1_Process(SmwSpcPlayer *p) {
|
|||
// disable yoshi drums
|
||||
p->smw_player_on_yoshi = 0;
|
||||
} else if (p->new_value_from_snes[1] == 1 ||
|
||||
p->port_to_snes[1] != 1 && p->new_value_from_snes[1] == 4) {
|
||||
p->base.port_to_snes[1] != 1 && p->new_value_from_snes[1] == 4) {
|
||||
// jump & two note sfx
|
||||
p->port_to_snes[1] = p->new_value_from_snes[1];
|
||||
p->base.port_to_snes[1] = p->new_value_from_snes[1];
|
||||
p->sfx1_countdown = 4;
|
||||
Dsp_Write(p, KOF, 0x80);
|
||||
p->is_chan_on |= 0x80;
|
||||
|
|
@ -727,7 +727,7 @@ static void Sfx1_Process(SmwSpcPlayer *p) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (p->port_to_snes[1] == 1) {
|
||||
if (p->base.port_to_snes[1] == 1) {
|
||||
if (p->sfx1_countdown) {
|
||||
if (--p->sfx1_countdown)
|
||||
return;
|
||||
|
|
@ -741,7 +741,7 @@ static void Sfx1_Process(SmwSpcPlayer *p) {
|
|||
Dsp_Write(p, V7VOLR, 0x38);
|
||||
Write_KeyOn(p, 0x80);
|
||||
} else if (--p->chan7_countdown_2 == 0) {
|
||||
p->port_to_snes[1] = 0;
|
||||
p->base.port_to_snes[1] = 0;
|
||||
p->is_chan_on &= ~0x80;
|
||||
if (p->channel[7].instrument_id)
|
||||
Channel_SetInstrument(p, &p->channel[7], p->channel[7].instrument_id);
|
||||
|
|
@ -756,14 +756,14 @@ static void Sfx1_Process(SmwSpcPlayer *p) {
|
|||
p->did_affect_volumepitch_flag = 0;
|
||||
if (p->channel[7].pitch_slide_length)
|
||||
Sfx_WritePitchSweep(p, &p->channel[7]);
|
||||
} else if (p->port_to_snes[1] == 4) {
|
||||
} else if (p->base.port_to_snes[1] == 4) {
|
||||
if (p->sfx1_countdown) {
|
||||
if (--p->sfx1_countdown)
|
||||
return;
|
||||
p->chan7_countdown_2 = 0x18;
|
||||
goto write_it;
|
||||
} else if (--p->chan7_countdown_2 == 0) {
|
||||
p->port_to_snes[1] = 0;
|
||||
p->base.port_to_snes[1] = 0;
|
||||
p->is_chan_on &= ~0x80;
|
||||
if (p->channel[7].instrument_id)
|
||||
Channel_SetInstrument(p, &p->channel[7], p->channel[7].instrument_id);
|
||||
|
|
@ -785,8 +785,8 @@ static void Music_Process(SmwSpcPlayer *p) {
|
|||
uint8 cmd;
|
||||
int t;
|
||||
|
||||
if (p->port_to_snes[2] != 0) {
|
||||
if ((p->port_to_snes[2] == 6 || !(p->port_to_snes[2] & ~3)) && !p->smw_player_on_yoshi) {
|
||||
if (p->base.port_to_snes[2] != 0) {
|
||||
if ((p->base.port_to_snes[2] == 6 || !(p->base.port_to_snes[2] & ~3)) && !p->smw_player_on_yoshi) {
|
||||
Dsp_Write(p, KOF, 0x20);
|
||||
p->is_chan_on |= 0x20;
|
||||
} else {
|
||||
|
|
@ -802,7 +802,7 @@ static void Music_Process(SmwSpcPlayer *p) {
|
|||
}
|
||||
if (p->counter_sf0c)
|
||||
goto music_keep_running;
|
||||
if (p->port_to_snes[2])
|
||||
if (p->base.port_to_snes[2])
|
||||
goto label_a;
|
||||
return;
|
||||
}
|
||||
|
|
@ -810,7 +810,7 @@ static void Music_Process(SmwSpcPlayer *p) {
|
|||
if (cmd == 0x16 || cmd == 0x10 || cmd == 0xf || cmd >= 9 && cmd < 13)
|
||||
p->smw_tempo_increase = 0;
|
||||
|
||||
p->port_to_snes[2] = cmd;
|
||||
p->base.port_to_snes[2] = cmd;
|
||||
p->counter_sf0c = 2;
|
||||
p->music_ptr_toplevel = WORD(p->ram[0x1360 + (cmd - 1) * 2]);
|
||||
|
||||
|
|
@ -848,7 +848,7 @@ Music_loop_1:
|
|||
if ((t >> 8) != 0)
|
||||
break;
|
||||
if (t == 0) {
|
||||
p->port_to_snes[2] = 0;
|
||||
p->base.port_to_snes[2] = 0;
|
||||
Dsp_Write(p, KOF, ~p->is_chan_on);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1320,7 +1320,7 @@ static void SmwSpcPlayer_Upload(SpcPlayer *p_in, const uint8_t *data) {
|
|||
p->ram[target++ & 0xffff] = *data++;
|
||||
} while (--numbytes);
|
||||
}
|
||||
p->port_to_snes[0] = p->port_to_snes[1] = p->port_to_snes[2] = p->port_to_snes[3] = 0;
|
||||
p->base.port_to_snes[0] = p->base.port_to_snes[1] = p->base.port_to_snes[2] = p->base.port_to_snes[3] = 0;
|
||||
p->is_chan_on = 0;
|
||||
p->smw_tempo_increase = 0;
|
||||
p->smw_pause_music = 0;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ typedef struct SpcPlayer {
|
|||
Dsp *dsp;
|
||||
uint8 *ram;
|
||||
uint8 input_ports[4];
|
||||
uint8 port_to_snes[4];
|
||||
|
||||
SpcPlayer_Initialize_Func *initialize;
|
||||
SpcPlayer_GenerateSamples_Func *gen_samples;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
#include "../types.h"
|
||||
//#include "../variables.h"
|
||||
#include "../smw_rtl.h"
|
||||
#include "../../smb1/smb1_variables.h"
|
||||
#include "../variables.h"
|
||||
|
||||
static const int cyclesPerOpcode[256] = {
|
||||
7, 6, 7, 4, 5, 3, 5, 6, 3, 2, 2, 4, 6, 4, 6, 5,
|
||||
|
|
@ -746,21 +746,23 @@ static void cpu_doOpcode(Cpu* cpu, uint8_t opcode) {
|
|||
pc_hist_ctr = (pc_hist_ctr + 1) & 15;
|
||||
|
||||
if (cur_pc == pc_bp) {
|
||||
printf("Rseached BP 0x%x. A=0x%.2x, X=0x%.2x, Y=0x%.2x. C=%d. 0x%x\n",
|
||||
printf("Reached BP 0x%x. A=0x%.2x, X=0x%.2x, Y=0x%.2x. C=%d. 0x%x\n",
|
||||
cur_pc, (uint8)cpu->a, cpu->x, cpu->y, cpu->c,
|
||||
WORD(tempE4));
|
||||
0);
|
||||
bp_cnt += 1;
|
||||
g_snes->debug_cycles = 0;
|
||||
//g_snes->debug_cycles = 1;
|
||||
}
|
||||
if (cur_pc == 0x29186&&0)
|
||||
printf("curpc=0x%x 0x%x\n", g_cpu->a, g_cpu->x);
|
||||
if (cur_pc == 0x29197 && g_cpu->x == 0x800&&0) {
|
||||
printf("x=0x%x, y=0x%x, t4=0x%x\n", g_cpu->x, g_cpu->y, WORD(tempE4));
|
||||
if (cur_pc == 0x85d2) {
|
||||
// printf("T: upl stripe %d\n", graphics_stripe_image_to_upload);
|
||||
// if (cur_pc == 0x29197 && g_cpu->x == 0x800&&0) {
|
||||
// printf("x=0x%x, y=0x%x, t4=0x%x\n", g_cpu->x, g_cpu->y, WORD(tempE4));
|
||||
//g_snes->debug_cycles = 1;
|
||||
uint16 t = g_ram[0xf3] | g_ram[0xf4] << 8;
|
||||
// printf("wr 0x%x = 0x%x\n", t + g_cpu->y, g_cpu->a & 0xff);
|
||||
|
||||
}
|
||||
// if (cur_pc == 0x2A82E)
|
||||
// printf("T: Load sprites offs %d: 0x%x\n", g_cpu->y, WORD(g_ram[0]));
|
||||
|
||||
restart:
|
||||
switch(opcode) {
|
||||
|
|
@ -1478,7 +1480,6 @@ restart:
|
|||
break;
|
||||
}
|
||||
case 0x6b: { // rtl imp
|
||||
g_snes->debug_cycles = false;
|
||||
if (cpu->sp >= cpu->spBreakpoint && cpu->spBreakpoint) {
|
||||
assert(cpu->sp == cpu->spBreakpoint);
|
||||
cpu->spBreakpoint = 0;
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ void snes_runCycle(Snes* snes) {
|
|||
|
||||
snes_handle_pos_stuff(snes);
|
||||
}
|
||||
#define IS_ADR(x) (x == 0xffffffff)
|
||||
#define IS_ADR(x) (x == 0xffffff)
|
||||
|
||||
void snes_runCpu(Snes *snes) {
|
||||
uint32_t pc = snes->cpu->k << 16 | snes->cpu->pc;
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@ typedef enum SnesRegs {
|
|||
NTRL6 = 0x436A,
|
||||
UNUSED6 = 0x436B,
|
||||
MIRR6 = 0x436F,
|
||||
|
||||
DMAP7 = 0x4370,
|
||||
BBAD7 = 0x4371,
|
||||
A1T7L = 0x4372,
|
||||
|
|
@ -203,6 +204,8 @@ typedef enum SnesRegs {
|
|||
A1B7 = 0x4374,
|
||||
DAS7L = 0x4375,
|
||||
DAS7H = 0x4376,
|
||||
|
||||
|
||||
DAS70 = 0x4377,
|
||||
A2A7L = 0x4378,
|
||||
A2A7H = 0x4379,
|
||||
|
|
|
|||
|
|
@ -102,6 +102,10 @@ typedef struct PointU16 {
|
|||
uint16 x, y;
|
||||
} PointU16;
|
||||
|
||||
typedef struct PointU8 {
|
||||
uint8 x, y;
|
||||
} PointU8;
|
||||
|
||||
typedef struct OamEnt {
|
||||
uint8 xpos;
|
||||
uint8 ypos;
|
||||
|
|
@ -109,7 +113,7 @@ typedef struct OamEnt {
|
|||
uint8 flags;
|
||||
} OamEnt;
|
||||
|
||||
typedef void FuncU8(uint8 k);
|
||||
typedef void FuncU8(uint8 kk);
|
||||
typedef void FuncV(void);
|
||||
|
||||
// Some convenience macros to make partial accesses nicer
|
||||
|
|
@ -122,7 +126,7 @@ typedef void FuncV(void);
|
|||
|
||||
#define LOBYTE(x) BYTEn(x,LOW_IND(x,uint8))
|
||||
#define LOWORD(x) WORDn(x,LOW_IND(x,uint16))
|
||||
#define HIBYTE(x) BYTEn(x,HIGH_IND(x,uint8))
|
||||
#define HIBYTE(x) BYTEn(x,1)
|
||||
#define HIWORD(x) WORDn(x,HIGH_IND(x,uint16))
|
||||
|
||||
#define GET_HIBYTE(x) (((x) & 0xff00) >> 8)
|
||||
|
|
|
|||
171
src/variables.h
171
src/variables.h
|
|
@ -1,32 +1,40 @@
|
|||
#define R0_W (*(uint16*)(g_ram+0x0))
|
||||
#define R1_W (*(uint16*)(g_ram+0x1))
|
||||
#define R2_W (*(uint16*)(g_ram+0x2))
|
||||
#define R3_W (*(uint16*)(g_ram+0x3))
|
||||
#define R4_W (*(uint16*)(g_ram+0x4))
|
||||
#define R5_W (*(uint16*)(g_ram+0x5))
|
||||
#define R6_W (*(uint16*)(g_ram+0x6))
|
||||
#define R8_W (*(uint16*)(g_ram+0x8))
|
||||
#define R9_W (*(uint16*)(g_ram+0x9))
|
||||
#define R10_W (*(uint16*)(g_ram+0xA))
|
||||
#define R12_W (*(uint16*)(g_ram+0xC))
|
||||
#define R14_W (*(uint16*)(g_ram+0xE))
|
||||
//#define r0w (*(uint16*)(g_ram+0x0))
|
||||
//#define r1w (*(uint16*)(g_ram+0x1))
|
||||
//#define r2w (*(uint16*)(g_ram+0x2))
|
||||
//#define r3w (*(uint16*)(g_ram+0x3))
|
||||
//#define r4w (*(uint16*)(g_ram+0x4))
|
||||
//#define r5w (*(uint16*)(g_ram+0x5))
|
||||
//#define r6w (*(uint16*)(g_ram+0x6))
|
||||
//#define r8w (*(uint16*)(g_ram+0x8))
|
||||
//#define r9w (*(uint16*)(g_ram+0x9))
|
||||
//#define r10w (*(uint16*)(g_ram+0xA))
|
||||
//#define r12w (*(uint16*)(g_ram+0xC))
|
||||
//#define r14w (*(uint16*)(g_ram+0xE))
|
||||
|
||||
//#define r0 (*(uint8*)(g_ram+0x0))
|
||||
//#define r1 (*(uint8*)(g_ram+0x1))
|
||||
//#define r2 (*(uint8*)(g_ram+0x2))
|
||||
//#define r3 (*(uint8*)(g_ram+0x3))
|
||||
//#define r4 (*(uint8*)(g_ram+0x4))
|
||||
//#define r5 (*(uint8*)(g_ram+0x5))
|
||||
//#define r6 (*(uint8*)(g_ram+0x6))
|
||||
//#define r7 (*(uint8*)(g_ram+0x7))
|
||||
//#define r8 (*(uint8*)(g_ram+0x8))
|
||||
//#define r9 (*(uint8*)(g_ram+0x9))
|
||||
//#define r10 (*(uint8*)(g_ram+0xA))
|
||||
//#define r11 (*(uint8*)(g_ram+0xB))
|
||||
//#define r12 (*(uint8*)(g_ram+0xC))
|
||||
//#define r13 (*(uint8*)(g_ram+0xD))
|
||||
//#define r14 (*(uint8*)(g_ram+0xE))
|
||||
//#define r15 (*(uint8*)(g_ram+0xF))
|
||||
|
||||
#define R5_slopeptr (*(LongPtr*)(g_ram+0x5))
|
||||
|
||||
#define lvlload_R4W (*(uint16*)(g_ram+0x4))
|
||||
|
||||
#define loadlvl_R10 (*(uint8*)(g_ram+0xA))
|
||||
#define loadlvl_R11 (*(uint8*)(g_ram+0xB))
|
||||
|
||||
#define R0_ (*(uint8*)(g_ram+0x0))
|
||||
#define R1_ (*(uint8*)(g_ram+0x1))
|
||||
#define R2_ (*(uint8*)(g_ram+0x2))
|
||||
#define R3_ (*(uint8*)(g_ram+0x3))
|
||||
#define R4_ (*(uint8*)(g_ram+0x4))
|
||||
#define R5_ (*(uint8*)(g_ram+0x5))
|
||||
#define R6_ (*(uint8*)(g_ram+0x6))
|
||||
#define R7_ (*(uint8*)(g_ram+0x7))
|
||||
#define R8_ (*(uint8*)(g_ram+0x8))
|
||||
#define R9_ (*(uint8*)(g_ram+0x9))
|
||||
#define R10_ (*(uint8*)(g_ram+0xA))
|
||||
#define R11_ (*(uint8*)(g_ram+0xB))
|
||||
#define R12_ (*(uint8*)(g_ram+0xC))
|
||||
#define R13_ (*(uint8*)(g_ram+0xD))
|
||||
#define R14_ (*(uint8*)(g_ram+0xE))
|
||||
#define R15_ (*(uint8*)(g_ram+0xF))
|
||||
#define waiting_for_vblank (*(uint8*)(g_ram+0x10))
|
||||
#define flag_irqto_use (*(uint8*)(g_ram+0x11))
|
||||
#define graphics_stripe_image_to_upload (*(uint8*)(g_ram+0x12))
|
||||
|
|
@ -84,15 +92,16 @@
|
|||
#define camera_last_screen_horiz (*(uint8*)(g_ram+0x5E))
|
||||
#define camera_last_screen_vert (*(uint8*)(g_ram+0x5F))
|
||||
#define sprites_tile_priority (*(uint8*)(g_ram+0x64))
|
||||
#define temp65 (*(uint8*)(g_ram+0x65))
|
||||
#define temp66 (*(uint8*)(g_ram+0x66))
|
||||
#define temp67 (*(uint8*)(g_ram+0x67))
|
||||
#define ptr_layer2_data (*(uint16*)(g_ram+0x68))
|
||||
#define ptr_layer2_data_bank (*(uint8*)(g_ram+0x6A))
|
||||
#define ptr_lo_map16_data (*(uint16*)(g_ram+0x6B))
|
||||
#define ptr_lo_map16_data_bank (*(uint8*)(g_ram+0x6D))
|
||||
#define ptr_hi_map16_data (*(uint16*)(g_ram+0x6E))
|
||||
#define ptr_hi_map16_data_bank (*(uint8*)(g_ram+0x70))
|
||||
|
||||
// alias
|
||||
#define credits_var65 (*(uint16*)(g_ram+0x65))
|
||||
#define credits_index (*(uint8*)(g_ram+0x67))
|
||||
|
||||
#define ptr_layer1_data (*(LongPtr*)(g_ram+0x65))
|
||||
#define ptr_layer2_data (*(LongPtr*)(g_ram+0x68))
|
||||
#define ptr_lo_map16_data (*(LongPtr*)(g_ram+0x6B))
|
||||
#define ptr_hi_map16_data (*(LongPtr*)(g_ram+0x6E))
|
||||
|
||||
#define player_current_state (*(uint8*)(g_ram+0x71))
|
||||
#define player_in_air_flag (*(uint8*)(g_ram+0x72))
|
||||
#define player_ducking_flag (*(uint8*)(g_ram+0x73))
|
||||
|
|
@ -107,15 +116,17 @@
|
|||
#define player_yspeed (*(uint8*)(g_ram+0x7D))
|
||||
#define player_on_screen_pos_x (*(uint16*)(g_ram+0x7E))
|
||||
#define player_on_screen_pos_y (*(uint16*)(g_ram+0x80))
|
||||
#define ptr_slope_steepness (*(uint16*)(g_ram+0x82))
|
||||
#define ptr_slope_steepness_bank (*(uint8*)(g_ram+0x84))
|
||||
#define ptr_slope_steepness (*(LongPtr*)(g_ram+0x82))
|
||||
#define flag_underwater_level (*(uint8*)(g_ram+0x85))
|
||||
#define flag_ice_level (*(uint8*)(g_ram+0x86))
|
||||
#define player_timer_pipe_warping (*(uint8*)(g_ram+0x88))
|
||||
#define player_pipe_action (*(uint8*)(g_ram+0x89))
|
||||
#define temp8a (*(uint8*)(g_ram+0x8A))
|
||||
#define temp8b (*(uint8*)(g_ram+0x8B))
|
||||
#define temp8c (*(uint8*)(g_ram+0x8C))
|
||||
|
||||
#define decomp_src (*(LongPtr*)(g_ram+0x8A))
|
||||
|
||||
#define player_collision_var8a (*(uint8*)(g_ram+0x8A))
|
||||
#define player_collision_var8b (*(uint8*)(g_ram+0x8B))
|
||||
#define player_collision_var8c (*(uint8*)(g_ram+0x8C))
|
||||
#define temp8d (*(uint8*)(g_ram+0x8D))
|
||||
#define temp8e (*(uint8*)(g_ram+0x8E))
|
||||
#define temp8f (*(uint8*)(g_ram+0x8F))
|
||||
|
|
@ -133,12 +144,10 @@
|
|||
#define spr_yspeed ((uint8*)(g_ram+0xAA))
|
||||
#define spr_xspeed ((uint8*)(g_ram+0xB6))
|
||||
#define spr_table00c2 ((uint8*)(g_ram+0xC2))
|
||||
#define ptr_sprite_list_data (*(uint16*)(g_ram+0xCE))
|
||||
#define ptr_sprite_list_data_bank (*(uint8*)(g_ram+0xD0))
|
||||
#define ptr_sprite_list_data (*(LongPtr*)(g_ram+0xCE))
|
||||
#define player_current_xpos (*(uint16*)(g_ram+0xD1))
|
||||
#define player_current_ypos (*(uint16*)(g_ram+0xD3))
|
||||
#define spr86_wiggler_segment_pos_ptr (*(uint16*)(g_ram+0xD5))
|
||||
#define spr86_wiggler_segment_pos_ptr_bank (*(uint8*)(g_ram+0xD7))
|
||||
#define spr86_wiggler_segment_pos_ptr (*(LongPtr*)(g_ram+0xD5))
|
||||
#define spr_ypos_lo ((uint8*)(g_ram+0xD8))
|
||||
#define spr_xpos_lo ((uint8*)(g_ram+0xE4))
|
||||
#define misc_game_mode (*(uint8*)(g_ram+0x100))
|
||||
|
|
@ -223,8 +232,7 @@
|
|||
#define players_overworld_xpos_is_going_to ((PointU16*)(g_ram+0xDC7))
|
||||
#define player_overworld_xspeed (*(uint16*)(g_ram+0xDCF))
|
||||
#define player_overworld_yspeed (*(uint16*)(g_ram+0xDD1))
|
||||
#define ow_player_direction (*(uint8*)(g_ram+0xDD3))
|
||||
#define unusedram_7e0dd4 (*(uint8*)(g_ram+0xDD4))
|
||||
#define ow_player_direction (*(uint16*)(g_ram+0xDD3))
|
||||
#define misc_exit_level_action (*(uint8*)(g_ram+0xDD5))
|
||||
#define player_current_characterx4 (*(uint16*)(g_ram+0xDD6))
|
||||
#define flag_switch_players (*(uint8*)(g_ram+0xDD8))
|
||||
|
|
@ -388,10 +396,6 @@
|
|||
#define timer_hdmawindow_scaling_factor (*(uint8*)(g_ram+0x1433))
|
||||
#define timer_end_level_via_keyhole (*(uint8*)(g_ram+0x1434))
|
||||
#define flag_keyhole_anim_phase (*(uint8*)(g_ram+0x1435))
|
||||
#define temp1436 (*(uint8*)(g_ram+0x1436))
|
||||
#define player_on_tilting_platform_xpos_hi (*(uint8*)(g_ram+0x1437))
|
||||
#define temp1438 (*(uint8*)(g_ram+0x1438))
|
||||
#define player_on_tilting_platform_ypos_hi (*(uint8*)(g_ram+0x1439))
|
||||
#define flag_upload_load_screen_letters_tovram (*(uint8*)(g_ram+0x143A))
|
||||
#define misc_death_message_to_display (*(uint8*)(g_ram+0x143B))
|
||||
#define timer_display_death_message_animation (*(uint8*)(g_ram+0x143C))
|
||||
|
|
@ -466,22 +470,55 @@
|
|||
#define timer_blue_pswitch (*(uint8*)(g_ram+0x14AD))
|
||||
#define timer_silver_pswitch (*(uint8*)(g_ram+0x14AE))
|
||||
#define flag_on_off_switch (*(uint8*)(g_ram+0x14AF))
|
||||
#define temp14b0 (*(uint8*)(g_ram+0x14B0))
|
||||
#define temp14b1 (*(uint8*)(g_ram+0x14B1))
|
||||
#define temp14b2 (*(uint8*)(g_ram+0x14B2))
|
||||
#define temp14b3 (*(uint8*)(g_ram+0x14B3))
|
||||
#define temp14b4 (*(uint8*)(g_ram+0x14B4))
|
||||
#define temp14b5 (*(uint8*)(g_ram+0x14B5))
|
||||
#define temp14b6 (*(uint8*)(g_ram+0x14B6))
|
||||
#define temp14b7 (*(uint8*)(g_ram+0x14B7))
|
||||
#define temp14b8 (*(uint8*)(g_ram+0x14B8))
|
||||
#define temp14b9 (*(uint8*)(g_ram+0x14B9))
|
||||
#define temp14ba (*(uint8*)(g_ram+0x14BA))
|
||||
#define temp14bb (*(uint8*)(g_ram+0x14BB))
|
||||
#define temp14bc (*(uint8*)(g_ram+0x14BC))
|
||||
//#define temp14b0 (*(uint8*)(g_ram+0x14B0))
|
||||
//#define temp14b1 (*(uint8*)(g_ram+0x14B1))
|
||||
//#define temp14b2 (*(uint8*)(g_ram+0x14B2))
|
||||
//#define temp14b3 (*(uint8*)(g_ram+0x14B3))
|
||||
//
|
||||
//#define temp14b4 (*(uint8*)(g_ram+0x14B4))
|
||||
//#define temp14b5 (*(uint8*)(g_ram+0x14B5))
|
||||
//#define temp14b6 (*(uint8*)(g_ram+0x14B6))
|
||||
//#define temp14b7 (*(uint8*)(g_ram+0x14B7))
|
||||
//
|
||||
//#define temp14b8 (*(uint8*)(g_ram+0x14B8))
|
||||
//#define temp14b9 (*(uint8*)(g_ram+0x14B9))
|
||||
//#define temp14ba (*(uint8*)(g_ram+0x14BA))
|
||||
//#define temp14bb (*(uint8*)(g_ram+0x14BB))
|
||||
//
|
||||
//#define temp14bc (*(uint8*)(g_ram+0x14BC))
|
||||
//
|
||||
//#define temp1436 (*(uint8*)(g_ram+0x1436))
|
||||
//#define player_on_tilting_platform_xpos_hi (*(uint8*)(g_ram+0x1437))
|
||||
|
||||
#define player_on_tilting_platform_xpos (*(uint16*)(g_ram+0x1436))
|
||||
#define player_on_tilting_platform_ypos (*(uint16*)(g_ram+0x1438))
|
||||
|
||||
//#define temp1438 (*(uint8*)(g_ram+0x1438))
|
||||
//#define player_on_tilting_platform_ypos_hi (*(uint8*)(g_ram+0x1439))
|
||||
|
||||
// These are aliased
|
||||
#define switch_block_event_oam_index (*(uint8*)(g_ram+0x1438))
|
||||
#define switch_block_event_blocks_thrown_ctr (*(uint8*)(g_ram+0x1436))
|
||||
#define switch_block_event_wait_counter (*(uint8*)(g_ram+0x1437))
|
||||
#define switch_block_event_ejection_counter (*(uint8*)(g_ram+0x1439))
|
||||
|
||||
#define bowserbattle_var14b0 (*(uint8*)(g_ram+0x14B0))
|
||||
#define bowserbattle_var14b1 (*(uint8*)(g_ram+0x14B1))
|
||||
#define bowserbattle_var14b2 (*(uint8*)(g_ram+0x14B2))
|
||||
#define bowserbattle_var14b3 (*(uint8*)(g_ram+0x14B3))
|
||||
#define bowserbattle_var14b4 (*(uint8*)(g_ram+0x14B4))
|
||||
#define bowserbattle_var14b5 (*(uint8*)(g_ram+0x14B5))
|
||||
#define bowserbattle_var14b6 (*(uint8*)(g_ram+0x14B6))
|
||||
#define bowserbattle_var14b7 (*(uint8*)(g_ram+0x14B7))
|
||||
#define bowserbattle_var14b8 (*(uint8*)(g_ram+0x14B8))
|
||||
#define bowserbattle_var14b9 (*(uint8*)(g_ram+0x14B9))
|
||||
#define bowserbattle_var14ba (*(uint8*)(g_ram+0x14BA))
|
||||
#define bowserbattle_var14bb (*(uint8*)(g_ram+0x14BB))
|
||||
#define bowserbattle_var14bc (*(uint8*)(g_ram+0x14BC))
|
||||
|
||||
#define misc_rotating_object_xradius_hi (*(uint8*)(g_ram+0x14BD))
|
||||
#define temp14bf (*(uint8*)(g_ram+0x14BF))
|
||||
#define temp14c0 (*(uint8*)(g_ram+0x14C0))
|
||||
//#define temp14bf (*(uint8*)(g_ram+0x14BF))
|
||||
//#define temp14c0 (*(uint8*)(g_ram+0x14C0))
|
||||
#define sprites_brown_rotating_platform_sine (*(uint16*)(g_ram+0x14C2))
|
||||
#define sprites_brown_rotating_platform_cosine (*(uint16*)(g_ram+0x14C5))
|
||||
#define spr_current_status ((uint8*)(g_ram+0x14C8))
|
||||
|
|
|
|||
Loading…
Reference in New Issue