summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.asm61
1 files changed, 40 insertions, 21 deletions
diff --git a/main.asm b/main.asm
index 61a6e4119..ee501f176 100644
--- a/main.asm
+++ b/main.asm
@@ -1307,24 +1307,29 @@ GetSpriteDirection: ; 1b07
; 1b0f
-Function1b0f: ; 1b0f
- add $10
+Cosine: ; 1b0f
+; Return d * cos(a) in hl
+ add $10 ; 90 degrees
+
+Sine: ; 1b11
+; Return d * sin(a) in hl
+; a is a signed 6-bit value.
-Function1b11: ; 1b11
ld e, a
ld a, [hROMBank]
push af
- ld a, BANK(Function84d9)
+ ld a, BANK(_Sine)
rst Bankswitch
- call Function84d9
+ call _Sine
pop af
rst Bankswitch
ret
; 1b1e
+
Function1b1e: ; 1b1e
ld [$d003], a
xor a
@@ -11138,7 +11143,7 @@ Function4c5d: ; 4c5d
inc [hl]
ld a, [hl]
ld d, $60
- call Function1b11
+ call Sine
ld a, h
sub $60
ld hl, $001a
@@ -11211,7 +11216,7 @@ Function4cc9: ; 4cc9
inc [hl]
ld a, [hl]
ld d, $60
- call Function1b11
+ call Sine
ld a, h
sub $60
ld hl, $001a
@@ -11302,7 +11307,7 @@ Function4d4f: ; 4d4f
inc [hl]
ld a, [hl]
ld d, $60
- call Function1b11
+ call Sine
ld a, h
sub $60
ld hl, $001a
@@ -17031,17 +17036,22 @@ Function849d: ; 849d
ret
; 84d9
-Function84d9: ; 84d9
+_Sine: ; 84d9
+; A simple sine function.
+; Return d * sin(e) in hl.
+
+; e is a signed 6-bit value.
ld a, e
- and $3f
- cp $20
- jr nc, .asm_84e5
+ and %111111
+ cp %100000
+ jr nc, .negative
+
call Function84ef
ld a, h
ret
-.asm_84e5
- and $1f
+.negative
+ and %011111
call Function84ef
ld a, h
xor $ff
@@ -17053,27 +17063,36 @@ Function84ef: ; 84ef
ld e, a
ld a, d
ld d, 0
- ld hl, $450b
+ ld hl, SineWave
add hl, de
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
ld hl, 0
-.asm_84fe
+
+; Factor amplitude
+.multiply
srl a
- jr nc, .asm_8503
+ jr nc, .even
add hl, de
-
-.asm_8503
+.even
sla e
rl d
and a
- jr nz, .asm_84fe
+ jr nz, .multiply
ret
; 850b
-INCBIN "baserom.gbc", $850b, $854b - $850b
+SineWave: ; 850b
+; A $20-word table representing a sine wave.
+; 90 degrees is index $10 at a base amplitude of $100.
+x set 0
+ rept $20
+ dw (sin(x) + (sin(x) & $ff)) >> 8 ; round up
+x set x + $100 * $40000
+ endr
+; 854b
GetPredefFn: ; 854b