Test 2 may be coming tomorrow, so I definitely need that feedback.
To list a few of the changes, I've gotten around to tidying up some of the code. Firstly, you can now randomly get one of the three(now fully functional) items, with the groundwork for 3 more to be easily added in already in place. I can't say much about it, but right now my proudest achievement is overhealing the map system. Here's the code in the base Dungeon Tanken 1.53.
'Read map IF LEVEL==0 THEN RESTORE @MAP1 IF LEVEL==1 THEN RESTORE @MAP2 IF LEVEL==2 THEN RESTORE @MAP3 IF LEVEL==3 THEN BREAKThis system works if you have only 3 maps, but I have plans for upwards of 6 maps, not to mention the two or more debug rooms I'm going to need to test everything. To give you an idea of what that looks like, here's T1's map handling.
'Read map IF LEVEL==-1 THEN RESTORE @DMAP1 IF LEVEL==0 THEN RESTORE @MAP1 IF LEVEL==1 THEN RESTORE @MAP2 IF LEVEL==2 THEN RESTORE @MAP3 IF LEVEL==3 THEN BREAK IF LEVEL==3 THEN RESTORE @MAP4 IF LEVEL==4 THEN RESTORE @MAP6 IF LEVEL==5 THEN BREAKIgnoring how bad that code actually is for a moment, let's take a look at some of the flaws. It's time consuming, wastes unnecessary lines, and gets really ugly to read quick. I wanted a quick, and elegant solution, and then I had a brainwave. The code isn't structured like it would be read only once, it is structured like it's called numerous times throughout the code. This is what led me to my current code after some trial and error to get it to cover all possible level combinations.
'Read map IF LEVEL <= -1 THEN A$="@DMAP"+STR$(LEVEL*-1):RESTORE A$ IF LEVEL >= 0 THEN A$="@MAP"+STR$(LEVEL+1):RESTORE A$ IF LEVEL >= 3 THEN BREAKLook at that. 3 lines of code to do what would've taken almost 10 lines of code with the old system. This may be the greatest improvement to the engine that I could possibly have made, given that the graphics system needs a serious upgrade but I lack the expertise for that. I'm extremely proud of it, if you can't tell.