Jump to content
IGNORED

The Legend of Tilda


PeteE

Recommended Posts

I may have found a bug.

 

I was playing (I believe) the newest version. It has the title screen and moving enemies.

 

When I played it in Classic99, everything seemed normal. But playing on my real hardware I noticed that going into a cave (or underworld) didn't work. In fact, the screen was mostly empty and black and the enemies from the previous screen were inside.

 

I can post screenshots if you like.

Link to comment
Share on other sites

I may have found a bug.

 

I was playing (I believe) the newest version. It has the title screen and moving enemies.

 

When I played it in Classic99, everything seemed normal. But playing on my real hardware I noticed that going into a cave (or underworld) didn't work. In fact, the screen was mostly empty and black and the enemies from the previous screen were inside.

 

I can post screenshots if you like.

No need for screenshots. It sounds like you might have two different work-in-progress versions between classic99 and your real hardware. Please expect to find bugs or unfinished parts, until I release an alpha test for community bug hunting.

 

To answer your earlier question in the thread, I've decided not to personally produce a cartridge or manual. I won't place any restrictions on the binary, so others could produce cartridges.

  • Like 6
Link to comment
Share on other sites

Gold TI cart with this game would be the greatest thing since sliced bread.

 

Oh, don't forget the secret name in Zelda.

 

In Zelda, if you type your name as "LINK", you play the game in a much harder setting. You should do something similar like "TI" or "994A".

  • Like 1
Link to comment
Share on other sites

Gold TI cart with this game would be the greatest thing since sliced bread.

 

Oh, don't forget the secret name in Zelda.

 

In Zelda, if you type your name as "LINK", you play the game in a much harder setting. You should do something similar like "TI" or "994A".

I don't have any provisions for the second quest, just want to finish the first quest for now. But I've seen "randomizer" romhacks that put the items in random locations based on a seed - it might be interesting to try something like that, perhaps randomized dungeon layouts too.

Edited by PeteE
  • Like 5
Link to comment
Share on other sites

  • 3 weeks later...

So I'm working on a minimal-memory-usage sound and music player for this game. The player will use 16 bytes of scratchpad RAM: a 3-bit duration and 13-bit data pointer for music and sound effects, on each of the 4 sound channels. The 13-bit data pointer requires that all sound pattern data reside in the same 8K bank as the player code. Looping and subpatterns will be supported, which requires 8 bytes for a return address for each channel (but can be stored in VDP memory.) (Looping is a subpattern jump without a return.)

 

I'm designing my own compressed format for this, here's the current bitstream layout:

* pattern format
* 0ddd vvvv           duration and volume
* 1ddd vvvv nnnnnnnn  duration, volume and note table index

* note table
*  0000 zzzz 00xx yyyy  frequency divider xyz 0-1023 or noise 0-7
*  aaaa aaaa aaaa aaaa  subpattern address (return address stored in VDP)
*  1111 1111 1111 1111  subpattern return (address loaded from VDP)
*    subpattern return could also be fixed table entry 255
*    sound effects must terminate with subpattern return
* number of note table entries cannot exceed 256

Is it correct to say that "sound lists" are the lowest common denominator, if I wanted to make a converter to my format? (I have downloaded Rasmus' SoundListRipper and some sound lists from OLD CS1 to use for testing.)

 

Edit: How is looping represented in a sound list?

Edited by PeteE
  • Like 2
Link to comment
Share on other sites


Edit: How is looping represented in a sound list?

 

in a TI sound list, termination is indicated by a 0 duration, but looping is indicated by a 0 length byte, followed by 2 bytes of address.

 

 

Parsec sound list sample:

 

SNDVDP EQU  >3800        START ADDRESS OF VDP SOUND LIST
LOOPHB EQU  >38          SOUND LOOP HIGH BYTE ADDRESS
LOOPLB EQU  >00          SOUND LOOP LOW  BYTE ADDRESS
********************************************
*      SOUND LISTS - PARSEC                *
********************************************
SHPSND BYTE 4,>DF,>FF,>93,>B3,1               FREQ TRICK SOUND
       BYTE 4,>80,>3F,>AE,>3E,60
       BYTE 0,LOOPHB,LOOPLB
OFFSND BYTE 4,>9F,>BF,>DF,>FF,0               ALL GENERATORS OFF
SLWSND BYTE 5,>9F,>BF,>DF,>FC,>E7,1           SLOW SHIP FIRE
       BYTE 2,>C2,>05,30
       BYTE 0,LOOPHB,LOOPLB
FSTSND BYTE 5,>9F,>BF,>DF,>F6,>E7,1           FAST SHIP FIRE
       BYTE 2,>C2,>05,30
       BYTE 0,LOOPHB,LOOPLB
EXPSND BYTE 7,>9F,>BF,>DF,>E7,>F0,>C0,>07,5   EXPLOSION
       BYTE 1,>F1,6
       BYTE 1,>F2,7
       BYTE 1,>F3,8
       BYTE 1,>F4,9
       BYTE 1,>F5,10
       BYTE 1,>F6,11
       BYTE 1,>F7,12
       BYTE 1,>F8,13
       BYTE 1,>F9,14
       BYTE 1,>FA,15
       BYTE 1,>FB,16
       BYTE 1,>FC,17
       BYTE 1,>FD,18
       BYTE 1,>FE,30
       BYTE 1,>FF,0
FIRSND BYTE 4,>9A,>BF,>DF,>FF,1     LASER SHOT
       BYTE 3,>80,>0A,>98,1
       BYTE 3,>80,>0C,>96,1
       BYTE 3,>80,>10,>94,1
       BYTE 3,>80,>14,>92,1
       BYTE 3,>80,>18,>90,1
       BYTE 3,>80,>1C,>92,1
HB20   EQU  $+2
       BYTE 3,>80,>20,>94,1
       BYTE 3,>80,>28,>96,1
       BYTE 3,>80,>30,>98,1
       BYTE 3,>80,>38,>9A,1
       BYTE 3,>80,>3E,>9C,1
       BYTE 1,>9F,0
  • Like 1
Link to comment
Share on other sites

So I'm working on a minimal-memory-usage sound and music player for this game. The player will use 16 bytes of scratchpad RAM: a 3-bit duration and 13-bit data pointer for music and sound effects, on each of the 4 sound channels. The 13-bit data pointer requires that all sound pattern data reside in the same 8K bank as the player code. Looping and subpatterns will be supported, which requires 8 bytes for a return address for each channel (but can be stored in VDP memory.) (Looping is a subpattern jump without a return.)

 

I'm designing my own compressed format for this, here's the current bitstream layout:

* pattern format
* 0ddd vvvv           duration and volume
* 1ddd vvvv nnnnnnnn  duration, volume and note table index

* note table
*  0000 zzzz 00xx yyyy  frequency divider xyz 0-1023 or noise 0-7
*  aaaa aaaa aaaa aaaa  subpattern address (return address stored in VDP)
*  1111 1111 1111 1111  subpattern return (address loaded from VDP)
*    subpattern return could also be fixed table entry 255
*    sound effects must terminate with subpattern return
* number of note table entries cannot exceed 256

Is it correct to say that "sound lists" are the lowest common denominator, if I wanted to make a converter to my format? (I have downloaded Rasmus' SoundListRipper and some sound lists from OLD CS1 to use for testing.)

 

Edit: How is looping represented in a sound list?

 

I'm also working on a minimal-memory-usage sound and music player. :)

 

My approach is to start with a sound player that has a number of channels where it can play notes. A note is here defined as an instrument played at a given frequency, and an instrument describes how the volume and frequency changes over time (the instrument definition takes 4-6 bytes). So the sound player in itself can play pings, boings and crashes, and can be used for sound effects with very little input data.

 

On top of that I have my music player that can play a module consisting of a number of simultaneous tracks. Each track consists of a list of sequences, and may also contain loops. A sequence consists of a list of notes that the sound player can play. Everything is stored as references, so sequences and notes can be reused.

 

The scratch pad footprint is somewhat higher than with your approach: 6 bytes for each channel of the sound player and 8 bytes for each track of the music player, and I probably need 4 channels and 2-3 music tracks.

 

What I will try to do next is to (automatically) convert a tune edited in the MOD2PSG2 tracker into my module format, it should be possible with some limitations.

Edited by Asmusr
  • Like 4
Link to comment
Share on other sites

  • 3 weeks later...

I got my ultra-low memory sound effects and music player working finally. I didn't have to make any major changes in my design, and I wrote a converter in C that will take a file containing a group of sound lists, and output my compressed format and note table in assembly. Some of the original sounds are PCM on the NES, so I had to synthesize those myself - for example: the laser sword beam, the player getting hurt, and dungeon key door opening. Here's a clip, I hope the volume is loud enough. It was recorded at 60fps, but youtube seems reduce it... Also, there is a small hitch when traveling between screens, drawing the next screen takes more than one frame.

 

  • Like 14
Link to comment
Share on other sites

 

Couldn't you use periodic noise controlled by tone generator 3?

 

Periodic noise is just a buzz noise, more regular than a white noise. It doesn't actually go lower in tone.

 

The TI sound chip is pretty good but it's hamstrung on base notes because of the 3mhz clock. Because the frequency divider is faster, it pushes the tones up to higher octaves. The same sound chip in a 1mhz architecture would be able to go about 2 octaves lower easily.

  • Like 1
Link to comment
Share on other sites

Periodic noise doesn't have the right "sound texture". I think the NES APU and the 9919 are clocked the same internally, so I don't think that's an issue either. And there's no way to play PCM directly at 60Hz.

 

Here is the original PCM sound: OriginalDoorSound.wav

 

and here is what I came up with using white noise: TildaDoorSound.wav

 

EDIT: Oh, if you're talking about bass notes, then yes, the periodic noise can be used to play at 1/15th of the frequency of GEN3 and it does have a more buzzy feel. I am doing that in the music, you can usually hear where it flips between using GEN3 directly and Periodic. Maybe it would be more consistent to use Periodic for the whole APU Triangle channel?

Edited by PeteE
  • Like 1
Link to comment
Share on other sites

Periodic noise doesn't have the right "sound texture". I think the NES APU and the 9919 are clocked the same internally, so I don't think that's an issue either. And there's no way to play PCM directly at 60Hz.

 

Here is the original PCM sound: attachicon.gifOriginalDoorSound.wav

 

and here is what I came up with using white noise: attachicon.gifTildaDoorSound.wav

 

EDIT: Oh, if you're talking about bass notes, then yes, the periodic noise can be used to play at 1/15th of the frequency of GEN3 and it does have a more buzzy feel. I am doing that in the music, you can usually hear where it flips between using GEN3 directly and Periodic. Maybe it would be more consistent to use Periodic for the whole APU Triangle channel?

 

Yeah, the TI one is fine, don't sweat it. :) It's the only one I heard that wasn't an errie perfect reproduction of the original!

 

Do you have an idea yet of when the game will be complete? How far away is the finish line? Any major tasks left to do?

  • Like 1
Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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