Lemmini - Lemmings for Java - public Alpha

Started by 0xdeadbeef, February 21, 2006, 06:37:50 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ccexplore

Quote from: Jazzem link=1140547071/15#22 date=1140646245-http://www.rocketsoft.gm-school.uni.cc/uploads/Lemini%20mistake.JPG If you look at that, the digger seemed to finish off with just a little gap instead of the usual size, leaving that bit of terrain which the lemmings respond to.
Just so 0xdeadbeef knows what the issue is, basically the digger is one of the exceptions to lemmings checking only 1 pixel underneath their feet for falling (all pixels here are in low-res scale).  A digger's pit is 9 pixels wide, and on most versions, digging continues as long as at least one of the 7 pixels is terrain.  The leftmost and rightmost pixel of the 9-pixel width is ignored.

Mindless


0xdeadbeef

Quote from: geoo89 link=1140547071/15#27 date=1140648518
I dunno exactly, but comparing with Winlemm or DOS, it is different. It seems to me that, when digging the first layer away, the animation is shown as usually, and when digging the second layer, the animation is shown horizontally mirrored.
Hm, can't see any mirroring there, but I'll check.

Quote
Well, the horns also don't show up in WinLemm high-res, however in low-res.
An a little high-res-like looking option is rendering it with '2XSAI Kreed's Engine", here's an image of the Genesis lemmings exit: http://207.58.177.175/~geoo89/lemmings/Hell_exit.PNG; however it doesn't match well to the other style (colors etc.)
Well, I think it's possible to add the horns, but it's some work to since it has to be done for every animation frame of "styles/fire/fireo_6.gif" and also the height of each frame mustn't change.

Quote
The Bricks exit, I just noticed, the problem doesn't appear in all levels: e.g. in Tame 1 it doesn't appear, however it appears in most of the other levels, e.g. Havoc 5, Crazy 2.; again, here's an image: http://207.58.177.175/~geoo89/lemmings/Brick_exit.PNG
Ok I see. Interesting. I have an idea what this could be, but this needs some investigation.


Quote
No problem, here's a little image showing the situation: http://207.58.177.175/~geoo89/lemmings/slope_builder.PNG
Ok, I'll see if I can fix somehow. Most probably I'll only have to move the mask a little.

Quote
I somehow managed to have a lemming survive the nuke, I don't know how. But it happened twice, both times in the level "It's all a matter of timing".
Did you press "c" and activated cheat/debug mode by chance?

Quote
Then I noticed some things in Wild 16: Five alive:
- The bomber, who also breaks through the thinned brick in the WinLemm version, doesn't break through; in the solution on the Lemmings solution page it is actually not needed, but iirc I used it when I solved the level and it also seems intended.
- The miner doesn't turn around when hitting steel
Hm, dunno about these two. The explosion mask is a little smoother, but not smaller AFAIK. The miner will turn around if he hits steel, only if he can also continue to walk, he will walk into the same direction.

Quote
- The miner doesn't take out its mask completely when getting on steel, however I don't know whether it is intended to work that way, it firstly also works that way in Cheapo and is secondly more exact
Miners, diggers and bashers don't erase steel areas. Originally, my bombers wouldn't delete steel pixels as well but I changed that for the sake of compatibility. Dunno if it's needed for the miners etc. though.

0xdeadbeef

Ok, I updated to 0.2. If you're using the Webstart link, you should get the new version automatically.
Unfortunately this forces new a resource extraction since I changed the builder mask.
You will become used to it I guess ;)

(Hopefully) Fixed 0.1 -> 0.2
#  Briefing screen of level one shows "Level 1"
#  Debriefing screen shows code of following level
#  Reworked JNLP to get more RAM (128MB) to avoid potential out of memory issues
#  Fast Forward with Enter
#  Animations + Explosions stop in pause mode
#  No builder restrictions for first brick
#  Reduced climber speed by two
#  Moved step mask a little bit so it should work on slopes (please test)
#  A climber reaching a plateau does the animation "climber to walker" now
   instead of using the animation for conversion from climber to faller
#  Release of first lemming doesn't depend on release rate
#  Digger won't stop until a gap of 12 pixels width below him is free.
   Well it should be 14, but this somehow doesn't work.

Now I should get some sleep. I hope to fix some more issues tomorrow, err today.  :-/


ccexplore

Ok, I found the first bug that actually makes a level impossible to solve.

Try Fun 30 or Mayhem 26 (edit: typo; I meant Mayhem 24). &#A0;The lemmings don't fall into the gaps. &#A0;Or rather, they seem to fall but they manage to climb right back out on the next frame, which is even more wrong.

This makes Mayhem 24 ("All or Nothing") impossible to solve.
&#A0;Fixed! [smiley=thumbsup.gif]

--------------

Other things of note:

1) I don't see why it should take up 100% CPU in paused state when fast forward is on. &#A0;This is not a big deal except if you choose the "Restart level" command in the menu while both paused and in fast forward mode, the 100% CPU apparently cause the app to hang very noticeably for a few seconds before finally restarting. &#A0; Fixed! [smiley=thumbsup.gif]

2) I think someone said this already, but diggers are not reverted to walkers when they hit steel, so at that point they don't move down but still keeps on "stationary digging". &#A0;Fixed! [smiley=thumbsup.gif]

3) There is a "digger glitch" that's analogous to the imfamous miner glitch I discovered in the real game. &#A0;Basically, when I dig, the position of the digger appears to be 2 pixels lower than what's displayed. &#A0;So when I change it to a builder, the first build brick is below the visual bottom of the digger's pit. &#A0;Similarly when you bash you noticeably see that the bash tunnel's ground level is lower than where the bottom of the digger's pit was. &#A0;Fixed! [smiley=thumbsup.gif]

4) When you assign a lemming a digger, it should dig down immediately on the next frame, instead of waiting for the end of the first animation cycle. &#A0;In effect, you start off with the last frame of the animation cycle so you can dig down immediately. &#A0;This affects Mayhem 3 &#A0;Fixed! [smiley=thumbsup.gif]

5) The feature that lets you assign skills while pausing. &#A0;<snip> Perhaps better would be to automatically unpause whenever you assign a skill while paused (like the behavior in Lemmings 2). &#A0;Fixed! [smiley=thumbsup.gif]

6) Surely you could at least bring us back to the game's start screen instead of "Error: 30" and abort when you finish the last level of a rating. &#A0;Fixed! [smiley=thumbsup.gif]

7) Blocker status should not be cleared when the blocker is about to explode (ie. those 16 or so animation frames where it shudders and yells "oh no"). &#A0;I know WinLemm does clear the status but it's wrong compared to pretty much every other version. Do clear blocker status though if the "oh-no-er" falls (as when the ground underneath him is removed).  Fixed! [smiley=thumbsup.gif]

8) In the real game it does not allow you to overlap blockers.  Fixed! [smiley=thumbsup.gif]

9) Fun 9's title is wrong. &#A0;You repeated the repeat's title. &#A0;The correct title should be "As long as you try your best" (don't remember capitalizations offhand).  Fixed! [smiley=thumbsup.gif]

10) Maybe that's just the way the hi-res graphics look, but are there really all these weird vertical lines on snow walls in the snow graphics set (see, for example, the wall to the entrance's right in Havoc 4). &#A0;(discussed)

11) Blockers must affect builders.  Blockers are able to turn builders in mid-build. &#A0;This is required in order for Mayhem 5 to be solvable (so this is the second level-breaking bug found). &#A0;More generally in the original game, blockers affect lemmings in pretty much any state.  Fixed! [smiley=thumbsup.gif]

12) As I have suspected, your desire to match game second to real second does appear to make Just a Minute Part II impossible, or at least much much harder than even the Amiga version (I haven't succeed yet in Lemmini). &#A0;I'm afraid you need to slow down the game second a little. &#A0;I'll try to measure what the Amiga game second is at. &#A0;[Edit: &#A0;I finally succeed, so at least this is not level-breaking, but since the clock speed on this level does affect its difficulty very directly, it is still best to have it match the speed on the Amiga. &#A0;Maybe Lemmini is in fact at the same speed but I need to check to make sure.]

13) On the special graphics levels (Fun 22, Tricky 14, Taxing 15 and Mayhem 22), the palette for interactive objects should be partially modified to partially match the palette used by the special graphics terrain. &#A0;You can look at the screenshots in http://home.wanadoo.nl/lemmings-solution as a guide for how the modification should look.

14) When highlighted by mouse cursor, a walker and I think faller lemming with either climber or floater status (ie. assigned those skills beforehand but not actually doing said skills) should make the type read "climber"/"floater" rather than walker/faller. &#A0;In the case of a lemming with both status, the type is termed "athlete".  Fixed! [smiley=thumbsup.gif]

(cont'd)

ccexplore

Quote from: 0xdeadbeef link=1140547071/15#15 date=1140639662
Quote from: Ahribar link=1140547071/0#14 date=1140639130About the music problem, if you have fixed the music for each level, then level 17 Fun should have music #17, level 18 should cycle back to music #1 (Cancan), and so the level I was playing, 1 Tricky, should have music #14, no?
You can have a look in the resource directoy in &#A0;"levels/orig/orig.ini" (and "levels/ohno/ohno.ini"). <snip>
Ahribar wasn't being terribly clear, but he's basically pointing out that you're treating each difficulty rating independently, so for example, Fun 1, Tricky 1, Taxing 1 and Mayhem 1 all have the same music.  What should happen is that after Fun 30, the next music in the sequence is used for Tricky 1, as if Tricky 1 is Fun 31, so to speak.  Hope that's clear.

ccexplore

By the way, you might want to re-download Mindless's MODs.  The ones you have in Lemmini seems to be of a slightly older version with some minor errors in certain instruments of certain music.  It's not a big deal for the most part, and I bet I'm probably the only one who noticed. ;)

ccexplore

(cont'd ccexplore's bug list):

15) When shrugging (builder finishing 12th brick), visually the shrugger's drawn position seems to be off, although the actual position (as is apparent if you interrupt the shrugger by assigning another skill) appears to be correct. &#A0;Visually it looks like the lemming suddenly shift to the edge of the build brick, shrugs, then suddenly shift back to the correct position and start walking.  Fixed!  [smiley=thumbsup.gif]

16) somewhat nitpicking, but in the level mini-map at bottom right corner, often the lemming red dots look like they are floating off the ground they are walking on, even when they are really walking on flat ground. &#A0;Should be fairly easy to fix by shifting your calculation of the red dot positions down slightly. &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

17) Exit detection (and possibly detection of other interactive objects, I haven't checked) does not seem to work for builder. &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

18) Diggers do not detect exits (and possibly other interactive objects that I haven't tried yet). &#A0;Tricky 28 is a good level to repro this bug. &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

19) Tricky 28 is also good to repro the following visual bug. &#A0;Dig down that tree root that directly leads to water until the digger finally drowns, at a lower depth than other lemmings due to bug #18. &#A0;Notice anything interesting about the portion of the water formerly obscured by the root that was dug away? &#A0;(And fixing bug #18 is not sufficient to fix this, this bug can still be repro w/o bug 18, by turning the digger to a blocker when sufficiently low but above the water, and then blowing up the blocker.  Fixed!  [smiley=thumbsup.gif]

20) Lemmings come out of the entrance at too low a height. &#A0;This is most noticeable at Havoc 14 upper left entrance. &#A0;In Lemmini the lemming enter from that entrance at a height that puts him right in the narrow gap, instead of on top of it. &#A0;At least according to DOS Lemmings, I believe the correct entering height should be: &#A0;the feet of the lemming, which is the row of pixels just below the lemming graphics when he's walking, should be y_entrance + 14 (low-res), where y_entrance is the upper-left corner of the entrance object. &#A0;In any case the lemming should at least appear above or on top of the pyramid in Havoc 14. &#A0;(edit: this affects Tricky 12, Mayhem 1 and Mayhem 21: the fall from the entrance should be fatal) &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

21) This is a little hard to repro, but I have seen cases where a lemming who is about to explode walks towards a cliff, then start falling even though he is also "shuddering" (yelling oh-no etc.) I think it happens if the falling occurs at or near the same frame that the lemming is converted to a "shudderer".<snip> &#A0;Fixed! &#A0;(I think...) &#A0;[smiley=thumbsup.gif]

22) Also somewhat nitpicking, but I think when nuking in Lemmini<snip>to maintain the right speed you would only assign exploders every other frame. &#A0;It's not really a big deal (at least in the official levels) though it does help stretch out the nuke sequence a little. &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

23) I'm definitely able to repro Mindless's bug about nuking not assigning exploders to every lemming, and I verified it has nothing to do with cheat mode. Fun 8 is good for this. &#A0;I can pretty much repro it every time by doing this: &#A0;set RR to 99 before first lemming out. &#A0;Set a blocker about 2-3 blocks (a block being one of the rectangle blocks making up the platform) right of entrance. &#A0;Wait. &#A0;When you start hearing lemmings exiting, start nuking. &#A0;You will then often find some lemmings not being assigned exploders. &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

24) The explosion graphics when a lemming blows up is not clipped at the level's bottom boundary, <snip> &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

25) Go to Taxing 6 and focus on the leftmost entrance. &#A0;Wait until a lemming is right on the edge of the leftmost steel block, about to fall. &#A0;Pause the game at that point. &#A0;This is what it looks like:<snip>
Now assign that lemming a blocker when paused, then unpause. &#A0;You will see that the blocker frees itself (as if about to fall), but then seems to turn itself around instead of falling. &#A0;The clincher: &#A0;the blocker field remains, so even though no blocker lemming is actually there anymore<snip>
&#A0;Fixed! &#A0;[smiley=thumbsup.gif]

ccexplore

26) Mayhem 2: &#A0;the following should not be possible:



The climber should be killed by the flamethrower but that doesn't happen in Lemmini. &#A0;You can also see this in Taxing 21: &#A0;a lemming can fall off the edge of the steel block without getting killed by the flamethrower. &#A0;So I guess you are not making the trigger area for the flamethrower extend far enough.
 Fixed! [smiley=thumbsup.gif]

27) This requires good timing to repro: &#A0;a shrugger (the shrug when the builder finishes building) is able to cancel an impending explosion, I believe if the explosion countdown reaches 0 during the midst of the shrug (or something of the like). &#A0;You can repro this by assigning the exploder when the builder is somewhere in the middle of laying down the 8th build brick.  Fixed! [smiley=thumbsup.gif]

28) Blocker field not removed when blocker is killed by a trap: &#A0;Taxing 4 is a good place to repro this one. &#A0;Set RR to 99 before first lemming is out. &#A0;After the first lemming triggers the rope trap on the right, wait for the lemming following closely behind him to walk to the position that would trigger the rope trap. &#A0;The rope trap of course doesn't get triggered yet since it's still working on the first lemming. &#A0;So assign blocker to the passerby lemming. &#A0;Here's the fun: &#A0;after the rope trap finishes with the first lemming, it will proceed to kill the blocker. &#A0;But the blocker field will remain long after the blocker is gone.  Fixed! [smiley=thumbsup.gif]

29) Rather minor complaint, but I'm finding that with the font you are using for the numbers in the skill toolbar, the digit "2" and "8" looks a bit too similar especially from a distance.

30) It shouldn't be possible to assign exploders, climbers or floaters to lemmings that are drowning, disintegrating (like those traps in Fun 9), or splatting from a high fall.  Fixed! [smiley=thumbsup.gif]

31) Havoc 20 is unsolvable. &#A0;The lemmings on the left entrance splat upon landing, which shouldn't be the case. &#A0;I'm guessing the lemmings are entering an entrance at a slightly incorrect x position (analogous to the "too-low" problem of bug #20). &#A0;Looks to me that shifting the entering position 2 pixels (hi-res) right should do it, I think. &#A0;Fixed! &#A0;[smiley=thumbsup.gif]

Proxima

Quote from: ccexplore link=1140547071/30#34 date=114066963314) When highlighted by mouse cursor, a walker and I think faller lemming with either climber or floater status (ie. assigned those skills beforehand but not actually doing said skills) should make the type read "climber"/"floater" rather than walker/faller.  In the case of a lemming with both status, the type is termed "athlete".
In fact, in standard versions a lemming doing anything else who happens to be a climber, floater or athlete is displayed as "climber", "floater" or "athlete" and not the other skill. I don't know if you want to change this behaviour to match; personally I find it rather annoying.

0xdeadbeef

Oh well, I just need to start somewhere. Maybe I need some kind of professional bug tracking :(

Quote
1) I don't see why it should take up 100% CPU in paused state when fast forward is on.  If you choose the "Restart level" command in the menu while both paused and in fast forward mode, the 100% CPU apparently cause the app to hang very noticeably for a few seconds before finally restarting.
I could explain, but you wouldn't like to know. Basically, I have to work around a bug in the JVM, Windows or both.
Believe me: having 100% CPU load beats the alternatives by far.
"Restart level" is so slow because the level is completely reloaded (including style) and redrawn. It's pretty fast on my machine, but I noticed it on other machines as well. Is on my optimization list.

Quote
2) I think someone said this already, but diggers are not reverted to walkers when they hit steel, so at that point they don't move down but still keeps on "stationary digging".
Ah ok, I messed that last last time I was working on the "break on steel" conditions. Will be fixed in next release.

Quote
3) There is a "digger glitch" that's analogous to the imfamous miner glitch I discovered in the real game.  Basically, when I dig, the position of the digger appears to be 2 pixels lower than what's displayed.
Will be fixed in next release.

Quote
4) When you assign a lemming a digger, it should dig down immediately on the next frame, instead of waiting for the end of the first animation cycle.
Will be fixed in next release.


Quote
5) The feature that lets you assign skills while pausing.  Well, the original game doesn't have it, but I'm not exactly complaining.  [...]  A compromise would be to only allow at most one successful skill assignment while paused.  Perhaps better would be to automatically unpause whenever you assign a skill (like the behavior in Lemmings 2).
Hm, I actually like the pause mode the way it is. But I'll consider the automatic unpause.

Quote
6) Surely you could at least bring us back to the game's start screen instead of "Error: 30" and abort when you finish the last level of a rating.
Sure I can, but it's a bit more work behind that.

Quote
7) Blocker status should not be cleared when the blocker is about to explode (ie. those 16 or so animation frames where it shudders and yells "oh no").
I put it on the list.

Quote
8) In the real game it does not allow you to overlap blockers.
Does this influence gameplay in a nagative sense?

Quote
9) Fun 9's title is wrong.  You repeated the repeat's title.  The correct title should be "As long as you try your best" (don't remember capitalizations offhand).
Ok, will be fixed.

Quote
10) Maybe that's just the way the hi-res graphics look, but are there really all these weird vertical lines on snow walls in the snow graphics set (see, for example, the wall to the entrance's right in Havoc 4).
Yes, it looks like in WinLemm. Unfortunately, not all the Hires Graphics look good. Indeed most of them were just upscaled and look horrible. I fixed some things here and there, but it would took me too much time to fix all tiles. Also the size of the patches would dramatically increase.

Quote
11) Blockers must affect builders.  Blockers are able to turn builders in mid-build.  This is required in order for Mayhem 5 to be solvable (so this is the second level-breaking bug found).  More generally in the original game, blockers affect lemmings in pretty much any state.
Indeed blockers only affect walkers at the moment.
In the next release, blockers should also affect builders, bashers and miners. However that'a a little difficult to check.
Also maybe the blocker mask has to be changed to affect builders more effectively.

Quote
12) As I have suspected, your desire to match game second to real second does appear to make Just a Minute Part II impossible, or at least much much harder than even the Amiga version [...] Maybe Lemmini is in fact at the same speed but I need to check to make sure.]
If necessary, I thought of patching the critical levels instead by introducing a game time based on seconds instead of  minutes.
I'd need a list of levels with second based times for this, though.

Quote
13) On the special graphics levels (Fun 22, Tricky 14, Taxing 15 and Mayhem 22), the palette for interactive objects should be partially modified to partially match the palette used by the special graphics terrain.  
Graphics modifications have very low priority for me at the moment. However anybody is invited to to this. The resources are there.

Quote
14) When highlighted by mouse cursor, a walker and I think faller lemming with either climber or floater status (ie. assigned those skills beforehand but not actually doing said skills) should make the type read "climber"/"floater" rather than walker/faller.  In the case of a lemming with both status, the type is termed "athlete".
Put it on the list. Indeed I have to rework the whole "lemming under cursor issue", so I might add this then.

ccexplore

Quote from: 0xdeadbeef link=1140547071/30#40 date=1140720954
Quote
1) I don't see why it should take up 100% CPU in paused state when fast forward is on. &#A0;If you choose the "Restart level" command in the menu while both paused and in fast forward mode, the 100% CPU apparently cause the app to hang very noticeably for a few seconds before finally restarting.
I could explain, but you wouldn't like to know. Basically, I have to work around a bug in the JVM, Windows or both.
Believe me: having 100% CPU load beats the alternatives by far.
"Restart level" is so slow because the level is completely reloaded (including style) and redrawn. It's pretty fast on my machine, but I noticed it on other machines as well. Is on my optimization list.
True, but what I was specifically targeting is restarting in the case of fast forward. &#A0;Since the increased CPU load is mainly due to the fast forward, it seems to me that you should automatically turn off fast forward before doing a restart. &#A0;Restart is much more performant when fast forward is off.

Quote from: 0xdeadbeef link=1140547071/30#40 date=1140720954
Quote
5) The feature that lets you assign skills while pausing.  Well, the original game doesn't have it, but I'm not exactly complaining.  [...]  A compromise would be to only allow at most one successful skill assignment while paused.  Perhaps better would be to automatically unpause whenever you assign a skill (like the behavior in Lemmings 2).
Hm, I actually like the pause mode the way it is. But I'll consider the automatic unpause.
Just to clarify, when I said "I'm not exactly complaining", I mean that I'm not complaining about having a pause feature in Lemmini, in fact I love it.  So the main point was only the automatic unpause to prevent the ability to assign an arbitrary number of skills in a single frame.

Of course, maybe others will feel differently and actually see the ability to assign that many skills at once as an asset for custom levels.  I can go either way on this.


Quote
Quote
8) In the real game it does not allow you to overlap blockers.
Does this influence gameplay in a nagative sense?
Probably not, but I'd need to think more about this. &#A0;It definitely allow some moves that are otherwise impossible in the real game, which is somewhat worrisome. &#A0;For example, in the region where the blockers overlap, if a lemming is walking there it basically won't detect either blocker, so this means you can potentially selectively allow a lemming to pass thru a blocker by squeezing him between the old blocker and a new, overlapping blocker.

Quote
Quote12) As I have suspected, your desire to match game second to real second does appear to make Just a Minute Part II impossible, or at least much much harder than even the Amiga version [...] Maybe Lemmini is in fact at the same speed but I need to check to make sure.]
If necessary, I thought of patching the critical levels instead by introducing a game time based on seconds instead of &#A0;minutes. &#A0;I'd need a list of levels with second based times for this, though.
That would work for most affected levels, but you definitely don't want to do that for the "Just A Minute" levels, since it ruins the pun in the title. &#A0;I also think the second-based timing in a sea of levels with minute-based time limits will stick out like a soar thumb.

So I'm thinking I would much rather patch the levels themselves instead.

ccexplore

Quote from: 0xdeadbeef link=1140547071/0#0 date=1140547070Then again, all Levels of the Windows version (+5 additional levels) are in,
I am missing Tame 15-20, but that could conceivably be just my copy of WinLemm.  Anyone else have the same problem?  (Granted, few people would care about the Tame levels anyway.)

geoo

Quote from: ccexplore link=1140547071/30#42 date=1140723367
Quote from: 0xdeadbeef link=1140547071/0#0 date=1140547070Then again, all Levels of the Windows version (+5 additional levels) are in,
I am missing Tame 15-20, but that could conceivably be just my copy of WinLemm.  Anyone else have the same problem?  (Granted, few people would care about the Tame levels anyway.)
For me only levels 17 - 20 are missing. But this is since they're also missing for WinLemm.
I don't know for level 15 and 16 however.

Two more things to add:
- any terrain removing action leaves a black space in the mini map, I think it should be the background green
- lemmings can get past a blocker when they're walking on a little higher level than the blocker and the blocker is placed at a certain point: Situation in Taxing 6

ccexplore

Quote from: geoo89 link=1140547071/30#43 date=1140731378
For me only levels 17 - 20 are missing. But this is since they're also missing for WinLemm.
I don't know for level 15 and 16 however.
I probably miscounted and only 17-20 is missing (in fact I was originally thinking the last 5 level, so I should've said 16-20 anyway).