summaryrefslogtreecommitdiff
path: root/src/soundPlayer.S
blob: 88664603408ee6c336f0974002d5752179c95d2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#ifndef __MWERKS__
.set r0,0;   .set r1,1;   .set r2,2; .set r3,3;   .set r4,4
.set r5,5;   .set r6,6;   .set r7,7;   .set r8,8;   .set r9,9
.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
.set r30,30; .set r31,31; .set f0,0; .set f1,1; .set f2,2
.set f3,3; .set f4,4; .set f5,5; .set f6,6; .set f8,8
.set f31,31; .set f30,30
#endif


.text

.extern OSReport
.extern Actor_GetVec3WithValuesAdded
.extern ConvertStagePositionIntoScreenPosition__Maybe
.extern AnotherSoundRelatedFunction
.extern YetAnotherSoundPlayer
.extern CheckIfPlayingSound
.extern StopSoundBasic
.extern StopSoundRelated
.extern SoundClassRelated
.extern BufferToCheckIfPlaying

.align 4



# PlaySound(dActor_c *, int soundID)


.global PlaySound
PlaySound:
	stwu      r1, -0x30(r1)
	mflr      r0
	stw       r0, 0x34(r1)
	stw       r31, 0x2C(r1)
	stw       r30, 0x28(r1)
	mr        r30, r4

	# Gets Player Position
	mr        r4, r3                          # object
	addi      r3, r1, 0x10                    # dest
	bl        Actor_GetVec3WithValuesAdded
	
	# Gives an accurate position for the sound
	addi      r3, r1, 8
	addi      r4, r1, 0x10
	bl        ConvertStagePositionIntoScreenPosition__Maybe
	
	# Checks if the passed sound is already playing
	lis       r4, BufferToCheckIfPlaying@h
	ori       r4, r4, BufferToCheckIfPlaying@l
	lwz       r3, 0(r4)
	mr        r4, r30
	bl CheckIfPlayingSound

	# Go away if it is
	cmpwi r3, 0
	bne GoAwaySoundGuy
	
	# If we're good to go, play the sound!
	lis       r31, SoundClassRelated@h
	ori       r31, r31, SoundClassRelated@l
	lwz       r3, 0(r31)
	addi      r5, r1, 8
	mr        r4, r30
	li        r6, 0
	bl        YetAnotherSoundPlayer
	
	b GoAwaySoundGuy
	
GoAwaySoundGuy:
	lwz       r30, 0x28(r1)
	lwz       r31, 0x2C(r1)
	lwz       r0, 0x34(r1)
	mtlr      r0
	addi      r1, r1, 0x30
	blr



.global PlaySoundAsync
PlaySoundAsync:
	stwu      r1, -0x30(r1)
	mflr      r0
	stw       r0, 0x34(r1)
	stw       r31, 0x2C(r1)
	stw       r30, 0x28(r1)
	mr        r30, r4

	# Gets Player Position
	mr        r4, r3                          # object
	addi      r3, r1, 0x10                    # dest
	bl        Actor_GetVec3WithValuesAdded
	
	# Gives an accurate position for the sound
	addi      r3, r1, 8
	addi      r4, r1, 0x10
	bl        ConvertStagePositionIntoScreenPosition__Maybe
		
	# If we're good to go, play the sound!
	lis       r31, SoundClassRelated@h
	ori       r31, r31, SoundClassRelated@l
	lwz       r3, 0(r31)
	addi      r5, r1, 8
	mr        r4, r30
	li        r6, 0
	bl        YetAnotherSoundPlayer
	
	lwz       r30, 0x28(r1)
	lwz       r31, 0x2C(r1)
	lwz       r0, 0x34(r1)
	mtlr      r0
	addi      r1, r1, 0x30
	blr




# StopSound(int soundID)

.global StopSound
StopSound:

	stwu      r1, -0x10(r1)
	mflr      r0
	stw       r0, 0x14(r1)

	mr        r4, r3
	lwz       r3, -0x5218(r13)
	bl        StopSoundBasic
	
	lwz       r0, 0x14(r1)
	mtlr      r0
	
	blr