Jump to content
  • 0

n00b question from an old modder


haddockd
 Share

Question

Hi All,

 

I am getting back into modding and I started with exit modifying because it was easy (I used UoT back in the day) but as it turns out, I cannot use UoT due to zdec apparently being a "trojan" according to my antivirus. Unfortunately disabling it isnt an option. What is the ideal tool for loading and modifying exist? Preferably one what wont fry my game :)

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Hi All,

 

I am getting back into modding and I started with exit modifying because it was easy (I used UoT back in the day) but as it turns out, I cannot use UoT due to zdec apparently being a "trojan" according to my antivirus. Unfortunately disabling it isnt an option. What is the ideal tool for loading and modifying exist? Preferably one what wont fry my game :)

Which antivirus do you use? Some of them give you the option to add file exceptions so that the program will ignore the file altogether. AVG does this but I'm not sure if what you does will allow you to.

Link to comment
Share on other sites

  • 0

xDan, assuming I am understanding you, do you mean the fix is something like this:

 

old code:

 

                  /* Opaque Display Lists */
                foreach (NDisplayList DList in Room.DLists.FindAll(delegate(NDisplayList DL) { return (DL.TintAlpha >> 24) == 255; }))
                {                     
                    Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, (uint)(0x03000000 | DList.Offset));
                    MeshHeaderOffset += 4; 
                }                   
                
                /* Translucent Display List */
                foreach (NDisplayList DList in Room.DLists.FindAll(delegate(NDisplayList DL) { return (DL.TintAlpha >> 24) != 255; }))
                {                     Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, (uint)(0x03000000 | DList.Offset));
                    MeshHeaderOffset += 4;
                }
 
New Code:
 
              /* Interleaved display lists (opaque first and then translucent) */
 
                NDisplayList transList = new NDisplayList();
                transList = Room.DLists.FindAll(delegate(NDisplayList DL) { return (DL.TintAlpha >> 24) != 255; });
                int maxTrans = transList.Count;
                int counter = 0;
 
                foreach (NDisplayList DList in Room.DLists.FindAll(delegate(NDisplayList DL) { return (DL.TintAlpha >> 24) == 255; }))
                {
                    Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, (uint)(0x03000000 | DList.Offset));
                    MeshHeaderOffset += 4;
                    if (counter < maxTrans)   
                    {
                        Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, (uint)(0x03000000 | transList[counter].Offset));
                        MeshHeaderOffset += 4;
                        counter++;
                    }//end if
                }  //end foreach

 

 

 

 

If so, where can I find the latest version of SO's source. That's easy to fix

Link to comment
Share on other sites

  • 0

/* Write mesh header */

if (MeshHeaderOffset != -1)

{

List<NDisplayList> opaqueLists = Room.DLists.FindAll(delegate(NDisplayList DL) { return (DL.TintAlpha >> 24) == 255; });

List<NDisplayList> translucentLists = Room.DLists.FindAll(delegate(NDisplayList DL) { return (DL.TintAlpha >> 24) != 255; });

int numEntries = Math.Max(opaqueLists.Count, translucentLists.Count);

 

Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, (uint)(0x00000000 | (numEntries << 16)));

Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset + 4, (uint)(0x03000000 | MeshHeaderOffset + 12));

Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset + 8, (uint)(0x03000000 | (MeshHeaderOffset + 12) + (numEntries * 8)));

MeshHeaderOffset += 12;

 

for (int i = 0; i < numEntries; i++)

{

if (i < opaqueLists.Count)

Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, (uint)(0x03000000 | opaqueLists[i].Offset));

else

Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, 0);

 

MeshHeaderOffset += 4;

 

if (i < translucentLists.Count)

Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, (uint)(0x03000000 | translucentLists[i].Offset));

else

Helpers.Overwrite32(ref Room.RoomData, MeshHeaderOffset, 0);

 

MeshHeaderOffset += 4;

}

}

...probably. Someone would need to check a conversion made using that code on hardware. Also, latest/last version of the source is the one on Google Code: https://code.google.com/p/sharpocarina/ - hasn't changed in the last almost 3 years.
Link to comment
Share on other sites

  • 0

...don't get me wrong, and this is nothing against you personally, but this mentality is pretty much poisonous for any sort of ROM hacking scene. Think of ex. the Super Mario World hacks that rely on sound emulation bugs in ancient versions of ZSNES, and just crash on hardware and modern emulators. Or SNES fan translations with graphic glitches, caused by writing to VRAM when it shouldn't be possible. Or earlier hacks of Super Mario 64 being unplayable on hardware because they don't respect proper data alignments.

 

This isn't me wanting to force you to, I dunno, buy an Everdrive 64 and constantly test your mod on hardware, I'm just trying to get people in general to realize that their creations are basically bound to buggy emulators, which will eventually - granted, maybe 10+ years down the line - no longer work on their machines, with ex. 32-bit support disappearing. Emulators will eventually get more accurate as well, properly emulating the N64's hardware, including crashing the system when overflowing the vertex buffer (what Model2N64, and in turn Hylian Toolbox does).

 

Hell, even now and with current emulators, without patching SO as per the above posts, especially translucent surfaces will likely not render properly in terms of Z-ordering, with Link appearing in front of or behind them, forgot what exactly happens under emulation.

 

I feel like I'm starting to understand how byuu - that is, the very accurate SNES emulator bsnes/higan's author - must've felt whenever the topic of emulation accuracy came up, and why it's important...

 

Again, not at all meant as an attack or insult against you, I really, really hope you're not taking it this way. It's just frustating to see this attitude, no matter from whom, and especially because my old work is part of the problem... Instead of trying to improve our knowledge and toolset, we just keep our superficial knowledge and half-broken tools, and keep making things that won't ever work right on the system the original game was made for...

 

(Edit, and sorry for the wall of text...)

Link to comment
Share on other sites

  • 0

No worries. I totally get it but I made this mod with only myself and a years worth of time. I had no idea what I was doing some of the time and the odds of my mod working on the hardware are probably zero. I will absolutely make tweaks and improvements but starting all over to be hardware compatible is just something I am not open to.

Link to comment
Share on other sites

  • 0

I'm all for having hardware functional hacks if possible, because it actually means they're more likely to run smoothly on emulators too, and there's a far higher chance that the ROM won't become damaged whilst it's being worked on, leading to less headaches for the person doing the work. Plus, I'd love to be able to play them on hardware myself.

Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.