Skip to navigation

Elite on the BBC Micro

Main loop: Main flight loop (Part 13 of 16) [Elite-A, Flight]

Name: Main flight loop (Part 13 of 16) [Show more] Type: Subroutine Category: Main loop Summary: Charge shields and energy banks Deep dive: Program flow of the main game loop Scheduling tasks with the main loop counter
Context: See this subroutine in context in the source code References: No direct references to this subroutine in this source file

The main flight loop covers most of the flight-specific aspects of Elite. This section covers the following: * Charge shields and energy banks (every 7 iterations of the main loop)
.MA18 \ --- Mod: Original Acornsoft code removed: -----------> \ LDA BOMB \ If we set off our energy bomb (see MA24 above), then \ BPL MA77 \ BOMB is now negative, so this skips to MA21 if our \ \ energy bomb is not going off \ ASL BOMB \ We set off our energy bomb, so rotate BOMB to the \ \ left by one place. BOMB was rotated left once already \ \ during this iteration of the main loop, back at MA24, \ \ so if this is the first pass it will already be \ \ %11111110, and this will shift it to %11111100 - so \ \ if we set off an energy bomb, it stays activated \ \ (BOMB > 0) for four iterations of the main loop \ JSR WSCAN \ Call WSCAN to wait for the vertical sync, so the whole \ \ screen gets drawn and the following palette change \ \ won't kick in while the screen is still refreshing \ LDA #%00110000 \ Set the palette byte at SHEILA &21 to map logical \ STA VIA+&21 \ colour 0 to physical colour 7 (white), but with only \ \ one mapping (rather than the 7 mappings required to \ \ do the mapping properly). This makes the space screen \ \ flash with black and white stripes. See p.382 of the \ \ Advanced User Guide for details of why this single \ \ palette change creates a special effect \ --- End of removed code -----------------------------> .MA77 LDA MCNT \ Fetch the main loop counter and calculate MCNT mod 7, AND #7 \ jumping to MA22 if it is non-zero (so the following BNE MA22 \ code only runs every 8 iterations of the main loop) LDX ENERGY \ Fetch our ship's energy levels and skip to b if bit 7 BPL b \ is not set, i.e. only charge the shields from the \ energy banks if they are at more than 50% charge LDX ASH \ Call SHD to recharge our aft shield and update the JSR SHD \ shield status in ASH STX ASH LDX FSH \ Call SHD to recharge our forward shield and update JSR SHD \ the shield status in FSH STX FSH .b SEC \ Set A = ENERGY + ENGY + 1, so our ship's energy LDA ENGY \ level goes up by the correct amount for our current ADC ENERGY \ ship, depending on whether we have an energy unit \ fitted BCS P%+5 \ If the value of A did not overflow (the maximum STA ENERGY \ energy level is &FF), then store A in ENERGY