Updated the code to fix a few issues. 64x32 textures will loop correctly, the memory position can now start at up to 0x804F, maximum polygons per object is 15, made the animation speed more subtle, and provided a brief example at the bottom.
Originally posted by
----------------NOTES----------------
Memory Position (Upper Half) = 0x8000 + ObjectX
Memory Position (Lower Half) = ParamAx16^2 + ParamB
Number of Polygons = ObjectY
Animation Speed = ObjectZ
//If Lower Half is >0x7FFF, subtract 0x10000
Coordinate to Memory Position Table:
8 = 0x8041
32 = 0x8042
128 = 0x8043
512 = 0x8044
2048 = 0x8045
8192 = 0x8046
8256 = 0x8047
8320 = 0x8048
8384 = 0x8049
8448 = 0x804A
8512 = 0x804B
8576 = 0x804C
8640 = 0x804D
8704 = 0x804E
8768 = 0x804F
Number of Polygons/Animation Speed Table:
8 = 1
32 = 2
128 = 3
512 = 4
2048 = 5
8192 = 6 (Max Speed)
8256 = 7
8320 = 8
8384 = 9
8448 = 10
8512 = 11
8576 = 12
8640 = 13
8704 = 14
8768 = 15
----------------SCRIPTS----------------
0x21D538 (13003738)
00 04 00 00
11 01 20 41
08 00 00 00
0C 00 00 00 80 2E C9 08
09 00 00 00
----------------CODE----------------
0xA7908:
//START
ADDIU SP, SP, $FFE8
SW RA, $0014 (SP)
//GET MEMORY POSITION
LUI T0, $8036
LW T0, $1160 (T0)
LUI A0, $8000
LB T1, $0020 (T0)
SLL T1, T1, $10
ADDU A0, A0, T1
LB T1, $0021 (T0)
SLL T1, T1, $10
ADDU A0, A0, T1
LH T1, $0188 (T0)
ADDU A0, A0, T1
//GET POLYGON COUNT
LB A1, $0024 (T0)
XORI A1, A1, $0040
LB T1, $0025 (T0)
ADD A1, T1, A1
ADD T7, A1, A1
ADD A1, A1, T7
//GET ANIMATION SPEED
LB A2, $0028 (T0)
XORI A2, A2, $0040
SLL A2, A2, $3
ORI T8, R0, $0000
ORI A3, R0, $0000
//MULTIPLY RESET
ADDI T8, T8, $0001
BNE T8, A2, MULTIPLY RESET
ADDI A3, A3, $0080
//LOAD LOOP COUNTER
LH S0, $0040 (T0)
SLTI S1, S0, $0080
BNEZ S1, STORE LOOP COUNTER
ADDIU S0, S0, $0001
ADDIU S0, R0, $0001
//STORE LOOP COUNTER
SH S0, $0040 (T0)
//CALCULATE TEXTURE POSITION
LH T2, $0000 (A0)
BNEZ S1, WRITE TEXTURE POSITION
ADD T2, T2, A2
SUB T2, T2, A3
//WRITE TEXTURE POSITION
SH T2, $0000 (A0)
ADDI A1, A1, $FFFF
BNEZ A1, CALCULATE TEXTURE POSITION
ADDIU A0, A0, $0010
//END
LW R31, $0014 (R29)
JR R31
ADDIU R29, R29, $0018
----------------EXAMPLE----------------
//This will alter 13 polygons starting from 0x8049531A at speed 4.
Object Behavior: h003738
ParamA: h53
ParamB: h1A
Coordinates: 8384, 8640, 512
|