diff --git a/src/include/lib/lib_13900.h b/src/include/lib/lib_13900.h index 398647ae2..549b7dd71 100644 --- a/src/include/lib/lib_13900.h +++ b/src/include/lib/lib_13900.h @@ -27,10 +27,10 @@ u32 func00014484(void); void func00014810(bool arg0); u32 func0001481c(void); u32 func00014848(void); -s32 func00014904(u32 samplenum, s8 contpadnum); -s32 func000149c0(u32 samplenum, s8 contpadnum); -u32 func00014a78(u32 samplenum, s8 contpadnum, u32 buttons); -u32 func00014b50(u32 samplenum, s8 contpadnum, u32 buttons); +s32 func00014904(s32 samplenum, s8 contpadnum); +s32 func000149c0(s32 samplenum, s8 contpadnum); +u32 func00014a78(s32 samplenum, s8 contpadnum, u32 buttons); +u32 func00014b50(s32 samplenum, s8 contpadnum, u32 buttons); u32 func00014c98(u32 *arg0, s8 contpadnum, u32 buttons); s8 contGetStickX(s8 contpadnum); s8 contGetStickY(s8 contpadnum); diff --git a/src/include/types.h b/src/include/types.h index c30594438..5f531e842 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -7092,8 +7092,8 @@ struct contsample { struct contdata { struct contsample samples[20]; - s32 index; - s32 unk1e4; + s32 index; // index into samples + s32 unk1e4; // also an index into samples s32 unk1e8; s32 unk1ec; u16 unk1f0[4]; diff --git a/src/lib/lib_13900.c b/src/lib/lib_13900.c index 39fc81d8b..29ccb50cc 100644 --- a/src/lib/lib_13900.c +++ b/src/lib/lib_13900.c @@ -1307,58 +1307,19 @@ glabel func00014848 /* 14900: 00000000 */ nop ); -GLOBAL_ASM( -glabel func00014904 -/* 14904: 3c038006 */ lui $v1,%hi(var8005ee60) -/* 14908: 8c63ee60 */ lw $v1,%lo(var8005ee60)($v1) -/* 1490c: afa50004 */ sw $a1,0x4($sp) -/* 14910: 00057600 */ sll $t6,$a1,0x18 -/* 14914: 8c780200 */ lw $t8,0x200($v1) -/* 14918: 000e7e03 */ sra $t7,$t6,0x18 -/* 1491c: 01e02825 */ or $a1,$t7,$zero -/* 14920: 0701000e */ bgez $t8,.L0001495c -/* 14924: 3c198006 */ lui $t9,%hi(var8005eeac) -/* 14928: 9339eeac */ lbu $t9,%lo(var8005eeac)($t9) -/* 1492c: 3c0b8006 */ lui $t3,%hi(var8005ee7c) -/* 14930: 256bee7c */ addiu $t3,$t3,%lo(var8005ee7c) -/* 14934: 01f94007 */ srav $t0,$t9,$t7 -/* 14938: 31090001 */ andi $t1,$t0,0x1 -/* 1493c: 15200007 */ bnez $t1,.L0001495c -/* 14940: 000f5080 */ sll $t2,$t7,0x2 -/* 14944: 014b1821 */ addu $v1,$t2,$t3 -/* 14948: 8c6c0000 */ lw $t4,0x0($v1) -/* 1494c: 00001025 */ or $v0,$zero,$zero -/* 14950: 258d0001 */ addiu $t5,$t4,0x1 -/* 14954: 03e00008 */ jr $ra -/* 14958: ac6d0000 */ sw $t5,0x0($v1) -.L0001495c: -/* 1495c: 00057080 */ sll $t6,$a1,0x2 -/* 14960: 3c0f800a */ lui $t7,%hi(var80099e68) -/* 14964: 01ee7821 */ addu $t7,$t7,$t6 -/* 14968: 8def9e68 */ lw $t7,%lo(var80099e68)($t7) -/* 1496c: 59e00004 */ blezl $t7,.L00014980 -/* 14970: 8c7801e4 */ lw $t8,0x1e4($v1) -/* 14974: 03e00008 */ jr $ra -/* 14978: 00001025 */ or $v0,$zero,$zero -/* 1497c: 8c7801e4 */ lw $t8,0x1e4($v1) -.L00014980: -/* 14980: 24010014 */ addiu $at,$zero,0x14 -/* 14984: 00056080 */ sll $t4,$a1,0x2 -/* 14988: 0304c821 */ addu $t9,$t8,$a0 -/* 1498c: 27280001 */ addiu $t0,$t9,0x1 -/* 14990: 0101001a */ div $zero,$t0,$at -/* 14994: 00004810 */ mfhi $t1 -/* 14998: 00095080 */ sll $t2,$t1,0x2 -/* 1499c: 01495023 */ subu $t2,$t2,$t1 -/* 149a0: 000a50c0 */ sll $t2,$t2,0x3 -/* 149a4: 01856023 */ subu $t4,$t4,$a1 -/* 149a8: 000c6040 */ sll $t4,$t4,0x1 -/* 149ac: 006a5821 */ addu $t3,$v1,$t2 -/* 149b0: 016c6821 */ addu $t5,$t3,$t4 -/* 149b4: 81a20003 */ lb $v0,0x3($t5) -/* 149b8: 03e00008 */ jr $ra -/* 149bc: 00000000 */ nop -); +s32 func00014904(s32 samplenum, s8 contpadnum) +{ + if (var8005ee60->unk200 < 0 && (var8005eeac >> contpadnum & 1) == 0) { + var8005ee7c[contpadnum]++; + return 0; + } + + if (var80099e68[contpadnum] > 0) { + return 0; + } + + return var8005ee60->samples[(var8005ee60->unk1e4 + samplenum + 1) % 20].pads[contpadnum].stick_y; +} GLOBAL_ASM( glabel func000149c0