News: 11 March 2016 - Forum Rules

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - DougRPG

Pages: 1 2 3 4 5 [6] 7 8
101
ROM Hacking Discussion / Re: Rockman 4 MI menu freeze?
« on: January 04, 2014, 11:30:20 pm »
Check your box.....

102
ROM Hacking Discussion / Re: Rockman 4 MI menu freeze?
« on: December 28, 2013, 11:27:41 am »
The problem is that your main SRAM has garbage from the previous game (the original game from the donor cart).
Seems that the game doesn't erase Sram, and it cause some conflicts if there is garbage in the Sram.

So, short the battery for a few seconds and all will work like magic  :)

103
ROM Hacking Discussion / Re: Screenshots
« on: November 02, 2013, 09:16:48 am »
OMG. Thank you Gideon, I'm waiting for Ys 5 for a long time.

Hope you didn't forget Lagrange Point  8)

104
ROM Hacking Discussion / Re: Screenshots
« on: October 27, 2013, 10:22:43 pm »
^- That's one of the plans.  I kind of want to import all the voices into the SNES version as a test run to show it works fully.  With everything labeled like this as well, gives people all the data they need to import voices.

I do have the script files for 010 Editor 5.0+ as well for increasing/decreasing the headers for SNESBRR encode/decode.  So once everything gets labeled and settled, everything will be released at once with full detail on what to do to import/export voices.  Not really much as it seems people don't play Star Ocean that much anymore, but it's a nice bit for anyone else who wants to pull a 'full' translation.

I'm creating an inserter for Star Ocean (snes). I already dumped the texts (Dejap version), and now I'm trying to change the compression, but no success untill now  :'( I posted a picture here some months ago.

105
And what about adding the Priestess and Ninja characters to Cadash for Sega Genesis? This is a very good game...

106
Newcomer's Board / Re: Genesis disassembly
« on: October 17, 2013, 11:52:57 pm »
I did some hacks using Regen. Regen has a good debbuger.

But Ida pro is mandatory.

107
News Submissions / Re: Translations: Oriental Blue Translation Released
« on: September 24, 2013, 01:27:16 am »
I tried to play on PSP using gpSP 3.4 Test 3 Build 152 but the game frezzes before entering the first battle.

Version 3.2 seems to work fine and I can enter the battles, but I only played for a few minutes.

Anyone have more information about the game compatibility with emulators?

108
Programming / Re: Algorithms for optimum dictionary compression
« on: September 04, 2013, 04:48:29 pm »
Thank you for the reply, I'll take a look on you CompressTools.

Quote
1) You should not replace the most common string, but the one that will grant a greater saving of bytes. This is completely different !

That is what I said in my post. I want the 256 global strings that gives the best compression. So my first idea is to find the most common strings for each size, and after that sort all these strings based on the compression ratio (the one's who saves more bytes). So, a string of size 3 can save much more space than a string with size 10, if the (occurence_size3 x 3) is higher than (occurrence_size10 x 10).
Maybe my description was not very well written.

Quote
2) You forgot that your string matches will not be independant. For example if "hello" is present 15 times, then "hell" is present at the very least 15 times too.

Yes, my approach is far from the best solution, and the worst case can have a very poor compression ratio. Even if I find the best strings like I said above, and start to replace the strings with the corresponding dictionary entries, there will be a lot of conflicts, and the result will be far from the best compression.
I can restrict to only get the strings that doesn't conflict with the previous strings, but I'll need to check all the possible combinations to see which one has the optimum set of strings, what is impractical.

What was your approach? I'll study your tool, but can you describe in a high level what you did?

Quote
3) I think it's silly to think you'll have 256 dictionary entires, you'll need room for literals which are not in the dictionary.

I'm thinking in a generic algorithm, focused only on the dictionary, and for practical uses I can choose other smaller number.
Other solution is to add this control byte like I said in my first post, this way I can know if I have a literal or a dictionary entry, so I can have 256 literals and 256 dictionary entries. This control byte will add a lot of extra info on the compressed data, but can be better than having a smaller dictionary in some cases (I'm guessing).

109
Programming / Algorithms for optimum dictionary compression
« on: September 04, 2013, 12:00:28 pm »
Hi, I want to compress a script with dictionary compression, and I'm trying to implement a good algorithm for the optimum solution.

First, I want that the string sizes in the dictionary can goes from 1 to n, so a string in the dictionary can have a maximum of n characters.
Second, I want that the dictionary has only 256 entries (maximum).

So I need to find the 256 strings that gives me the maximum compression.

My fist idea is the following:

1-)Find the 256 most common strings for each size (1 to n).
The worst algorithm here is to run through the script 256 times for each size (n). Probably there is a better way!

2-)With this information in hands we need to find the 256 global strings that gives the best compression for the whole script.
My first idea is to run through the strings of each size, starting with the most common for each size, and starting to sort the strings based on the compression ratio. To calculate this ratio we can run through the script adding the string size for each occurrence of this string, which gives us the total size in bytes this string has in the whole script.
We can stop to sort the strings for some string size, let's say k, if the position after the sort is higher than 256. So after the strings for all sizes starts to have a position higher than 256 the algorithm is finished.

3-)After finding the 256 best strings, we can create the dictionary.

As we can see this method needs to run through the whole script a LOT of times.
So someone knows some documents, or have some ideas for a better algorithm?



I was thinking about another method where I put one control byte each eight bytes, where each bit of this control byte tells if we have a common char or a dictionary entry. But using this method we need a different algorithm to calculate the dictionary strings, and seems much more complex to find the optimum solution.


If someone has experience with this stuff, please share here.


PS: I started thinking about this stuff today, so sorry if it seems a silly question.

110
Newcomer's Board / Re: Easiest platform to translate
« on: July 19, 2013, 05:45:47 pm »
Sega Genesis, because it's big endian (the address you see in a hex editor is in the same way you write it), and the Rom data is mapped at address 0x0 (so the address used in the asm code, and the position of this address inside the Rom file are the same).

These two things simplify a lot for newbies.

111
I love hacks like these that involve complete overhauls of familiar things
Every level is a new turn, and a pleasant surprise

Good job, isaix!

(and yes, it works perfectly in bsnes/higan)

So, the sound problem is not present using Bsnes?

isaix, you think you could fix your previous hack to work on the real hardware/Bsnes?

112
Works on the real hardware/Bsnes?

113
ROM Hacking Discussion / Re: Screenshots
« on: March 09, 2013, 11:30:08 am »
Trying to create an inserter for Star Ocean:


114
Thank you guys....

Some Sega Genesis games uses this Multiple Huffman approach, like Landstalker, Shinning Force 2....

But how much better the multiple Huffman is, compared with the normal Huffman? Is there some study that compares the two methods?


This LZH is feasible to be used in a Snes game?


PS: LostTemplar, your inbox is Full.......

115
Programming / Re: Big O notation and in-engine text formatters
« on: March 05, 2013, 06:12:07 pm »
Seems that there is no worst case than O(2n). If the inner loop stops when it finds a space, just after that the outer loop goes to this space.
So I think there is no way some char can be read more than two times.

116
Programming / Re: Big O notation and in-engine text formatters
« on: March 05, 2013, 04:34:44 pm »
Hi, I did something similar some days ago. I created a tool to help me translate the text.
My script is in a Xml format, so this tool is a QT program that reads this Xml and display the dialogs, and I can navigate between the dialogs.
Then I put a field that tells me if the current dialog has more letters than the allowed, considering control codes, line breaks, etc. And this field show the text in red and green colors.
See this picture:



I put my control codes inside | |.

I tried to do this by hand, but the final code became very ugly. Take a look:

Code: [Select]
void MainWindow::verifyAndInsertDialog(QString dialog)
{
    QString totalLine = "";
    QString partialLineWithoutCodes = "";
    QString partialLineWithCodes = "";
    int lineNeedle=0;
    int blockWriteNeedle=0;
    unsigned int currentBlocksize=0;

    while (lineNeedle<dialog.size())
    {
        bool charIsCode=false;
        unsigned char currentChar;
        unsigned char simbol;

        currentChar = dialog[lineNeedle++].toLatin1();

        if ((lineNeedle == dialog.size()) && (currentChar != '|'))
        {
            partialLineWithoutCodes.append(currentChar);
            currentBlocksize++;

            partialLineWithCodes = partialLineWithoutCodes;

            if (currentBlocksize<33)
            {
                partialLineWithCodes.prepend("<font color=\"green\">");
                partialLineWithCodes.append("</font>");
            }
            else
            {
                partialLineWithCodes.prepend("<font color=\"red\">");
                partialLineWithCodes.append("</font>");
            }
            totalLine.append(partialLineWithCodes);
            break;
        }

        if (currentChar == '|')
        {
            partialLineWithCodes = partialLineWithoutCodes;

            if ((dialog.size()-lineNeedle) < 3)
            {
                if (currentBlocksize<33)
                {
                    partialLineWithCodes.prepend("<font color=\"green\">");
                    partialLineWithCodes.append("</font>");
                    partialLineWithCodes.append(currentChar);
                }
                else
                {
                    partialLineWithCodes.prepend("<font color=\"red\">");
                    partialLineWithCodes.append("</font>");
                    partialLineWithCodes.append(currentChar);
                }
                totalLine.append(partialLineWithCodes);
                break;
            }


            QChar simbol1 = dialog[lineNeedle];
            QChar simbol2 = dialog[lineNeedle+1];
            QString code = tr("%1%2").arg(simbol1).arg(simbol2);

            charIsCode = true;

            simbol = code.toInt(0, 16);

            if ((simbol == 0x5C) || (simbol == 0x5D) || (simbol == 0x63) || (simbol == 0x67))
            {
                if (currentBlocksize<33)
                {
                    partialLineWithCodes.prepend("<font color=\"green\">");
                    partialLineWithCodes.append("</font>");
                }
                else
                {
                    partialLineWithCodes.prepend("<font color=\"red\">");
                    partialLineWithCodes.append("</font>");
                }
            }
            else
            {
                if ((simbol == 0x5F) || (simbol == 0x60) || (simbol == 0x64))
                {
                    if (simbol == 0x5F) currentBlocksize+=4;
                    else if (simbol == 0x60) currentBlocksize+=7;
                    else if (simbol == 0x64) currentBlocksize+=12;

                    partialLineWithoutCodes.append(currentChar);
                    partialLineWithoutCodes.append(simbol1);
                    partialLineWithoutCodes.append(simbol2);
                    partialLineWithoutCodes.append('|');
                    lineNeedle = lineNeedle+3;
                    continue;
                }
            }

            partialLineWithCodes.append(currentChar);
            partialLineWithCodes.append(simbol1);
            partialLineWithCodes.append(simbol2);
            partialLineWithCodes.append('|');

            lineNeedle = lineNeedle+3;
            currentBlocksize=0;
            totalLine.append(partialLineWithCodes);
            partialLineWithCodes.clear();
            partialLineWithoutCodes.clear();
        }
        else
        {
            partialLineWithoutCodes.append(currentChar);
            currentBlocksize++;
        }
    }

    ui->TextValidate->setText(totalLine);
}

The complexity is O(n), because I read each char only once. But the code is ugly.
Maybe a more elegant solution is to use a formal parser. Or break the string in several parts using some regex.

I don't handle spaces like you, only control codes.

117
ROM Hacking Discussion / Best compression method to use in a Snes game
« on: March 02, 2013, 11:18:41 am »
Hi, I need to find a compression method that gives me a very good compression rate. Even using two levels of compression, if necessary. Needs to be feasible to be used in a Snes game.

What do you suggest? What was the best compression methods you guys found in a Snes game?


118
Newcomer's Board / Re: What happens if you don't recompress data?
« on: February 20, 2013, 11:57:04 pm »
The game runs an algorithm to extract the data, so the data must be on a specific format. If you insert the data uncompressed, the format will be invalid, and the algorithm will do the wrong thing.
Even if the compression method supports uncompressed data you probably need to insert some control simbols to tell the algorithm what to do.

There is no magic. The processor cannot guess what you are doing by its own. The processor is not a conscient being. It's a circuit that runs intructions. It's completelly dumb, and follows exactly the instructions on the program. So if you insert the wrong data the results will be wrong and unpredictable.

119
Newcomer's Board / Re: 6502/65816 Assembler
« on: February 20, 2013, 11:46:59 pm »
Quote
Can I have it? Thanks.

??  :huh:

As LostTemplar said, probably you are not ready. You need to study a lot of programming first, and in some years you can try again. This is not a begginer stuff.
If you cannot even run a program, you have a lot of work to do first.

120
ROM Hacking Discussion / Re: Lagrange point text tile editing
« on: January 28, 2013, 09:16:41 pm »
Hi Gideon, do you plan to finish this translation? Seems to be a very good game. Send us some hope.......

Pages: 1 2 3 4 5 [6] 7 8