mirror of https://github.com/zeldaret/tmc.git
				
				
				
			collapse TUs
This commit is contained in:
		
							parent
							
								
									69edec1eb9
								
							
						
					
					
						commit
						bd50d449de
					
				| 
						 | 
				
			
			@ -1238,7 +1238,7 @@ _08002812:
 | 
			
		|||
	cmp r0, #0
 | 
			
		||||
	beq _08002834
 | 
			
		||||
	adds r6, #1
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #8
 | 
			
		||||
_08002834:
 | 
			
		||||
	adds r4, r0, #0
 | 
			
		||||
| 
						 | 
				
			
			@ -1256,7 +1256,7 @@ _0800283E:
 | 
			
		|||
	cmp r0, #0
 | 
			
		||||
	beq _08002856
 | 
			
		||||
	adds r6, #2
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #8
 | 
			
		||||
_08002856:
 | 
			
		||||
	adds r4, r0, #0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1193,13 +1193,13 @@ sub_0806F5BC: @ 0x0806F5BC
 | 
			
		|||
	lsls r5, r1, #0x10
 | 
			
		||||
	asrs r5, r5, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r6, #0x80
 | 
			
		||||
	lsls r6, r6, #1
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r7, #0x2c]
 | 
			
		||||
| 
						 | 
				
			
			@ -1211,11 +1211,11 @@ sub_0806F5BC: @ 0x0806F5BC
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r4, r1]
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r7, #0x30]
 | 
			
		||||
| 
						 | 
				
			
			@ -1248,13 +1248,13 @@ sub_0806F62C: @ 0x0806F62C
 | 
			
		|||
	lsls r5, r5, #0x10
 | 
			
		||||
	asrs r5, r5, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #1
 | 
			
		||||
	mov r8, r1
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r6, #0x2c]
 | 
			
		||||
| 
						 | 
				
			
			@ -1266,11 +1266,11 @@ sub_0806F62C: @ 0x0806F62C
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r4, r1]
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	mov r1, r8
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r6, #0x30]
 | 
			
		||||
| 
						 | 
				
			
			@ -1300,13 +1300,13 @@ sub_0806F69C: @ 0x0806F69C
 | 
			
		|||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	movs r2, #0x24
 | 
			
		||||
	ldrsh r1, [r6, r2]
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r4, #0x80
 | 
			
		||||
	lsls r4, r4, #1
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r6, #0x2c]
 | 
			
		||||
| 
						 | 
				
			
			@ -1320,11 +1320,11 @@ sub_0806F69C: @ 0x0806F69C
 | 
			
		|||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	movs r2, #0x24
 | 
			
		||||
	ldrsh r1, [r6, r2]
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r6, #0x30]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,13 +96,13 @@ sub_080A2AF4: @ 0x080A2AF4
 | 
			
		|||
	lsls r4, r4, #0x18
 | 
			
		||||
	asrs r4, r4, #0x10
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r5, #0x80
 | 
			
		||||
	lsls r5, r5, #1
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r6, #0x2c]
 | 
			
		||||
| 
						 | 
				
			
			@ -115,11 +115,11 @@ sub_080A2AF4: @ 0x080A2AF4
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r6, #0x30]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -341,13 +341,13 @@ _080864EE:
 | 
			
		|||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #6
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r4, #0x80
 | 
			
		||||
	lsls r4, r4, #1
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	adds r1, #0x80
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
| 
						 | 
				
			
			@ -363,11 +363,11 @@ _080864EE:
 | 
			
		|||
	ldrsh r0, [r0, r3]
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #5
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	adds r1, #0x84
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
| 
						 | 
				
			
			@ -520,13 +520,13 @@ _0808663A:
 | 
			
		|||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #6
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r5, #0x80
 | 
			
		||||
	lsls r5, r5, #1
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	adds r1, #0x80
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
| 
						 | 
				
			
			@ -541,11 +541,11 @@ _0808663A:
 | 
			
		|||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #5
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	adds r1, #0x84
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2824,11 +2824,11 @@ _0802E580:
 | 
			
		|||
	ldrb r1, [r6]
 | 
			
		||||
	lsls r1, r1, #0x18
 | 
			
		||||
	asrs r1, r1, #0x10
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	adds r1, r0, #0
 | 
			
		||||
	ldrb r0, [r4, #1]
 | 
			
		||||
	lsls r0, r0, #4
 | 
			
		||||
| 
						 | 
				
			
			@ -2838,11 +2838,11 @@ _0802E580:
 | 
			
		|||
	ldrsh r0, [r0, r2]
 | 
			
		||||
	lsls r1, r1, #0x10
 | 
			
		||||
	asrs r1, r1, #0x10
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r5]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			@ -2859,11 +2859,11 @@ _0802E580:
 | 
			
		|||
	ldrb r1, [r6]
 | 
			
		||||
	lsls r1, r1, #0x18
 | 
			
		||||
	asrs r1, r1, #0x10
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r5]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -656,7 +656,7 @@ sub_0806252C: @ 0x0806252C
 | 
			
		|||
	lsls r0, r1, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x14
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	mov sl, r0
 | 
			
		||||
| 
						 | 
				
			
			@ -664,7 +664,7 @@ sub_0806252C: @ 0x0806252C
 | 
			
		|||
	lsls r0, r2, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x14
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	mov r8, r0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -349,13 +349,13 @@ _08085774:
 | 
			
		|||
	lsls r4, r4, #0x10
 | 
			
		||||
	asrs r4, r4, #0x18
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r5, #0x80
 | 
			
		||||
	lsls r5, r5, #1
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r7, #0x6c]
 | 
			
		||||
| 
						 | 
				
			
			@ -368,11 +368,11 @@ _08085774:
 | 
			
		|||
	movs r2, #0
 | 
			
		||||
	ldrsh r0, [r0, r2]
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	ldr r1, [r7, #0x70]
 | 
			
		||||
| 
						 | 
				
			
			@ -441,7 +441,7 @@ _0808581A:
 | 
			
		|||
	movs r4, #0x80
 | 
			
		||||
	lsls r4, r4, #1
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	ldr r5, _080858A8 @ =gSineTable
 | 
			
		||||
| 
						 | 
				
			
			@ -450,13 +450,13 @@ _0808581A:
 | 
			
		|||
	adds r1, r1, r5
 | 
			
		||||
	movs r2, #0
 | 
			
		||||
	ldrsh r1, [r1, r2]
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	strh r0, [r7, #0x24]
 | 
			
		||||
	ldr r0, [r7, #0x70]
 | 
			
		||||
	lsls r0, r0, #8
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	ldrb r1, [r7, #0x15]
 | 
			
		||||
| 
						 | 
				
			
			@ -465,7 +465,7 @@ _0808581A:
 | 
			
		|||
	adds r1, r1, r5
 | 
			
		||||
	movs r2, #0
 | 
			
		||||
	ldrsh r1, [r1, r2]
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	rsbs r4, r0, #0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -968,13 +968,13 @@ sub_0809A648: @ 0x0809A648
 | 
			
		|||
	lsls r5, r5, #8
 | 
			
		||||
	asrs r5, r5, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r4, #0x80
 | 
			
		||||
	lsls r4, r4, #1
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r1, [r7, #0x50]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			@ -989,11 +989,11 @@ sub_0809A648: @ 0x0809A648
 | 
			
		|||
	movs r2, #0
 | 
			
		||||
	ldrsh r0, [r0, r2]
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r1, [r7, #0x50]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1024,13 +1024,13 @@ sub_0809CB70: @ 0x0809CB70
 | 
			
		|||
	lsls r5, r5, #0x10
 | 
			
		||||
	asrs r5, r5, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #1
 | 
			
		||||
	mov r8, r1
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r1, [r6, #0x50]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			@ -1043,11 +1043,11 @@ sub_0809CB70: @ 0x0809CB70
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r4, r1]
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	mov r1, r8
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r6, #0x50]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1141,7 +1141,7 @@ sub_0809E238: @ 0x0809E238
 | 
			
		|||
	adds r5, #0x6c
 | 
			
		||||
	movs r2, #0
 | 
			
		||||
	ldrsh r1, [r5, r2]
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	adds r4, r0, #0
 | 
			
		||||
	lsls r4, r4, #0x10
 | 
			
		||||
	asrs r4, r4, #0x10
 | 
			
		||||
| 
						 | 
				
			
			@ -1154,7 +1154,7 @@ sub_0809E238: @ 0x0809E238
 | 
			
		|||
	ldrsh r0, [r0, r2]
 | 
			
		||||
	movs r2, #0
 | 
			
		||||
	ldrsh r1, [r5, r2]
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -597,13 +597,13 @@ _08035616:
 | 
			
		|||
	adds r1, r4, #0
 | 
			
		||||
	ands r1, r2
 | 
			
		||||
	lsls r1, r1, #8
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r5, #0x80
 | 
			
		||||
	lsls r5, r5, #1
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsrs r0, r0, #8
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	adds r1, #0x62
 | 
			
		||||
| 
						 | 
				
			
			@ -619,11 +619,11 @@ _08035616:
 | 
			
		|||
	ands r4, r1
 | 
			
		||||
	lsls r4, r4, #8
 | 
			
		||||
	adds r1, r4, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r5, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
	rsbs r0, r0, #0
 | 
			
		||||
| 
						 | 
				
			
			@ -3086,13 +3086,13 @@ sub_08036914: @ 0x08036914
 | 
			
		|||
	lsls r6, r6, #0x10
 | 
			
		||||
	asrs r6, r6, #0x10
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #1
 | 
			
		||||
	mov r8, r1
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r1, [r5, #0x50]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			@ -3105,11 +3105,11 @@ sub_08036914: @ 0x08036914
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r4, r1]
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	mov r1, r8
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r5, #0x50]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #8
 | 
			
		||||
| 
						 | 
				
			
			@ -3270,11 +3270,11 @@ _08036A78:
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r5]
 | 
			
		||||
	ldr r1, [r5, #4]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
| 
						 | 
				
			
			@ -3293,11 +3293,11 @@ _08036A78:
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	adds r1, r6, #0
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	adds r1, r7, #0
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r5]
 | 
			
		||||
	ldr r1, [r5, #4]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
| 
						 | 
				
			
			@ -3386,12 +3386,12 @@ _08036B48:
 | 
			
		|||
	movs r3, #0
 | 
			
		||||
	ldrsh r0, [r0, r3]
 | 
			
		||||
	mov r1, sl
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #1
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r5]
 | 
			
		||||
	ldr r1, [r6]
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
| 
						 | 
				
			
			@ -3409,12 +3409,12 @@ _08036B48:
 | 
			
		|||
	movs r2, #0
 | 
			
		||||
	ldrsh r0, [r0, r2]
 | 
			
		||||
	mov r1, sl
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #1
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r5]
 | 
			
		||||
	ldr r1, [r6]
 | 
			
		||||
	b _08036C6E
 | 
			
		||||
| 
						 | 
				
			
			@ -3475,12 +3475,12 @@ _08036C0E:
 | 
			
		|||
	movs r2, #0
 | 
			
		||||
	ldrsh r0, [r0, r2]
 | 
			
		||||
	mov r1, sl
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #1
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r4]
 | 
			
		||||
	adds r5, r6, r7
 | 
			
		||||
	ldr r1, [r5]
 | 
			
		||||
| 
						 | 
				
			
			@ -3499,12 +3499,12 @@ _08036C0E:
 | 
			
		|||
	movs r1, #0
 | 
			
		||||
	ldrsh r0, [r0, r1]
 | 
			
		||||
	mov r1, sl
 | 
			
		||||
	bl sub_0806F9EC
 | 
			
		||||
	bl FixedMul
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x80
 | 
			
		||||
	lsls r1, r1, #1
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	ldr r2, [r4]
 | 
			
		||||
	ldr r1, [r5]
 | 
			
		||||
_08036C6E:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -378,7 +378,7 @@ sub_08068578: @ 0x08068578
 | 
			
		|||
	lsls r0, r1, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x14
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	mov sl, r0
 | 
			
		||||
| 
						 | 
				
			
			@ -386,7 +386,7 @@ sub_08068578: @ 0x08068578
 | 
			
		|||
	lsls r0, r2, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	movs r1, #0x14
 | 
			
		||||
	bl sub_0806FA04
 | 
			
		||||
	bl FixedDiv
 | 
			
		||||
	lsls r0, r0, #0x10
 | 
			
		||||
	asrs r0, r0, #0x10
 | 
			
		||||
	mov r8, r0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,9 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
 | 
			
		||||
s16 FixedMul(s16 r0, s16 r1);
 | 
			
		||||
s16 FixedDiv(s16 r0, s16 r1);
 | 
			
		||||
 | 
			
		||||
void CopyPosition(Entity*, Entity*);
 | 
			
		||||
void PositionEntityOnTop(Entity*, Entity*);
 | 
			
		||||
void PositionRelative(Entity*, Entity*, s32, s32);
 | 
			
		||||
| 
						 | 
				
			
			@ -12,4 +15,7 @@ void sub_0806FA90(Entity*, Entity*, s32, s32);
 | 
			
		|||
void ResolveEntityOnTop(Entity*, Entity*);
 | 
			
		||||
void sub_0806FAD8(Entity*, Entity*);
 | 
			
		||||
 | 
			
		||||
const s16 gSineTable[64];
 | 
			
		||||
const s16 gCosineTable[256];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +0,0 @@
 | 
			
		|||
#ifndef DMA_H
 | 
			
		||||
#define DMA_H
 | 
			
		||||
 | 
			
		||||
void MemFill16(u32 value, void* dest, u32 size);
 | 
			
		||||
void MemFill32(u32 value, void* dest, u32 size);
 | 
			
		||||
void MemClear(void* dest, u32 size);
 | 
			
		||||
void MemCopy(const void* src, void* dest, u32 size);
 | 
			
		||||
 | 
			
		||||
#endif // DMA_H
 | 
			
		||||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "manager.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -13,7 +13,6 @@
 | 
			
		|||
// Identified - to be sorted into header files
 | 
			
		||||
extern void SoundReq(u32);
 | 
			
		||||
extern void ShowNPCDialogue(Entity*, Dialog*);
 | 
			
		||||
extern u32 __modsi3(u32, u32);
 | 
			
		||||
extern void DoFade(u32, u32);
 | 
			
		||||
extern u32 CheckKinstoneFused(u32);
 | 
			
		||||
extern void ForceEquipItem(u32, u8);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,6 @@ extern u32 gUnk_0810C2E4;
 | 
			
		|||
extern const s16 GreatFairy_RippleOffsets[10];
 | 
			
		||||
extern u32 gUnk_02034350;
 | 
			
		||||
extern u8 gUnk_0812079C[8];
 | 
			
		||||
extern s16 gSineTable[];
 | 
			
		||||
extern s8 gUnk_081207AC[];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +0,0 @@
 | 
			
		|||
typedef struct {
 | 
			
		||||
    u16 heldKeys;
 | 
			
		||||
    u16 newKeys;
 | 
			
		||||
    u16 unk4;
 | 
			
		||||
    u8 unk6;
 | 
			
		||||
    u8 unk7;
 | 
			
		||||
} Input;
 | 
			
		||||
 | 
			
		||||
extern Input gInput;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
#ifndef TRIG_H
 | 
			
		||||
#define TRIG_H
 | 
			
		||||
 | 
			
		||||
extern const s16 gSineTable[];
 | 
			
		||||
extern const s16 gCosineTable[];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
typedef struct {
 | 
			
		||||
    u16 heldKeys;
 | 
			
		||||
    u16 newKeys;
 | 
			
		||||
    u16 unk4;
 | 
			
		||||
    u8 unk6;
 | 
			
		||||
    u8 unk7;
 | 
			
		||||
} Input;
 | 
			
		||||
 | 
			
		||||
extern Input gInput;
 | 
			
		||||
 | 
			
		||||
void MemFill16(u32 value, void* dest, u32 size);
 | 
			
		||||
void MemFill32(u32 value, void* dest, u32 size);
 | 
			
		||||
void MemClear(void* dest, u32 size);
 | 
			
		||||
void MemCopy(const void* src, void* dest, u32 size);
 | 
			
		||||
 | 
			
		||||
void ReadKeyInput(void);
 | 
			
		||||
 | 
			
		||||
void LoadPalettes(const u8*, int, int);
 | 
			
		||||
void LoadPaletteGroup(u32 group);
 | 
			
		||||
							
								
								
									
										20
									
								
								linker.ld
								
								
								
								
							
							
						
						
									
										20
									
								
								linker.ld
								
								
								
								
							| 
						 | 
				
			
			@ -327,10 +327,7 @@ SECTIONS {
 | 
			
		|||
        asm/code_0801C85C.o(.text);
 | 
			
		||||
        src/ezloNag.o(.text);
 | 
			
		||||
        asm/code_0801CEC0.o(.text);
 | 
			
		||||
        src/dma.o(.text);
 | 
			
		||||
        src/input.o(.text);
 | 
			
		||||
        src/code_0801D714.o(.text);
 | 
			
		||||
        src/code_0801D79C.o(.text);
 | 
			
		||||
        src/utils.o(.text);
 | 
			
		||||
        asm/code_0801D79C.o(.text);
 | 
			
		||||
        /* enemies */
 | 
			
		||||
        src/enemy/octorok.o(.text);
 | 
			
		||||
| 
						 | 
				
			
			@ -451,13 +448,12 @@ SECTIONS {
 | 
			
		|||
        src/loadRoomEntityList.o(.text);
 | 
			
		||||
        asm/loadRoomEntity.o(.text);
 | 
			
		||||
        asm/code_0804AEB0.o(.text);
 | 
			
		||||
        src/sub_0804AFF4.o(.text);
 | 
			
		||||
        src/loadRoom.o(.text);
 | 
			
		||||
        asm/code_0804B058.o(.text);
 | 
			
		||||
        src/room.o(.text);
 | 
			
		||||
        asm/code_0804B9F8.o(.text);
 | 
			
		||||
        src/sub_08050008.o(.text);
 | 
			
		||||
        src/sub_08050024.o(.text);
 | 
			
		||||
        src/fade.o(.text);
 | 
			
		||||
        asm/code_08050038.o(.text);
 | 
			
		||||
        src/fileScreen.o(.text);
 | 
			
		||||
        asm/fileScreen.o(.text);
 | 
			
		||||
| 
						 | 
				
			
			@ -540,7 +536,7 @@ SECTIONS {
 | 
			
		|||
        src/code_0805EC04.o(.text);
 | 
			
		||||
        asm/code_0805EC04.o(.text);
 | 
			
		||||
        src/code_0805F9A0.o(.text);
 | 
			
		||||
        src/screenDebug.o(.text);
 | 
			
		||||
        src/debugScreen.o(.text);
 | 
			
		||||
        src/item14.o(.text);
 | 
			
		||||
        /* npcs */
 | 
			
		||||
        src/npc/gentari.o(.text);
 | 
			
		||||
| 
						 | 
				
			
			@ -646,9 +642,7 @@ SECTIONS {
 | 
			
		|||
        asm/code_0806EC20.o(.text);
 | 
			
		||||
        src/createNPC.o(.text);
 | 
			
		||||
        asm/code_0806ED78.o(.text);
 | 
			
		||||
        src/sub_0806F9EC.o(.text);
 | 
			
		||||
        src/sub_0806FA04.o(.text);
 | 
			
		||||
        src/position.o(.text);
 | 
			
		||||
        src/coord.o(.text);
 | 
			
		||||
        asm/code_0806FA6C.o(.text);
 | 
			
		||||
        src/player.o(.text);
 | 
			
		||||
        asm/code_08070698.o(.text);
 | 
			
		||||
| 
						 | 
				
			
			@ -663,13 +657,9 @@ SECTIONS {
 | 
			
		|||
        asm/code_08077B98.o(.text);
 | 
			
		||||
        src/code_08078778.o(.text);
 | 
			
		||||
        asm/code_08078778.o(.text);
 | 
			
		||||
        src/sub_0807B7D8.o(.text);
 | 
			
		||||
        src/sub_0807B820.o(.text);
 | 
			
		||||
        src/sub_0807B8A8.o(.text);
 | 
			
		||||
        src/sub_0807B930.o(.text);
 | 
			
		||||
        asm/code_0807B9B8.o(.text);
 | 
			
		||||
        src/sub_0807C998.o(.text);
 | 
			
		||||
        src/sub_0801D754.o(.text); /* ??? */
 | 
			
		||||
        asm/sub_0807CA18.o(.text);
 | 
			
		||||
        asm/getInventoryValue.o(.text);
 | 
			
		||||
        asm/code_0807CAA0.o(.text);
 | 
			
		||||
| 
						 | 
				
			
			@ -915,7 +905,7 @@ SECTIONS {
 | 
			
		|||
        src/manager.o(.rodata);
 | 
			
		||||
        src/npc.o(.rodata);
 | 
			
		||||
        data/data_080B3740.o(.rodata);
 | 
			
		||||
        src/trig.o(.rodata);
 | 
			
		||||
        src/coord.o(.rodata);
 | 
			
		||||
        data/data_080C93E0.o(.rodata);
 | 
			
		||||
        src/enemy/octorok.o(.rodata);
 | 
			
		||||
        data/animations/octorok.o(.rodata);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
#include "functions.h"
 | 
			
		||||
#include "object.h"
 | 
			
		||||
#include "manager.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "npc.h"
 | 
			
		||||
 | 
			
		||||
extern u8 gUnk_03003DE0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
 | 
			
		||||
extern void LoadPalettes(const u8*, int, int);
 | 
			
		||||
 | 
			
		||||
extern u32 gUsedPalettes;
 | 
			
		||||
extern u16 gPaletteBuffer[];
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    u16 paletteId;
 | 
			
		||||
    u8 destPaletteNum;
 | 
			
		||||
    u8 numPalettes;
 | 
			
		||||
} PaletteGroup;
 | 
			
		||||
 | 
			
		||||
extern const PaletteGroup* gPaletteGroups[];
 | 
			
		||||
extern const u8 gGlobalGfxAndPalettes[];
 | 
			
		||||
 | 
			
		||||
void LoadPaletteGroup(u32 group) {
 | 
			
		||||
    const PaletteGroup* paletteGroup = gPaletteGroups[group];
 | 
			
		||||
    while (1) {
 | 
			
		||||
        u32 destPaletteNum = paletteGroup->destPaletteNum;
 | 
			
		||||
        u32 numPalettes = paletteGroup->numPalettes & 0xF;
 | 
			
		||||
        if (numPalettes == 0) {
 | 
			
		||||
            numPalettes = 16;
 | 
			
		||||
        }
 | 
			
		||||
        LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes);
 | 
			
		||||
        if ((paletteGroup->numPalettes & 0x80) == 0) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        paletteGroup++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LoadPalettes(const u8* src, int destPaletteNum, int numPalettes) {
 | 
			
		||||
    u16* dest;
 | 
			
		||||
    u32 size = numPalettes * 32;
 | 
			
		||||
    u32 usedPalettesMask = 1 << destPaletteNum;
 | 
			
		||||
    while (--numPalettes > 0) {
 | 
			
		||||
        usedPalettesMask |= (usedPalettesMask << 1);
 | 
			
		||||
    }
 | 
			
		||||
    gUsedPalettes |= usedPalettesMask;
 | 
			
		||||
    dest = &gPaletteBuffer[destPaletteNum * 16];
 | 
			
		||||
    DmaCopy32(3, src, dest, size);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,96 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
 | 
			
		||||
extern u16 gPaletteBuffer[];
 | 
			
		||||
extern u32 gUsedPalettes;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    union {
 | 
			
		||||
        int raw;
 | 
			
		||||
        struct {
 | 
			
		||||
            u8 filler0[0x3];
 | 
			
		||||
            u8 unk3;
 | 
			
		||||
        } bytes;
 | 
			
		||||
    } unk0;
 | 
			
		||||
    u32 dest;
 | 
			
		||||
    u32 unk8;
 | 
			
		||||
} GfxItem;
 | 
			
		||||
 | 
			
		||||
extern const GfxItem* gUnk_08100AA8[];
 | 
			
		||||
extern const u8 gGlobalGfxAndPalettes[];
 | 
			
		||||
 | 
			
		||||
void sub_0801D79C(u32 colorIndex, u32 color) {
 | 
			
		||||
    gPaletteBuffer[colorIndex] = color;
 | 
			
		||||
    gUsedPalettes |= 1 << (colorIndex / 16);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0801D7BC(u32 color, u32 arg1) {
 | 
			
		||||
    if (arg1) {
 | 
			
		||||
        gScreen.lcd.unk6 = 0xE0FF;
 | 
			
		||||
    } else {
 | 
			
		||||
        gScreen.lcd.unk6 = 0xFFFF;
 | 
			
		||||
    }
 | 
			
		||||
    sub_0801D79C(0, color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LoadGfxGroup(u32 group) {
 | 
			
		||||
    u32 terminator;
 | 
			
		||||
    u32 dmaCtrl;
 | 
			
		||||
    int gfxOffset;
 | 
			
		||||
    const u8* src;
 | 
			
		||||
    u32 dest;
 | 
			
		||||
    int size;
 | 
			
		||||
    const GfxItem* gfxItem = gUnk_08100AA8[group];
 | 
			
		||||
    while (1) {
 | 
			
		||||
        u32 loadGfx = FALSE;
 | 
			
		||||
        u32 ctrl = gfxItem->unk0.bytes.unk3;
 | 
			
		||||
        ctrl &= 0xF;
 | 
			
		||||
        switch (ctrl) {
 | 
			
		||||
            case 0x7:
 | 
			
		||||
                loadGfx = TRUE;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xD:
 | 
			
		||||
                return;
 | 
			
		||||
            case 0xE:
 | 
			
		||||
                if (((struct_02000000*)0x2000000)->gameLanguage > 1) {
 | 
			
		||||
                    loadGfx = TRUE;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xF:
 | 
			
		||||
                if (((struct_02000000*)0x2000000)->gameLanguage != 0) {
 | 
			
		||||
                    loadGfx = TRUE;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                if (ctrl == ((struct_02000000*)0x2000000)->gameLanguage) {
 | 
			
		||||
                    loadGfx = TRUE;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (loadGfx) {
 | 
			
		||||
            gfxOffset = gfxItem->unk0.raw & 0xFFFFFF;
 | 
			
		||||
            src = &gGlobalGfxAndPalettes[gfxOffset];
 | 
			
		||||
            dest = gfxItem->dest;
 | 
			
		||||
            size = gfxItem->unk8;
 | 
			
		||||
            dmaCtrl = 0x80000000;
 | 
			
		||||
            if (size < 0) {
 | 
			
		||||
                if (dest >= VRAM) {
 | 
			
		||||
                    LZ77UnCompVram(src, (void*)dest);
 | 
			
		||||
                } else {
 | 
			
		||||
                    LZ77UnCompWram(src, (void*)dest);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        terminator = gfxItem->unk0.bytes.unk3;
 | 
			
		||||
        terminator &= 0x80;
 | 
			
		||||
        gfxItem++;
 | 
			
		||||
        if (!terminator) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
#include "entity.h"
 | 
			
		||||
#include "area.h"
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,71 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
 | 
			
		||||
extern u8 gUnk_08114F78[];
 | 
			
		||||
extern u8 gUnk_08114F80[];
 | 
			
		||||
 | 
			
		||||
s16 FixedMul(s16 r0, s16 r1) {
 | 
			
		||||
    s32 temp = r0 * r1;
 | 
			
		||||
    if (temp < 0)
 | 
			
		||||
        return (temp + 255) >> 8;
 | 
			
		||||
    else
 | 
			
		||||
        return temp >> 8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s16 FixedDiv(s16 r0, s16 r1) {
 | 
			
		||||
    if (r1 == 0)
 | 
			
		||||
        return 0;
 | 
			
		||||
    else
 | 
			
		||||
        return (r0 * 256) / r1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CopyPosition(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    PositionRelative(param_1, param_2, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PositionEntityOnTop(Entity* ent, Entity* ent2) {
 | 
			
		||||
    PositionRelative(ent, ent2, 0, 0);
 | 
			
		||||
    ResolveEntityOnTop(ent, ent2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PositionRelative(Entity* source, Entity* target, s32 offsetX, s32 offsetY) { // r0, r1, r2, r3
 | 
			
		||||
    s32 x;
 | 
			
		||||
    s32 y;
 | 
			
		||||
 | 
			
		||||
    x = source->x.WORD;
 | 
			
		||||
    target->x.WORD = x + offsetX;
 | 
			
		||||
 | 
			
		||||
    y = source->y.WORD;
 | 
			
		||||
    target->y.WORD = y + offsetY;
 | 
			
		||||
 | 
			
		||||
    target->height = source->height; // ldr
 | 
			
		||||
    target->collisionLayer = source->collisionLayer;
 | 
			
		||||
    UpdateSpriteForCollisionLayer(target);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    param_2->spriteOffsetX = param_1->spriteOffsetX;
 | 
			
		||||
    param_2->spriteOffsetY = param_1->spriteOffsetY;
 | 
			
		||||
    PositionRelative(param_1, param_2, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0806FA90(Entity* param_1, Entity* param_2, s32 offsetX, s32 offsetY) {
 | 
			
		||||
    param_2->spriteOffsetX = param_1->spriteOffsetX;
 | 
			
		||||
    param_2->spriteOffsetY = param_1->spriteOffsetY;
 | 
			
		||||
    PositionRelative(param_1, param_2, offsetX * 64 * 32 * 32, offsetY * 64 * 32 * 32);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ResolveEntityOnTop(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    param_2->spritePriority.b0 = gUnk_08114F78[param_1->spritePriority.b0];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0806FAD8(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    param_2->spritePriority.b0 = gUnk_08114F80[param_1->spritePriority.b0];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Values of sin(x*(π/128)) as Q8.8 fixed-point numbers from x = 0 to x = 319
 | 
			
		||||
const s16 gSineTable[] = {
 | 
			
		||||
const s16 gSineTable[64] = {
 | 
			
		||||
    Q_8_8(0),          // sin(0*(π/128))
 | 
			
		||||
    Q_8_8(0.0234375),  // sin(1*(π/128))
 | 
			
		||||
    Q_8_8(0.046875),   // sin(2*(π/128))
 | 
			
		||||
| 
						 | 
				
			
			@ -68,8 +132,7 @@ const s16 gSineTable[] = {
 | 
			
		|||
    Q_8_8(0.99609375), // sin(63*(π/128))
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const s16 gCosineTable[] = {
 | 
			
		||||
 | 
			
		||||
const s16 gCosineTable[256] = {
 | 
			
		||||
    Q_8_8(1),           // sin(64*(π/128))
 | 
			
		||||
    Q_8_8(0.99609375),  // sin(65*(π/128))
 | 
			
		||||
    Q_8_8(0.99609375),  // sin(66*(π/128))
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "createObject.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "menu.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -7,13 +7,6 @@
 | 
			
		|||
#include "structures.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    u16 unk0;
 | 
			
		||||
    u16 unk2;
 | 
			
		||||
    u16 unk4;
 | 
			
		||||
} VStruct;
 | 
			
		||||
 | 
			
		||||
extern VStruct gInput;
 | 
			
		||||
extern u8 gBG3Buffer[];
 | 
			
		||||
 | 
			
		||||
extern void (*const gUnk_08109A30[])();
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +40,7 @@ void sub_0805FA04(void) {
 | 
			
		|||
void sub_0805FA98(void) {
 | 
			
		||||
    int iVar1;
 | 
			
		||||
 | 
			
		||||
    switch (gInput.unk2) {
 | 
			
		||||
    switch (gInput.newKeys) {
 | 
			
		||||
        case 0x40:
 | 
			
		||||
            gMenu.focusCoords[1] -= 1;
 | 
			
		||||
            break;
 | 
			
		||||
							
								
								
									
										46
									
								
								src/dma.c
								
								
								
								
							
							
						
						
									
										46
									
								
								src/dma.c
								
								
								
								
							| 
						 | 
				
			
			@ -1,46 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
 | 
			
		||||
void MemFill16(u32 value, void* dest, u32 size) {
 | 
			
		||||
    DmaFill16(3, value, dest, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MemFill32(u32 value, void* dest, u32 size) {
 | 
			
		||||
    DmaFill32(3, value, dest, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MemClear(void* dest, u32 size) {
 | 
			
		||||
    u32 zero = 0;
 | 
			
		||||
 | 
			
		||||
    switch (((u32)dest | size) & 3) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            MemFill32(0, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
            MemFill16(0, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            do {
 | 
			
		||||
                *(u8*)dest = zero;
 | 
			
		||||
                dest++;
 | 
			
		||||
                size--;
 | 
			
		||||
            } while (size != 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MemCopy(const void* src, void* dest, u32 size) {
 | 
			
		||||
    switch (((u32)src | (u32)dest | size) & 3) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            DmaCopy32(3, src, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
            DmaCopy16(3, src, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            do {
 | 
			
		||||
                *(u8*)dest = *(u8*)src;
 | 
			
		||||
                src++;
 | 
			
		||||
                dest++;
 | 
			
		||||
            } while (--size);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
#include "enemy.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "trig.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "fileScreen.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
#include "entity.h"
 | 
			
		||||
#include "enemy.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "trig.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,12 +3,12 @@
 | 
			
		|||
#include "enemy.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
 | 
			
		||||
extern u32 sub_080002D4(s32, s32, u32);
 | 
			
		||||
extern u32 sub_080002BC(s32, s32, u32);
 | 
			
		||||
 | 
			
		||||
extern Entity* gUnk_020000B0;
 | 
			
		||||
extern s16 gSineTable[];
 | 
			
		||||
 | 
			
		||||
bool32 Leever_PlayerInRange(Entity*, s32);
 | 
			
		||||
void Leever_Move(Entity*);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@
 | 
			
		|||
 | 
			
		||||
void sub_08045374(Entity*);
 | 
			
		||||
 | 
			
		||||
extern u32 sub_0806FA04(u32, u32);
 | 
			
		||||
//extern u32 FixedDiv(u32, u32);
 | 
			
		||||
extern void sub_080452E4();
 | 
			
		||||
extern void ReplaceMonitoredEntity(Entity*, Entity*);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +70,7 @@ void sub_080452FC(Entity* this) {
 | 
			
		|||
        this->action = 3;
 | 
			
		||||
        this->actionDelay = 1;
 | 
			
		||||
        if (0 < this->speed)
 | 
			
		||||
            this->actionDelay = sub_0806FA04(0x1000, this->speed) >> 0x8;
 | 
			
		||||
            this->actionDelay = FixedDiv(0x1000, this->speed) >> 0x8;
 | 
			
		||||
 | 
			
		||||
        if (sub_08049FA0(this) == 0 && (Random() & 3)) {
 | 
			
		||||
            cVar2 = sub_08049EE4(this);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ typedef struct {
 | 
			
		|||
void sub_08044FF8(Entity*);
 | 
			
		||||
void sub_08045178(Entity*, Entity*, int, int);
 | 
			
		||||
 | 
			
		||||
extern u32 sub_0806FA04(u32, u32);
 | 
			
		||||
//extern u32 FixedDiv(u32, u32);
 | 
			
		||||
extern void sub_0804A4E4(Entity*, Entity*);
 | 
			
		||||
extern u32 sub_080002CC(Entity*, s32, s32);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +68,7 @@ void sub_08045018(Entity* this) {
 | 
			
		|||
        this->action = 3;
 | 
			
		||||
        this->actionDelay = 1;
 | 
			
		||||
        if (0 < this->speed) {
 | 
			
		||||
            this->actionDelay = sub_0806FA04(4096, this->speed) >> 8;
 | 
			
		||||
            this->actionDelay = FixedDiv(4096, this->speed) >> 8;
 | 
			
		||||
        }
 | 
			
		||||
        if (sub_08049FA0(this) == 0 && (Random() & 3)) {
 | 
			
		||||
            this->direction = (sub_08049EE4(this) + 0xfc + (Random() & 8)) & 24;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "script.h"
 | 
			
		||||
 | 
			
		||||
typedef struct OtherEntity {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,9 @@
 | 
			
		|||
#include "fileScreen.h"
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
#include "readKeyInput.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "menu.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +8,7 @@
 | 
			
		|||
#include "main.h"
 | 
			
		||||
#include "flags.h"
 | 
			
		||||
#include "save.h"
 | 
			
		||||
#include "readKeyInput.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "fileScreen.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										27
									
								
								src/input.c
								
								
								
								
							
							
						
						
									
										27
									
								
								src/input.c
								
								
								
								
							| 
						 | 
				
			
			@ -1,27 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "readKeyInput.h"
 | 
			
		||||
 | 
			
		||||
static void StoreKeyInput(Input*, u32);
 | 
			
		||||
 | 
			
		||||
void ReadKeyInput(void) {
 | 
			
		||||
    u32 keyInput = ~REG_KEYINPUT & KEYS_MASK;
 | 
			
		||||
    StoreKeyInput(&gInput, keyInput);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void StoreKeyInput(Input* input, u32 keyInput) {
 | 
			
		||||
    u32 heldKeys = input->heldKeys;
 | 
			
		||||
    u32 difference = keyInput & ~heldKeys;
 | 
			
		||||
    input->newKeys = difference;
 | 
			
		||||
    if (keyInput == heldKeys) {
 | 
			
		||||
        if (--input->unk7 == 0) {
 | 
			
		||||
            input->unk7 = 4;
 | 
			
		||||
            input->unk4 = keyInput;
 | 
			
		||||
        } else {
 | 
			
		||||
            input->unk4 = 0;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        input->unk7 = 0x14;
 | 
			
		||||
        input->unk4 = difference;
 | 
			
		||||
    }
 | 
			
		||||
    input->heldKeys = keyInput;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,8 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "readKeyInput.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,24 @@ extern void* GetRoomProperty(u32, u32, u32);
 | 
			
		|||
extern u32 gUnk_02017654;
 | 
			
		||||
extern u32* gAreaEntities;
 | 
			
		||||
 | 
			
		||||
extern void sub_080186EC();
 | 
			
		||||
extern void sub_0804B16C();
 | 
			
		||||
 | 
			
		||||
void sub_0804AFF4(void) {
 | 
			
		||||
    void (*func)();
 | 
			
		||||
 | 
			
		||||
    sub_080186EC();
 | 
			
		||||
    func = (void (*)())GetCurrentRoomProperty(5);
 | 
			
		||||
    if (func) {
 | 
			
		||||
        func();
 | 
			
		||||
    }
 | 
			
		||||
    func = (void (*)())GetCurrentRoomProperty(7);
 | 
			
		||||
    if (func) {
 | 
			
		||||
        func();
 | 
			
		||||
    }
 | 
			
		||||
    sub_0804B16C();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LoadRoom(void) {
 | 
			
		||||
    s32 iVar1;
 | 
			
		||||
    s32* dat;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,10 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "readKeyInput.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "save.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
#include "arm_proxy.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -187,9 +186,9 @@ NONMATCH("asm/non_matching/sub_080560B8.inc", static void sub_080560B8(void)) {
 | 
			
		|||
    b = BOOLCAST(temp);
 | 
			
		||||
 | 
			
		||||
    if ((gUnk_02000010.field_0x4 != 0) && (gUnk_02000010.field_0x4 != 0xc1)) {
 | 
			
		||||
        b = 1;
 | 
			
		||||
        b = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
    if (b != 0) {
 | 
			
		||||
    if (b) {
 | 
			
		||||
        MemClear((u8*)&gUnk_02000010.signature, 0x20);
 | 
			
		||||
        gUnk_02000010.signature = SIGNATURE;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -255,7 +254,7 @@ void sub_08056260(void) {
 | 
			
		|||
    temp2->field_0x1 = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Convert in-game AABB to screen coordinates and check if it's within the viewport
 | 
			
		||||
// Convert AABB to screen coordinates and check if it's within the viewport
 | 
			
		||||
u32 sub_080562CC(u32 x0, u32 y0, u32 x1, u32 y1) {
 | 
			
		||||
    u32 result;
 | 
			
		||||
    u32 x = ((gRoomControls.roomScrollX - gRoomControls.roomOriginX) - x0 + DISPLAY_WIDTH);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
#include "entity.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
#include "screen.h"
 | 
			
		||||
#include "area.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "game.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
#include "entity.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "area.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
#include "structures.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
#include "trig.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "save.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,9 +4,9 @@
 | 
			
		|||
#include "main.h"
 | 
			
		||||
#include "menu.h"
 | 
			
		||||
#include "npc.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "fileScreen.h"
 | 
			
		||||
#include "readKeyInput.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,11 +25,9 @@ enum {
 | 
			
		|||
 | 
			
		||||
// Main
 | 
			
		||||
void GreatFairy(Entity* this) {
 | 
			
		||||
    u8 bVar1;
 | 
			
		||||
 | 
			
		||||
    if (this->action == 0) {
 | 
			
		||||
        bVar1 = __modsi3(this->type, 11);
 | 
			
		||||
        this->type2 = bVar1;
 | 
			
		||||
        s32 temp = 11;
 | 
			
		||||
        this->type2 = this->type % temp;
 | 
			
		||||
    }
 | 
			
		||||
    GreatFairy_Main[this->type2](this);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -68,20 +66,18 @@ void GreatFairy_DormantUpdate(Entity* this) {
 | 
			
		|||
        --*pFrame;
 | 
			
		||||
    }
 | 
			
		||||
    switch (*pFrame) {
 | 
			
		||||
        case 0x96:
 | 
			
		||||
        case 0x82:
 | 
			
		||||
            goto e;
 | 
			
		||||
        case 0x0:
 | 
			
		||||
        case 0:
 | 
			
		||||
            this->action = 2;
 | 
			
		||||
            break;
 | 
			
		||||
        e:
 | 
			
		||||
        case 0xd2:
 | 
			
		||||
        case 0xaa:
 | 
			
		||||
        case 0x121:
 | 
			
		||||
        case 130:
 | 
			
		||||
        case 150:
 | 
			
		||||
        case 170:
 | 
			
		||||
        case 210:
 | 
			
		||||
        case 289:
 | 
			
		||||
            ripple = GreatFairy_CreateForm(this, RIPPLE, 0);
 | 
			
		||||
            if (ripple) {
 | 
			
		||||
                PositionRelative(this, ripple, (s32)GreatFairy_RippleOffsets[this->actionDelay] << 16,
 | 
			
		||||
                                 (s32)GreatFairy_RippleOffsets[this->actionDelay + 1] << 16);
 | 
			
		||||
                PositionRelative(this, ripple, (s32)GreatFairy_RippleOffsets[this->actionDelay] * 65536,
 | 
			
		||||
                                 (s32)GreatFairy_RippleOffsets[this->actionDelay + 1] * 65536);
 | 
			
		||||
                this->actionDelay += 2;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -110,9 +106,8 @@ void GreatFairy_SpawningUpdate(Entity* this) {
 | 
			
		|||
            DoFade(6, 4);
 | 
			
		||||
            SoundReq(325);
 | 
			
		||||
            this->action = 4;
 | 
			
		||||
            this->actionDelay = 0x3c;
 | 
			
		||||
            var = this->spriteSettings.raw & ~0x3;
 | 
			
		||||
            this->spriteSettings.raw = (this->spriteSettings.raw & var) | 1;
 | 
			
		||||
            this->actionDelay = 60;
 | 
			
		||||
            this->spriteSettings.b.draw = 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -166,10 +161,8 @@ void GreatFairy_WingsInit(Entity* this) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void GreatFairy_WingsUpdate(Entity* this) {
 | 
			
		||||
    s32 iVar1;
 | 
			
		||||
 | 
			
		||||
    iVar1 = this->speed -= 32;
 | 
			
		||||
    if (iVar1 * 65536 >> 16 == 256) {
 | 
			
		||||
    this->speed -= 32;
 | 
			
		||||
    if (this->speed == 256) {
 | 
			
		||||
        this->action = 2;
 | 
			
		||||
        sub_0805EC60(this);
 | 
			
		||||
        gRoomVars.greatFairyState |= 32;
 | 
			
		||||
| 
						 | 
				
			
			@ -237,7 +230,7 @@ void GreatFairy_MiniRisingUpdate(Entity* this) {
 | 
			
		|||
void GreatFairy_MiniRemoveMe(Entity* this) {
 | 
			
		||||
    GetNextFrame(this);
 | 
			
		||||
    sub_080873D0(this);
 | 
			
		||||
    if ((gRoomVars.greatFairyState & 1) != 0) {
 | 
			
		||||
    if (gRoomVars.greatFairyState & 1) {
 | 
			
		||||
        DeleteEntity(this);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -270,15 +263,13 @@ void GreatFairy_MiniAffineInit2(Entity* this) {
 | 
			
		|||
 | 
			
		||||
// Mini great fairy stretch
 | 
			
		||||
void GreatFairy_MiniAffineUpdate(Entity* this) {
 | 
			
		||||
    s32 iVar2;
 | 
			
		||||
 | 
			
		||||
    if (--this->actionDelay == 0) {
 | 
			
		||||
        gRoomVars.greatFairyState |= 1;
 | 
			
		||||
        this->action = 3;
 | 
			
		||||
        sub_0805EC60(this);
 | 
			
		||||
    } else {
 | 
			
		||||
        iVar2 = this->speed -= 24;
 | 
			
		||||
        sub_0805EC9C(this, 256, iVar2 * 0x10000 >> 20, 0);
 | 
			
		||||
        this->speed -= 24;
 | 
			
		||||
        sub_0805EC9C(this, 256, this->speed >> 4, 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -297,7 +288,7 @@ void GreatFairy_DropletInit(Entity* this) {
 | 
			
		|||
 | 
			
		||||
void GreatFairy_DropletUpdate(Entity* this) {
 | 
			
		||||
    GetNextFrame(this);
 | 
			
		||||
    if (this->frames.b.f3) {
 | 
			
		||||
    if (this->frames.all & 0x80) {
 | 
			
		||||
        DeleteEntity(this);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +305,7 @@ void GreatFairy_RippleInit(Entity* this) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void GreatFairy_RippleUpdate(Entity* this) {
 | 
			
		||||
    if ((gRoomVars.greatFairyState & 2) != 0) {
 | 
			
		||||
    if (gRoomVars.greatFairyState & 2) {
 | 
			
		||||
        DeleteEntity(this);
 | 
			
		||||
    } else {
 | 
			
		||||
        GetNextFrame(this);
 | 
			
		||||
| 
						 | 
				
			
			@ -363,7 +354,7 @@ void GreatFairy_EnergyInit(Entity* this) {
 | 
			
		|||
 | 
			
		||||
void GreatFairy_EnergyUpdate(Entity* this) {
 | 
			
		||||
    GetNextFrame(this);
 | 
			
		||||
    if (this->frames.b.f3) {
 | 
			
		||||
    if (this->frames.all & 0x80) {
 | 
			
		||||
        DeleteEntity(this);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -377,35 +368,25 @@ void sub_08087114(Entity* this) {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef NON_MATCHING
 | 
			
		||||
extern u8 gUnk_0812079C;
 | 
			
		||||
 | 
			
		||||
void sub_08087150(Entity* this) {
 | 
			
		||||
NONMATCH("asm/greatFairy/sub_08087150.inc", void sub_08087150(Entity* this)) {
 | 
			
		||||
    u32 temp;
 | 
			
		||||
 | 
			
		||||
    GreatFairy_InitializeAnimation();
 | 
			
		||||
    GreatFairy_InitializeAnimation(this);
 | 
			
		||||
    this->spriteSettings.b.draw = TRUE;
 | 
			
		||||
    this->spriteOrientation.flipY = 0;
 | 
			
		||||
    this->spriteRendering.b0 = 0;
 | 
			
		||||
    this->spritePriority.b0 = 3;
 | 
			
		||||
    this->speed = 0x80;
 | 
			
		||||
    this->speed = 128;
 | 
			
		||||
    this->direction = 0x10;
 | 
			
		||||
    temp = gUnk_0812079C;
 | 
			
		||||
    temp = gUnk_0812079C[0];
 | 
			
		||||
    this->palette.raw = ((temp & 0xf) << 4) | 0xf;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
NAKED
 | 
			
		||||
void sub_08087150(Entity* this) {
 | 
			
		||||
    asm(".include \"asm/greatFairy/sub_08087150.inc\"");
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
END_NONMATCH
 | 
			
		||||
 | 
			
		||||
void nullsub_516(Entity* this) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_080871A8(Entity* this) {
 | 
			
		||||
    u32 bVar1;
 | 
			
		||||
 | 
			
		||||
    if (--this->actionDelay == 0) {
 | 
			
		||||
        this->action = 3;
 | 
			
		||||
        this->actionDelay = 60;
 | 
			
		||||
| 
						 | 
				
			
			@ -414,7 +395,6 @@ void sub_080871A8(Entity* this) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void sub_080871D0(Entity* this) {
 | 
			
		||||
 | 
			
		||||
    if (--this->actionDelay == 0) {
 | 
			
		||||
        gRoomVars.greatFairyState |= 8;
 | 
			
		||||
        DeleteEntity(this);
 | 
			
		||||
| 
						 | 
				
			
			@ -424,16 +404,16 @@ void sub_080871D0(Entity* this) {
 | 
			
		|||
void sub_080871F8(Entity* this) {
 | 
			
		||||
    Entity* temp = this->attachedEntity;
 | 
			
		||||
 | 
			
		||||
    if ((temp->x.HALF.HI == this->x.HALF.HI) && (temp->y.HALF.HI - 0x20 == this->y.HALF.HI)) {
 | 
			
		||||
    if ((temp->x.HALF.HI == this->x.HALF.HI) && (temp->y.HALF.HI - 32 == this->y.HALF.HI)) {
 | 
			
		||||
        this->action = 2;
 | 
			
		||||
    } else {
 | 
			
		||||
        this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 0x20);
 | 
			
		||||
        this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, temp->x.HALF.HI, temp->y.HALF.HI - 32);
 | 
			
		||||
        sub_0806F69C(this);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_08087240(Entity* this) {
 | 
			
		||||
    if ((gRoomVars.greatFairyState & 4) != 0) {
 | 
			
		||||
    if (gRoomVars.greatFairyState & 4) {
 | 
			
		||||
        this->action = 3;
 | 
			
		||||
        this->actionDelay = 20;
 | 
			
		||||
        this->direction = 16;
 | 
			
		||||
| 
						 | 
				
			
			@ -448,7 +428,6 @@ void sub_08087264(Entity* this) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void sub_0808727C(Entity* this) {
 | 
			
		||||
 | 
			
		||||
    if (--this->actionDelay == 0) {
 | 
			
		||||
        DeleteEntity(this);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -479,17 +458,16 @@ void sub_080872F8(Entity* this) {
 | 
			
		|||
            sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, (s16)this->field_0x68.HWORD, (s16)this->field_0x6a.HWORD);
 | 
			
		||||
        this->direction = (this->direction + gUnk_081207AC[Random() & 3]) & 0x1f;
 | 
			
		||||
    }
 | 
			
		||||
    temp = gSineTable[this->actionDelay + 0x40];
 | 
			
		||||
    temp = gSineTable[this->actionDelay + 64];
 | 
			
		||||
    this->height.HALF.HI = (temp >> 6) - 8;
 | 
			
		||||
    this->actionDelay++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GreatFairy_InitializeAnimation(Entity* this) {
 | 
			
		||||
    s32 temp;
 | 
			
		||||
    s32 temp = 11;
 | 
			
		||||
 | 
			
		||||
    this->action = 1;
 | 
			
		||||
    temp = this->type;
 | 
			
		||||
    this->type2 = temp % 11;
 | 
			
		||||
    this->type2 = this->type % temp;
 | 
			
		||||
    this->collisionLayer = 2;
 | 
			
		||||
    InitializeAnimation(this, this->type2);
 | 
			
		||||
    sub_0805E3A0(this, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -515,7 +493,7 @@ void sub_080873D0(Entity* this) {
 | 
			
		|||
        ent = GreatFairy_CreateForm(this, 8, 0);
 | 
			
		||||
        if (ent != NULL) {
 | 
			
		||||
            CopyPosition(this, ent);
 | 
			
		||||
            this->actionDelay = 0x30;
 | 
			
		||||
            this->actionDelay = 48;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -562,7 +540,6 @@ void sub_0808747C(Entity* this, ScriptExecutionContext* context) {
 | 
			
		|||
    context->condition = iVar1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
void (*const GreatFairy_Main[])(Entity*) = {
 | 
			
		||||
    GreatFairy_CallBehavior,
 | 
			
		||||
    GreatFairy_WingsCallBehavior,
 | 
			
		||||
| 
						 | 
				
			
			@ -574,82 +551,69 @@ void (*const GreatFairy_Main[])(Entity*) = {
 | 
			
		|||
    GreatFairy_BigRippleCallBehavior,
 | 
			
		||||
    GreatFairy_EnergyCallBehavior,
 | 
			
		||||
    sub_08087114,
 | 
			
		||||
    sub_08087294 
 | 
			
		||||
    sub_08087294,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_Behaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_Init,
 | 
			
		||||
    GreatFairy_DormantUpdate,
 | 
			
		||||
    GreatFairy_CreateBigRipple,
 | 
			
		||||
    GreatFairy_SpawningUpdate,
 | 
			
		||||
    GreatFairy_MiniUpdate,
 | 
			
		||||
    GreatFairy_FinalUpdate
 | 
			
		||||
    GreatFairy_Init,           GreatFairy_DormantUpdate, GreatFairy_CreateBigRipple,
 | 
			
		||||
    GreatFairy_SpawningUpdate, GreatFairy_MiniUpdate,    GreatFairy_FinalUpdate,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const s16 GreatFairy_RippleOffsets[10] = {
 | 
			
		||||
       0,   0,
 | 
			
		||||
     -32,  -8,
 | 
			
		||||
      16,  20,
 | 
			
		||||
      24, -12,
 | 
			
		||||
     -16,  24
 | 
			
		||||
    0, 0, -32, -8, 16, 20, 24, -12, -16, 24,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_WingsBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_WingsInit,
 | 
			
		||||
    GreatFairy_WingsUpdate,
 | 
			
		||||
    nullsub_116
 | 
			
		||||
    nullsub_116,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_WakeBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_WakeInit,
 | 
			
		||||
    GreatFairy_WakeUpdate
 | 
			
		||||
    GreatFairy_WakeUpdate,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_MiniBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_MiniInit,
 | 
			
		||||
    GreatFairy_MiniRisingUpdate,
 | 
			
		||||
    GreatFairy_MiniRemoveMe
 | 
			
		||||
    GreatFairy_MiniRemoveMe,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_MiniAffineBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_MiniAffineInit,
 | 
			
		||||
    GreatFairy_MiniAffineInit2,
 | 
			
		||||
    GreatFairy_MiniAffineUpdate,
 | 
			
		||||
    DeleteEntity
 | 
			
		||||
    DeleteEntity,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_DropletBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_DropletInit,
 | 
			
		||||
    GreatFairy_DropletUpdate
 | 
			
		||||
    GreatFairy_DropletUpdate,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_RippleBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_RippleInit,
 | 
			
		||||
    GreatFairy_RippleUpdate
 | 
			
		||||
    GreatFairy_RippleUpdate,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_BigRippleBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_BigRippleInit,
 | 
			
		||||
    GreatFairy_BigRippleUpdate
 | 
			
		||||
    GreatFairy_BigRippleUpdate,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_EnergyBehaviors[])(Entity*) = {
 | 
			
		||||
    GreatFairy_EnergyInit,
 | 
			
		||||
    GreatFairy_EnergyUpdate
 | 
			
		||||
    GreatFairy_EnergyUpdate,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_Form1Behaviors[])(Entity*) = {
 | 
			
		||||
    sub_08087150,
 | 
			
		||||
    nullsub_516,
 | 
			
		||||
    sub_080871A8,
 | 
			
		||||
    sub_080871D0
 | 
			
		||||
    sub_080871D0,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void (*const GreatFairy_Form2Behaviors[])(Entity*) = {
 | 
			
		||||
    sub_08087150,
 | 
			
		||||
    sub_080871F8,
 | 
			
		||||
    sub_08087240,
 | 
			
		||||
    sub_08087264,
 | 
			
		||||
    sub_0808727C
 | 
			
		||||
    sub_08087150, sub_080871F8, sub_08087240, sub_08087264, sub_0808727C,
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
 | 
			
		||||
void Object7E(Entity* this) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
#include "flags.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
#include "coord.h"
 | 
			
		||||
 | 
			
		||||
extern void sub_080A0640(Entity*);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
#include "entity.h"
 | 
			
		||||
#include "player.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
#include "readKeyInput.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "area.h"
 | 
			
		||||
#include "save.h"
 | 
			
		||||
#include "game.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,50 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "position.h"
 | 
			
		||||
 | 
			
		||||
extern u8 gUnk_08114F78[];
 | 
			
		||||
extern u8 gUnk_08114F80[];
 | 
			
		||||
 | 
			
		||||
void CopyPosition(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    PositionRelative(param_1, param_2, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PositionEntityOnTop(Entity* ent, Entity* ent2) {
 | 
			
		||||
    PositionRelative(ent, ent2, 0, 0);
 | 
			
		||||
    ResolveEntityOnTop(ent, ent2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PositionRelative(Entity* source, Entity* target, s32 offsetX, s32 offsetY) { // r0, r1, r2, r3
 | 
			
		||||
    s32 x;
 | 
			
		||||
    s32 y;
 | 
			
		||||
 | 
			
		||||
    x = source->x.WORD;
 | 
			
		||||
    target->x.WORD = x + offsetX;
 | 
			
		||||
 | 
			
		||||
    y = source->y.WORD;
 | 
			
		||||
    target->y.WORD = y + offsetY;
 | 
			
		||||
 | 
			
		||||
    target->height = source->height; // ldr
 | 
			
		||||
    target->collisionLayer = source->collisionLayer;
 | 
			
		||||
    UpdateSpriteForCollisionLayer(target);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CopyPositionAndSpriteOffset(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    param_2->spriteOffsetX = param_1->spriteOffsetX;
 | 
			
		||||
    param_2->spriteOffsetY = param_1->spriteOffsetY;
 | 
			
		||||
    PositionRelative(param_1, param_2, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0806FA90(Entity* param_1, Entity* param_2, s32 offsetX, s32 offsetY) {
 | 
			
		||||
    param_2->spriteOffsetX = param_1->spriteOffsetX;
 | 
			
		||||
    param_2->spriteOffsetY = param_1->spriteOffsetY;
 | 
			
		||||
    PositionRelative(param_1, param_2, offsetX * 64 * 32 * 32, offsetY * 64 * 32 * 32);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ResolveEntityOnTop(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    param_2->spritePriority.b0 = gUnk_08114F78[param_1->spritePriority.b0];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0806FAD8(Entity* param_1, Entity* param_2) {
 | 
			
		||||
    param_2->spritePriority.b0 = gUnk_08114F80[param_1->spritePriority.b0];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
#include "script.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "save.h"
 | 
			
		||||
#include "random.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,17 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
 | 
			
		||||
extern const u8 gUnk_020176E0[];
 | 
			
		||||
 | 
			
		||||
extern void sub_0807C960();
 | 
			
		||||
extern void LoadPalettes(const u8*, int, int);
 | 
			
		||||
 | 
			
		||||
void sub_0807C9D8(u32* a1) {
 | 
			
		||||
    u32* v1; // r5@1
 | 
			
		||||
 | 
			
		||||
    v1 = a1;
 | 
			
		||||
    sub_0807C960(0x6004000, *a1);
 | 
			
		||||
    sub_0807C960(0x6000000, v1[1]);
 | 
			
		||||
    sub_0807C960(0x6008000, v1[2]);
 | 
			
		||||
    sub_0807C960(gUnk_020176E0, v1[3]);
 | 
			
		||||
    LoadPalettes(gUnk_020176E0, 2, 13);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
 | 
			
		||||
extern void sub_080186EC();
 | 
			
		||||
extern u32* GetCurrentRoomProperty(u8);
 | 
			
		||||
extern void sub_0804B16C();
 | 
			
		||||
 | 
			
		||||
void sub_0804AFF4(void) {
 | 
			
		||||
    void (*func)();
 | 
			
		||||
 | 
			
		||||
    sub_080186EC();
 | 
			
		||||
    func = (void (*)())GetCurrentRoomProperty(5);
 | 
			
		||||
    if (func) {
 | 
			
		||||
        func();
 | 
			
		||||
    }
 | 
			
		||||
    func = (void (*)())GetCurrentRoomProperty(7);
 | 
			
		||||
    if (func) {
 | 
			
		||||
        func();
 | 
			
		||||
    }
 | 
			
		||||
    sub_0804B16C();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
 | 
			
		||||
extern u32 gUnk_020354C0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
 | 
			
		||||
s32 sub_0806F9EC(s16 unk_1, s16 unk_2) {
 | 
			
		||||
    int temp;
 | 
			
		||||
 | 
			
		||||
    temp = (s32)unk_1 * (s32)unk_2;
 | 
			
		||||
    if (temp < 0) {
 | 
			
		||||
        temp = temp + 255;
 | 
			
		||||
    }
 | 
			
		||||
    return (temp << 8) >> 16;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
 | 
			
		||||
s16 sub_0806FA04(s16 param_1, s16 param_2) {
 | 
			
		||||
    s16 sVar1;
 | 
			
		||||
    s32 iVar2;
 | 
			
		||||
 | 
			
		||||
    if (param_2 != 0) {
 | 
			
		||||
        sVar1 = ((param_1 << 16) >> 8) / param_2;
 | 
			
		||||
        iVar2 = sVar1;
 | 
			
		||||
    } else {
 | 
			
		||||
        iVar2 = 0;
 | 
			
		||||
    }
 | 
			
		||||
    return iVar2;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
extern void sub_08000152(u32);
 | 
			
		||||
extern void sub_0807B778(u32, u32);
 | 
			
		||||
 | 
			
		||||
void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) {
 | 
			
		||||
    if (param_1 == 53) {
 | 
			
		||||
        sub_08000152(53);
 | 
			
		||||
        sub_0807B778(param_2, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + 1, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + -1, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + 64, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + -64, param_3);
 | 
			
		||||
    } else {
 | 
			
		||||
        SetTileType(param_1, param_2, param_3);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,22 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
extern void sub_08000152(u32);
 | 
			
		||||
extern void sub_0807B778(u32, u32);
 | 
			
		||||
 | 
			
		||||
void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) {
 | 
			
		||||
    if (param_1 == 53) {
 | 
			
		||||
        sub_08000152(53);
 | 
			
		||||
        sub_0807B778(param_2, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + 1, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + -1, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + 64, param_3);
 | 
			
		||||
        sub_0807B778(param_2 + -64, param_3);
 | 
			
		||||
    } else {
 | 
			
		||||
        SetTileType(param_1, param_2, param_3);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0807B820(u32 param_1) {
 | 
			
		||||
    SetTileType(620, param_1 + -65, 1);
 | 
			
		||||
    SetTileType(627, param_1 + -65, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -12,3 +28,28 @@ void sub_0807B820(u32 param_1) {
 | 
			
		|||
    SetTileType(624, param_1, 1);
 | 
			
		||||
    SetTileType(626, param_1 + 1, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0807B8A8(u32 param_1) {
 | 
			
		||||
    SetTileType(636, param_1 + -65, 1);
 | 
			
		||||
    SetTileType(643, param_1 + -65, 2);
 | 
			
		||||
    SetTileType(637, param_1 + -64, 1);
 | 
			
		||||
    SetTileType(644, param_1 + -64, 2);
 | 
			
		||||
    SetTileType(638, param_1 + -63, 1);
 | 
			
		||||
    SetTileType(645, param_1 + -63, 2);
 | 
			
		||||
    SetTileType(639, param_1 + -1, 1);
 | 
			
		||||
    SetTileType(640, param_1, 1);
 | 
			
		||||
    SetTileType(642, param_1 + 1, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void sub_0807B930(int param_1) {
 | 
			
		||||
    SetTileType(652, param_1 + -65, 1);
 | 
			
		||||
    SetTileType(659, param_1 + -65, 2);
 | 
			
		||||
    SetTileType(653, param_1 + -64, 1);
 | 
			
		||||
    SetTileType(660, param_1 + -64, 2);
 | 
			
		||||
    SetTileType(654, param_1 + -63, 1);
 | 
			
		||||
    SetTileType(661, param_1 + -63, 2);
 | 
			
		||||
    SetTileType(655, param_1 + -1, 1);
 | 
			
		||||
    SetTileType(656, param_1, 1);
 | 
			
		||||
    SetTileType(658, param_1 + 1, 1);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
void sub_0807B8A8(u32 param_1) {
 | 
			
		||||
    SetTileType(636, param_1 + -65, 1);
 | 
			
		||||
    SetTileType(643, param_1 + -65, 2);
 | 
			
		||||
    SetTileType(637, param_1 + -64, 1);
 | 
			
		||||
    SetTileType(644, param_1 + -64, 2);
 | 
			
		||||
    SetTileType(638, param_1 + -63, 1);
 | 
			
		||||
    SetTileType(645, param_1 + -63, 2);
 | 
			
		||||
    SetTileType(639, param_1 + -1, 1);
 | 
			
		||||
    SetTileType(640, param_1, 1);
 | 
			
		||||
    SetTileType(642, param_1 + 1, 1);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +0,0 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
 | 
			
		||||
void sub_0807B930(int param_1) {
 | 
			
		||||
    SetTileType(652, param_1 + -65, 1);
 | 
			
		||||
    SetTileType(659, param_1 + -65, 2);
 | 
			
		||||
    SetTileType(653, param_1 + -64, 1);
 | 
			
		||||
    SetTileType(660, param_1 + -64, 2);
 | 
			
		||||
    SetTileType(654, param_1 + -63, 1);
 | 
			
		||||
    SetTileType(661, param_1 + -63, 2);
 | 
			
		||||
    SetTileType(655, param_1 + -1, 1);
 | 
			
		||||
    SetTileType(656, param_1, 1);
 | 
			
		||||
    SetTileType(658, param_1 + 1, 1);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +1,14 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
 | 
			
		||||
extern void sub_0807C960();
 | 
			
		||||
extern void LoadPalettes(const u8*, s32, s32);
 | 
			
		||||
 | 
			
		||||
extern u16 gMetatilesBottom[];
 | 
			
		||||
extern u16 gMetatilesTop[];
 | 
			
		||||
extern u8 gUnk_08324AE4;
 | 
			
		||||
 | 
			
		||||
extern const u8 gUnk_020176E0[];
 | 
			
		||||
 | 
			
		||||
void sub_0807C960(void* dest, u32 offset) {
 | 
			
		||||
    void* src;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -24,3 +28,14 @@ void sub_0807C998(u32* a1) {
 | 
			
		|||
    sub_0807C960(gMetatilesTop, a1[2]);
 | 
			
		||||
    sub_0807C960(gMetatilesTop - 0x1000, a1[3]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0807C9D8(u32* a1) {
 | 
			
		||||
    u32* v1; // r5@1
 | 
			
		||||
 | 
			
		||||
    v1 = a1;
 | 
			
		||||
    sub_0807C960((u8*)0x6004000, *a1);
 | 
			
		||||
    sub_0807C960((u8*)0x6000000, v1[1]);
 | 
			
		||||
    sub_0807C960((u8*)0x6008000, v1[2]);
 | 
			
		||||
    sub_0807C960((u8*)gUnk_020176E0, v1[3]);
 | 
			
		||||
    LoadPalettes(gUnk_020176E0, 2, 13);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "room.h"
 | 
			
		||||
#include "entity.h"
 | 
			
		||||
#include "dma.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "functions.h"
 | 
			
		||||
#include "textbox.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -14,11 +14,14 @@ u32 sub_080565B4(void);
 | 
			
		|||
u32 sub_080565F8(void);
 | 
			
		||||
u32 sub_08056640(void);
 | 
			
		||||
 | 
			
		||||
u32 (*const gUnk_08107BC8[])(void) = { sub_080564DC, sub_080564EC, sub_08056654,
 | 
			
		||||
                                       sub_080565B4, sub_080565F8, sub_08056640 };
 | 
			
		||||
u32 (*const gUnk_08107BC8[])(void) = {
 | 
			
		||||
    sub_080564DC, sub_080564EC, sub_08056654, sub_080565B4, sub_080565F8, sub_08056640,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern u8 gUnk_020227DC, gUnk_020227E8, gUnk_020227F0, gUnk_020227F8, gUnk_02022800;
 | 
			
		||||
u8* const gUnk_08107BE0[] = { &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800 };
 | 
			
		||||
u8* const gUnk_08107BE0[] = {
 | 
			
		||||
    &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void sub_08056684(struct_02022780*);
 | 
			
		||||
void sub_080566B8(struct_02022780*);
 | 
			
		||||
| 
						 | 
				
			
			@ -27,8 +30,9 @@ void sub_08056B1C(struct_02022780*);
 | 
			
		|||
void sub_08056B7C(struct_02022780*);
 | 
			
		||||
void sub_080569D4(struct_02022780*);
 | 
			
		||||
 | 
			
		||||
void (*const gUnk_08107BF4[])(struct_02022780*) = { sub_08056684, sub_080566B8, sub_08056BA0,
 | 
			
		||||
                                                    sub_08056B1C, sub_08056B7C, sub_080569D4 };
 | 
			
		||||
void (*const gUnk_08107BF4[])(struct_02022780*) = {
 | 
			
		||||
    sub_08056684, sub_080566B8, sub_08056BA0, sub_08056B1C, sub_08056B7C, sub_080569D4,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern u32 gUnk_02036A40;
 | 
			
		||||
extern u32 gUnk_02036A38;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,204 @@
 | 
			
		|||
#include "global.h"
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
#include "structures.h"
 | 
			
		||||
#include "screen.h"
 | 
			
		||||
 | 
			
		||||
static void StoreKeyInput(Input* input, u32 keyInput);
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    u16 paletteId;
 | 
			
		||||
    u8 destPaletteNum;
 | 
			
		||||
    u8 numPalettes;
 | 
			
		||||
} PaletteGroup;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    union {
 | 
			
		||||
        int raw;
 | 
			
		||||
        struct {
 | 
			
		||||
            u8 filler0[0x3];
 | 
			
		||||
            u8 unk3;
 | 
			
		||||
        } bytes;
 | 
			
		||||
    } unk0;
 | 
			
		||||
    u32 dest;
 | 
			
		||||
    u32 unk8;
 | 
			
		||||
} GfxItem;
 | 
			
		||||
 | 
			
		||||
extern const PaletteGroup* gPaletteGroups[];
 | 
			
		||||
extern const u8 gGlobalGfxAndPalettes[];
 | 
			
		||||
extern u32 gUsedPalettes;
 | 
			
		||||
extern u16 gPaletteBuffer[];
 | 
			
		||||
extern const GfxItem* gUnk_08100AA8[];
 | 
			
		||||
 | 
			
		||||
void MemFill16(u32 value, void* dest, u32 size) {
 | 
			
		||||
    DmaFill16(3, value, dest, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MemFill32(u32 value, void* dest, u32 size) {
 | 
			
		||||
    DmaFill32(3, value, dest, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MemClear(void* dest, u32 size) {
 | 
			
		||||
    u32 zero = 0;
 | 
			
		||||
 | 
			
		||||
    switch (((u32)dest | size) & 3) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            MemFill32(0, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
            MemFill16(0, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            do {
 | 
			
		||||
                *(u8*)dest = zero;
 | 
			
		||||
                dest++;
 | 
			
		||||
                size--;
 | 
			
		||||
            } while (size != 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MemCopy(const void* src, void* dest, u32 size) {
 | 
			
		||||
    switch (((u32)src | (u32)dest | size) & 3) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            DmaCopy32(3, src, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
            DmaCopy16(3, src, dest, size);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            do {
 | 
			
		||||
                *(u8*)dest = *(u8*)src;
 | 
			
		||||
                src++;
 | 
			
		||||
                dest++;
 | 
			
		||||
            } while (--size);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ReadKeyInput(void) {
 | 
			
		||||
    u32 keyInput = ~REG_KEYINPUT & KEYS_MASK;
 | 
			
		||||
    StoreKeyInput(&gInput, keyInput);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void StoreKeyInput(Input* input, u32 keyInput) {
 | 
			
		||||
    u32 heldKeys = input->heldKeys;
 | 
			
		||||
    u32 difference = keyInput & ~heldKeys;
 | 
			
		||||
    input->newKeys = difference;
 | 
			
		||||
    if (keyInput == heldKeys) {
 | 
			
		||||
        if (--input->unk7 == 0) {
 | 
			
		||||
            input->unk7 = 4;
 | 
			
		||||
            input->unk4 = keyInput;
 | 
			
		||||
        } else {
 | 
			
		||||
            input->unk4 = 0;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        input->unk7 = 0x14;
 | 
			
		||||
        input->unk4 = difference;
 | 
			
		||||
    }
 | 
			
		||||
    input->heldKeys = keyInput;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LoadPaletteGroup(u32 group) {
 | 
			
		||||
    const PaletteGroup* paletteGroup = gPaletteGroups[group];
 | 
			
		||||
    while (1) {
 | 
			
		||||
        u32 destPaletteNum = paletteGroup->destPaletteNum;
 | 
			
		||||
        u32 numPalettes = paletteGroup->numPalettes & 0xF;
 | 
			
		||||
        if (numPalettes == 0) {
 | 
			
		||||
            numPalettes = 16;
 | 
			
		||||
        }
 | 
			
		||||
        LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes);
 | 
			
		||||
        if ((paletteGroup->numPalettes & 0x80) == 0) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        paletteGroup++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LoadPalettes(const u8* src, int destPaletteNum, int numPalettes) {
 | 
			
		||||
    u16* dest;
 | 
			
		||||
    u32 size = numPalettes * 32;
 | 
			
		||||
    u32 usedPalettesMask = 1 << destPaletteNum;
 | 
			
		||||
    while (--numPalettes > 0) {
 | 
			
		||||
        usedPalettesMask |= (usedPalettesMask << 1);
 | 
			
		||||
    }
 | 
			
		||||
    gUsedPalettes |= usedPalettesMask;
 | 
			
		||||
    dest = &gPaletteBuffer[destPaletteNum * 16];
 | 
			
		||||
    DmaCopy32(3, src, dest, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0801D79C(u32 colorIndex, u32 color) {
 | 
			
		||||
    gPaletteBuffer[colorIndex] = color;
 | 
			
		||||
    gUsedPalettes |= 1 << (colorIndex / 16);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sub_0801D7BC(u32 color, u32 arg1) {
 | 
			
		||||
    if (arg1) {
 | 
			
		||||
        gScreen.lcd.unk6 = 0xE0FF;
 | 
			
		||||
    } else {
 | 
			
		||||
        gScreen.lcd.unk6 = 0xFFFF;
 | 
			
		||||
    }
 | 
			
		||||
    sub_0801D79C(0, color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LoadGfxGroup(u32 group) {
 | 
			
		||||
    u32 terminator;
 | 
			
		||||
    u32 dmaCtrl;
 | 
			
		||||
    int gfxOffset;
 | 
			
		||||
    const u8* src;
 | 
			
		||||
    u32 dest;
 | 
			
		||||
    int size;
 | 
			
		||||
    const GfxItem* gfxItem = gUnk_08100AA8[group];
 | 
			
		||||
    while (1) {
 | 
			
		||||
        u32 loadGfx = FALSE;
 | 
			
		||||
        u32 ctrl = gfxItem->unk0.bytes.unk3;
 | 
			
		||||
        ctrl &= 0xF;
 | 
			
		||||
        switch (ctrl) {
 | 
			
		||||
            case 0x7:
 | 
			
		||||
                loadGfx = TRUE;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xD:
 | 
			
		||||
                return;
 | 
			
		||||
            case 0xE:
 | 
			
		||||
                if (gUnk_02000000->gameLanguage != 0 && gUnk_02000000->gameLanguage != 1) {
 | 
			
		||||
                    loadGfx = TRUE;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xF:
 | 
			
		||||
                if (gUnk_02000000->gameLanguage != 0) {
 | 
			
		||||
                    loadGfx = TRUE;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                if (ctrl == gUnk_02000000->gameLanguage) {
 | 
			
		||||
                    loadGfx = TRUE;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (loadGfx) {
 | 
			
		||||
            gfxOffset = gfxItem->unk0.raw & 0xFFFFFF;
 | 
			
		||||
            src = &gGlobalGfxAndPalettes[gfxOffset];
 | 
			
		||||
            dest = gfxItem->dest;
 | 
			
		||||
            size = gfxItem->unk8;
 | 
			
		||||
            dmaCtrl = 0x80000000;
 | 
			
		||||
            if (size < 0) {
 | 
			
		||||
                if (dest >= VRAM) {
 | 
			
		||||
                    LZ77UnCompVram(src, (void*)dest);
 | 
			
		||||
                } else {
 | 
			
		||||
                    LZ77UnCompWram(src, (void*)dest);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        terminator = gfxItem->unk0.bytes.unk3;
 | 
			
		||||
        terminator &= 0x80;
 | 
			
		||||
        gfxItem++;
 | 
			
		||||
        if (!terminator) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* TODO:
 | 
			
		||||
    clear OAM, zMalloc, etc.
 | 
			
		||||
*/
 | 
			
		||||
		Loading…
	
		Reference in New Issue