cut down the main loop for 3839cc from 71 to 56 instructions;
recommended to use in hacks, reduces lag when being near to solid objects.
.org 0x100394
ADDIU SP, SP, 0xFF60
SW RA, 0x003C (SP)
SW A0, 0x00A0 (SP)
SW A1, 0x00A4 (SP)
SW S2, 0x0038 (SP)
SW S1, 0x0034 (SP)
SW S0, 0x0030 (SP)
SDC1 F24, 0x0028 (SP)
SDC1 F22, 0x0020 (SP)
SDC1 F20, 0x0018 (SP)
LUI T6, 0x8036
LW T6, 0x1160 (T6)
ADDIU T7, T6, 0x021C
SW T7, 0x0088 (SP)
LW T8, 0x00A0 (SP)
LW T9, 0x0000 (T8)
LH S1, 0x0000 (T9)
LW T0, 0x00A0 (SP)
LW T1, 0x0000 (T0)
ADDIU T2, T1, 0x0002
SW T2, 0x0000 (T0)
LW T3, 0x00A0 (SP)
LW S0, 0x0000 (T3)
LUI T4, 0x8036
LW T4, 0x1160 (T4)
LW T5, 0x0050 (T4)
BNE r0,T5, !jump
NOP
LUI T7, 0x8036
LW T7, 0x1160 (T7)
LW T6, 0x0088 (SP)
SW T6, 0x0050 (T7)
LUI A0, 0x8036
LW A0, 0x1160 (A0)
ADDIU A1, R0, 0x0006
JAL 0x802A2930
ADDIU A2, R0, 0x0012
!jump:
LUI A0, 0x8036
LW A0, 0x1160 (A0)
ADDIU A1, SP, 0x0048
JAL 0x8029DDA8
LW A2, 0x0088 (SP)
OR S2, S1, R0
BEQ S2, R0, !end
ADDIU S1, S1, 0xFFFF
!loop:
LH T8, 0x0000 (S0)
MTC1 T8, F4
LH T9, 0x0002 (S0)
CVT.S.W F20, F4
MTC1 T9, F6
LH T1, 0x0004 (S0)
CVT.S.W F22, F6
ADDIU S0, S0, 0x0006
MTC1 T1, F8
NOP
CVT.S.W F24, F8
LWC1 F10, 0x0048 (sp)
LWC1 F18, 0x0058 (sp)
LWC1 F8, 0x0068 (sp)
MUL.S F16, F20, F10
LW A0, 0x00A4 (SP)
MUL.S F4, F22, F18
ADD.S F6, F16, F4
MUL.S F10, F24, F8
LWC1 F16, 0x0078 (sp)
ADD.S F18, F6, F10
ADD.S F4, F16, F18
TRUNC.W.S F8, F4
MFC1 T3, F8
ADDIU T6, a0, 0x0002
SH T3, 0x0000 (a0)
SW T6, 0x00A4 (SP)
LWC1 F6, 0x004c (sp)
LWC1 F16, 0x005c (sp)
LWC1 F8, 0x006c (sp)
MUL.S F10, F20, F6
MUL.S F18, F22, F16
ADD.S F4, F10, F18
MUL.S F6, F24, F8
LWC1 F10, 0x007c (sp)
ADD.S F16, F4, F6
ADD.S F18, F10, F16
TRUNC.W.S F8, F18
MFC1 T9, F8
ADDIU T0, T6, 0x0002
SH T9, 0x0000 (t6)
SW T0, 0x00A4 (SP)
LWC1 F4, 0x0050 (sp)
LWC1 F10, 0x0060 (sp)
LWC1 F8, 0x0070 (sp)
MUL.S F6, F20, F4
MUL.S F16, F22, F10
ADD.S F18, F6, F16
MUL.S F4, F24, F8
LWC1 F6, 0x0080 (sp)
ADD.S F10, F18, F4
ADD.S F16, F6, F10
TRUNC.W.S F8, F16
MFC1 T5, F8
ADDIU T8, t0, 0x0002
SH T5, 0x0000 (t0)
SW T8, 0x00A4 (SP)
OR S2, S1, R0
BNE r0, S2, !loop
ADDIU S1, S1, 0xFFFF
!end:
LW T9, 0x00A0 (SP)
SW S0, 0x0000 (T9)
LW RA, 0x003C (SP)
LDC1 F20, 0x0018 (SP)
LDC1 F22, 0x0020 (SP)
LDC1 F24, 0x0028 (SP)
LW S0, 0x0030 (SP)
LW S1, 0x0034 (SP)
LW S2, 0x0038 (SP)
JR RA
ADDIU SP, SP, 0x00A0
recommended to use in hacks, reduces lag when being near to solid objects.
.org 0x100394
ADDIU SP, SP, 0xFF60
SW RA, 0x003C (SP)
SW A0, 0x00A0 (SP)
SW A1, 0x00A4 (SP)
SW S2, 0x0038 (SP)
SW S1, 0x0034 (SP)
SW S0, 0x0030 (SP)
SDC1 F24, 0x0028 (SP)
SDC1 F22, 0x0020 (SP)
SDC1 F20, 0x0018 (SP)
LUI T6, 0x8036
LW T6, 0x1160 (T6)
ADDIU T7, T6, 0x021C
SW T7, 0x0088 (SP)
LW T8, 0x00A0 (SP)
LW T9, 0x0000 (T8)
LH S1, 0x0000 (T9)
LW T0, 0x00A0 (SP)
LW T1, 0x0000 (T0)
ADDIU T2, T1, 0x0002
SW T2, 0x0000 (T0)
LW T3, 0x00A0 (SP)
LW S0, 0x0000 (T3)
LUI T4, 0x8036
LW T4, 0x1160 (T4)
LW T5, 0x0050 (T4)
BNE r0,T5, !jump
NOP
LUI T7, 0x8036
LW T7, 0x1160 (T7)
LW T6, 0x0088 (SP)
SW T6, 0x0050 (T7)
LUI A0, 0x8036
LW A0, 0x1160 (A0)
ADDIU A1, R0, 0x0006
JAL 0x802A2930
ADDIU A2, R0, 0x0012
!jump:
LUI A0, 0x8036
LW A0, 0x1160 (A0)
ADDIU A1, SP, 0x0048
JAL 0x8029DDA8
LW A2, 0x0088 (SP)
OR S2, S1, R0
BEQ S2, R0, !end
ADDIU S1, S1, 0xFFFF
!loop:
LH T8, 0x0000 (S0)
MTC1 T8, F4
LH T9, 0x0002 (S0)
CVT.S.W F20, F4
MTC1 T9, F6
LH T1, 0x0004 (S0)
CVT.S.W F22, F6
ADDIU S0, S0, 0x0006
MTC1 T1, F8
NOP
CVT.S.W F24, F8
LWC1 F10, 0x0048 (sp)
LWC1 F18, 0x0058 (sp)
LWC1 F8, 0x0068 (sp)
MUL.S F16, F20, F10
LW A0, 0x00A4 (SP)
MUL.S F4, F22, F18
ADD.S F6, F16, F4
MUL.S F10, F24, F8
LWC1 F16, 0x0078 (sp)
ADD.S F18, F6, F10
ADD.S F4, F16, F18
TRUNC.W.S F8, F4
MFC1 T3, F8
ADDIU T6, a0, 0x0002
SH T3, 0x0000 (a0)
SW T6, 0x00A4 (SP)
LWC1 F6, 0x004c (sp)
LWC1 F16, 0x005c (sp)
LWC1 F8, 0x006c (sp)
MUL.S F10, F20, F6
MUL.S F18, F22, F16
ADD.S F4, F10, F18
MUL.S F6, F24, F8
LWC1 F10, 0x007c (sp)
ADD.S F16, F4, F6
ADD.S F18, F10, F16
TRUNC.W.S F8, F18
MFC1 T9, F8
ADDIU T0, T6, 0x0002
SH T9, 0x0000 (t6)
SW T0, 0x00A4 (SP)
LWC1 F4, 0x0050 (sp)
LWC1 F10, 0x0060 (sp)
LWC1 F8, 0x0070 (sp)
MUL.S F6, F20, F4
MUL.S F16, F22, F10
ADD.S F18, F6, F16
MUL.S F4, F24, F8
LWC1 F6, 0x0080 (sp)
ADD.S F10, F18, F4
ADD.S F16, F6, F10
TRUNC.W.S F8, F16
MFC1 T5, F8
ADDIU T8, t0, 0x0002
SH T5, 0x0000 (t0)
SW T8, 0x00A4 (SP)
OR S2, S1, R0
BNE r0, S2, !loop
ADDIU S1, S1, 0xFFFF
!end:
LW T9, 0x00A0 (SP)
SW S0, 0x0000 (T9)
LW RA, 0x003C (SP)
LDC1 F20, 0x0018 (SP)
LDC1 F22, 0x0020 (SP)
LDC1 F24, 0x0028 (SP)
LW S0, 0x0030 (SP)
LW S1, 0x0034 (SP)
LW S2, 0x0038 (SP)
JR RA
ADDIU SP, SP, 0x00A0