summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-06-10 20:57:58 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-06-10 20:57:58 -0400
commit364289640d4b60708a86f67282480a44ec1862c3 (patch)
treec6add0cd9d8cfc7f9049b156cffdb8960c450718
parent0bdf3896b28213f139578c1927945d7184ca6a91 (diff)
home/movement.asm
-rw-r--r--home/movement.asm129
-rw-r--r--wram.asm9
2 files changed, 134 insertions, 4 deletions
diff --git a/home/movement.asm b/home/movement.asm
new file mode 100644
index 0000000..212a4b3
--- /dev/null
+++ b/home/movement.asm
@@ -0,0 +1,129 @@
+INCLUDE "constants.asm"
+
+SECTION "Movement ROM0", ROM0 [$19d1]
+
+InitMovementBuffer::
+ ld [wMovementBufferObject], a
+ xor a
+ ld [wMovementBufferCount], a
+ ld a, BANK(wMovementBuffer)
+ ld [wMovementBufferPointerBank], a
+ ld a, LOW(wMovementBuffer)
+ ld [wMovementBufferPointerAddr], a
+ ld a, HIGH(wMovementBuffer)
+ ld [wMovementBufferPointerAddr + 1], a
+ ret
+
+DecrementMovementBufferCount::
+ ld a, [wMovementBufferCount]
+ and a
+ ret z
+ dec a
+ ld [wMovementBufferCount], a
+ ret
+
+AppendToMovementBuffer:: ; 00:19f2
+ push hl
+ push de
+ ld hl, wMovementBufferCount
+ ld e, [hl]
+ inc [hl]
+ ld d, $0
+ ld hl, wMovementBuffer
+ add hl, de
+ ld [hl], a
+ pop de
+ pop hl
+ ret
+
+AppendToMovementBufferNTimes:: ; 00:1a03
+ push af
+ ld a, c
+ and a
+ jr nz, .asm_1a0a
+ pop af
+ ret
+
+.asm_1a0a: ; 00:1a0a
+ pop af
+.asm_1a0b: ; 00:1a0b
+ call AppendToMovementBuffer
+ dec c
+ jr nz, .asm_1a0b
+ ret
+
+ComputePathToWalkToPlayer::
+ push af
+ ld a, b
+ sub d
+ ld h, LEFT
+ jr nc, .asm_1a1d
+ dec a
+ cpl
+ ld h, RIGHT
+.asm_1a1d: ; 00:1a1d
+ ld d, a
+ ld a, c
+ sub e
+ ld l, UP
+ jr nc, .asm_1a28
+ dec a
+ cpl
+ ld l, DOWN
+.asm_1a28: ; 00:1a28
+ ld e, a
+ cp d
+ jr nc, .asm_1a32
+ ld a, h
+ ld h, l
+ ld l, a
+ ld a, d
+ ld d, e
+ ld e, a
+.asm_1a32: ; 00:1a32
+ pop af
+ ld b, a
+ ld a, h
+ call .GetMovementData
+ ld c, d
+ call AppendToMovementBufferNTimes
+ ld a, l
+ call .GetMovementData
+ ld c, e
+ call AppendToMovementBufferNTimes
+ ret
+
+.GetMovementData: ; 00:1a45
+ push de
+ push hl
+ ld l, b
+ ld h, $0
+ add hl, hl
+ add hl, hl
+ ld e, a
+ ld d, $0
+ add hl, de
+ ld de, .Data
+ add hl, de
+ ld a, [hl]
+ pop hl
+ pop de
+ ret
+
+.Data: ; 00:1a58
+ db $04, $05, $06, $07
+ db $08, $09, $0a, $0b
+ db $0c, $0d, $0e, $0f
+
+; slow_step DOWN
+; slow_step UP
+; slow_step LEFT
+; slow_step RIGHT
+; step DOWN
+; step UP
+; step LEFT
+; step RIGHT
+; big_step DOWN
+; big_step UP
+; big_step LEFT
+; big_step RIGHT
diff --git a/wram.asm b/wram.asm
index 44aa1f2..a1f2fc0 100644
--- a/wram.asm
+++ b/wram.asm
@@ -314,10 +314,11 @@ wTitleSequenceOpeningType:: ; cc38
wDebugWarpSelection:: ; cc39
db
- ds 6
-
-wcc40:: ; cc40
- db
+wMovementBufferCount:: db ; cc3a
+wMovementBufferObject:: db ; cc3b
+ ptrba wMovementBufferPointer ; cc3c
+wMovementBuffer:: ; cc3f
+ ds 55
SECTION "CC9C", WRAM0[$CC9C]