I haven't forgotten about this but has turned out to be substantially more work than I thought. (Who is surprised?
Going through 9000+ lines of assembler and data has proven to be fairly time consuming plus I have a day job to do (it does make my train commute pass pretty quickly though.)
I have made substantial progress however - I've located every subsystem, isolated and named every function, identified and named every variable (even if I don't know exactly what all of them do yet) of which there are well over 100 (most of zero page), identified every pointer table and data set - so it is possible to compile your own levels.
Oh yeah, there was a load of self-modifying code to isolate and document - par for the course when squeezing the most of out the humble Beeb, I should have realised.
I always thought of Thrust as a such a wonderful and elegant game, even more so now after attempting to "become one" with the code. Perhaps because the game itself is so simple and "sparse" in design, certainly compared with something like Exile, I naively thought it wouldn't be that epic but it really does fill all of memory and is finely tuned to make the most of the Beeb. There is not much fat here at all.
I reckon I must have clocked up at least 60 hours on this so far and TBH I'm looking forward to writing some of my own code for a change. The source is a bit of a mess at the moment but I think what I'll do is try to clean up what I've got ASAP and upload here. That was we can use the collective brainpower of the *. community to really reverse engineer & (ideally) document how all of the different subsystems work.
In answer to your question, no the screen isn't hardware scrolled but redrawn as required by keeping track of the left & right extents of each line of terrain that is visible within the window. If you notice there is a limitation on the angles of the terrain - they only slope by 4 pixels (1 byte) per line. A lot of the player maths is also interesting as x coordinates are 8.8 fixed-point whilst the y coordinates are 10.8 fixed-point (levels are deep not wide.)
Maybe I should have chosen something simpler, like Chuckie Egg, to start with.