diff options
Diffstat (limited to 'engine/overworld/player_object.asm')
-rwxr-xr-x | engine/overworld/player_object.asm | 603 |
1 files changed, 333 insertions, 270 deletions
diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm index 627e3d3f..28323eba 100755 --- a/engine/overworld/player_object.asm +++ b/engine/overworld/player_object.asm @@ -5,38 +5,38 @@ BlankScreen: call ClearBGPalettes call ClearSprites hlcoord 0, 0 - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld bc, wTilemapEnd - wTilemap ld a, " " call ByteFill - ld hl, wAttrmap - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + hlcoord 0, 0, wAttrmap + ld bc, wAttrmapEnd - wAttrmap ld a, $7 call ByteFill call WaitBGMap2 call SetPalettes ret -SpawnPlayer: ; 861a (2:461a) - ld a, $ff +SpawnPlayer: + ld a, -1 ld [wObjectFollow_Leader], a ld [wObjectFollow_Follower], a - ld a, $0 - ld hl, .PlayerObjectTemplate + ld a, PLAYER + ld hl, PlayerObjectTemplate call CopyPlayerObjectTemplate - ld b, $0 + ld b, PLAYER call PlayerSpawn_ConvertCoords - ld a, $0 + ld a, PLAYER_OBJECT ldh [hObjectStructIndexBuffer], a ld de, wObjectStructs - ld a, $0 + ld a, PLAYER_OBJECT ldh [hMapObjectIndexBuffer], a ld bc, wMapObjects call CopyMapObjectToObjectStruct - ld a, $0 + ld a, PLAYER ld [wCenteredObject], a ret -.PlayerObjectTemplate +PlayerObjectTemplate: ; A dummy map object used to initialize the player object. ; Shorter than the actual amount copied by two bytes. ; Said bytes seem to be unused. @@ -47,10 +47,10 @@ CopyDECoordsToMapObject:: ld a, b call GetMapObject pop de - ld hl, $3 + ld hl, MAPOBJECT_X_COORD add hl, bc ld [hl], d - ld hl, $2 + ld hl, MAPOBJECT_Y_COORD add hl, bc ld [hl], e ret @@ -58,10 +58,10 @@ CopyDECoordsToMapObject:: PlayerSpawn_ConvertCoords: push bc ld a, [wXCoord] - add $4 + add 4 ld d, a ld a, [wYCoord] - add $4 + add 4 ld e, a pop bc call CopyDECoordsToMapObject @@ -71,13 +71,14 @@ WriteObjectXY:: ld a, b call CheckObjectVisibility ret c - ld hl, $10 + + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] - ldh a, [hConnectionStripLength] + ldh a, [hMapObjectIndexBuffer] ld b, a call CopyDECoordsToMapObject and a @@ -85,23 +86,23 @@ WriteObjectXY:: RefreshPlayerCoords: ld a, [wXCoord] - add $4 + add 4 ld d, a ld hl, wPlayerStandingMapX sub [hl] ld [hl], d - ld hl, wPlayerObjectXCoord + ld hl, wMapObjects + MAPOBJECT_X_COORD ld [hl], d ld hl, wPlayerLastMapX ld [hl], d ld d, a ld a, [wYCoord] - add $4 + add 4 ld e, a ld hl, wPlayerStandingMapY sub [hl] ld [hl], e - ld hl, wPlayerObjectYCoord + ld hl, wMapObjects + MAPOBJECT_Y_COORD ld [hl], e ld hl, wPlayerLastMapY ld [hl], e @@ -112,340 +113,375 @@ RefreshPlayerCoords: ret SpawnPlayer2: - ld a, $1 + ld a, 1 ld hl, .PlayerObjectTemplate call CopyPlayerObjectTemplate - ld b, $1 + ld b, 1 call PlayerSpawn_ConvertCoords ret .PlayerObjectTemplate: object_event -4, -4, SPRITE_CHRIS, SPRITEMOVEDATA_12, 15, 15, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, 0, -1 -CopyObjectStruct:: ; 86d7 (2:46d7) +CopyObjectStruct:: call CheckObjectMask and a - ret nz - ld hl, wPlayerStructEnd - ld a, $1 - ld de, $28 -.asm_86e4 + ret nz ; masked + + ld hl, wObjectStructs + OBJECT_LENGTH * 1 + ld a, 1 + ld de, OBJECT_LENGTH +.loop ldh [hObjectStructIndexBuffer], a ld a, [hl] and a - jr z, .asm_86f4 + jr z, .done add hl, de - ldh a, [hConnectedMapWidth] + ldh a, [hObjectStructIndexBuffer] inc a - cp $d - jr nz, .asm_86e4 + cp NUM_OBJECT_STRUCTS + jr nz, .loop scf - ret + ret ; overflow -.asm_86f4 +.done ld d, h ld e, l call CopyMapObjectToObjectStruct ld a, [wVramState] bit 7, a ret z - ld hl, $5 + + ld hl, OBJECT_FLAGS2 add hl, de set 5, [hl] ret -CopyMapObjectToObjectStruct: ; 8706 (2:4706) - call CopyMapObjectToTempObject +CopyMapObjectToObjectStruct: + call .CopyMapObjectToTempObject call CopyTempObjectToObjectStruct ret -CopyMapObjectToTempObject: ; 870d (2:470d) - ldh a, [hConnectedMapWidth] - ld hl, $0 +.CopyMapObjectToTempObject: + ldh a, [hObjectStructIndexBuffer] + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld [hl], a + ldh a, [hMapObjectIndexBuffer] ld [wTempObjectCopyMapObjectIndex], a - ld hl, $1 + + ld hl, MAPOBJECT_SPRITE add hl, bc ld a, [hl] - ld [wce9a], a + ld [wTempObjectCopySprite], a + call GetSpriteVTile - ld [wce9b], a + ld [wTempObjectCopySpriteVTile], a + ld a, [hl] call GetSpritePalette - ld [wce9c], a - ld hl, $8 + ld [wTempObjectCopyPalette], a + + ld hl, MAPOBJECT_COLOR add hl, bc ld a, [hl] and $f0 - jr z, .asm_873e + jr z, .skip_color_override swap a - and $7 - ld [wce9c], a -.asm_873e - ld hl, $4 + and PALETTE_MASK + ld [wTempObjectCopyPalette], a + +.skip_color_override + ld hl, MAPOBJECT_MOVEMENT add hl, bc ld a, [hl] - ld [wce9d], a - ld hl, $9 + ld [wTempObjectCopyMovement], a + + ld hl, MAPOBJECT_RANGE add hl, bc ld a, [hl] ld [wTempObjectCopyRange], a - ld hl, $3 + + ld hl, MAPOBJECT_X_COORD add hl, bc ld a, [hl] - ld [wce9f], a - ld hl, $2 + ld [wTempObjectCopyX], a + + ld hl, MAPOBJECT_Y_COORD add hl, bc ld a, [hl] - ld [wcea0], a - ld hl, $5 + ld [wTempObjectCopyY], a + + ld hl, MAPOBJECT_RADIUS add hl, bc ld a, [hl] - ld [wcea1], a + ld [wTempObjectCopyRadius], a ret InitializeVisibleSprites: ld bc, wMap2Object - ld a, $2 -.asm_876c - ldh [hConnectionStripLength], a - ld hl, $1 + ld a, 2 +.loop + ldh [hMapObjectIndexBuffer], a + ld hl, MAPOBJECT_SPRITE add hl, bc ld a, [hl] and a - jr z, .asm_87ab - ld hl, $0 + jr z, .next + + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] - cp $ff - jr nz, .asm_87ab + cp -1 + jr nz, .next + ld a, [wXCoord] ld d, a ld a, [wYCoord] ld e, a - ld hl, $3 + + ld hl, MAPOBJECT_X_COORD add hl, bc ld a, [hl] - add $1 + add 1 sub d - jr c, .asm_87ab - cp $c - jr nc, .asm_87ab - ld hl, $2 + jr c, .next + + cp MAPOBJECT_SCREEN_WIDTH + jr nc, .next + + ld hl, MAPOBJECT_Y_COORD add hl, bc ld a, [hl] - add $1 + add 1 sub e - jr c, .asm_87ab - cp $b - jr nc, .asm_87ab + jr c, .next + + cp MAPOBJECT_SCREEN_HEIGHT + jr nc, .next + push bc call CopyObjectStruct pop bc - jp c, Function87b9 -.asm_87ab - ld hl, $10 + jp c, .ret + +.next + ld hl, MAPOBJECT_LENGTH add hl, bc ld b, h ld c, l ldh a, [hMapObjectIndexBuffer] inc a - cp $10 - jr nz, .asm_876c + cp NUM_OBJECTS + jr nz, .loop ret -Function87b9: ; 87b9 (2:47b9) +.ret ret CheckObjectEnteringVisibleRange:: nop ld a, [wPlayerStepDirection] - cp $ff + cp STANDING ret z - ld hl, .Jumptable + ld hl, .dw rst JumpTable ret -.Jumptable: - dw Function87d5 - dw Function87ce - dw Function8822 - dw Function8829 +.dw + dw .Down + dw .Up + dw .Left + dw .Right -Function87ce: +.Up: ld a, [wYCoord] - sub $1 - jr asm_87da + sub 1 + jr .Vertical -Function87d5: +.Down: ld a, [wYCoord] - add $9 -asm_87da: + add 9 +.Vertical: ld d, a ld a, [wXCoord] ld e, a ld bc, wMap2Object - ld a, $2 -.asm_87e4 - ldh [hConnectionStripLength], a - ld hl, $1 + ld a, 2 +.loop_v + ldh [hMapObjectIndexBuffer], a + ld hl, MAPOBJECT_SPRITE add hl, bc ld a, [hl] and a - jr z, .asm_8814 - ld hl, $2 + jr z, .next_v + ld hl, MAPOBJECT_Y_COORD add hl, bc ld a, d cp [hl] - jr nz, .asm_8814 - ld hl, $0 + jr nz, .next_v + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] - cp $ff - jr nz, .asm_8814 - ld hl, $3 + cp -1 + jr nz, .next_v + ld hl, MAPOBJECT_X_COORD add hl, bc ld a, [hl] - add $1 + add 1 sub e - jr c, .asm_8814 - cp $c - jr nc, .asm_8814 + jr c, .next_v + cp MAPOBJECT_SCREEN_WIDTH + jr nc, .next_v push de push bc call CopyObjectStruct pop bc pop de -.asm_8814 - ld hl, $10 + +.next_v + ld hl, MAPOBJECT_LENGTH add hl, bc ld b, h ld c, l ldh a, [hMapObjectIndexBuffer] inc a - cp $10 - jr nz, .asm_87e4 + cp NUM_OBJECTS + jr nz, .loop_v ret -Function8822: +.Left: ld a, [wXCoord] - sub $1 - jr asm_882e + sub 1 + jr .Horizontal -Function8829: +.Right: ld a, [wXCoord] - add $a -asm_882e: + add 10 +.Horizontal: ld e, a ld a, [wYCoord] ld d, a ld bc, wMap2Object - ld a, $2 -.asm_8838 - ldh [hConnectionStripLength], a - ld hl, $1 + ld a, 2 +.loop_h + ldh [hMapObjectIndexBuffer], a + ld hl, MAPOBJECT_SPRITE add hl, bc ld a, [hl] and a - jr z, .asm_8868 - ld hl, $3 + jr z, .next_h + ld hl, MAPOBJECT_X_COORD add hl, bc ld a, e cp [hl] - jr nz, .asm_8868 - ld hl, $0 + jr nz, .next_h + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] - cp $ff - jr nz, .asm_8868 - ld hl, $2 + cp -1 + jr nz, .next_h + ld hl, MAPOBJECT_Y_COORD add hl, bc ld a, [hl] - add $1 + add 1 sub d - jr c, .asm_8868 - cp $b - jr nc, .asm_8868 + jr c, .next_h + cp MAPOBJECT_SCREEN_HEIGHT + jr nc, .next_h push de push bc call CopyObjectStruct pop bc pop de -.asm_8868 - ld hl, $10 + +.next_h + ld hl, MAPOBJECT_LENGTH add hl, bc ld b, h ld c, l - ldh a, [hConnectionStripLength] + ldh a, [hMapObjectIndexBuffer] inc a - cp $10 - jr nz, .asm_8838 + cp NUM_OBJECTS + jr nz, .loop_h ret -CopyTempObjectToObjectStruct: ; 8876 (2:4876) +CopyTempObjectToObjectStruct: ld a, [wTempObjectCopyMapObjectIndex] - ld hl, $1 + ld hl, OBJECT_MAP_OBJECT_INDEX add hl, de ld [hl], a - ld a, [wce9d] + + ld a, [wTempObjectCopyMovement] call CopySpriteMovementData - ld a, [wce9c] - ld hl, $6 + + ld a, [wTempObjectCopyPalette] + ld hl, OBJECT_PALETTE add hl, de or [hl] ld [hl], a - ld a, [wcea0] - call InitTempObjectYCoord - ld a, [wce9f] - call InitTempObjectXCoord - ld a, [wce9a] - ld hl, $0 + + ld a, [wTempObjectCopyY] + call .InitYCoord + + ld a, [wTempObjectCopyX] + call .InitXCoord + + ld a, [wTempObjectCopySprite] + ld hl, OBJECT_SPRITE add hl, de ld [hl], a - ld a, [wce9b] - ld hl, $2 + + ld a, [wTempObjectCopySpriteVTile] + ld hl, OBJECT_SPRITE_TILE add hl, de ld [hl], a - ld hl, $9 + + ld hl, OBJECT_STEP_TYPE add hl, de - ld [hl], $0 - ld hl, $d + ld [hl], STEP_TYPE_00 + + ld hl, OBJECT_FACING_STEP add hl, de - ld [hl], $ff - ld a, [wcea1] - call InitTempObjectRadius + ld [hl], STANDING + + ld a, [wTempObjectCopyRadius] + call .InitRadius + ld a, [wTempObjectCopyRange] - ld hl, $20 + ld hl, OBJECT_RANGE add hl, de ld [hl], a + and a ret -InitTempObjectYCoord: ; 88c5 (2:48c5) - ld hl, $15 +.InitYCoord: + ld hl, OBJECT_INIT_Y add hl, de ld [hl], a - ld hl, $11 + + ld hl, OBJECT_NEXT_MAP_Y add hl, de ld [hl], a + ld hl, wYCoord sub [hl] and $f swap a ld hl, wPlayerBGMapOffsetY sub [hl] - ld hl, $18 + ld hl, OBJECT_SPRITE_Y add hl, de ld [hl], a ret -InitTempObjectXCoord: ; 88e1 (2:48e1) - ld hl, $14 +.InitXCoord: + ld hl, OBJECT_INIT_X add hl, de ld [hl], a - ld hl, $10 + ld hl, OBJECT_NEXT_MAP_X add hl, de ld [hl], a ld hl, wXCoord @@ -454,12 +490,12 @@ InitTempObjectXCoord: ; 88e1 (2:48e1) swap a ld hl, wPlayerBGMapOffsetX sub [hl] - ld hl, $17 + ld hl, OBJECT_SPRITE_X add hl, de ld [hl], a ret -InitTempObjectRadius: ; 88fd (2:48fd) +.InitRadius: ld h, a inc a and $f @@ -468,7 +504,7 @@ InitTempObjectRadius: ; 88fd (2:48fd) add $10 and $f0 or l - ld hl, $16 + ld hl, OBJECT_RADIUS add hl, de ld [hl], a ret @@ -480,75 +516,84 @@ TrainerWalkToPlayer:: call AppendToMovementBuffer ld a, [wWalkingIntoNPC] dec a - jr z, .asm_892b + jr z, .TerminateStep ldh a, [hLastTalked] ld b, a ld c, PLAYER - ld d, $1 - call GetTrainerPathToPlayer + ld d, 1 + call .GetPathToPlayer call DecrementMovementBufferCount -.asm_892b + +.TerminateStep: ld a, movement_step_end call AppendToMovementBuffer ret -GetTrainerPathToPlayer: ; 8931 (2:4931) +.GetPathToPlayer: push de push bc +; get player object struct, load to de ld a, c call GetMapObject - ld hl, $0 + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] call GetObjectStruct ld d, b ld e, c + +; get last talked object struct, load to bc pop bc ld a, b call GetMapObject - ld hl, $0 + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] call GetObjectStruct - ld hl, $10 + +; get last talked coords, load to bc + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld c, [hl] ld b, a - ld hl, $10 + +; get player coords, load to de + ld hl, OBJECT_NEXT_MAP_X add hl, de ld a, [hl] - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, de ld e, [hl] ld d, a + pop af call ComputePathToWalkToPlayer ret -SurfStartStep: ; 8969 (2:4969) +SurfStartStep: call InitMovementBuffer - call GetInitialSurfStep + call .GetMovementData call AppendToMovementBuffer ld a, movement_step_end call AppendToMovementBuffer ret -GetInitialSurfStep: ; 8978 (2:4978) +.GetMovementData: ld a, [wPlayerDirection] srl a srl a - and $3 + maskbits NUM_DIRECTIONS ld e, a - ld d, $0 - ld hl, .Data ; $498a + ld d, 0 + ld hl, .movement_data add hl, de ld a, [hl] ret -.Data +.movement_data slow_step DOWN slow_step UP slow_step LEFT @@ -562,43 +607,48 @@ FollowNotExact:: ld e, c pop bc ret c + ld a, b call CheckObjectVisibility ret c - ld hl, $10 + +; object 2 is now in bc, object 1 is now in de + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld c, [hl] ld b, a - ld hl, $10 + + ld hl, OBJECT_NEXT_MAP_X add hl, de ld a, [hl] cp b - jr z, .asm_89b7 - jr c, .asm_89b4 + jr z, .same_x + jr c, .to_the_left inc b - jr .asm_89c5 + jr .continue -.asm_89b4 +.to_the_left dec b - jr .asm_89c5 + jr .continue -.asm_89b7 - ld hl, $11 +.same_x + ld hl, OBJECT_NEXT_MAP_Y add hl, de ld a, [hl] cp c - jr z, .asm_89c5 - jr c, .asm_89c4 + jr z, .continue + jr c, .below inc c - jr .asm_89c5 + jr .continue -.asm_89c4 +.below dec c -.asm_89c5 - ld hl, $10 + +.continue + ld hl, OBJECT_NEXT_MAP_X add hl, de ld [hl], b ld a, b @@ -608,10 +658,10 @@ FollowNotExact:: swap a ld hl, wPlayerBGMapOffsetX sub [hl] - ld hl, $17 + ld hl, OBJECT_SPRITE_X add hl, de ld [hl], a - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, de ld [hl], c ld a, c @@ -621,169 +671,182 @@ FollowNotExact:: swap a ld hl, wPlayerBGMapOffsetY sub [hl] - ld hl, $18 + ld hl, OBJECT_SPRITE_Y add hl, de ld [hl], a ldh a, [hObjectStructIndexBuffer] - ld hl, $20 + ld hl, OBJECT_RANGE add hl, de ld [hl], a - ld hl, $3 + ld hl, OBJECT_MOVEMENTTYPE add hl, de - ld [hl], $1a - ld hl, $9 + ld [hl], SPRITEMOVEDATA_FOLLOWNOTEXACT + ld hl, OBJECT_STEP_TYPE add hl, de - ld [hl], $0 + ld [hl], STEP_TYPE_00 ret GetRelativeFacing:: +; Determines which way map object e would have to turn to face map object d. Returns carry if it's impossible for whatever reason. ld a, d call GetMapObject - ld hl, $0 + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] - cp $d - jr nc, .asm_8a27 + cp NUM_OBJECT_STRUCTS + jr nc, .carry ld d, a ld a, e call GetMapObject - ld hl, $0 + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, bc ld a, [hl] - cp $d - jr nc, .asm_8a27 + cp NUM_OBJECT_STRUCTS + jr nc, .carry ld e, a - call GetFacing_e_relativeto_d + call .GetFacing_e_relativeto_d ret -.asm_8a27 +.carry scf ret -GetFacing_e_relativeto_d: ; 8a29 (2:4a29) +.GetFacing_e_relativeto_d: +; Determines which way object e would have to turn to face object d. Returns carry if it's impossible. +; load the coordinates of object d into bc ld a, d call GetObjectStruct - ld hl, $10 + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld c, [hl] ld b, a push bc +; load the coordinates of object e into de ld a, e call GetObjectStruct - ld hl, $10 + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] pop bc +; |x1 - x2| ld a, b sub d - jr z, .asm_8a5c - jr nc, .asm_8a50 + jr z, .same_x_1 + jr nc, .b_right_of_d_1 cpl inc a -.asm_8a50 + +.b_right_of_d_1 +; |y1 - y2| ld h, a ld a, c sub e - jr z, .asm_8a6a - jr nc, .asm_8a59 + jr z, .same_y_1 + jr nc, .c_below_e_1 cpl inc a -.asm_8a59 + +.c_below_e_1 +; |y1 - y2| - |x1 - x2| sub h - jr c, .asm_8a6a -.asm_8a5c + jr c, .same_y_1 + +.same_x_1 +; compare the y coordinates ld a, c cp e - jr z, .asm_8a78 - jr c, .asm_8a66 - ld d, $0 + jr z, .same_x_and_y + jr c, .c_directly_below_e +; c directly above e + ld d, DOWN and a ret -.asm_8a66 - ld d, $1 +.c_directly_below_e + ld d, UP and a ret -.asm_8a6a +.same_y_1 ld a, b cp d - jr z, .asm_8a78 - jr c, .asm_8a74 - ld d, $3 + jr z, .same_x_and_y + jr c, .b_directly_right_of_d +; b directly left of d + ld d, RIGHT and a ret -.asm_8a74 - ld d, $2 +.b_directly_right_of_d + ld d, LEFT and a ret -.asm_8a78 +.same_x_and_y scf ret -QueueFollowerFirstStep: ; 8a7a (2:4a7a) - call Function8a8d - jr c, .asm_8a87 +QueueFollowerFirstStep: + call .QueueFirstStep + jr c, .same ld [wFollowMovementQueue], a xor a ld [wFollowerMovementQueueLength], a ret -.asm_8a87 - ld a, $ff +.same + ld a, -1 ld [wFollowerMovementQueueLength], a ret -Function8a8d: ; 8a8d (2:4a8d) +.QueueFirstStep: ld a, [wObjectFollow_Leader] call GetObjectStruct - ld hl, $10 + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, $11 + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] ld a, [wObjectFollow_Follower] call GetObjectStruct - ld hl, $10 + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, d cp [hl] - jr z, .asm_8ab5 - jr c, .asm_8ab1 + jr z, .check_y + jr c, .left and a - ld a, $f + ld a, movement_step + RIGHT ret -.asm_8ab1 +.left and a - ld a, $e + ld a, movement_step + LEFT ret -.asm_8ab5 - ld hl, $11 +.check_y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, e cp [hl] - jr z, .asm_8ac7 - jr c, .asm_8ac3 + jr z, .same_xy + jr c, .up and a - ld a, $c + ld a, movement_step + DOWN ret -.asm_8ac3 +.up and a - ld a, $d + ld a, movement_step + UP ret -.asm_8ac7 +.same_xy scf ret |