ref: 14c8cf5b4817d1cb5446349bd04949186f73093c
dir: /engine/npc_movement.asm/
Function6ec1: ; 6ec1 ld hl, OBJECT_PALETTE add hl, bc bit 5, [hl] jr z, .not_bit_5 ld hl, OBJECT_FLAGS1 add hl, bc bit 4, [hl] ; lost, uncomment next line to fix ; jr nz, .resume push hl push bc call Function6f2c pop bc pop hl ret c jr .resume .not_bit_5 ld hl, OBJECT_FLAGS1 add hl, bc bit 4, [hl] jr nz, .resume push hl push bc call Function6f07 pop bc pop hl ret c .resume bit 6, [hl] jr nz, .bit_6 push hl push bc call WillObjectBumpIntoSomeoneElse pop bc pop hl ret c .bit_6 bit 5, [hl] jr nz, .bit_5 push hl call HasObjectReachedMovementLimit pop hl ret c push hl call IsObjectMovingOffEdgeOfScreen pop hl ret c .bit_5 and a ret ; 6f07 Function6f07: ; 6f07 call Function6f5f ret c ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] ld hl, OBJECT_PALETTE add hl, bc bit OAM_PRIORITY, [hl] jp nz, Function6fa1 ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] ld d, a call GetTileCollision and a ; LANDTILE jr z, Function6f3e scf ret ; 6f2c Function6f2c: ; 6f2c call Function6f5f ret c ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] call GetTileCollision cp WATERTILE jr z, Function6f3e scf ret ; 6f3e Function6f3e: ; 6f3e ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] call Function6f7f ret nc push af ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld a, [hl] maskbits NUM_DIRECTIONS +- 1 ld e, a ld d, 0 ld hl, .data_6f5b add hl, de pop af and [hl] ret z scf ret ; 6f5b .data_6f5b db DOWN_MASK, UP_MASK, RIGHT_MASK, LEFT_MASK ; 6f5f Function6f5f: ; 6f5f ld hl, OBJECT_STANDING_TILE add hl, bc ld a, [hl] call Function6f7f ret nc push af ld hl, OBJECT_DIRECTION_WALKING add hl, bc maskbits NUM_DIRECTIONS +- 1 ld e, a ld d, 0 ld hl, .data_6f7b add hl, de pop af and [hl] ret z scf ret ; 6f7b .data_6f7b db UP_MASK, DOWN_MASK, LEFT_MASK, RIGHT_MASK ; 6f7f Function6f7f: ; 6f7f ld d, a and $f0 cp $b0 jr z, .done cp $c0 jr z, .done xor a ret .done ld a, d and 7 ld e, a ld d, 0 ld hl, .data_6f99 add hl, de ld a, [hl] scf ret ; 6f99 .data_6f99 db 8, 4, 1, 2 db 10, 6, 9, 5 ; 6fa1 Function6fa1: ; 6fa1 ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld a, [hl] maskbits NUM_DIRECTIONS +- 1 jr z, .down dec a jr z, .up dec a jr z, .left jr .right .down inc e push de inc d jr .continue .up push de inc d jr .continue .left push de inc e jr .continue .right inc d push de inc e .continue call GetCoordTile call GetTileCollision pop de and a ; LANDTILE jr nz, .not_land call GetCoordTile call GetTileCollision and a ; LANDTILE jr nz, .not_land xor a ret .not_land scf ret ; 6fd9 CheckFacingObject:: ; 6fd9 call GetFacingTileCoord ; Double the distance for counter tiles. call CheckCounterTile jr nz, .asm_6ff1 ld a, [PlayerStandingMapX] sub d cpl inc a add d ld d, a ld a, [PlayerStandingMapY] sub e cpl inc a add e ld e, a .asm_6ff1 ld bc, ObjectStructs ; redundant ld a, 0 ld [hMapObjectIndexBuffer], a call IsNPCAtCoord ret nc ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld a, [hl] cp STANDING jr z, .standing xor a ret .standing scf ret ; 7009 WillObjectBumpIntoSomeoneElse: ; 7009 ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] jr IsNPCAtCoord ; 7015 Unreferenced_Function7015: ld a, [hMapObjectIndexBuffer] call GetObjectStruct call .CheckWillBeFacingNPC call IsNPCAtCoord ret .CheckWillBeFacingNPC: ; 7021 ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] call GetSpriteDirection and a jr z, .down cp OW_UP jr z, .up cp OW_LEFT jr z, .left inc d ret .down inc e ret .up dec e ret .left dec d ret ; 7041 IsNPCAtCoord: ; 7041 ld bc, ObjectStructs xor a .loop ld [hObjectStructIndexBuffer], a call DoesObjectHaveASprite jr z, .next ld hl, OBJECT_FLAGS1 add hl, bc bit 7, [hl] jr nz, .next ld hl, OBJECT_PALETTE add hl, bc bit 7, [hl] jr z, .got call Function7171 jr nc, .ok jr .ok2 .got ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] cp d jr nz, .ok ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [hl] cp e jr nz, .ok .ok2 ld a, [hMapObjectIndexBuffer] ld l, a ld a, [hObjectStructIndexBuffer] cp l jr nz, .setcarry .ok ld hl, OBJECT_MAP_X add hl, bc ld a, [hl] cp d jr nz, .next ld hl, OBJECT_MAP_Y add hl, bc ld a, [hl] cp e jr nz, .next ld a, [hMapObjectIndexBuffer] ld l, a ld a, [hObjectStructIndexBuffer] cp l jr nz, .setcarry .next ld hl, OBJECT_STRUCT_LENGTH add hl, bc ld b, h ld c, l ld a, [hObjectStructIndexBuffer] inc a cp NUM_OBJECT_STRUCTS jr nz, .loop and a ret .setcarry scf ret ; 70a4 HasObjectReachedMovementLimit: ; 70a4 ld hl, OBJECT_RADIUS add hl, bc ld a, [hl] and a jr z, .nope and $f jr z, .check_y ld e, a ld d, a ld hl, OBJECT_INIT_X add hl, bc ld a, [hl] sub d ld d, a ld a, [hl] add e ld e, a ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] cp d jr z, .yes cp e jr z, .yes .check_y ld hl, OBJECT_RADIUS add hl, bc ld a, [hl] swap a and $f jr z, .nope ld e, a ld d, a ld hl, OBJECT_INIT_Y add hl, bc ld a, [hl] sub d ld d, a ld a, [hl] add e ld e, a ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [hl] cp d jr z, .yes cp e jr z, .yes .nope xor a ret .yes scf ret ; 70ed IsObjectMovingOffEdgeOfScreen: ; 70ed ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [XCoord] cp [hl] jr z, .check_y jr nc, .yes add $9 cp [hl] jr c, .yes .check_y ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [YCoord] cp [hl] jr z, .nope jr nc, .yes add $8 cp [hl] jr c, .yes .nope and a ret .yes scf ret ; 7113 Unreferenced_Function7113: ld a, [PlayerStandingMapX] ld d, a ld a, [PlayerStandingMapY] ld e, a ld bc, ObjectStructs xor a .loop ld [hObjectStructIndexBuffer], a call DoesObjectHaveASprite jr z, .next ld hl, OBJECT_MOVEMENTTYPE add hl, bc ld a, [hl] cp SPRITEMOVEDATA_SNORLAX jr nz, .not_snorlax call Function7171 jr c, .yes jr .next .not_snorlax ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [hl] cp e jr nz, .check_current_coords ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] cp d jr nz, .check_current_coords ld a, [hObjectStructIndexBuffer] cp $0 jr z, .next jr .yes .check_current_coords ld hl, OBJECT_MAP_Y add hl, bc ld a, [hl] cp e jr nz, .next ld hl, OBJECT_MAP_X add hl, bc ld a, [hl] cp d jr nz, .next jr .yes .next ld hl, OBJECT_STRUCT_LENGTH add hl, bc ld b, h ld c, l ld a, [hObjectStructIndexBuffer] inc a cp NUM_OBJECT_STRUCTS jr nz, .loop xor a ret .yes scf ret ; 7171 Function7171: ; 7171 ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, d sub [hl] jr c, .nope cp $2 jr nc, .nope ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, e sub [hl] jr c, .nope cp $2 jr nc, .nope scf ret .nope and a ret ; 718d