pokegold/engine/npc_movement.asm
2016-06-22 08:33:55 -04:00

526 lines
6.1 KiB
NASM
Executable File

CheckNPCMovementPermissions: ; 6fa0 (1:6fa0)
ld hl, $6
add hl, bc
bit 5, [hl]
jr z, .asm_6fb8
ld hl, $4
add hl, bc
bit 4, [hl]
push hl
push bc
call Function700b
pop bc
pop hl
ret c
jr .asm_6fc8
.asm_6fb8
ld hl, $4
add hl, bc
bit 4, [hl]
jr nz, .asm_6fc8
push hl
push bc
call Function6fe6
pop bc
pop hl
ret c
.asm_6fc8
bit 6, [hl]
jr nz, .asm_6fd4
push hl
push bc
call WillPersonBumpIntoSomeoneElse
pop bc
pop hl
ret c
.asm_6fd4
bit 5, [hl]
jr nz, .asm_6fe4
push hl
call HasPersonReachedMovementLimit
pop hl
ret c
push hl
call IsPersonMovingOffEdgeOfScreen
pop hl
ret c
.asm_6fe4
and a
ret
Function6fe6: ; 6fe6 (1:6fe6)
call Function703e
ret c
ld hl, $10
add hl, bc
ld d, [hl]
ld hl, $11
add hl, bc
ld e, [hl]
ld hl, $6
add hl, bc
bit 7, [hl]
jp nz, Function7080
ld hl, $e
add hl, bc
ld a, [hl]
ld d, a
call GetTileCollision
and a
jr z, Function701d
scf
ret
Function700b: ; 700b (1:700b)
call Function703e
ret c
ld hl, $e
add hl, bc
ld a, [hl]
call GetTileCollision
cp $1
jr z, Function701d
scf
ret
Function701d
ld hl, $e
add hl, bc
ld a, [hl]
call Function705e
ret nc
push af
ld hl, $7
add hl, bc
ld a, [hl]
and $3
ld e, a
ld d, $0
ld hl, .data_703a
add hl, de
pop af
and [hl]
ret z
scf
ret
.data_703a
db 1 << DOWN, 1 << UP, 1 << RIGHT, 1 << LEFT
Function703e: ; 703e (1:703e)
ld hl, $f
add hl, bc
ld a, [hl]
call Function705e
ret nc
push af
ld hl, $7
add hl, bc
and $3
ld e, a
ld d, $0
ld hl, .data_705a
add hl, de
pop af
and [hl]
ret z
scf
ret
.data_705a
db 1 << UP, 1 << DOWN, 1 << LEFT, 1 << RIGHT
Function705e: ; 705e (1:705e)
ld d, a
and $f0
cp $b0
jr z, .asm_706b
cp $c0
jr z, .asm_706b
xor a
ret
.asm_706b
ld a, d
and $7
ld e, a
ld d, $0
ld hl, .data_7078
add hl, de
ld a, [hl]
scf
ret
.data_7078
db 8, 4, 1, 2
db 10, 6, 9, 5
Function7080: ; 7080 (1:7080)
ld hl, $7
add hl, bc
ld a, [hl]
and $3
jr z, .asm_7091
dec a
jr z, .asm_7096
dec a
jr z, .asm_709a
jr .asm_709e
.asm_7091
inc e
push de
inc d
jr .asm_70a1
.asm_7096
push de
inc d
jr .asm_70a1
.asm_709a
push de
inc e
jr .asm_70a1
.asm_709e
inc d
push de
inc e
.asm_70a1
call GetCoordTile
call GetTileCollision
pop de
and a
jr nz, .asm_70b6
call GetCoordTile
call GetTileCollision
and a
jr nz, .asm_70b6
xor a
ret
.asm_70b6
scf
ret
CheckFacingObject:
call GetFacingTileCoord
call CheckCounterTile
jr nz, .asm_70d0
ld a, [wPlayerStandingMapX]
sub d
cpl
inc a
add d
ld d, a
ld a, [wPlayerStandingMapY]
sub e
cpl
inc a
add e
ld e, a
.asm_70d0
ld bc, wObjectStructs
ld a, $0
ld [hMapObjectIndexBuffer], a
call Function7120
ret nc
ld hl, $7
add hl, bc
ld a, [hl]
cp $ff
jr z, .asm_70e6
xor a
ret
.asm_70e6
scf
ret
WillPersonBumpIntoSomeoneElse: ; 70e8 (1:70e8)
ld hl, $10
add hl, bc
ld d, [hl]
ld hl, $11
add hl, bc
ld e, [hl]
jr Function7120
Function70f4:
ld a, [hMapObjectIndexBuffer]
call GetObjectStruct
call Function7100
call Function7120
ret
Function7100: ; 7100 (1:7100)
ld hl, $10
add hl, bc
ld d, [hl]
ld hl, $11
add hl, bc
ld e, [hl]
call GetSpriteDirection
and a
jr z, .asm_711a
cp $4
jr z, .asm_711c
cp $8
jr z, .asm_711e
inc d
ret
.asm_711a
inc e
ret
.asm_711c
dec e
ret
.asm_711e
dec d
ret
Function7120: ; 7120 (1:7120)
ld bc, wPlayerStruct
xor a
.asm_7124
ld [hObjectStructIndexBuffer], a
call DoesObjectHaveASprite
jr z, .asm_7172
ld hl, $4
add hl, bc
bit 7, [hl]
jr nz, .asm_7172
ld hl, $6
add hl, bc
bit 7, [hl]
jr z, .asm_7142
call Function7250
jr nc, .asm_715a
jr .asm_7152
.asm_7142
ld hl, $10
add hl, bc
ld a, [hl]
cp d
jr nz, .asm_715a
ld hl, $11
add hl, bc
ld a, [hl]
cp e
jr nz, .asm_715a
.asm_7152
ld a, [hMapObjectIndexBuffer]
ld l, a
ld a, [hConnectedMapWidth]
cp l
jr nz, .asm_7181
.asm_715a
ld hl, $12
add hl, bc
ld a, [hl]
cp d
jr nz, .asm_7172
ld hl, $13
add hl, bc
ld a, [hl]
cp e
jr nz, .asm_7172
ld a, [hConnectionStripLength]
ld l, a
ld a, [hObjectStructIndexBuffer]
cp l
jr nz, .asm_7181
.asm_7172
ld hl, $28
add hl, bc
ld b, h
ld c, l
ld a, [hConnectedMapWidth]
inc a
cp $d
jr nz, .asm_7124
and a
ret
.asm_7181
scf
ret
HasPersonReachedMovementLimit: ; 7183 (1:7183)
ld hl, $16
add hl, bc
ld a, [hl]
and a
jr z, .asm_71c8
and $f
jr z, .asm_71a6
ld e, a
ld d, a
ld hl, $14
add hl, bc
ld a, [hl]
sub d
ld d, a
ld a, [hl]
add e
ld e, a
ld hl, $10
add hl, bc
ld a, [hl]
cp d
jr z, .asm_71ca
cp e
jr z, .asm_71ca
.asm_71a6
ld hl, $16
add hl, bc
ld a, [hl]
swap a
and $f
jr z, .asm_71c8
ld e, a
ld d, a
ld hl, $15
add hl, bc
ld a, [hl]
sub d
ld d, a
ld a, [hl]
add e
ld e, a
ld hl, $11
add hl, bc
ld a, [hl]
cp d
jr z, .asm_71ca
cp e
jr z, .asm_71ca
.asm_71c8
xor a
ret
.asm_71ca
scf
ret
IsPersonMovingOffEdgeOfScreen: ; 71cc (1:71cc)
ld hl, $10
add hl, bc
ld a, [wXCoord]
cp [hl]
jr z, .asm_71dd
jr nc, .asm_71f0
add $9
cp [hl]
jr c, .asm_71f0
.asm_71dd
ld hl, $11
add hl, bc
ld a, [wYCoord]
cp [hl]
jr z, .asm_71ee
jr nc, .asm_71f0
add $8
cp [hl]
jr c, .asm_71f0
.asm_71ee
and a
ret
.asm_71f0
scf
ret
Function71f2
ld a, [wPlayerStandingMapX]
ld d, a
ld a, [wPlayerStandingMapY]
ld e, a
ld bc, wObjectStructs
xor a
.asm_71fe
ld [hConnectedMapWidth], a
call DoesObjectHaveASprite
jr z, .asm_723f
ld hl, $3
add hl, bc
ld a, [hl]
cp $15
jr nz, .asm_7215
call Function7250
jr c, .asm_724e
jr .asm_723f
.asm_7215
ld hl, $11
add hl, bc
ld a, [hl]
cp e
jr nz, .asm_722d
ld hl, $10
add hl, bc
ld a, [hl]
cp d
jr nz, .asm_722d
ld a, [hObjectStructIndexBuffer]
cp $0
jr z, .asm_723f
jr .asm_724e
.asm_722d
ld hl, $13
add hl, bc
ld a, [hl]
cp e
jr nz, .asm_723f
ld hl, $12
add hl, bc
ld a, [hl]
cp d
jr nz, .asm_723f
jr .asm_724e
.asm_723f
ld hl, $28
add hl, bc
ld b, h
ld c, l
ld a, [hConnectedMapWidth]
inc a
cp $d
jr nz, .asm_71fe
xor a
ret
.asm_724e
scf
ret
Function7250: ; 7250 (1:7250)
ld hl, $10
add hl, bc
ld a, d
sub [hl]
jr c, .asm_726a
cp $2
jr nc, .asm_726a
ld hl, $11
add hl, bc
ld a, e
sub [hl]
jr c, .asm_726a
cp $2
jr nc, .asm_726a
scf
ret
.asm_726a
and a
ret