enthusi Posted December 7, 2019 Share Posted December 7, 2019 Hi everyone. Since the demo compo for Atari Lynx has ended, here is an earlier recording of our entry. The video was recorded by rj1307 from actual hardware with VGA output. 512KB ROM file, Runs of unmodified hardware. No interlace modes! All music 100% chiptune. 100% assembler from scratch. No cc65/BLL. Programming: enthusi, Jackasser Music:Jammer Graphics: zooperdan, JonEgg, Dawnbringer The timing was tuned for real hardware. Music syncs less well to part lengths in emulators. 11 Quote Link to comment Share on other sites More sharing options...
Igor Posted December 8, 2019 Share Posted December 8, 2019 Very cool and thank you so much for the privilege of seeing early releases of this engine. The final result still blew me away! Quote Link to comment Share on other sites More sharing options...
Cyprian Posted December 8, 2019 Share Posted December 8, 2019 impresive first impression - Numen in better resolution Quote Link to comment Share on other sites More sharing options...
42bs Posted December 8, 2019 Share Posted December 8, 2019 23 hours ago, enthusi said: Hi everyone. Since the demo compo for Atari Lynx has ended, here is an earlier recording of our entry. The video was recorded by rj1307 from actual hardware with VGA output. 512KB ROM file, Runs of unmodified hardware. No interlace modes! All music 100% chiptune. 100% assembler from scratch. No cc65/BLL. Programming: enthusi, Jackasser Music:Jammer Graphics: zooperdan, JonEgg, Dawnbringer The timing was tuned for real hardware. Music syncs less well to part lengths in emulators. Will you share some technical details? I assume the 3D->2D projection was done off-line (like STNICC demo?), right? Quote Link to comment Share on other sites More sharing options...
enthusi Posted December 8, 2019 Author Share Posted December 8, 2019 No, this is full 3d math in real time. No vectors or such are pre-computed or streamed. Nothing like STNICC actually. I can describe details soon. 1 Quote Link to comment Share on other sites More sharing options...
drludos Posted December 8, 2019 Share Posted December 8, 2019 49 minutes ago, enthusi said: No, this is full 3d math in real time. No vectors or such are pre-computed or streamed. Nothing like STNICC actually. I can describe details soon. OMG - do you mean that you could make a 3D based game using this engine then? That would be awesome! Congrats on the fantastic work, the technical level is way beyond my skills, but I'd be happy to read more details on how you made it! 2 Quote Link to comment Share on other sites More sharing options...
solo/ng Posted December 9, 2019 Share Posted December 9, 2019 Awesome demo. It was our candidate for top1 but everyone has different tastes and the competiotion was tight I think. All entries was pretty good (cant judge one entry ofc; ) 1 Quote Link to comment Share on other sites More sharing options...
+karri Posted December 9, 2019 Share Posted December 9, 2019 I was pretty sure that Bastion would be the winner. Just for sound, full colours and really amazing technical qualities. It was fun too. And very artistic. It was the overall winner for me. The best entry seen during the Lynx sessions. In the games category the Doom implementation was really impressive even if I don't like this genre myself. Quote Link to comment Share on other sites More sharing options...
42bs Posted December 9, 2019 Share Posted December 9, 2019 8 hours ago, enthusi said: No, this is full 3d math in real time. No vectors or such are pre-computed or streamed. Nothing like STNICC actually. I can describe details soon. More guessing: * Since I see no missing pixels I guess you are using Suzy to draw triangles, but also (like Vladr) Bresenham and just drawing horizotal lines. * And 8 bit coordinates and a table based math instead of Suzy doing mult/div. Quote Link to comment Share on other sites More sharing options...
enthusi Posted December 9, 2019 Author Share Posted December 9, 2019 Yes, no Susy math but also no triangles. Lines and (as always vertical) EOR filler, not filling with horizontal lines. We only use Susy to erase a buffer quickly ? Quote Link to comment Share on other sites More sharing options...
enthusi Posted December 9, 2019 Author Share Posted December 9, 2019 The image which is shown right before the endscroller was hand drawn by JonEgg for our demo and then digitized. I hope he releases his original separately The 3d engine is really Jackasser's baby We have full control-pad navigation including looking up and down a bit as well as some extra features in the engine. But there are a couple of possible glitches when people storm off into corners etc. We seriously consider bringing this into a game despite the tight memory due to optimized math. But as you see we crammed the credits texts and even (part of the) painting into the engine :) The music is based on the engine developed for Assembloids but this time adding a fourth channel and a considerably more effective compression of the pattern-data. It makes no use of samples (whereas the 'thunder parts' make use of 100% samples :). I am happy that there are emulators out there at all. WIthout them, there would be no Lynx development scene for sure. However, we stumbled across many things that behaved very very differently on real hardware. To the last minute We scored well but didn't place too good at the party. Even when you are of the opinion that we should have scored higher: we are quite happy with our production itself. It was a remote entry so none of us where present at the party and we are all no atari sceners per se. We would have loved to share a couple of beers with the folks there and discuss things we did for the demo. This really contributes to the scene spirit. We are still happy and thankful that remote entries were an option and that out demo was shown to a live audience. Thank you 2 Quote Link to comment Share on other sites More sharing options...
LordKraken Posted December 9, 2019 Share Posted December 9, 2019 I couldn't see the 2 others demo since I had to put my kid to bed, but I was quite surprised when I saw they finished higher than your demo... (now I'm really curious to watch them). Nevertheless, you should be proud of your achievement, this is insane to see real time 3d (and a 3d scene not just a cube) on the Lynx... (especially when you played hard drivin back in those days :D). But Enthusi... dont forget that many people here are waiting for lacim's legacy too Quote Link to comment Share on other sites More sharing options...
enthusi Posted December 9, 2019 Author Share Posted December 9, 2019 Party voting always reflects how many people want some result how badly at a party. That's always the case Quote Link to comment Share on other sites More sharing options...
LordKraken Posted December 9, 2019 Share Posted December 9, 2019 You mean being present in person at the party is an advantage? ah well maybe, let's say it's like a football game when you playe home I'm happy enough online submission were accpeted Quote Link to comment Share on other sites More sharing options...
Igor Posted December 9, 2019 Share Posted December 9, 2019 Demo info page: https://atarigamer.com/lynx/game/BastionSV2k19Version/621745854 Party version playable online: https://atarigamer.com/lynx/play/BastionSV2k19Version/621745854?r=0 Quote Link to comment Share on other sites More sharing options...
42bs Posted December 9, 2019 Share Posted December 9, 2019 6 hours ago, enthusi said: Yes, no Susy math but also no triangles. Lines and (as always vertical) EOR filler, not filling with horizontal lines. We only use Susy to erase a buffer quickly ? Can't wait to dissect your code ? Quote Link to comment Share on other sites More sharing options...
enthusi Posted December 9, 2019 Author Share Posted December 9, 2019 Pouet has a couple of ROMs. 1 Quote Link to comment Share on other sites More sharing options...
+karri Posted December 9, 2019 Share Posted December 9, 2019 I would really like to have a Developers session and listen to your work of - how you designed the colour handling - how you handled chip music - how you managed to time in the samples correctly - 3D stuff Obviously a week-end would be too short to even go through these things. You have really taken the programming for Lynx to the next level. A Lynx developers work shop would sound great. Perhaps next year at some assembly event? Quote Link to comment Share on other sites More sharing options...
enthusi Posted December 9, 2019 Author Share Posted December 9, 2019 I can happily go into some details (over time). I always valued your openness in this regard very high! Your ranking on the recent compos does not reflect your impact on the community! Chip music is very close to what I described in the Assembloids thread. Just a fancier data format. In (very) short: music is tracked in (any) S3M tracker (notes, instrument number, volume changes/fades, speed (changes), 32 rows per 'unit'). The player runs in VBL basically (or somewhere else, depending on part but always 60Hz). The tricky part is the instrument design. Instruments get updated at that same rate (60Hz). So a single instrument may consist of many changes of volume, frequency, feedback registers and mode and even may loop back into itself until stopped. samples run in HBL. No Samples in the parts after and including the main 3d part. The 3d part uses HBL to adjust the colors of the credits/cube and sky in the last room. For everything (including image conversion) I use own python scripts so the color handling sort of 'comes out of it'. The dungeon i.e. uses the colors of the painting Except for the sky and credits that use colorcycling. But there I change the cycling to constant painting colors at the 'exact' screen line inbetween sky and painting (it is adjusted every frame once the painting is on display). The 3d stuff is pretty straight (but headache-inducing) math. The whole engine was designed in Java by Jackasser first and then ported over to 6502 step by step. It is a so-called 'portal engine' (not related to the game Portal). Here is a very rough idea of it: https://en.wikipedia.org/wiki/Portal_rendering And more details: https://www.flipcode.com/archives/Building_a_3D_Portal_Engine-Issue_01_Introduction.shtml You can find the ROM download here (runs better on real hardware!) https://www.pouet.net/prod.php?which=84125 3 Quote Link to comment Share on other sites More sharing options...
+karri Posted December 9, 2019 Share Posted December 9, 2019 Wow. This pythonic approach makes sense. I have also been using Python to speed up transforms from Tiled-world designs to playfields. Thanks for the links. I actually have most of this stuff in Stardreamer already, but for some reason I still miss the "fun" stuff like past tracks of objects. Plus my implementation is too slow and the orthogonal matrixes get corrupted during gameplay. In th 80's I did use 16 and 32 bit integer matrix rotations without degradation with Transputers in MRI using really fast Fracmul. But for some reason this technique is not in use anymore. If time allows I will write a fracmul library for the Lynx. The idea is that 0x7fff = 1.0. Which means that 0x7fff * 0x7fff = 0x7fff. In any case I had a matrix stack in ZP and could interlace CPU and Suzy in all matrix operations. But it did not become so fast. ;zero.right.x ldy MatrixZero lda MATRIX_RIGHT_X, y sta MATHB lda MATRIX_RIGHT_X+1, y sta MATHA ; + zero.up.x * absolute.right.y ;get absolute.right.y into registers while multiply proceeds ldy #VBASIS_RIGHT_Y lda (_MatrixAbsolute), y tax iny lda (_MatrixAbsolute), y ;wait for end of multiply WAITSUZY stx MATHD At some point in time Stardreamer may become playable. We'll see. Do you believe it makes sense to use Suzy math at all? PS. After a little pen and paper excercise I came up with 0x4000 = 1.0 as a good enough solution. So the multiplication becomes (A * B * 4). Take the high 16 bits only. I need to try this. Then 0x4000 * 0x4000 = 0x4000. PPS. After spending some time reading. I now realized why my rotational matrix operations caused flaws. The fix is really trivial. DON'T ROTATE BY STUPID AMOUNTS THAT CAUSE ROUNDING ERRORS. It will be interesting to see if all my problems got swept away by only using "magic angles". Quote Link to comment Share on other sites More sharing options...
42bs Posted December 9, 2019 Share Posted December 9, 2019 Suzy or not Suzy? I think if 8bit resolution is ok, then table driven math is likely quicker. Quote Link to comment Share on other sites More sharing options...
+karri Posted December 9, 2019 Share Posted December 9, 2019 34 minutes ago, 42bs said: Suzy or not Suzy? I think if 8bit resolution is ok, then table driven math is likely quicker. I hope to have deterministic math. Rotate left followed by rotate right should get an identical view from where I started. As the cc65 does not use Suzy math I have been dreaming about making a 3D library that is callable from C. tgi_sprite(&Sspace1); MatrixAbsolute = &ownship.vbasis_right_x; BRotateZ(Roll & 0x1f); BRotateX(Climb & 0x1f); BMove(Velocity); if (planet_1) if (CalcScreenPos(&planet1, dx, dy, dz)) tgi_sprite(&planet1); DustRoll = Roll / 4; DustClimb = Climb / 4; DustVelocity = Velocity / 4; tgi_setcolor(1); DustFront(); DrawDust(); tgi_setcolor(2); DustFront(); DrawDust(); tgi_setcolor(3); DustFront(); DrawDust(); tgi_setcolor(4); DustFront(); DrawDust(); tgi_sprite(&Scockpit); tgi_updatedisplay(); If my math gets better by the recent stuff I read about I should have Stardreamer ready soon. Quote Link to comment Share on other sites More sharing options...
enthusi Posted December 9, 2019 Author Share Posted December 9, 2019 But maybe someone can start a dedicated thread on "3d math"? Quote Link to comment Share on other sites More sharing options...
+karri Posted December 9, 2019 Share Posted December 9, 2019 Sorry about hijacking thread. I open another one. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.