Skip to navigation


Moving: MVEIT (Part 8 of 9)

[NES version, Bank 0]

Name: MVEIT (Part 8 of 9) [Show more] Type: Subroutine Category: Moving Summary: Move current ship: Rotate ship about itself by its own pitch/roll Deep dive: Orientation vectors Pitching and rolling by a fixed angle
Context: See this subroutine in context in the source code References: No direct references to this subroutine in this source file

This routine has multiple stages. This stage does the following: * If the ship we are processing is rolling or pitching itself, rotate it and apply damping if required
LDA INWK+30 ; Fetch the ship's pitch counter and extract the sign AND #%10000000 ; into RAT2 STA RAT2 LDA INWK+30 ; Fetch the ship's pitch counter and extract the value AND #%01111111 ; without the sign bit into A BEQ MV8 ; If the pitch counter is 0, then jump to MV8 to skip ; the following, as the ship is not pitching CMP #%01111111 ; If bits 0-6 are set in the pitch counter (i.e. the ; ship's pitch is not damping down), then the C flag ; will be set by this instruction SBC #0 ; Set A = A - 0 - (1 - C), so if we are damping then we ; reduce A by 1, otherwise it is unchanged ORA RAT2 ; Change bit 7 of A to the sign we saved in RAT2, so ; the updated pitch counter in A retains its sign STA INWK+30 ; Store the updated pitch counter in byte #30 LDX #15 ; Rotate (roofv_x, nosev_x) by a small angle (pitch) LDY #9 JSR MVS5 LDX #17 ; Rotate (roofv_y, nosev_y) by a small angle (pitch) LDY #11 JSR MVS5 LDX #19 ; Rotate (roofv_z, nosev_z) by a small angle (pitch) LDY #13 JSR MVS5 .MV8 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 LDA INWK+29 ; Fetch the ship's roll counter and extract the sign AND #%10000000 ; into RAT2 STA RAT2 LDA INWK+29 ; Fetch the ship's roll counter and extract the value AND #%01111111 ; without the sign bit into A BEQ MV5 ; If the roll counter is 0, then jump to MV5 to skip the ; following, as the ship is not rolling CMP #%01111111 ; If bits 0-6 are set in the roll counter (i.e. the ; ship's roll is not damping down), then the C flag ; will be set by this instruction SBC #0 ; Set A = A - 0 - (1 - C), so if we are damping then we ; reduce A by 1, otherwise it is unchanged ORA RAT2 ; Change bit 7 of A to the sign we saved in RAT2, so ; the updated roll counter in A retains its sign STA INWK+29 ; Store the updated pitch counter in byte #29 LDX #15 ; Rotate (roofv_x, sidev_x) by a small angle (roll) LDY #21 JSR MVS5 LDX #17 ; Rotate (roofv_y, sidev_y) by a small angle (roll) LDY #23 JSR MVS5 LDX #19 ; Rotate (roofv_z, sidev_z) by a small angle (roll) LDY #25 JSR MVS5