mirror of https://github.com/zeldaret/tmc.git
				
				
				
			
		
			
				
	
	
		
			1040 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			1040 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| 	.include "asm/macros.inc"
 | |
| 	.include "constants/constants.inc"
 | |
| 
 | |
| 	.syntax unified
 | |
| 
 | |
| 	.text
 | |
| 
 | |
| 	thumb_func_start sub_080A2A84
 | |
| sub_080A2A84: @ 0x080A2A84
 | |
| 	push {r4, r5, r6, r7, lr}
 | |
| 	adds r5, r1, #0
 | |
| 	bl CreateWaterTrace
 | |
| 	adds r6, r0, #0
 | |
| 	cmp r6, #0
 | |
| 	beq _080A2AD2
 | |
| 	bl Random
 | |
| 	adds r4, r0, #0
 | |
| 	adds r5, #1
 | |
| 	adds r1, r5, #0
 | |
| 	bl __modsi3
 | |
| 	adds r1, r0, #0
 | |
| 	lsrs r4, r4, #8
 | |
| 	movs r7, #1
 | |
| 	adds r0, r4, #0
 | |
| 	ands r0, r7
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2AB0
 | |
| 	rsbs r1, r1, #0
 | |
| _080A2AB0:
 | |
| 	ldrh r0, [r6, #0x2e]
 | |
| 	adds r0, r0, r1
 | |
| 	strh r0, [r6, #0x2e]
 | |
| 	lsrs r4, r4, #8
 | |
| 	adds r0, r4, #0
 | |
| 	adds r1, r5, #0
 | |
| 	bl __modsi3
 | |
| 	adds r1, r0, #0
 | |
| 	lsrs r4, r4, #8
 | |
| 	ands r4, r7
 | |
| 	cmp r4, #0
 | |
| 	beq _080A2ACC
 | |
| 	rsbs r1, r1, #0
 | |
| _080A2ACC:
 | |
| 	ldrh r0, [r6, #0x32]
 | |
| 	adds r0, r0, r1
 | |
| 	strh r0, [r6, #0x32]
 | |
| _080A2AD2:
 | |
| 	pop {r4, r5, r6, r7, pc}
 | |
| 
 | |
| 	thumb_func_start sub_080A2AD4
 | |
| sub_080A2AD4: @ 0x080A2AD4
 | |
| 	push {lr}
 | |
| 	movs r1, #0x21
 | |
| 	movs r2, #0
 | |
| 	bl CreateFx
 | |
| 	adds r2, r0, #0
 | |
| 	cmp r2, #0
 | |
| 	beq _080A2AF0
 | |
| 	adds r3, r2, #0
 | |
| 	adds r3, #0x29
 | |
| 	ldrb r0, [r3]
 | |
| 	movs r1, #7
 | |
| 	orrs r0, r1
 | |
| 	strb r0, [r3]
 | |
| _080A2AF0:
 | |
| 	adds r0, r2, #0
 | |
| 	pop {pc}
 | |
| 
 | |
| 	thumb_func_start sub_080A2AF4
 | |
| sub_080A2AF4: @ 0x080A2AF4
 | |
| 	push {r4, r5, r6, r7, lr}
 | |
| 	mov r7, r8
 | |
| 	push {r7}
 | |
| 	adds r5, r1, #0
 | |
| 	adds r4, r2, #0
 | |
| 	bl sub_080A2AD4
 | |
| 	adds r6, r0, #0
 | |
| 	cmp r6, #0
 | |
| 	beq _080A2B74
 | |
| 	bl Random
 | |
| 	adds r7, r0, #0
 | |
| 	subs r1, r4, r5
 | |
| 	adds r1, #1
 | |
| 	bl __modsi3
 | |
| 	adds r4, r0, #0
 | |
| 	adds r4, r4, r5
 | |
| 	asrs r7, r7, #0x10
 | |
| 	movs r0, #0xff
 | |
| 	ands r7, r0
 | |
| 	ldr r0, _080A2B7C @ =gSineTable
 | |
| 	mov r8, r0
 | |
| 	lsls r0, r7, #1
 | |
| 	add r0, r8
 | |
| 	movs r1, #0
 | |
| 	ldrsh r0, [r0, r1]
 | |
| 	lsls r4, r4, #0x18
 | |
| 	asrs r4, r4, #0x10
 | |
| 	adds r1, r4, #0
 | |
| 	bl sub_0806F9EC
 | |
| 	lsls r0, r0, #0x10
 | |
| 	asrs r0, r0, #0x10
 | |
| 	movs r5, #0x80
 | |
| 	lsls r5, r5, #1
 | |
| 	adds r1, r5, #0
 | |
| 	bl sub_0806FA04
 | |
| 	lsls r0, r0, #0x10
 | |
| 	asrs r0, r0, #8
 | |
| 	ldr r1, [r6, #0x2c]
 | |
| 	adds r1, r1, r0
 | |
| 	str r1, [r6, #0x2c]
 | |
| 	adds r0, r7, #0
 | |
| 	adds r0, #0x40
 | |
| 	lsls r0, r0, #1
 | |
| 	add r0, r8
 | |
| 	movs r1, #0
 | |
| 	ldrsh r0, [r0, r1]
 | |
| 	adds r1, r4, #0
 | |
| 	bl sub_0806F9EC
 | |
| 	lsls r0, r0, #0x10
 | |
| 	asrs r0, r0, #0x10
 | |
| 	adds r1, r5, #0
 | |
| 	bl sub_0806FA04
 | |
| 	lsls r0, r0, #0x10
 | |
| 	asrs r0, r0, #8
 | |
| 	ldr r1, [r6, #0x30]
 | |
| 	subs r1, r1, r0
 | |
| 	str r1, [r6, #0x30]
 | |
| _080A2B74:
 | |
| 	pop {r3}
 | |
| 	mov r8, r3
 | |
| 	pop {r4, r5, r6, r7, pc}
 | |
| 	.align 2, 0
 | |
| _080A2B7C: .4byte gSineTable
 | |
| 
 | |
| 	thumb_func_start CreateSparkle
 | |
| CreateSparkle: @ 0x080A2B80
 | |
| 	push {r4, r5, lr}
 | |
| 	adds r5, r0, #0
 | |
| 	movs r0, #0xf
 | |
| 	movs r1, #0x26
 | |
| 	movs r2, #0
 | |
| 	bl CreateObject
 | |
| 	adds r4, r0, #0
 | |
| 	cmp r4, #0
 | |
| 	beq _080A2BE0
 | |
| 	bl Random
 | |
| 	adds r3, r0, #0
 | |
| 	movs r1, #0xf
 | |
| 	adds r2, r3, #0
 | |
| 	ands r2, r1
 | |
| 	movs r0, #0x80
 | |
| 	ands r0, r3
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2BAA
 | |
| 	rsbs r2, r2, #0
 | |
| _080A2BAA:
 | |
| 	lsrs r0, r3, #8
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #4
 | |
| 	ble _080A2BB4
 | |
| 	rsbs r0, r0, #0
 | |
| _080A2BB4:
 | |
| 	lsls r2, r2, #0x10
 | |
| 	lsls r3, r0, #0x10
 | |
| 	adds r0, r5, #0
 | |
| 	adds r1, r4, #0
 | |
| 	bl PositionRelative
 | |
| 	adds r0, r5, #0
 | |
| 	adds r1, r4, #0
 | |
| 	bl ResolveEntityOnTop
 | |
| 	adds r0, r5, #0
 | |
| 	adds r0, #0x62
 | |
| 	ldrb r0, [r0]
 | |
| 	adds r1, r4, #0
 | |
| 	adds r1, #0x62
 | |
| 	strb r0, [r1]
 | |
| 	adds r0, r5, #0
 | |
| 	adds r0, #0x63
 | |
| 	ldrb r1, [r0]
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x63
 | |
| 	strb r1, [r0]
 | |
| _080A2BE0:
 | |
| 	pop {r4, r5, pc}
 | |
| 	.align 2, 0
 | |
| 
 | |
| 	thumb_func_start sub_080A2BE4
 | |
| sub_080A2BE4: @ 0x080A2BE4
 | |
| 	push {r4, r5, r6, lr}
 | |
| 	adds r4, r0, #0
 | |
| 	adds r6, r1, #0
 | |
| 	ldrb r1, [r4, #0x15]
 | |
| 	movs r0, #0x80
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #0
 | |
| 	bne _080A2CBA
 | |
| 	lsrs r0, r1, #3
 | |
| 	cmp r0, #1
 | |
| 	beq _080A2C3C
 | |
| 	cmp r0, #1
 | |
| 	bgt _080A2C04
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2C0E
 | |
| 	b _080A2CBA
 | |
| _080A2C04:
 | |
| 	cmp r0, #2
 | |
| 	beq _080A2C68
 | |
| 	cmp r0, #3
 | |
| 	beq _080A2C94
 | |
| 	b _080A2CBA
 | |
| _080A2C0E:
 | |
| 	ldrh r5, [r4, #0x32]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0806F69C
 | |
| 	ldrh r1, [r4, #0x32]
 | |
| 	lsls r0, r5, #0x10
 | |
| 	asrs r0, r0, #0x10
 | |
| 	subs r0, r0, r1
 | |
| 	lsls r0, r0, #0x10
 | |
| 	asrs r1, r0, #0x10
 | |
| 	cmp r1, #0
 | |
| 	beq _080A2CBA
 | |
| 	cmp r6, #0
 | |
| 	beq _080A2CBA
 | |
| 	ldr r0, _080A2C38 @ =gPlayerEntity
 | |
| 	lsls r1, r1, #8
 | |
| 	movs r2, #0
 | |
| 	bl sub_080044AE
 | |
| 	b _080A2CBA
 | |
| 	.align 2, 0
 | |
| _080A2C38: .4byte gPlayerEntity
 | |
| _080A2C3C:
 | |
| 	ldrh r5, [r4, #0x2e]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0806F69C
 | |
| 	ldrh r1, [r4, #0x2e]
 | |
| 	lsls r0, r5, #0x10
 | |
| 	asrs r0, r0, #0x10
 | |
| 	subs r1, r1, r0
 | |
| 	lsls r1, r1, #0x10
 | |
| 	asrs r1, r1, #0x10
 | |
| 	cmp r1, #0
 | |
| 	beq _080A2CBA
 | |
| 	cmp r6, #0
 | |
| 	beq _080A2CBA
 | |
| 	ldr r0, _080A2C64 @ =gPlayerEntity
 | |
| 	lsls r1, r1, #8
 | |
| 	movs r2, #8
 | |
| 	bl sub_080044AE
 | |
| 	b _080A2CBA
 | |
| 	.align 2, 0
 | |
| _080A2C64: .4byte gPlayerEntity
 | |
| _080A2C68:
 | |
| 	ldrh r5, [r4, #0x32]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0806F69C
 | |
| 	ldrh r1, [r4, #0x32]
 | |
| 	lsls r0, r5, #0x10
 | |
| 	asrs r0, r0, #0x10
 | |
| 	subs r1, r1, r0
 | |
| 	lsls r1, r1, #0x10
 | |
| 	asrs r1, r1, #0x10
 | |
| 	cmp r1, #0
 | |
| 	beq _080A2CBA
 | |
| 	cmp r6, #0
 | |
| 	beq _080A2CBA
 | |
| 	ldr r0, _080A2C90 @ =gPlayerEntity
 | |
| 	lsls r1, r1, #8
 | |
| 	movs r2, #0x10
 | |
| 	bl sub_080044AE
 | |
| 	b _080A2CBA
 | |
| 	.align 2, 0
 | |
| _080A2C90: .4byte gPlayerEntity
 | |
| _080A2C94:
 | |
| 	ldrh r5, [r4, #0x2e]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0806F69C
 | |
| 	ldrh r1, [r4, #0x2e]
 | |
| 	lsls r0, r5, #0x10
 | |
| 	asrs r0, r0, #0x10
 | |
| 	subs r0, r0, r1
 | |
| 	lsls r0, r0, #0x10
 | |
| 	asrs r1, r0, #0x10
 | |
| 	cmp r1, #0
 | |
| 	beq _080A2CBA
 | |
| 	cmp r6, #0
 | |
| 	beq _080A2CBA
 | |
| 	ldr r0, _080A2CBC @ =gPlayerEntity
 | |
| 	lsls r1, r1, #8
 | |
| 	movs r2, #0x18
 | |
| 	bl sub_080044AE
 | |
| _080A2CBA:
 | |
| 	pop {r4, r5, r6, pc}
 | |
| 	.align 2, 0
 | |
| _080A2CBC: .4byte gPlayerEntity
 | |
| 
 | |
| 	thumb_func_start sub_080A2CC0
 | |
| sub_080A2CC0: @ 0x080A2CC0
 | |
| 	push {r4, r5, lr}
 | |
| 	adds r4, r0, #0
 | |
| 	adds r5, r1, #0
 | |
| 	ldr r3, [r5]
 | |
| 	cmp r3, #0
 | |
| 	beq _080A2CF8
 | |
| 	ldrh r0, [r3]
 | |
| 	cmp r0, #0xfe
 | |
| 	bne _080A2CDC
 | |
| 	ldrh r1, [r3, #2]
 | |
| 	lsls r0, r1, #1
 | |
| 	adds r0, r0, r1
 | |
| 	lsls r0, r0, #1
 | |
| 	subs r3, r3, r0
 | |
| _080A2CDC:
 | |
| 	ldrh r0, [r3]
 | |
| 	cmp r0, #0xff
 | |
| 	bne _080A2CEA
 | |
| 	movs r0, #0xff
 | |
| 	strb r0, [r4, #0x15]
 | |
| 	movs r0, #0
 | |
| 	b _080A2CEE
 | |
| _080A2CEA:
 | |
| 	strb r0, [r4, #0x15]
 | |
| 	ldrh r0, [r3, #4]
 | |
| _080A2CEE:
 | |
| 	strh r0, [r4, #0x24]
 | |
| 	ldrh r0, [r3, #2]
 | |
| 	strh r0, [r2]
 | |
| 	adds r0, r3, #6
 | |
| 	str r0, [r5]
 | |
| _080A2CF8:
 | |
| 	pop {r4, r5, pc}
 | |
| 	.align 2, 0
 | |
| 
 | |
| 	thumb_func_start CreateSpeechBubbleExclamationMark
 | |
| CreateSpeechBubbleExclamationMark: @ 0x080A2CFC
 | |
| 	push {r4, lr}
 | |
| 	adds r4, r1, #0
 | |
| 	adds r3, r2, #0
 | |
| 	movs r1, #0
 | |
| 	adds r2, r4, #0
 | |
| 	bl CreateSpeechBubble
 | |
| 	pop {r4, pc}
 | |
| 
 | |
| 	thumb_func_start CreateSpeechBubbleQuestionMark
 | |
| CreateSpeechBubbleQuestionMark: @ 0x080A2D0C
 | |
| 	push {r4, lr}
 | |
| 	adds r4, r1, #0
 | |
| 	adds r3, r2, #0
 | |
| 	movs r1, #1
 | |
| 	adds r2, r4, #0
 | |
| 	bl CreateSpeechBubble
 | |
| 	pop {r4, pc}
 | |
| 
 | |
| 	thumb_func_start CreateSpeechBubbleSleep
 | |
| CreateSpeechBubbleSleep: @ 0x080A2D1C
 | |
| 	push {r4, lr}
 | |
| 	adds r4, r1, #0
 | |
| 	adds r3, r2, #0
 | |
| 	movs r1, #2
 | |
| 	adds r2, r4, #0
 | |
| 	bl CreateSpeechBubble
 | |
| 	pop {r4, pc}
 | |
| 
 | |
| 	thumb_func_start CreateSpeechBubble
 | |
| CreateSpeechBubble: @ 0x080A2D2C
 | |
| 	push {r4, r5, r6, r7, lr}
 | |
| 	adds r5, r0, #0
 | |
| 	adds r4, r1, #0
 | |
| 	adds r6, r2, #0
 | |
| 	adds r7, r3, #0
 | |
| 	movs r0, #0x56
 | |
| 	movs r1, #0
 | |
| 	adds r2, r4, #0
 | |
| 	bl CreateObject
 | |
| 	adds r4, r0, #0
 | |
| 	cmp r4, #0
 | |
| 	beq _080A2D6E
 | |
| 	adds r0, r5, #0
 | |
| 	adds r1, r4, #0
 | |
| 	bl CopyPosition
 | |
| 	adds r0, r5, #0
 | |
| 	adds r1, r4, #0
 | |
| 	bl ResolveEntityOnTop
 | |
| 	str r5, [r4, #0x50]
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x62
 | |
| 	strb r6, [r0]
 | |
| 	adds r0, #1
 | |
| 	strb r7, [r0]
 | |
| 	ldrb r1, [r5, #0x11]
 | |
| 	lsls r1, r1, #0x1c
 | |
| 	lsrs r1, r1, #0x1c
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0805E3A0
 | |
| _080A2D6E:
 | |
| 	adds r0, r4, #0
 | |
| 	pop {r4, r5, r6, r7, pc}
 | |
| 	.align 2, 0
 | |
| 
 | |
| 	thumb_func_start sub_080A2D74
 | |
| sub_080A2D74: @ 0x080A2D74
 | |
| 	push {lr}
 | |
| 	adds r2, r0, #0
 | |
| 	ldr r0, [r2, #0x6c]
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2D82
 | |
| 	subs r0, #1
 | |
| 	str r0, [r2, #0x6c]
 | |
| _080A2D82:
 | |
| 	ldr r0, _080A2D94 @ =gUnk_081271D4
 | |
| 	ldrb r1, [r2, #0xc]
 | |
| 	lsls r1, r1, #2
 | |
| 	adds r1, r1, r0
 | |
| 	ldr r1, [r1]
 | |
| 	adds r0, r2, #0
 | |
| 	bl _call_via_r1
 | |
| 	pop {pc}
 | |
| 	.align 2, 0
 | |
| _080A2D94: .4byte gUnk_081271D4
 | |
| 
 | |
| 	thumb_func_start sub_080A2D98
 | |
| sub_080A2D98: @ 0x080A2D98
 | |
| 	push {r4, lr}
 | |
| 	adds r4, r0, #0
 | |
| 	ldr r0, _080A2DD0 @ =gPlayerState
 | |
| 	str r4, [r0, #0x2c]
 | |
| 	movs r2, #0
 | |
| 	movs r0, #1
 | |
| 	strb r0, [r4, #0xc]
 | |
| 	ldrb r1, [r4, #0x11]
 | |
| 	subs r0, #0x11
 | |
| 	ands r0, r1
 | |
| 	movs r1, #6
 | |
| 	orrs r0, r1
 | |
| 	strb r0, [r4, #0x11]
 | |
| 	movs r0, #0xff
 | |
| 	strb r0, [r4, #0x1e]
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x68
 | |
| 	ldrb r0, [r0]
 | |
| 	cmp r0, #0xe
 | |
| 	bne _080A2DD8
 | |
| 	movs r0, #0x27
 | |
| 	str r0, [r4, #0x70]
 | |
| 	ldr r1, _080A2DD4 @ =gUnk_081271DC
 | |
| 	ldrb r0, [r1, #1]
 | |
| 	str r0, [r4, #0x78]
 | |
| 	str r2, [r4, #0x74]
 | |
| 	str r1, [r4, #0x7c]
 | |
| 	b _080A2DDA
 | |
| 	.align 2, 0
 | |
| _080A2DD0: .4byte gPlayerState
 | |
| _080A2DD4: .4byte gUnk_081271DC
 | |
| _080A2DD8:
 | |
| 	str r2, [r4, #0x70]
 | |
| _080A2DDA:
 | |
| 	ldr r0, _080A2DFC @ =gPlayerEntity
 | |
| 	ldrb r1, [r0, #0x14]
 | |
| 	movs r0, #0xe
 | |
| 	ands r0, r1
 | |
| 	strb r0, [r4, #0x14]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_08079BD8
 | |
| 	adds r0, r4, #0
 | |
| 	movs r1, #1
 | |
| 	movs r2, #3
 | |
| 	bl sub_080AE008
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_080A2E00
 | |
| 	pop {r4, pc}
 | |
| 	.align 2, 0
 | |
| _080A2DFC: .4byte gPlayerEntity
 | |
| 
 | |
| 	thumb_func_start sub_080A2E00
 | |
| sub_080A2E00: @ 0x080A2E00
 | |
| 	push {r4, r5, r6, r7, lr}
 | |
| 	adds r4, r0, #0
 | |
| 	ldr r0, _080A2E90 @ =gPlayerEntity
 | |
| 	mov ip, r0
 | |
| 	mov r1, ip
 | |
| 	adds r1, #0x3d
 | |
| 	ldrb r0, [r1]
 | |
| 	lsls r0, r0, #0x18
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2E1A
 | |
| 	lsrs r0, r0, #0x18
 | |
| 	cmp r0, #0x81
 | |
| 	bne _080A2E40
 | |
| _080A2E1A:
 | |
| 	adds r5, r4, #0
 | |
| 	adds r5, #0x3d
 | |
| 	ldrb r0, [r5]
 | |
| 	movs r2, #0
 | |
| 	strb r0, [r1]
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x3e
 | |
| 	ldrb r0, [r0]
 | |
| 	mov r1, ip
 | |
| 	adds r1, #0x3e
 | |
| 	strb r0, [r1]
 | |
| 	adds r3, r4, #0
 | |
| 	adds r3, #0x42
 | |
| 	ldrb r1, [r3]
 | |
| 	mov r0, ip
 | |
| 	adds r0, #0x42
 | |
| 	strb r1, [r0]
 | |
| 	strb r2, [r3]
 | |
| 	strb r2, [r5]
 | |
| _080A2E40:
 | |
| 	ldr r0, _080A2E94 @ =gPlayerState
 | |
| 	ldrb r3, [r0, #3]
 | |
| 	adds r7, r0, #0
 | |
| 	cmp r3, #0
 | |
| 	beq _080A2F20
 | |
| 	ldr r0, [r7, #0x2c]
 | |
| 	cmp r4, r0
 | |
| 	bne _080A2F20
 | |
| 	movs r2, #0x80
 | |
| 	adds r0, r2, #0
 | |
| 	ands r0, r3
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2E9C
 | |
| 	ldr r1, _080A2E98 @ =gUnk_08127240
 | |
| 	ldrb r0, [r4, #0x14]
 | |
| 	lsrs r0, r0, #1
 | |
| 	lsls r0, r0, #2
 | |
| 	adds r0, r0, r1
 | |
| 	ldr r0, [r0]
 | |
| 	str r0, [r4, #0x48]
 | |
| 	ldr r0, _080A2E90 @ =gPlayerEntity
 | |
| 	adds r0, #0x3c
 | |
| 	ldrb r0, [r0]
 | |
| 	adds r0, #1
 | |
| 	movs r1, #0x20
 | |
| 	adds r2, r4, #0
 | |
| 	adds r2, #0x3c
 | |
| 	orrs r0, r1
 | |
| 	strb r0, [r2]
 | |
| 	ldrb r1, [r4, #0x10]
 | |
| 	movs r0, #0x80
 | |
| 	orrs r0, r1
 | |
| 	strb r0, [r4, #0x10]
 | |
| 	movs r0, #0x7f
 | |
| 	ands r0, r3
 | |
| 	strb r0, [r7, #3]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_080176E4
 | |
| 	b _080A2F30
 | |
| 	.align 2, 0
 | |
| _080A2E90: .4byte gPlayerEntity
 | |
| _080A2E94: .4byte gPlayerState
 | |
| _080A2E98: .4byte gUnk_08127240
 | |
| _080A2E9C:
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x41
 | |
| 	ldrb r1, [r0]
 | |
| 	adds r0, r2, #0
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2F30
 | |
| 	movs r0, #0x7f
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #0x42
 | |
| 	bne _080A2F06
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x68
 | |
| 	ldrb r1, [r0]
 | |
| 	adds r5, r0, #0
 | |
| 	cmp r1, #0xe
 | |
| 	bne _080A2F06
 | |
| 	movs r0, #0x40
 | |
| 	ands r0, r3
 | |
| 	lsls r0, r0, #0x18
 | |
| 	lsrs r6, r0, #0x18
 | |
| 	cmp r6, #0
 | |
| 	bne _080A2F06
 | |
| 	ldrb r3, [r5]
 | |
| 	movs r0, #0x15
 | |
| 	movs r1, #0
 | |
| 	movs r2, #0
 | |
| 	bl CreatePlayerItem
 | |
| 	adds r1, r0, #0
 | |
| 	str r1, [r4, #0x54]
 | |
| 	cmp r1, #0
 | |
| 	beq _080A2EF4
 | |
| 	movs r0, #1
 | |
| 	strb r0, [r1, #0xf]
 | |
| 	ldr r2, [r4, #0x54]
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x3e
 | |
| 	ldrb r0, [r0]
 | |
| 	movs r1, #0x10
 | |
| 	eors r0, r1
 | |
| 	strb r0, [r2, #0x15]
 | |
| 	ldr r0, [r4, #0x54]
 | |
| 	str r4, [r0, #0x50]
 | |
| _080A2EF4:
 | |
| 	ldr r1, _080A2F1C @ =gUnk_08127220
 | |
| 	ldrb r0, [r1, #1]
 | |
| 	str r0, [r4, #0x78]
 | |
| 	str r6, [r4, #0x74]
 | |
| 	str r1, [r4, #0x7c]
 | |
| 	ldrb r0, [r7, #3]
 | |
| 	movs r1, #0x40
 | |
| 	orrs r0, r1
 | |
| 	strb r0, [r7, #3]
 | |
| _080A2F06:
 | |
| 	ldr r0, [r4, #0x6c]
 | |
| 	cmp r0, #0
 | |
| 	bne _080A2F30
 | |
| 	movs r0, #0x8c
 | |
| 	lsls r0, r0, #1
 | |
| 	bl PlaySFX
 | |
| 	movs r0, #8
 | |
| 	str r0, [r4, #0x6c]
 | |
| 	b _080A2F30
 | |
| 	.align 2, 0
 | |
| _080A2F1C: .4byte gUnk_08127220
 | |
| _080A2F20:
 | |
| 	movs r1, #0
 | |
| 	strb r1, [r7, #3]
 | |
| 	ldr r0, [r7, #0x2c]
 | |
| 	cmp r0, r4
 | |
| 	bne _080A2F2C
 | |
| 	str r1, [r7, #0x2c]
 | |
| _080A2F2C:
 | |
| 	bl DeleteThisEntity
 | |
| _080A2F30:
 | |
| 	ldr r6, _080A301C @ =gPlayerEntity
 | |
| 	ldrh r0, [r6, #0x12]
 | |
| 	cmp r0, #1
 | |
| 	beq _080A2F3E
 | |
| 	cmp r0, #4
 | |
| 	beq _080A2F3E
 | |
| 	b _080A3064
 | |
| _080A2F3E:
 | |
| 	ldrb r0, [r6, #0x1e]
 | |
| 	subs r0, #0x25
 | |
| 	lsls r0, r0, #0x18
 | |
| 	lsrs r0, r0, #0x18
 | |
| 	cmp r0, #0x3e
 | |
| 	bls _080A2F4C
 | |
| 	b _080A3064
 | |
| _080A2F4C:
 | |
| 	ldrb r2, [r6, #0x18]
 | |
| 	movs r1, #0x40
 | |
| 	ands r1, r2
 | |
| 	ldrb r3, [r4, #0x18]
 | |
| 	movs r0, #0x41
 | |
| 	rsbs r0, r0, #0
 | |
| 	ands r0, r3
 | |
| 	orrs r0, r1
 | |
| 	lsrs r2, r2, #7
 | |
| 	lsls r2, r2, #7
 | |
| 	movs r3, #0x7f
 | |
| 	ands r0, r3
 | |
| 	orrs r0, r2
 | |
| 	strb r0, [r4, #0x18]
 | |
| 	ldrb r2, [r6, #0x1e]
 | |
| 	ldr r1, [r4, #0x70]
 | |
| 	adds r0, r1, #0
 | |
| 	subs r0, #0x25
 | |
| 	adds r0, r2, r0
 | |
| 	adds r5, r4, #0
 | |
| 	adds r5, #0x68
 | |
| 	ldrb r7, [r4, #0x1e]
 | |
| 	cmp r0, r7
 | |
| 	beq _080A2FA2
 | |
| 	adds r0, r1, #0
 | |
| 	adds r0, #0xdb
 | |
| 	adds r0, r2, r0
 | |
| 	strb r0, [r4, #0x1e]
 | |
| 	ldrb r0, [r5]
 | |
| 	cmp r0, #0xe
 | |
| 	bne _080A2F98
 | |
| 	adds r0, r6, #0
 | |
| 	adds r0, #0x5a
 | |
| 	ldrb r1, [r0]
 | |
| 	adds r0, r3, #0
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #0
 | |
| 	bne _080A2FA2
 | |
| _080A2F98:
 | |
| 	ldrb r1, [r4, #0x1e]
 | |
| 	ldrh r2, [r4, #0x12]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_080042D0
 | |
| _080A2FA2:
 | |
| 	ldrb r0, [r5]
 | |
| 	cmp r0, #0xe
 | |
| 	bne _080A303E
 | |
| 	ldr r0, _080A301C @ =gPlayerEntity
 | |
| 	adds r0, #0x5a
 | |
| 	ldrb r1, [r0]
 | |
| 	movs r0, #0x7f
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #0
 | |
| 	beq _080A303E
 | |
| 	ldr r0, [r4, #0x78]
 | |
| 	subs r3, r0, #1
 | |
| 	str r3, [r4, #0x78]
 | |
| 	cmp r3, #0
 | |
| 	bne _080A303E
 | |
| 	ldr r0, [r4, #0x74]
 | |
| 	adds r0, #1
 | |
| 	str r0, [r4, #0x74]
 | |
| 	lsls r0, r0, #2
 | |
| 	ldr r1, [r4, #0x7c]
 | |
| 	adds r2, r1, r0
 | |
| 	ldrb r0, [r2]
 | |
| 	ldr r7, _080A3020 @ =gPlayerState
 | |
| 	cmp r0, #0xff
 | |
| 	bne _080A2FEC
 | |
| 	ldrb r1, [r7, #3]
 | |
| 	movs r0, #0x40
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #0
 | |
| 	beq _080A2FE8
 | |
| 	ldr r0, _080A3024 @ =gUnk_081271DC
 | |
| 	str r0, [r4, #0x7c]
 | |
| 	movs r0, #0xbf
 | |
| 	ands r0, r1
 | |
| 	strb r0, [r7, #3]
 | |
| _080A2FE8:
 | |
| 	str r3, [r4, #0x74]
 | |
| 	ldr r1, [r4, #0x7c]
 | |
| _080A2FEC:
 | |
| 	ldr r0, [r4, #0x74]
 | |
| 	lsls r0, r0, #2
 | |
| 	adds r2, r1, r0
 | |
| 	ldrb r0, [r2, #1]
 | |
| 	str r0, [r4, #0x78]
 | |
| 	ldrb r1, [r7, #3]
 | |
| 	movs r0, #0x40
 | |
| 	ands r0, r1
 | |
| 	cmp r0, #0
 | |
| 	beq _080A3028
 | |
| 	ldr r0, _080A301C @ =gPlayerEntity
 | |
| 	adds r0, #0x5a
 | |
| 	ldrb r0, [r0]
 | |
| 	movs r1, #0x7f
 | |
| 	ands r1, r0
 | |
| 	adds r1, #8
 | |
| 	ldrb r2, [r2]
 | |
| 	adds r1, r1, r2
 | |
| 	ldrh r2, [r4, #0x12]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_080042D0
 | |
| 	b _080A303E
 | |
| 	.align 2, 0
 | |
| _080A301C: .4byte gPlayerEntity
 | |
| _080A3020: .4byte gPlayerState
 | |
| _080A3024: .4byte gUnk_081271DC
 | |
| _080A3028:
 | |
| 	ldr r0, _080A3060 @ =gPlayerEntity
 | |
| 	adds r0, #0x5a
 | |
| 	ldrb r0, [r0]
 | |
| 	movs r1, #0x7f
 | |
| 	ands r1, r0
 | |
| 	ldrb r2, [r2]
 | |
| 	adds r1, r1, r2
 | |
| 	ldrh r2, [r4, #0x12]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_080042D0
 | |
| _080A303E:
 | |
| 	ldr r1, _080A3060 @ =gPlayerEntity
 | |
| 	adds r0, r1, #0
 | |
| 	adds r0, #0x5a
 | |
| 	ldrb r0, [r0]
 | |
| 	adds r2, r4, #0
 | |
| 	adds r2, #0x5a
 | |
| 	strb r0, [r2]
 | |
| 	adds r0, r1, #0
 | |
| 	adds r0, #0x5b
 | |
| 	ldrb r0, [r0]
 | |
| 	adds r2, #1
 | |
| 	strb r0, [r2]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_08078E84
 | |
| 	b _080A3068
 | |
| 	.align 2, 0
 | |
| _080A3060: .4byte gPlayerEntity
 | |
| _080A3064:
 | |
| 	movs r0, #0xff
 | |
| 	strb r0, [r4, #0x1e]
 | |
| _080A3068:
 | |
| 	pop {r4, r5, r6, r7, pc}
 | |
| 	.align 2, 0
 | |
| 
 | |
| 	thumb_func_start sub_080A306C
 | |
| sub_080A306C: @ 0x080A306C
 | |
| 	push {lr}
 | |
| 	ldr r2, _080A3080 @ =gUnk_08127270
 | |
| 	ldrb r1, [r0, #0xc]
 | |
| 	lsls r1, r1, #2
 | |
| 	adds r1, r1, r2
 | |
| 	ldr r1, [r1]
 | |
| 	bl _call_via_r1
 | |
| 	pop {pc}
 | |
| 	.align 2, 0
 | |
| _080A3080: .4byte gUnk_08127270
 | |
| 
 | |
| 	thumb_func_start sub_080A3084
 | |
| sub_080A3084: @ 0x080A3084
 | |
| 	push {r4, r5, lr}
 | |
| 	adds r4, r0, #0
 | |
| 	ldrb r1, [r4, #0x18]
 | |
| 	movs r0, #4
 | |
| 	rsbs r0, r0, #0
 | |
| 	ands r0, r1
 | |
| 	movs r1, #1
 | |
| 	orrs r0, r1
 | |
| 	strb r0, [r4, #0x18]
 | |
| 	movs r5, #1
 | |
| 	strb r5, [r4, #0xc]
 | |
| 	ldr r0, [r4, #0x50]
 | |
| 	adds r1, r4, #0
 | |
| 	bl CopyPosition
 | |
| 	ldrb r0, [r4, #0xa]
 | |
| 	cmp r0, #0
 | |
| 	bne _080A30F8
 | |
| 	ldr r0, _080A30EC @ =gPlayerEntity
 | |
| 	adds r0, #0x3c
 | |
| 	ldrb r0, [r0]
 | |
| 	adds r0, #1
 | |
| 	adds r1, r4, #0
 | |
| 	adds r1, #0x3c
 | |
| 	strb r0, [r1]
 | |
| 	ldr r0, _080A30F0 @ =gUnk_08127278
 | |
| 	str r0, [r4, #0x48]
 | |
| 	movs r0, #0x80
 | |
| 	lsls r0, r0, #3
 | |
| 	strh r0, [r4, #0x24]
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x38
 | |
| 	ldrb r0, [r0]
 | |
| 	cmp r0, #2
 | |
| 	bne _080A30CC
 | |
| 	strb r5, [r4, #0xb]
 | |
| _080A30CC:
 | |
| 	ldrb r0, [r4, #0x14]
 | |
| 	lsls r0, r0, #2
 | |
| 	strb r0, [r4, #0x15]
 | |
| 	movs r0, #0x3c
 | |
| 	str r0, [r4, #0x6c]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0801766C
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0806F69C
 | |
| 	ldr r0, _080A30F4 @ =0x0000013F
 | |
| 	bl PlaySFX
 | |
| 	b _080A30FC
 | |
| 	.align 2, 0
 | |
| _080A30EC: .4byte gPlayerEntity
 | |
| _080A30F0: .4byte gUnk_08127278
 | |
| _080A30F4: .4byte 0x0000013F
 | |
| _080A30F8:
 | |
| 	movs r0, #6
 | |
| 	strb r0, [r4, #0xe]
 | |
| _080A30FC:
 | |
| 	adds r0, r4, #0
 | |
| 	movs r1, #0x18
 | |
| 	bl InitializeAnimation
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_080A310C
 | |
| 	pop {r4, r5, pc}
 | |
| 
 | |
| 	thumb_func_start sub_080A310C
 | |
| sub_080A310C: @ 0x080A310C
 | |
| 	push {r4, r5, lr}
 | |
| 	adds r4, r0, #0
 | |
| 	ldrb r0, [r4, #0xa]
 | |
| 	cmp r0, #0
 | |
| 	beq _080A312A
 | |
| 	ldrb r0, [r4, #0xe]
 | |
| 	subs r0, #1
 | |
| 	strb r0, [r4, #0xe]
 | |
| 	lsls r0, r0, #0x18
 | |
| 	lsrs r0, r0, #0x18
 | |
| 	cmp r0, #0xff
 | |
| 	bne _080A3200
 | |
| 	bl DeleteThisEntity
 | |
| 	b _080A3200
 | |
| _080A312A:
 | |
| 	adds r0, r4, #0
 | |
| 	bl GetNextFrame
 | |
| 	ldr r0, [r4, #0x6c]
 | |
| 	subs r0, #1
 | |
| 	str r0, [r4, #0x6c]
 | |
| 	movs r1, #1
 | |
| 	rsbs r1, r1, #0
 | |
| 	cmp r0, r1
 | |
| 	beq _080A31FC
 | |
| 	adds r0, r4, #0
 | |
| 	bl GetNextFrame
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0806F69C
 | |
| 	ldrb r0, [r4, #0xe]
 | |
| 	adds r0, #1
 | |
| 	strb r0, [r4, #0xe]
 | |
| 	ldrb r0, [r4, #0xb]
 | |
| 	cmp r0, #0
 | |
| 	bne _080A315C
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_0800451C
 | |
| _080A315C:
 | |
| 	movs r1, #0x2e
 | |
| 	ldrsh r0, [r4, r1]
 | |
| 	ldr r2, _080A31F0 @ =gRoomControls
 | |
| 	ldrh r1, [r2, #6]
 | |
| 	subs r0, r0, r1
 | |
| 	asrs r0, r0, #4
 | |
| 	movs r3, #0x3f
 | |
| 	ands r0, r3
 | |
| 	movs r5, #0x32
 | |
| 	ldrsh r1, [r4, r5]
 | |
| 	ldrh r2, [r2, #8]
 | |
| 	subs r1, r1, r2
 | |
| 	asrs r1, r1, #4
 | |
| 	ands r1, r3
 | |
| 	lsls r1, r1, #6
 | |
| 	orrs r0, r1
 | |
| 	ldr r1, _080A31F4 @ =gPlayerEntity
 | |
| 	adds r1, #0x38
 | |
| 	ldrb r1, [r1]
 | |
| 	movs r2, #0x80
 | |
| 	bl sub_080002F0
 | |
| 	cmp r0, #0
 | |
| 	bne _080A31AE
 | |
| 	ldr r1, _080A31F8 @ =gUnk_08003E44
 | |
| 	movs r0, #0x2e
 | |
| 	ldrsh r2, [r4, r0]
 | |
| 	movs r5, #0x32
 | |
| 	ldrsh r3, [r4, r5]
 | |
| 	adds r0, r4, #0
 | |
| 	bl sub_080040D8
 | |
| 	cmp r0, #0
 | |
| 	beq _080A31AE
 | |
| 	adds r0, r4, #0
 | |
| 	movs r1, #0x19
 | |
| 	movs r2, #0
 | |
| 	bl CreateFx
 | |
| 	bl DeleteThisEntity
 | |
| _080A31AE:
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x41
 | |
| 	ldrb r0, [r0]
 | |
| 	cmp r0, #0
 | |
| 	beq _080A31C6
 | |
| 	adds r0, r4, #0
 | |
| 	movs r1, #0x19
 | |
| 	movs r2, #0
 | |
| 	bl CreateFx
 | |
| 	bl DeleteThisEntity
 | |
| _080A31C6:
 | |
| 	adds r0, r4, #0
 | |
| 	movs r1, #0xc
 | |
| 	bl sub_08008790
 | |
| 	cmp r0, #0
 | |
| 	beq _080A31D6
 | |
| 	bl DeleteThisEntity
 | |
| _080A31D6:
 | |
| 	adds r0, r4, #0
 | |
| 	adds r0, #0x68
 | |
| 	ldrb r3, [r0]
 | |
| 	movs r0, #0x15
 | |
| 	movs r1, #1
 | |
| 	movs r2, #0
 | |
| 	bl CreatePlayerItem
 | |
| 	str r0, [r4, #0x54]
 | |
| 	cmp r0, #0
 | |
| 	beq _080A3200
 | |
| 	str r4, [r0, #0x50]
 | |
| 	b _080A3200
 | |
| 	.align 2, 0
 | |
| _080A31F0: .4byte gRoomControls
 | |
| _080A31F4: .4byte gPlayerEntity
 | |
| _080A31F8: .4byte gUnk_08003E44
 | |
| _080A31FC:
 | |
| 	bl DeleteThisEntity
 | |
| _080A3200:
 | |
| 	pop {r4, r5, pc}
 | |
| 	.align 2, 0
 | |
| 
 | |
| 	thumb_func_start sub_080A3204
 | |
| sub_080A3204: @ 0x080A3204
 | |
| 	push {lr}
 | |
| 	bl sub_080A3210
 | |
| 	bl m4aSoundInit
 | |
| 	pop {pc}
 | |
| 
 | |
| 	thumb_func_start sub_080A3210
 | |
| sub_080A3210: @ 0x080A3210
 | |
| 	push {r4, lr}
 | |
| 	ldr r4, _080A3230 @ =gUnk_02021EE0
 | |
| 	adds r0, r4, #0
 | |
| 	movs r1, #0x18
 | |
| 	bl _DmaZero
 | |
| 	bl sub_080A35C8
 | |
| 	movs r0, #0x80
 | |
| 	lsls r0, r0, #1
 | |
| 	strh r0, [r4, #0x12]
 | |
| 	strh r0, [r4, #4]
 | |
| 	bl m4aMPlayAllStop
 | |
| 	pop {r4, pc}
 | |
| 	.align 2, 0
 | |
| _080A3230: .4byte gUnk_02021EE0
 | |
| 
 | |
| 	thumb_func_start sub_080A3234
 | |
| sub_080A3234: @ 0x080A3234
 | |
| 	push {lr}
 | |
| 	ldr r1, _080A3244 @ =gUnk_02021EE0
 | |
| 	strh r0, [r1, #8]
 | |
| 	strh r0, [r1, #0xa]
 | |
| 	ldrh r0, [r1, #0x14]
 | |
| 	bl sub_080A353C
 | |
| 	pop {pc}
 | |
| 	.align 2, 0
 | |
| _080A3244: .4byte gUnk_02021EE0
 | |
| 
 | |
| 	thumb_func_start sub_080A3248
 | |
| sub_080A3248: @ 0x080A3248
 | |
| 	push {lr}
 | |
| 	ldr r1, _080A3258 @ =gUnk_02021EE0
 | |
| 	strh r0, [r1, #0x10]
 | |
| 	strh r0, [r1, #0xe]
 | |
| 	ldrh r0, [r1, #0x14]
 | |
| 	bl sub_080A353C
 | |
| 	pop {pc}
 | |
| 	.align 2, 0
 | |
| _080A3258: .4byte gUnk_02021EE0
 | |
| 
 | |
| 	thumb_func_start sub_080A325C
 | |
| sub_080A325C: @ 0x080A325C
 | |
| 	ldr r1, _080A3264 @ =gUnk_02021EE0
 | |
| 	strh r0, [r1, #0x12]
 | |
| 	bx lr
 | |
| 	.align 2, 0
 | |
| _080A3264: .4byte gUnk_02021EE0
 |