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.

Topics - Mauron

Pages: [1]
Site Talk / Long delay in loading certain pages.
« on: February 01, 2016, 07:21:13 pm »
When going to the documents/utilities/rom hacking sections for the first time in a while, I get a delay of ~30 seconds with the text "Connecting to gettopup.com..." in my status bar. After the first page load, later pages do not experience the same delay, but the problem reappears after an unspecified period of time. The problem has been ongoing for several months.

Site Talk / News group update suggestion.
« on: October 27, 2015, 09:36:48 pm »
For the group updates on a category (e.g. ROM Hacks: New Hacks added to the database), would it be possible to link the included screenshots to the game they're from, or at least have the hack name shown below the image?

Right now if a screenshot looks interesting, but isn't from something I recognize, the only way to identify it is to click through the submissions until I see the screenshot again.


What does the part before the hand say? I know from context it has something to do with the equipped weapon.

Programming / [SNES] Is CMP #$00 necessary in this situation?
« on: May 18, 2014, 07:29:36 pm »
Code: [Select]
LDA $CC0000,x
CMP #$00

From my understanding, LDA will set the z flag if the value loaded is 0, and bne will branch if the z flag is clear, so the CMP is unnecessary.

I just wanted to make sure I'm right on this.

ROM Hacking Discussion / Help writing a readme file.
« on: July 13, 2011, 09:42:53 am »
I wasn't sure where best to stick this. I've completed a few Temporal Flux plugins, and will be releasing them once I have a readme for them written.

1) Requirements
Temporal Flux 3.01, and the .Net Framework 2.0.
2) Installation
Copy MonsterPlugin.dll to the Temporal Flux directory.
3) Uninstallation
Delete MonsterPlugin.dll
4) Usage
Open any of the three SNES ROM versions (US, Japanese, or Pre-Release) in Temporal Flux, and choose Monster Editor from the Plugins menu.
5) Contact
For any questions or theories about unknown bytes, message Mauron on Romhacking.net or email mauron@maurtopia.com with Temporal Flux somewhere in the subject line.
6) Thanks
Geiger, for Temporal Flux, and the numerous people whose research over the years made this program possible.

This is for one of them. Any suggestions would be helpful.

We the Maurons, in order to form a more perfect ROMhack... wait, wrong script.

Let's just skip to the Q&A.

Q: Isn't there already a tech editor for Chrono Trigger?

A: Yes. Unfortunately, it was not, and will not, be completed. I greatly respect the previous author for what he did, but due to certain circumstances, he's unable to complete it.

Q: So there's two now? How do I know which one to use?

A: Mine should now have all the functionality of the old one. For the 4 byte headers, mine takes care of those when saving. For graphics and sound data, mine has more research included.

Q: When will yours be complete?

A: When I get there. I'd like to be more helpful, but then I'd likely miss the date.

Q: The old editor displays things differently! Why?

A: You're either referring to the new boxes, or "missing" objects. The new boxes are different object types, which was discovered after the last release of the old editor. The "missing" objects were actually the"miss" animation for a tech. They're displayed properly now.

Q: Can I have a link?

A: Sure Hi-Tech Beta 13!

Edit: Installation: Extract the zip into your Temporal Flux directory.

Edit 2: Fixed some bugs, changed the link.

Edit 3: Brand new link.

Here's a sample video. It demonstrates a small tweak possible with the editor.

Edit 4: Tech expansion is possible (and has been for a while) Updated the link.

Edit 5: Link updated, Q & A updated.

Edit 6: Link updated.

Edit 7: Link updated.

Edit 8: Another version, another link.

Edit 9: New link

Edit 10: Linky link.

Edit 11: Link again.

Edit 12: Link update, removed some outdated information

Every game on a system has a lot in common. At the simplest level, the data is the same (bytes and integers and strings, oh my). Even at higher levels, we have similarities.

What if someone (me) made a framework that could handle the things any editor might need, and provided it to the community as a framework? I was thinking of providing the following:

  • Reading data from the ROM.
  • Writing data to the ROM.
  • Handling pointers.
  • Displaying graphics.
  • Tracking used and free space.
  • Allowing for plugins, to keep everything for a game under one roof.

I've begun making something along these lines for the editor I'm developing now - The real question is it worth releasing as a separate entity? It's for the SNES, and developed in a .Net language (C# is my choice, but if the dlls are distributed, any .Net language could use them).

What are everyone's thoughts?

Programming / [Ogre Battle/LZSS] I can't get my compression routine correct.
« on: September 21, 2010, 05:42:58 pm »
Comments on problem are in the routine below. It borrows heavily from Geiger's routine for Chrono Trigger.

Code: [Select]
public List<byte> Decompressed = new List<byte>();
        public List<byte> Compressed = new List<byte>();
        public int CompressedSize;
        public int UncompressedSize;
        public bool ReadyToSave = false;
        public List<byte> Original = new List<byte>();
        private int ROMPosition;

        public bool Compress(List<byte> RawData, bool IncreasedSize)
            int MaxSize = IncreasedSize ? RawData.Count : UncompressedSize;
            Compressed.Add((byte)(MaxSize & 0xFF));
            Compressed.Add((byte)((MaxSize & 0xFF00) / 0x100));
            short j;
            short k;
            byte BitCounter;
            ushort Offset;
            ushort CopyLength;
            int SourcePosition;
            ushort WorkingPosition;
            byte[] TempData = new byte[0x10000];
            ushort PacketHeaderOffset;
            ushort Range;
            ushort CurrentSize = 0xFFFF;
            ushort MaxCopy = 34;

            Range = (ushort) 0x07FF;
            SourcePosition = 0;
            BitCounter = 0;
            Offset = 0;
            CopyLength = 0;
            WorkingPosition = 3;
            PacketHeaderOffset = 2;
            while(SourcePosition < MaxSize && WorkingPosition < CurrentSize)
                 for(; BitCounter < 8 && SourcePosition < MaxSize; BitCounter++)
                     if (SourcePosition > Range)
                         j = (short) (SourcePosition - Range);
                         j = 0;
                     for(; j < SourcePosition; j++)
                         for (k = 0; SourcePosition + k < MaxSize && RawData[j + k] == RawData[SourcePosition + k]; k++)
                         if (k > CopyLength)  //Should this be >= ? If I do that, it fixes some things but breaks others?
                             Offset = (ushort)j;
                             CopyLength = (ushort)k;
                     if (CopyLength > MaxCopy) // This was my latest experiment. Not sure if it's right at all.
                         Offset += (ushort)(CopyLength - MaxCopy);
                         CopyLength = MaxCopy;
                     if(CopyLength > 2)
                         TempData[PacketHeaderOffset] |= (byte) (1 << BitCounter);
                         Offset = (ushort)(0x800 - (SourcePosition - Offset));
                         TempData[WorkingPosition++] = (byte)((((Offset >> 8) & 0x07)) | (CopyLength - 3) << 3);
                         TempData[WorkingPosition++] = (byte)(Offset & 0xFF);
                         SourcePosition += CopyLength;
                         CopyLength = 0;
                         TempData[WorkingPosition++] = RawData[SourcePosition++];
                 if(BitCounter == 8)
                     BitCounter = 0;
                     TempData[PacketHeaderOffset] = (byte)~TempData[PacketHeaderOffset];
                     PacketHeaderOffset = WorkingPosition;
            if(WorkingPosition < MaxSize)
                if(BitCounter > 0)
                    TempData[PacketHeaderOffset] |= (byte) (0xFF << BitCounter); // Lots commented here because I hadn't started playing with that part yet.
                    //Array.Copy(TempData, PacketHeaderOffset, TempData, PacketHeaderOffset + 3, WorkingPosition - PacketHeaderOffset);
                    //TempData[PacketHeaderOffset] = (byte) (BitCounter | 0xC0);
                    //CurrentSize = (ushort) (WorkingPosition + 3);
                    //TempData[PacketHeaderOffset + 1] = (byte) CurrentSize;
                    //TempData[PacketHeaderOffset + 2] = (byte) (CurrentSize >> 8);
                    //TempData[WorkingPosition + 3] = 0;
                    CurrentSize = (ushort) (PacketHeaderOffset + 1);
                    TempData[PacketHeaderOffset] = (byte) 0xC0;
                CurrentSize = (ushort)(PacketHeaderOffset - 4);
                TempData[0] = (byte) (CurrentSize & 0xFF);
                TempData[1] = (byte) (CurrentSize >> 8);
            CurrentSize = (ushort)(PacketHeaderOffset - 2);
            for (int i = 0; i < CurrentSize; i++)
            if ((CurrentSize + 2) >= CompressedSize && !IncreasedSize)
                ReadyToSave = false;
                ReadyToSave = true;
            return ReadyToSave;

Pages: [1]