Skip to navigation

Elite on the BBC Micro and NES

Moving: MVEIT (Part 1 of 9)

[NES version, Bank 0]

Name: MVEIT (Part 1 of 9) [Show more] Type: Subroutine Category: Moving Summary: Move current ship: Tidy the orientation vectors Deep dive: Program flow of the ship-moving routine Scheduling tasks with the main loop counter
Context: See this subroutine in context in the source code References: This subroutine is called as follows: * BRIEF calls MVEIT * ESCAPE calls MVEIT * Main flight loop (Part 6 of 16) calls MVEIT * PAS1 calls MVEIT

This routine has multiple stages. This stage does the following: * Tidy the orientation vectors for one of the ship slots
Arguments: INWK The current ship/planet/sun's data block XSAV The slot number of the current ship/planet/sun TYPE The type of the current ship/planet/sun
.MVEIT 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+31 ; If bits 5 or 7 of ship byte #31 are set, jump to MV30 AND #%10100000 ; as the ship is either exploding or has been killed, so BNE MV30 ; we don't need to tidy its orientation vectors or apply ; tactics LDA MCNT ; Fetch the main loop counter EOR XSAV ; Fetch the slot number of the ship we are moving, EOR AND #15 ; with the loop counter and apply mod 15 to the result. BNE MV3 ; The result will be zero when "counter mod 15" matches ; the slot number, so this makes sure we call TIDY 12 ; times every 16 main loop iterations, like this: ; ; Iteration 0, tidy the ship in slot 0 ; Iteration 1, tidy the ship in slot 1 ; Iteration 2, tidy the ship in slot 2 ; ... ; Iteration 11, tidy the ship in slot 11 ; Iteration 12, do nothing ; Iteration 13, do nothing ; Iteration 14, do nothing ; Iteration 15, do nothing ; Iteration 16, tidy the ship in slot 0 ; ... ; ; and so on JSR TIDY_b1 ; Call TIDY to tidy up the orientation vectors, to ; prevent the ship from getting elongated and out of ; shape due to the imprecise nature of trigonometry ; in assembly language