NitroGenesis
He/Him
Editor, Experienced player (551)
Joined: 12/24/2009
Posts: 1873
Sonikkustar wrote:
I'd vote yes on that. It was mildly amusing and the pacing is just good enough for it to pass.
What he said. 00:00.00[/post][/movie]
YoungJ1997lol wrote:
Normally i would say Yes, but thennI thought "its not the same hack" so ill stick with meh.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Does anyone know how the isometric projection in Solstice was implemented? For those who don't know about the technical details of the NES, let me explain why Solstice is technically such a challenging game to make for that platform, and why its implementation is so ingenious (this info is self-evident to anybody who knows even a bit about how the NES graphics work, but many people might not be fully aware). Please correct me if I get any of this info wrong. The graphics of the NES are tile- and sprite-based, both of which are 8x8 pixels (and 4 colors can be used in each tile and sprite, with some additional limitations). Simplifying, the screen is a grid of adjacent square tiles which can be scrolled (iow. the location of each tile is fixed with respect to the other tiles). There's a limited number of sprites which can be drawn anywhere on screen (although with some limitations on how many sprites can be drawn on one horizontal line of screen pixels). Obviously tiles are usually used for static backgrounds and sprites for moving objects (such as the playable character). A sprite can be drawn either in front of the tiles, or behind them (both tiles and sprites can have fully transparent pixels to make whatever is behind them visible). However, you can't draw a sprite which is partially behind a tile while the rest of it is in front of it. The technical challenge with an isometric projection like the one used in Solstice is that moving objects (such as the playable character) need to sometimes be both behind some part of the scenery (eg. a box) and in front of other scenery (eg. the floor behind the box). What makes this even more challenging is that the edges of the geometry are often diagonal (due to the isometric projection) and even free-shaped, and thus don't conform to the strictly square tiles and sprites. To the modern player (and even to most players of the time) the playable character moving partially behind a box or a staircase (with diagonal edges) may not seem like a big deal, but to anyone who knows how the graphics in the NES work it's a really ingenious feat from the part of the game developers. If I'm not mistaken, that was actually one of the biggest hurdles the developers had to overcome when they made the game. So, does anyone know how exactly Solstice does this?
Player (144)
Joined: 7/16/2009
Posts: 686
Nothing will ever need to be in front of the floor or walls, so that's just background I assume. All the other things can be solved by using a clever drawing order. Which is usually from the bottom to the top.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Scepheo wrote:
All the other things can be solved by using a clever drawing order. Which is usually from the bottom to the top.
Drawing order of what? You can't make the NES draw some tiles first, then some sprites, and then the rest of the tiles. Moreover, you can't draw two tiles at the same place (remember, it's just a grid of adjacent tiles, one tile per slot). In theory you could have all the geometry which can be either in front or behind the moving objects as sprites, because the drawing order of sprites can be defined. However, I think the problem with that is that there aren't enough sprites for all such edges, plus you can only draw a maximum of 8 sprites per scanline at one time (the hardware won't draw any more). Maybe they are sprites and they got around these limitations with clever level design, but I'm interested in knowing exactly how. Or if they used something else completely.
Player (144)
Joined: 7/16/2009
Posts: 686
Going into FCEUX, running the game and disabling the background, I found the even then Shadax can go behind it (as he's only half visible behind some blackness). So, it seems that the game does indeed draw some tiles, then some sprites, then some tiles.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Scepheo wrote:
Going into FCEUX, running the game and disabling the background, I found the even then Shadax can go behind it (as he's only half visible behind some blackness). So, it seems that the game does indeed draw some tiles, then some sprites, then some tiles.
Since the visual obstacles have diagonal edges, it would mean that it would have to draw part of a tile first, then the sprites, then the rest of the tile, which is obviously impossible. AFAIK, you can't even draw one full tile first, then a sprite, then another adjacent tile. All the tiles are drawn in one single step. The sprites are drawn either before any of the tiles are, or after all of them have been drawn. A sprite cannot be in-between two tiles. What you describe sounds more like the game is modifying the sprites themselves (by modifying their pixel data), rather than doing anything with drawing order.
Player (161)
Joined: 1/1/2013
Posts: 43
Hi all, I was just in the middle of planning a new 100% route, when I found the possibility of a small improvement for the Any% run. This will save 10 or 11 frames and I am not sure if this improvement would have a chance of getting published. I would only change the route in one single room by using a hidden stone the current author seems to have overseen. The rest of the run would remain 100% the same. Is this worth doing and submitting or will it probably be rejected since the change is too small?
Player (144)
Joined: 7/16/2009
Posts: 686
It's an improvement to an existing movie: that's pretty much an instant accept. Even improvements of only a single frame aren't a rarity here. So yeah, I'd say it's worth doing.
Skilled player (1886)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
Cool, I'm interested in seeing where this improvement is. I still hope that you will try to find additional improvements, in particular the 100% run can probably be improved more. But as Scepheo says, an improvement is still an improvement and will indeed be accepted.
Player (161)
Joined: 1/1/2013
Posts: 43
Randil wrote:
Cool, I'm interested in seeing where this improvement is. I still hope that you will try to find additional improvements, in particular the 100% run can probably be improved more. But as Scepheo says, an improvement is still an improvement and will indeed be accepted.
Thank you for the quick (and constructive) response. I guess there are about 2 or 3 frames lost in another room. Let's see how it will work out tonight. BTW: I should not have read this thread in the morning. Now I have to wait all day until the evening before I can start the actual work :)
Skilled player (1886)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
If you do indeed do your run from scratch (which I suggest, but it's of course your choice), here are some thoughts you might want to keep in mind: *The time it takes to enter the menu depends on what room you are in. The bigger the room and the more sprites on screen, the longer the loading time. There might be better rooms to enter the menu on than the rooms I chose in my runs, so you might want to test this a bit more. *Another potential improvement (I think) might be to push moving platforms and blocks more to your benefit. This is done a few times in the published runs, but might be abused more. Perhaps a few frames can be shaved off by pushing a block a bit rather than waiting for it to move this distance itself. *It might be worth revising the route completely, at least for the 100% run. It would be awesome if you could find a completely new route. If you know how to watch RAM addresses, here are the ones I have for this game:
0031 X|pos
002D Y|pos
0035 Air|pos
0754 Jump|speed
0758 Vertic.|subp
0020 Input|on|0
0033 Object|1|X|pos
002F Object|1|Y|pos
0032 Object|2|X|pos
002E Object|2|Y|pos
0034 Object|3|X|pos
0030 Object|3|Y|pos
0791 Jump|speed
0796 Keys
0015 Room|number
0797 Block|jump|1
36 block|air|pos
38 jump|on|42
0084 block:|25,17
0085 Menu|time
Good luck with this, I'm interest in hearing how it goes so please keep us updated, and let me know if you need any help.
Player (161)
Joined: 1/1/2013
Posts: 43
Randil wrote:
*It might be worth revising the route completely, at least for the 100% run. It would be awesome if you could find a completely new route.
Thank you for the tips. I do already have a 100% route that I hope to be faster than the current one. The main benefit comes from a different route in the caves. Please let me know if you would like to have a look at it (and if you know how to use GIMP2). I could definitely need someone who may have some ideas for finetuning it.
Player (161)
Joined: 1/1/2013
Posts: 43
Randil wrote:
If you do indeed do your run from scratch (which I suggest, but it's of course your choice)
I had a closer look at your Any% run and did not find very much that I could improve. So I just changed two rooms, gained 18 frames in total and submitted it: http://tasvideos.org/forum/viewtopic.php?t=13669. Since the run is copied by more than 99%, I am not sure how the formalities about the well earned co-authorship are working. About the 100% run: I think the route can be improved at several points. I began yesterday and am currently 150 frames ahead after about 20 rooms. Here I did not copy your moves but made the run from scratch. Until now the whole improvement comes from the new route. Inside of the rooms, I tried to do some things a little differently but did not find a single improvement yet.
Player (161)
Joined: 1/1/2013
Posts: 43
@Randil: After you found the 1-frame-improvement, I cancelled my submission and went back to optimizing the run. In room 236 (frame about 17355) I found another 6 frames: You did the spike-jump on the NE-side of the spikes. I changed that to the NW-side to make the jump go further. This way the initial waiting for the platform can be 6 frames shorter. The loading time for the next room remained unchanged, but the room does not sync anyway :( I will add the improvement to this post as soon as I have the sync fixed (probably monday).
Skilled player (1886)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
Hmm, it's a little weird about the desynch. Do you know why the run desynched? In my experience it should only be the loading times that could cause desynchs, so it would be interesting to know the reason. I've revised the run myself a few times without finding anything more (I have tested some ideas, but they were all slower). But it's great news that you found this 6 frame improvement, it only goes to show that 2 pair of eyes is a lot better than 1.
Player (161)
Joined: 1/1/2013
Posts: 43
Randil wrote:
Hmm, it's a little weird about the desynch. Do you know why the run desynched?
Yes: I inserted 6 frames between the rooms instead of removing them. I was a bit too tired that night :-) I also had a look at the rest of the run and tried some new things, but did not find another improvement. So I'll submit the run again then.
Player (161)
Joined: 1/1/2013
Posts: 43
Just a quick update on the 100%-run: The new route seems to be working. I finished the castle, the caves and the Gardens of Pain (NW of the castle). Currently, I am about 50s (2500 frames) ahead :) I hope to find some more, but I guess, I will not break the minute-mark. Just to be sure that I did not forget any room, I added the remaining frames from the existing run to see the outcome and it did indeed show 100.00% completion.
Player (161)
Joined: 1/1/2013
Posts: 43
Does anybody know how the RNG works? There are some rooms with random enemy-behaviour, that behaved more convenient in the currently published runs.
Skilled player (1886)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
Wow, I really haven't been paying attention to this thread. It's great to see that you're making good progress. And 50 seconds is really crazy, I never thought so much time could be saved. I'm afraid I don't know how RNG works in this game (I didn't even know about it!). But if you want, I can try to help out, I'm usually decent at finding out how RNG works in a game. Just give me a situation where enemy behaviour is random, and I can try to find out why.
Player (161)
Joined: 1/1/2013
Posts: 43
Randil wrote:
I'm afraid I don't know how RNG works in this game (I didn't even know about it!). But if you want, I can try to help out, I'm usually decent at finding out how RNG works in a game. Just give me a situation where enemy behaviour is random, and I can try to find out why.
Hi, thanks for the offer. Here are two screenshots, both 70 frames into the room without any movement. The first one is from your run, the second one is from mine. http://imageshack.us/photo/my-images/577/randil.png/ http://imageshack.us/photo/my-images/706/hoffi.png/ I have no idea, how to influence that behaviour. BTW: The current framecount is 3809. As I learned, the game is running at 60fps, so this should be 63 seconds. Since I tackled the most promising rooms first, I don't think, it will become much better anymore. And we do need an update on the any%-run as well. I found some more frames there as well :-) Edit: It's room 249
Skilled player (1886)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
I've started looking into this a little, but I haven't been able to replicate it. Could you upload and send me your input file? It would make things easier for me. You can send the link to me in a PM if you want to keep the movie a secret for everyone else. :)
Player (161)
Joined: 1/1/2013
Posts: 43
Randil wrote:
I've started looking into this a little, but I haven't been able to replicate it. Could you upload and send me your input file? It would make things easier for me. You can send the link to me in a PM if you want to keep the movie a secret for everyone else. :)
Thanks for the offer, I just sent you the link. If anybody else is interested in solving this problem, please let me know. The weird thing is, that the decision for the behaviour seems to be very stable! Using the TAS-Editor, I did watch the room very often using different movies before this room. Not a single time did it behave in my favor. I also tried pausing the game in the room before (to get the first frame on an uneven (or even) frame). Delaying entering the room by an even amount of frames did not change anything either :(
Player (161)
Joined: 1/1/2013
Posts: 43
Randil wrote:
I've started looking into this a little, but I haven't been able to replicate it. Could you upload and send me your input file? It would make things easier for me. You can send the link to me in a PM if you want to keep the movie a secret for everyone else. :)
Got it! The enemy-behaviour is created from the addresses 07AA, 07AB, 07AC and 07AD. The RNG seems to be a pretty simple one that just spits out the same numbers in the same order every time the game is played. Thus it consumes one number each time a new random decision is needed: The initial movement of the random enemies and the new direction, if a random enemy hits a wall. Since there are not very many random enemies in the game at all, and the previous ocurrence of a random fellow is about 50 rooms before room 249 (the one with the enemy I want to manipulate), the outcome in this room seems pretty stable.