800334A4:	set palette
	accepts: A0=p->geocode, A1=[SP+20], A2=image type(probably), A3=p->image index, SP+10=p->palette index, SP+14=, SP+18=
ADDU	T1,A0,R0	;T1=A0: 
LW	T2,0010 (SP)	;T2=p->palette index
LBU	V0,0001 (T1)	;V0=index for palette
LW	A3,0018 (SP)	;A3=SP+18: 
LBU	T0,0017 (SP)	;T0=SP+17: 
SLL	V0,V0,0x3	;V0*=8: V0->offset in palette index
ADDU	V0,V0,T2	;V0=p->selected palette
LW	T3,0004 (V0)	;T3=p->palette rdram address
ADDIU	V0,R0,0009	;V0=9
BEQ	A2,V0,800334FC	;branch if A2==9
SLTIU	V0,A2,000A
BEQ	V0,R0,800334F0	;branch if A2>9
SLTIU	V0,A2,0007
BEQ	V0,R0,80033550	;branch if A2>6
SLTIU	V0,A2,0005
BEQ	V0,R0,800334FC	;branch if A2>4
NOP	
J	80033550
NOP	
//800334F0:	A2>9
ADDIU	V0,R0,000F
BNE	A2,V0,80033550	;branch if A2!=F
NOP	
//800334FC:	A2= 5,6,9
LW	V1,0000 (A1)
ADDIU	V0,R0,0001
BEQ	V1,V0,800336F4	;branch if value at SP+20=1
NOP	
BEQ	T0,R0,80033538	;branch if value at SP+17=0
LUI	A0,E300
LUI	V0,8011
LW	V0,A510 (V0)	;V0=8010A510: p->command buffer
ORI	A0,A0,1001	;A0=E3001001	setothermode_h: texture level-of-detail = tile
ADDIU	V1,V0,0008	;V1=V0+8:	p->next command
LUI	AT,8011
SW	V1,A510 (AT)	;save next command
SW	A0,0000 (V0)	;save setothermode_h to command buffer
J	80033544
SW	R0,0004 (V0)	;save lower word=0
//80033538:
LW	V0,0000 (A3)
ADDIU	V0,V0,0001
SW	V0,0000 (A3)
//80033544:
ADDIU	V0,R0,0001	;V0=1
J	800336F4
SW	V0,0000 (A1)	;save 1 -> A1
//80033550:	A2= 0,1,3,4,7,8,A,B,C,D,E
LW	V1,0000 (A1)
ADDIU	V0,R0,0002
BEQ	V1,V0,800335A4	;branch if value at SP+20=2
NOP	
BEQ	T0,R0,80033590	;branch if value at SP+17=0
LUI	A0,E300
LUI	V1,8011
LW	V1,A510 (V1)	;V0=8010A510: p->command buffer
ORI	A0,A0,1001	;A0=E3001001	setothermode_h: texture level-of-detail RGBA16
ADDIU	V0,V1,0008	;V0=V1+8: new command position
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
ORI	V0,R0,8000	;V0=RGBA16
SW	A0,0000 (V1)	;save upper command word
J	8003359C
SW	V0,0004 (V1)	;save lower command word
//80033590:
LW	V0,0000 (A3)
ADDIU	V0,V0,0001
SW	V0,0000 (A3)
//8003359C:
ADDIU	V0,R0,0002
SW	V0,0000 (A1)	;SP+20=2
//800335A4:	A2=2
LBU	V0,0001 (T1)	;texture value in geocode
SLL	V0,V0,0x3
ADDU	V0,V0,T2	;V0=tex#*8 + p->palette index:	p->selected palette
LBU	V1,0000 (V0)	;V1=#colors in palette
ADDIU	V0,R0,00FF
BNE	V1,V0,8003364C	;branch if less than 255
NOP	
//800335C0:	256 color palettes
BEQ	T0,R0,80033640	;branch if value at SP+17=0
LUI	A0,063F
LUI	V1,8011
LW	V1,A510 (V1)	;V0=8010A510: p->command buffer
ORI	A0,A0,C000	;A0=063FC000: loadtlut lower command word	count=FF
ADDIU	V0,V1,0008	;V0=p->next command buffer
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,FD10		;V0=FD100000: settexture command upper word: rgba-16bit
SW	V0,0000 (V1)	;save settexture upper command
ADDIU	V0,R0,FFF8	;V0=-8
AND	V0,T3,V0	;V0=p->palette rdram address, masked to nearest doubleword
SW	V0,0004 (V1)	;save settexture lower command (address to palette)
ADDIU	V0,V1,0010	;V0=p->next command buffer
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,E600
SW	V0,0008 (V1)	;save loadsync command upper word
ADDIU	V0,V1,0018	;V0=p->next command buffer
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,F000
SW	V0,0010 (V1)	;save loadtlut upper command
ADDIU	V0,V1,0020	;V0=p->next command buffer
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,E700
SW	R0,000C (V1)	;save loadsync command lower word
SW	A0,0014 (V1)	;save loadtlut lower command
SW	V0,0018 (V1)	;save pipesync command upper word
J	8003364C
SW	R0,001C (V1)	;save pipesync command lower word
//80033640:
LW	V0,0000 (A3)
ADDIU	V0,V0,0004
SW	V0,0000 (A3)	;increment p->image index+4
//8003364C:
LBU	V0,0001 (T1)	;texture value in geocode
SLL	V0,V0,0x3
ADDU	V0,V0,T2	;V0=tex#*8 + p->palette index:	p->selected palette
LBU	V1,0000 (V0)	;V1=#colors in palette
ADDIU	V0,R0,000F
BNE	V1,V0,800336F4	;branch if colors !=15
NOP	
//80033668:	16 color palettes
BEQ	T0,R0,800336E8
LUI	A0,0603
LUI	V1,8011
LW	V1,A510 (V1)	;V1=command position
ORI	A0,A0,C000	;A0=0603C000	
ADDIU	V0,V1,0008	;V0=V1+8: new command position
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,FD10
SW	V0,0000 (V1)	;save FD100000	settextureimage
ADDIU	V0,R0,FFF8
AND	V0,T3,V0	;V0=address of palette, to nearest doubleword
SW	V0,0004 (V1)	;save address	settextureimage lower word
ADDIU	V0,V1,0010	;V0=V1+10: new command position
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,E600
SW	V0,0008 (V1)	;save E6000000	loadsync
ADDIU	V0,V1,0018	;V0=V1+18: new command position
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,F000
SW	V0,0010 (V1)	;save F0000000	loadtlut
ADDIU	V0,V1,0020	;V0=V1+20: new command position
LUI	AT,8011
SW	V0,A510 (AT)	;save new command position
LUI	V0,E700
SW	R0,000C (V1)	;save 0		loadsync lower word
SW	A0,0014 (V1)	;save 0603C000	loadtlut lower word: 15 entries, what the heck is 6?
SW	V0,0018 (V1)	;save E7000000	pipesync
J	800336F4
SW	R0,001C (V1)	;save 0		pipesync lower word
//800336E8:
LW	V0,0000 (A3)
ADDIU	V0,V0,0004
SW	V0,0000 (A3)
//800336F4:
JR	RA
NOP
