mirror of
https://github.com/thornAvery/jep-hack.git
synced 2026-02-06 16:15:24 +13:00
First Commit
Upload literally everything from the pokecrystal16 expand-move-ID branch
This commit is contained in:
commit
2f8a41f833
4618 changed files with 480386 additions and 0 deletions
30
engine/math/get_square_root.asm
Normal file
30
engine/math/get_square_root.asm
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
DEF NUM_SQUARE_ROOTS EQU 255
|
||||
|
||||
GetSquareRoot:
|
||||
; Return the square root of de in b.
|
||||
|
||||
; Rather than calculating the result, we take the index of the
|
||||
; first value in a table of squares that isn't lower than de.
|
||||
|
||||
ld hl, .Squares
|
||||
ld b, 0
|
||||
.loop
|
||||
; Make sure we don't go past the end of the table.
|
||||
inc b
|
||||
ld a, b
|
||||
cp NUM_SQUARE_ROOTS
|
||||
ret z
|
||||
|
||||
; Iterate over the table until b**2 >= de.
|
||||
ld a, [hli]
|
||||
sub e
|
||||
ld a, [hli]
|
||||
sbc d
|
||||
|
||||
jr c, .loop
|
||||
ret
|
||||
|
||||
.Squares:
|
||||
for x, 1, NUM_SQUARE_ROOTS + 1
|
||||
dw x**2
|
||||
endr
|
||||
189
engine/math/math.asm
Normal file
189
engine/math/math.asm
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
_Multiply::
|
||||
; hMultiplier is one byte.
|
||||
ld a, 8
|
||||
ld b, a
|
||||
|
||||
xor a
|
||||
ldh [hMultiplicand - 1], a
|
||||
ldh [hMathBuffer + 1], a
|
||||
ldh [hMathBuffer + 2], a
|
||||
ldh [hMathBuffer + 3], a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
.loop
|
||||
ldh a, [hMultiplier]
|
||||
srl a
|
||||
ldh [hMultiplier], a
|
||||
jr nc, .next
|
||||
|
||||
ldh a, [hMathBuffer + 4]
|
||||
ld c, a
|
||||
ldh a, [hMultiplicand + 2]
|
||||
add c
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
ldh a, [hMathBuffer + 3]
|
||||
ld c, a
|
||||
ldh a, [hMultiplicand + 1]
|
||||
adc c
|
||||
ldh [hMathBuffer + 3], a
|
||||
|
||||
ldh a, [hMathBuffer + 2]
|
||||
ld c, a
|
||||
ldh a, [hMultiplicand]
|
||||
adc c
|
||||
ldh [hMathBuffer + 2], a
|
||||
|
||||
ldh a, [hMathBuffer + 1]
|
||||
ld c, a
|
||||
ldh a, [hMultiplicand - 1]
|
||||
adc c
|
||||
ldh [hMathBuffer + 1], a
|
||||
|
||||
.next
|
||||
dec b
|
||||
jr z, .done
|
||||
|
||||
; hMultiplicand <<= 1
|
||||
|
||||
ldh a, [hMultiplicand + 2]
|
||||
add a
|
||||
ldh [hMultiplicand + 2], a
|
||||
|
||||
ldh a, [hMultiplicand + 1]
|
||||
rla
|
||||
ldh [hMultiplicand + 1], a
|
||||
|
||||
ldh a, [hMultiplicand]
|
||||
rla
|
||||
ldh [hMultiplicand], a
|
||||
|
||||
ldh a, [hMultiplicand - 1]
|
||||
rla
|
||||
ldh [hMultiplicand - 1], a
|
||||
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ldh a, [hMathBuffer + 4]
|
||||
ldh [hProduct + 3], a
|
||||
|
||||
ldh a, [hMathBuffer + 3]
|
||||
ldh [hProduct + 2], a
|
||||
|
||||
ldh a, [hMathBuffer + 2]
|
||||
ldh [hProduct + 1], a
|
||||
|
||||
ldh a, [hMathBuffer + 1]
|
||||
ldh [hProduct], a
|
||||
|
||||
ret
|
||||
|
||||
_Divide::
|
||||
xor a
|
||||
ldh [hMathBuffer], a
|
||||
ldh [hMathBuffer + 1], a
|
||||
ldh [hMathBuffer + 2], a
|
||||
ldh [hMathBuffer + 3], a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
ld a, 9
|
||||
ld e, a
|
||||
|
||||
.loop
|
||||
ldh a, [hMathBuffer]
|
||||
ld c, a
|
||||
ldh a, [hDividend + 1]
|
||||
sub c
|
||||
ld d, a
|
||||
|
||||
ldh a, [hDivisor]
|
||||
ld c, a
|
||||
ldh a, [hDividend]
|
||||
sbc c
|
||||
jr c, .next
|
||||
|
||||
ldh [hDividend], a
|
||||
|
||||
ld a, d
|
||||
ldh [hDividend + 1], a
|
||||
|
||||
ldh a, [hMathBuffer + 4]
|
||||
inc a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
jr .loop
|
||||
|
||||
.next
|
||||
ld a, b
|
||||
cp 1
|
||||
jr z, .done
|
||||
|
||||
ldh a, [hMathBuffer + 4]
|
||||
add a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
ldh a, [hMathBuffer + 3]
|
||||
rla
|
||||
ldh [hMathBuffer + 3], a
|
||||
|
||||
ldh a, [hMathBuffer + 2]
|
||||
rla
|
||||
ldh [hMathBuffer + 2], a
|
||||
|
||||
ldh a, [hMathBuffer + 1]
|
||||
rla
|
||||
ldh [hMathBuffer + 1], a
|
||||
|
||||
dec e
|
||||
jr nz, .next2
|
||||
|
||||
ld e, 8
|
||||
ldh a, [hMathBuffer]
|
||||
ldh [hDivisor], a
|
||||
xor a
|
||||
ldh [hMathBuffer], a
|
||||
|
||||
ldh a, [hDividend + 1]
|
||||
ldh [hDividend], a
|
||||
|
||||
ldh a, [hDividend + 2]
|
||||
ldh [hDividend + 1], a
|
||||
|
||||
ldh a, [hDividend + 3]
|
||||
ldh [hDividend + 2], a
|
||||
|
||||
.next2
|
||||
ld a, e
|
||||
cp 1
|
||||
jr nz, .okay
|
||||
dec b
|
||||
|
||||
.okay
|
||||
ldh a, [hDivisor]
|
||||
srl a
|
||||
ldh [hDivisor], a
|
||||
|
||||
ldh a, [hMathBuffer]
|
||||
rra
|
||||
ldh [hMathBuffer], a
|
||||
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ldh a, [hDividend + 1]
|
||||
ldh [hRemainder], a
|
||||
|
||||
ldh a, [hMathBuffer + 4]
|
||||
ldh [hQuotient + 3], a
|
||||
|
||||
ldh a, [hMathBuffer + 3]
|
||||
ldh [hQuotient + 2], a
|
||||
|
||||
ldh a, [hMathBuffer + 2]
|
||||
ldh [hQuotient + 1], a
|
||||
|
||||
ldh a, [hMathBuffer + 1]
|
||||
ldh [hQuotient], a
|
||||
|
||||
ret
|
||||
301
engine/math/print_num.asm
Normal file
301
engine/math/print_num.asm
Normal file
|
|
@ -0,0 +1,301 @@
|
|||
_PrintNum::
|
||||
; Print c digits of the b-byte value from de to hl.
|
||||
; Allows 2 to 7 digits. For 1-digit numbers, add
|
||||
; the value to char "0" instead of calling PrintNum.
|
||||
; The high nybble of the c register specifies how many of the total amount of
|
||||
; digits will be in front of the decimal point.
|
||||
; Some extra flags can be given in bits 5-7 of b.
|
||||
; Bit 5: money if set (unless left-aligned without leading zeros)
|
||||
; Bit 6: left-aligned if set
|
||||
; Bit 7: print leading zeros if set
|
||||
|
||||
push bc
|
||||
|
||||
bit 5, b
|
||||
jr z, .main
|
||||
bit 7, b
|
||||
jr nz, .moneyflag
|
||||
bit 6, b
|
||||
jr z, .main
|
||||
|
||||
.moneyflag ; 101xxxxx or 011xxxxx
|
||||
ld a, "¥"
|
||||
ld [hli], a
|
||||
res 5, b ; 100xxxxx or 010xxxxx
|
||||
|
||||
.main
|
||||
xor a
|
||||
ldh [hPrintNumBuffer + 0], a
|
||||
ldh [hPrintNumBuffer + 1], a
|
||||
ldh [hPrintNumBuffer + 2], a
|
||||
ld a, b
|
||||
and $f
|
||||
cp 1
|
||||
jr z, .byte
|
||||
cp 2
|
||||
jr z, .word
|
||||
; maximum 3 bytes
|
||||
ld a, [de]
|
||||
ldh [hPrintNumBuffer + 1], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ldh [hPrintNumBuffer + 2], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ldh [hPrintNumBuffer + 3], a
|
||||
jr .start
|
||||
|
||||
.word
|
||||
ld a, [de]
|
||||
ldh [hPrintNumBuffer + 2], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ldh [hPrintNumBuffer + 3], a
|
||||
jr .start
|
||||
|
||||
.byte
|
||||
ld a, [de]
|
||||
ldh [hPrintNumBuffer + 3], a
|
||||
|
||||
.start
|
||||
push de
|
||||
|
||||
ld d, b
|
||||
ld a, c
|
||||
swap a
|
||||
and $f
|
||||
ld e, a
|
||||
ld a, c
|
||||
and $f
|
||||
ld b, a
|
||||
ld c, 0
|
||||
cp 2
|
||||
jr z, .two
|
||||
cp 3
|
||||
jr z, .three
|
||||
cp 4
|
||||
jr z, .four
|
||||
cp 5
|
||||
jr z, .five
|
||||
cp 6
|
||||
jr z, .six
|
||||
|
||||
; seven
|
||||
ld a, HIGH(1000000 >> 8)
|
||||
ldh [hPrintNumBuffer + 4], a
|
||||
ld a, HIGH(1000000) ; mid
|
||||
ldh [hPrintNumBuffer + 5], a
|
||||
ld a, LOW(1000000)
|
||||
ldh [hPrintNumBuffer + 6], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.six
|
||||
ld a, HIGH(100000 >> 8)
|
||||
ldh [hPrintNumBuffer + 4], a
|
||||
ld a, HIGH(100000) ; mid
|
||||
ldh [hPrintNumBuffer + 5], a
|
||||
ld a, LOW(100000)
|
||||
ldh [hPrintNumBuffer + 6], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.five
|
||||
xor a ; HIGH(10000 >> 8)
|
||||
ldh [hPrintNumBuffer + 4], a
|
||||
ld a, HIGH(10000) ; mid
|
||||
ldh [hPrintNumBuffer + 5], a
|
||||
ld a, LOW(10000)
|
||||
ldh [hPrintNumBuffer + 6], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.four
|
||||
xor a ; HIGH(1000 >> 8)
|
||||
ldh [hPrintNumBuffer + 4], a
|
||||
ld a, HIGH(1000) ; mid
|
||||
ldh [hPrintNumBuffer + 5], a
|
||||
ld a, LOW(1000)
|
||||
ldh [hPrintNumBuffer + 6], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.three
|
||||
xor a ; HIGH(100 >> 8)
|
||||
ldh [hPrintNumBuffer + 4], a
|
||||
xor a ; HIGH(100) ; mid
|
||||
ldh [hPrintNumBuffer + 5], a
|
||||
ld a, LOW(100)
|
||||
ldh [hPrintNumBuffer + 6], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.two
|
||||
dec e
|
||||
jr nz, .two_skip
|
||||
ld a, "0"
|
||||
ldh [hPrintNumBuffer + 0], a
|
||||
.two_skip
|
||||
|
||||
ld c, 0
|
||||
ldh a, [hPrintNumBuffer + 3]
|
||||
.mod_10
|
||||
cp 10
|
||||
jr c, .modded_10
|
||||
sub 10
|
||||
inc c
|
||||
jr .mod_10
|
||||
.modded_10
|
||||
|
||||
ld b, a
|
||||
ldh a, [hPrintNumBuffer + 0]
|
||||
or c
|
||||
jr nz, .money
|
||||
call .PrintLeadingZero
|
||||
jr .money_leading_zero
|
||||
|
||||
.money
|
||||
call .PrintYen
|
||||
push af
|
||||
ld a, "0"
|
||||
add c
|
||||
ld [hl], a
|
||||
pop af
|
||||
ldh [hPrintNumBuffer + 0], a
|
||||
inc e
|
||||
dec e
|
||||
jr nz, .money_leading_zero
|
||||
inc hl
|
||||
ld [hl], "<DOT>"
|
||||
|
||||
.money_leading_zero
|
||||
call .AdvancePointer
|
||||
call .PrintYen
|
||||
ld a, "0"
|
||||
add b
|
||||
ld [hli], a
|
||||
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
.PrintYen:
|
||||
push af
|
||||
ldh a, [hPrintNumBuffer + 0]
|
||||
and a
|
||||
jr nz, .stop
|
||||
bit 5, d
|
||||
jr z, .stop
|
||||
ld a, "¥"
|
||||
ld [hli], a
|
||||
res 5, d
|
||||
|
||||
.stop
|
||||
pop af
|
||||
ret
|
||||
|
||||
.PrintDigit:
|
||||
dec e
|
||||
jr nz, .ok
|
||||
ld a, "0"
|
||||
ldh [hPrintNumBuffer + 0], a
|
||||
.ok
|
||||
ld c, 0
|
||||
.loop
|
||||
ldh a, [hPrintNumBuffer + 4]
|
||||
ld b, a
|
||||
ldh a, [hPrintNumBuffer + 1]
|
||||
ldh [hPrintNumBuffer + 7], a
|
||||
cp b
|
||||
jr c, .skip1
|
||||
sub b
|
||||
ldh [hPrintNumBuffer + 1], a
|
||||
ldh a, [hPrintNumBuffer + 5]
|
||||
ld b, a
|
||||
ldh a, [hPrintNumBuffer + 2]
|
||||
ldh [hPrintNumBuffer + 8], a
|
||||
cp b
|
||||
jr nc, .skip2
|
||||
ldh a, [hPrintNumBuffer + 1]
|
||||
or 0
|
||||
jr z, .skip3
|
||||
dec a
|
||||
ldh [hPrintNumBuffer + 1], a
|
||||
ldh a, [hPrintNumBuffer + 2]
|
||||
.skip2
|
||||
sub b
|
||||
ldh [hPrintNumBuffer + 2], a
|
||||
ldh a, [hPrintNumBuffer + 6]
|
||||
ld b, a
|
||||
ldh a, [hPrintNumBuffer + 3]
|
||||
ldh [hPrintNumBuffer + 9], a
|
||||
cp b
|
||||
jr nc, .skip4
|
||||
ldh a, [hPrintNumBuffer + 2]
|
||||
and a
|
||||
jr nz, .skip5
|
||||
ldh a, [hPrintNumBuffer + 1]
|
||||
and a
|
||||
jr z, .skip6
|
||||
dec a
|
||||
ldh [hPrintNumBuffer + 1], a
|
||||
xor a
|
||||
.skip5
|
||||
dec a
|
||||
ldh [hPrintNumBuffer + 2], a
|
||||
ldh a, [hPrintNumBuffer + 3]
|
||||
.skip4
|
||||
sub b
|
||||
ldh [hPrintNumBuffer + 3], a
|
||||
inc c
|
||||
jr .loop
|
||||
.skip6
|
||||
ldh a, [hPrintNumBuffer + 8]
|
||||
ldh [hPrintNumBuffer + 2], a
|
||||
.skip3
|
||||
ldh a, [hPrintNumBuffer + 7]
|
||||
ldh [hPrintNumBuffer + 1], a
|
||||
.skip1
|
||||
ldh a, [hPrintNumBuffer + 0]
|
||||
or c
|
||||
jr z, .PrintLeadingZero
|
||||
ldh a, [hPrintNumBuffer + 0]
|
||||
and a
|
||||
jr nz, .done
|
||||
bit 5, d
|
||||
jr z, .done
|
||||
ld a, "¥"
|
||||
ld [hli], a
|
||||
res 5, d
|
||||
.done
|
||||
ld a, "0"
|
||||
add c
|
||||
ld [hl], a
|
||||
ldh [hPrintNumBuffer + 0], a
|
||||
inc e
|
||||
dec e
|
||||
ret nz
|
||||
inc hl
|
||||
ld [hl], "<DOT>"
|
||||
ret
|
||||
|
||||
.PrintLeadingZero:
|
||||
; prints a leading zero unless they are turned off in the flags
|
||||
bit 7, d ; print leading zeroes?
|
||||
ret z
|
||||
ld [hl], "0"
|
||||
ret
|
||||
|
||||
.AdvancePointer:
|
||||
; increments the pointer unless leading zeroes are not being printed,
|
||||
; the number is left-aligned, and no nonzero digits have been printed yet
|
||||
bit 7, d ; print leading zeroes?
|
||||
jr nz, .inc
|
||||
bit 6, d ; left alignment or right alignment?
|
||||
jr z, .inc
|
||||
ldh a, [hPrintNumBuffer + 0]
|
||||
and a
|
||||
ret z
|
||||
.inc
|
||||
inc hl
|
||||
ret
|
||||
4
engine/math/sine.asm
Normal file
4
engine/math/sine.asm
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
_Sine::
|
||||
; a = d * sin(e * pi/32)
|
||||
ld a, e
|
||||
calc_sine_wave
|
||||
Loading…
Add table
Add a link
Reference in a new issue