Jump to content
enthusi

Demo "Bastion" for Sillyventure

Recommended Posts

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. 

  • Like 11

Share this post


Link to post
Share on other sites

Very cool and thank you so much for the privilege of seeing early releases of this engine. The final result still blew me away!

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
Share on other sites
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!

  • Like 2

Share this post


Link to post
Share on other sites

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; )

  • Like 1

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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.

 

Share this post


Link to post
Share on other sites

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 🙂

 

Share this post


Link to post
Share on other sites

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 :)

 

 

  • Like 2

Share this post


Link to post
Share on other sites

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 ;) 

Share this post


Link to post
Share on other sites

Party voting always reflects how many people want some result how badly at a party. That's always the case :)

Share this post


Link to post
Share on other sites

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 :)

 

Share this post


Link to post
Share on other sites
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 🙂

 

 

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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

  • Like 3

Share this post


Link to post
Share on other sites

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".

Share this post


Link to post
Share on other sites

Suzy or not Suzy?

I think if 8bit resolution is ok, then table driven math is likely quicker.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...