|
ForumsSega Master System / Mark III / Game GearSG-1000 / SC-3000 / SF-7000 / OMV |
Home - Forums - Games - Scans - Maps - Cheats - Credits Music - Videos - Development - Hacks - Translations - Homebrew |
Author | Message |
---|---|
|
[Question] ReRecording
Posted: Sat Jan 23, 2021 10:02 am
|
How hard would it be to implement basic rerecording capabilities to Meka? I'm not talking about full blown TAS features, just the ability to record and replay an input log, I'm not an expert but it shouldn't be too hard if Meka is already deterministic enough?
I usually use Dega to prepare the videos I upload on my Youtube channel, but some games tend to malfunction in Dega (not to mention homebrew games which use psglib), so it would be nice to have an alternative. Again, I'm not talking about anything fancy, just something which would allow to load a savestate and resume from there, to remove simple mistakes from playthroughs, it's a common practice. Thanks in advance. |
|
|
Posted: Sun Jan 24, 2021 2:11 pm |
Uh? Can you elaborate on this? Thanks! |
|
|
Posted: Sun Jan 24, 2021 3:08 pm |
Dega doesn’t handle single byte writes for frequency updates. | |
|
Posted: Sun Jan 24, 2021 3:43 pm |
I see. Pretty bad bug, then. | |
|
Posted: Sun Jan 24, 2021 5:23 pm |
It was already mentioned here, by the way.
And I'm sorry if it sounded like I was blaming psglib for that, on the contrary, I thought I made it pretty clear that I'm looking for a better alternative to Dega because it's the emulator's fault, which is why I asked this question about rerecording, so I could switch to Meka for my youtube videos. |
|
|
Posted: Sun Jan 24, 2021 6:11 pm |
Yeah, my terrible memory again. :|
it never sounded like you were blaming PSGlib edit - yes, Dega is expecting that any byte (for the PSG chip) that follows a 'set tone low bits' byte is one that's there to set the high bits, see first 'if' block. void DpsgWrite(unsigned char d)
{ MastSoundUpdate(); // Update sound up to here VgmPsg(d); // Write to disk if ((Dpsg.Last&0x90)==0x80) { // 1cc0pppp PPPPPPPPP : Set Channel Pitch int c=(Dpsg.Last>>5)&3; Dpsg.Period[c]&=0x00f; Dpsg.Period[c]|=d<<4; // Keep low bits and set high bits RecalcAdd(c); } if ((d&0x90)==0x80) { // 1cc0pppp int c=(d>>5)&3; Dpsg.Period[c]&=0xff0; Dpsg.Period[c]|=d&15;// Keep high bits and set low bits RecalcAdd(c); if (c==3) Noise=1; // Reset noise seed } if ((d&0x90)==0x90) { // 1cc1vvvv : Set Channel Volume int c; unsigned char v; c=(d>>5)&3; v=(unsigned char)((~d)&15); if (v>Dpsg.Volume[c]+2) { Chan[c].pSam=NULL; RecalcAdd(c); } // Louder: it's likely this is a new note Dpsg.Volume[c]=v; RecalcVol(c); } Dpsg.Last=d; // Store current byte (in case of a two byte command) } and this doesn't happen with PSGlib in case of small vibratos where the high bits don't change, so there's no need to rewrite them (also, it's not too hard to fix this, honestly...) |
|
|
Posted: Sun Jan 31, 2021 1:20 pm |
To answer the original question: I guess it is not trivial (it’s harder than savestates, for example) and given the development rate of Meka, it’s unlikely to happen any time soon. | |
|
Posted: Sun Jan 31, 2021 4:43 pm |
I see, thanks for your reply :(
I hoped that since the piano works very well it would have been easy to install a piano roll on it, but since I know nothing about emulation I'm not surprised that I was wrong. Time for plan B, I guess. Do you think you can do it? Not to vanilla Dega of course, but to its ReRecording version. We shouldn't talk about it in this topic, though, I don't want to pollute the Meka subforum with its competitors. |
|
|
Posted: Sun Jan 31, 2021 11:27 pm |
Where's that? |
|
|
Posted: Mon Feb 01, 2021 12:18 am |
Oh well, thanks anyway :( edit: found it, and conversation moved to private messages |
|