summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-06-18 13:46:21 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-06-18 13:46:21 -0400
commitfb26d95103ab3d657872fd77b96b36bf6507c2c5 (patch)
treee7e5a18c5128e9550adad0ab71c1a8ae0cffb19e
parentfb959c3c84062539b99afb143308b0f41eba6744 (diff)
More map objects
-rwxr-xr-xengine/map_object_action.asm260
-rwxr-xr-xengine/map_objects.asm488
-rw-r--r--home/map.asm6
-rw-r--r--wram.asm10
4 files changed, 757 insertions, 7 deletions
diff --git a/engine/map_object_action.asm b/engine/map_object_action.asm
new file mode 100755
index 00000000..40499b50
--- /dev/null
+++ b/engine/map_object_action.asm
@@ -0,0 +1,260 @@
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ ld l, a
+ ld h, $0
+ add hl, hl
+ add hl, hl
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call jp_hl
+ ret
+
+Pointers4460:
+ dw Function44a0, Function44a0
+ dw Function44b2, Function44a7
+ dw Function44be, Function44a7
+ dw Function44e1, Function44a7
+ dw Function4502, Function44a7
+ dw Function4512, Function44a0
+ dw Function4547, Function4547
+ dw Function4554, Function44a0
+ dw Function455b, Function455b
+ dw Function4562, Function4562
+ dw Function4569, Function457d
+ dw Function4584, Function44a7
+ dw Function4597, Function4597
+ dw Function459e, Function459e
+ dw Function45b3, Function44a0
+ dw Function45c6, Function44a0
+
+Function44a0
+ ld hl, $d
+ add hl, bc
+ ld [hl], $ff
+ ret
+
+Function44a7: ; 44a7 (1:44a7)
+ call GetSpriteDirection
+ or $0
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function44b2:
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ and $1
+ jr nz, Function44be
+ jp Function44a7
+
+Function44be:
+ ld hl, $4
+ add hl, bc
+ bit 3, [hl]
+ jp nz, Function44a7
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc a
+ and $f
+ ld [hl], a
+ rrca
+ rrca
+ and $3
+ ld d, a
+ call GetSpriteDirection
+ or $0
+ or d
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function44e1:
+ ld hl, $4
+ add hl, bc
+ bit 3, [hl]
+ jp nz, Function44a7
+ ld hl, $c
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ rrca
+ rrca
+ rrca
+ and $3
+ ld d, a
+ call GetSpriteDirection
+ or $0
+ or d
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function4502:
+ call Function4518
+ ld hl, $8
+ add hl, bc
+ ld a, [hl]
+ or $0
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function4512:
+ call Function4518
+ jp Function44a0
+
+Function4518: ; 4518 (1:4518)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ ld e, a
+ ld a, [hl]
+ inc a
+ and $f
+ ld d, a
+ cp $4
+ jr c, .asm_4531
+ ld d, $0
+ ld a, e
+ add $10
+ and $30
+ ld e, a
+.asm_4531
+ ld a, d
+ or e
+ ld [hl], a
+ swap e
+ ld d, $0
+ ld hl, .directions
+ add hl, de
+ ld a, [hl]
+ ld hl, $8
+ add hl, bc
+ ld [hl], a
+ ret
+
+.directions
+ db OW_DOWN, OW_RIGHT, OW_UP, OW_LEFT
+
+Function4547:
+ call GetSpriteDirection
+ rrca
+ rrca
+ add $10
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function4554:
+ ld hl, $d
+ add hl, bc
+ ld [hl], $15
+ ret
+
+Function455b:
+ ld hl, $d
+ add hl, bc
+ ld [hl], $14
+ ret
+
+Function4562:
+ ld hl, $d
+ add hl, bc
+ ld [hl], $17
+ ret
+
+Function4569:
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc a
+ and $f
+ ld [hl], a
+ and $8
+ jr z, Function457d
+ ld hl, $d
+ add hl, bc
+ ld [hl], $4
+ ret
+
+Function457d:
+ ld hl, $d
+ add hl, bc
+ ld [hl], $0
+ ret
+
+Function4584:
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc a
+ ld [hl], a
+ and $c
+ rrca
+ rrca
+ add $18
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function4597:
+ ld hl, $d
+ add hl, bc
+ ld [hl], $16
+ ret
+
+Function459e:
+ ld a, [wd558]
+ ld d, $17
+ cp $33
+ jr z, .asm_45ad
+ cp $47
+ jr z, .asm_45ad
+ ld d, $16
+.asm_45ad
+ ld hl, $d
+ add hl, bc
+ ld [hl], d
+ ret
+
+Function45b3:
+ ld hl, $c
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld hl, $d
+ add hl, bc
+ and $2
+ ld a, $1c
+ jr z, .asm_45c4
+ inc a
+.asm_45c4
+ ld [hl], a
+ ret
+
+Function45c6:
+ ld hl, $c
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld hl, $d
+ add hl, bc
+ and $4
+ ld a, $1e
+ jr z, .asm_45d7
+ inc a
+.asm_45d7
+ ld [hl], a
+ ret
diff --git a/engine/map_objects.asm b/engine/map_objects.asm
new file mode 100755
index 00000000..ab9bac58
--- /dev/null
+++ b/engine/map_objects.asm
@@ -0,0 +1,488 @@
+INCLUDE "engine/facings.asm"
+SpriteMovementData:: INCLUDE "data/map_objects.asm"
+
+DeleteMapObject:: ; 4358 (1:4358)
+ push bc
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ push af
+ ld h, b
+ ld l, c
+ ld bc, $28
+ xor a
+ call ByteFill
+ pop af
+ cp $ff
+ jr z, .asm_437a
+ bit 7, a
+ jr nz, .asm_437a
+ call GetMapObject
+ ld hl, $0
+ add hl, bc
+ ld [hl], $ff
+.asm_437a
+ pop bc
+ ret
+
+Function4442:
+ call .CheckObjectStillVisible
+ ret c
+ call .HandleStepType
+ call .HandleObjectAction
+ ret
+
+.CheckObjectStillVisible: ; 4387 (1:4387)
+ ld hl, $5
+ add hl, bc
+ res 6, [hl]
+ ld a, [wda03]
+ ld e, a
+ ld hl, $10
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43b3
+ cp $c
+ jr nc, .asm_43b3
+ ld a, [wda02]
+ ld e, a
+ ld hl, $11
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43b3
+ cp $b
+ jr nc, .asm_43b3
+ jr .asm_43dd
+
+.asm_43b3
+ ld hl, $5
+ add hl, bc
+ set 6, [hl]
+ ld a, [wda03]
+ ld e, a
+ ld hl, $14
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43df
+ cp $c
+ jr nc, .asm_43df
+ ld a, [wda02]
+ ld e, a
+ ld hl, $15
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43df
+ cp $b
+ jr nc, .asm_43df
+.asm_43dd
+ and a
+ ret
+
+.asm_43df
+ ld hl, $4
+ add hl, bc
+ bit 1, [hl]
+ jr nz, .asm_43ec
+ call DeleteMapObject
+ scf
+ ret
+
+.asm_43ec
+ ld hl, $5
+ add hl, bc
+ set 6, [hl]
+ and a
+ ret
+
+.HandleStepType: ; 43f4 (1:43f4)
+ ld hl, $9
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_440a
+ ld hl, $5
+ add hl, bc
+ bit 5, [hl]
+ jr nz, .asm_4427
+ cp $1
+ jr z, .asm_4415
+ jr .asm_4422
+
+.asm_440a
+ call ObjectMovementReset
+ ld hl, $5
+ add hl, bc
+ bit 5, [hl]
+ jr nz, .asm_4427
+.asm_4415
+ call Function47b6
+ ld hl, $9
+ add hl, bc
+ ld a, [hl]
+ and a
+ ret z
+ cp $1
+ ret z
+.asm_4422
+ ld hl, $4b1e
+ rst JumpTable
+ ret
+
+.asm_4427
+ ret
+
+.HandleObjectAction: ; 4428 (1:4428)
+ ld hl, $4
+ add hl, bc
+ bit 0, [hl]
+ jr nz, Function44a0
+ ld hl, $5
+ add hl, bc
+ bit 6, [hl]
+ jr nz, Function44a0
+ bit 5, [hl]
+ jr nz, asm_4449
+ ld de, Pointers4460
+ jr asm_444e
+
+Function4441:
+ ld hl, $4
+ add hl, bc
+ bit 0, [hl]
+ jr nz, Function44a0
+asm_4449
+ ld de, Pointers4460 + 2
+ jr asm_444e
+
+asm_444e
+INCLUDE "engine/map_object_action.asm"
+
+CopyNextCoordsTileToStandingCoordsTile: ; 45d9 (1:45d9)
+ ld hl, $10
+ add hl, bc
+ ld a, [hl]
+ ld hl, $12
+ add hl, bc
+ ld [hl], a
+ ld hl, $11
+ add hl, bc
+ ld a, [hl]
+ ld hl, $13
+ add hl, bc
+ ld [hl], a
+ ld hl, $e
+ add hl, bc
+ ld a, [hl]
+ ld hl, $f
+ add hl, bc
+ ld [hl], a
+ call SetGrassPriority
+ ld hl, $e
+ add hl, bc
+ ld a, [hl]
+ call UselessAndA
+ ret
+
+Function4603:
+ ld hl, $12
+ add hl, bc
+ ld a, [hl]
+ ld hl, $10
+ add hl, bc
+ ld [hl], a
+ ld hl, $13
+ add hl, bc
+ ld a, [hl]
+ ld hl, $11
+ add hl, bc
+ ld [hl], a
+ ret
+
+UpdateGrassPriority:
+ ld hl, $5
+ add hl, bc
+ bit 3, [hl]
+ jr z, .asm_4628
+ ld hl, $e
+ add hl, bc
+ ld a, [hl]
+ call SetGrassPriority
+.asm_4628
+ ld hl, $e
+ add hl, bc
+ ld a, [hl]
+ call UselessAndA
+ ret c
+ ld hl, $f
+ add hl, bc
+ ld a, [hl]
+ call UselessAndA
+ ret
+
+SetGrassPriority: ; 463a (1:463a)
+ call CheckSuperTallGrassTile
+ jr z, .asm_4644
+ call CheckGrassTile
+ jr c, .asm_464b
+.asm_4644
+ ld hl, $5
+ add hl, bc
+ set 3, [hl]
+ ret
+
+.asm_464b
+ ld hl, $5
+ add hl, bc
+ res 3, [hl]
+ ret
+
+UselessAndA: ; 4652 (1:4652)
+ and a
+ ret
+
+EndSpriteMovement:
+ xor a
+ ld hl, $c
+ add hl, bc
+ ld [hl], a
+ ld hl, $1b
+ add hl, bc
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld hl, $7
+ add hl, bc
+ ld [hl], $ff
+ ret
+
+InitStep:
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ld hl, $4
+ add hl, bc
+ bit 2, [hl]
+ jr nz, GetNextTile
+ add a
+ add a
+ and $c
+ ld hl, $8
+ add hl, bc
+ ld [hl], a
+GetNextTile:
+ call GetStepVector
+ ld hl, $a
+ add hl, bc
+ ld [hl], a
+ ld a, d
+ call GetStepVectorSign
+ ld hl, $12
+ add hl, bc
+ add [hl]
+ ld hl, $10
+ add hl, bc
+ ld [hl], a
+ ld d, a
+ ld a, e
+ call GetStepVectorSign
+ ld hl, $13
+ add hl, bc
+ add [hl]
+ ld hl, $11
+ add hl, bc
+ ld [hl], a
+ ld e, a
+ push bc
+ call GetCoordTile
+ pop bc
+ ld hl, $e
+ add hl, bc
+ ld [hl], a
+ ret
+
+AddStepVector: ; 46b0 (1:46b0)
+ call GetStepVector
+ ld hl, $17
+ add hl, bc
+ ld a, [hl]
+ add d
+ ld [hl], a
+ ld hl, $18
+ add hl, bc
+ ld a, [hl]
+ add e
+ ld [hl], a
+ ret
+
+GetStepVector: ; 46c2 (1:46c2)
+ ld hl, $7
+ add hl, bc
+ ld a, [hl]
+ and $f
+ add a
+ add a
+ ld l, a
+ ld h, $0
+ ld de, StepVectors
+ add hl, de
+ ld d, [hl]
+ inc hl
+ ld e, [hl]
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ret
+
+StepVectors: ; 46d9
+; x, y, duration, speed
+ ; slow
+ db 0, 1, 16, 1
+ db 0, -1, 16, 1
+ db -1, 0, 16, 1
+ db 1, 0, 16, 1
+ ; normal
+ db 0, 2, 8, 2
+ db 0, -2, 8, 2
+ db -2, 0, 8, 2
+ db 2, 0, 8, 2
+ ; fast
+ db 0, 4, 4, 4
+ db 0, -4, 4, 4
+ db -4, 0, 4, 4
+ db 4, 0, 4, 4
+
+GetStepVectorSign: ; 4709 (1:4709)
+ add a
+ ret z
+ ld a, $1
+ ret nc
+ ld a, $ff
+ ret
+
+UpdatePlayerStep:
+ ld hl, $7
+ add hl, bc
+ ld a, [hl]
+ and $3
+ ld [wPlayerStepDirection], a
+ call AddStepVector
+ ld a, [wPlayerStepVectorX]
+ add d
+ ld [wPlayerStepVectorX], a
+ ld a, [wPlayerStepVectorY]
+ add e
+ ld [wPlayerStepVectorY], a
+ ld hl, wPlayerStepFlags
+ set 5, [hl]
+ ret
+
+Function4732:
+ push bc
+ ld e, a
+ ld d, $0
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ call GetMapObject
+ add hl, de
+ ld a, [hl]
+ pop bc
+ ret
+
+RestoreDefaultMovement:
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_4756
+ push bc
+ call GetMapObject
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ pop bc
+ ret
+
+.asm_4756
+ ld a, $6
+ ret
+
+ClearObjectMovementByteIndex:
+ ld hl, $1b
+ add hl, bc
+ ld [hl], $0
+ ret
+
+IncrementObjectMovementByteIndex:
+ ld hl, $1b
+ add hl, bc
+ inc [hl]
+ ret
+
+DecrementObjectMovementByteIndex:
+ ld hl, $1b
+ add hl, bc
+ dec [hl]
+ ret
+
+MovementAnonymousJumptable:
+ ld hl, $1b
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ rst JumpTable
+ ret
+
+ClearObjectStructField28:
+ ld hl, $1c
+ add hl, bc
+ ld [hl], $0
+ ret
+
+IncrementObjectStructField28:
+ ld hl, $1c
+ add hl, bc
+ inc [hl]
+ ret
+
+Object28AnonymousJumptable:
+ ld hl, $1c
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ rst JumpTable
+ ret
+
+GetValueObjectStructField28:
+ ld hl, $1c
+ add hl, bc
+ ld a, [hl]
+ ret
+
+SetValueObjectStructField28:
+ ld hl, $1c
+ add hl, bc
+ ld [hl], a
+ ret
+
+ObjectMovementReset:
+ dr $4795, $47b6
+Function47b6:
+ dr $47b6, $557f
+Function557f::
+ dr $557f, $5730
+Function5730::
+ dr $5730, $5795
+StopFollow::
+ dr $5795, $5896
+UpdateSprites_::
+ dr $5896, $58c5
diff --git a/home/map.asm b/home/map.asm
index ac5cf541..015785c0 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -294,7 +294,7 @@ Function212d::
ret
Function2156::
- ld a, [wce86]
+ ld a, [wPlayerStepDirection]
cp $ff
ret z
and a
@@ -351,7 +351,7 @@ Function2156::
ret
Function21a3::
- ld a, [wce86]
+ ld a, [wPlayerStepDirection]
and a
jp z, Function2263
cp $1
@@ -1659,7 +1659,7 @@ SaveScreen::
ld a, [wMapWidth]
add $6
ld [hConnectionStripLength], a
- ld a, [wce86]
+ ld a, [wPlayerStepDirection]
and a
jr z, .asm_29bc
cp $1
diff --git a/wram.asm b/wram.asm
index 8673e7e1..5b8bf8e6 100644
--- a/wram.asm
+++ b/wram.asm
@@ -2063,10 +2063,12 @@ wce7f:: ds 1 ; ce7f
wce80:: ds 1 ; ce80
wce81:: ds 1 ; ce81
wce82:: ds 1 ; ce82
-wce83:: ds 1 ; ce83
-wce84:: ds 1 ; ce84
-wce85:: ds 1 ; ce85
-wce86:: ds 1 ; ce86
+
+wPlayerStepVectorX:: ds 1 ; ce83
+wPlayerStepVectorY:: ds 1 ; ce84
+wPlayerStepFlags:: ds 1 ; ce85
+wPlayerStepDirection:: ds 1 ; ce86
+
wce87:: ds 1 ; ce87
wce88:: ds 1 ; ce88
wce89:: ds 1 ; ce89