SADX/SA1 Hacking/Modding Now with more research and development!
#2611
Posted 21 September 2017 - 11:20 PM

#2612
Posted 22 September 2017 - 12:00 AM



(Not to mention that I don't even know if I would have been able to. I'm not very savvy on editing and porting of SADX objects

Two questions about the Y2K DLC:
1) What's the reason the rings had to be manually placed? Is it that the data in the DLC files is still not fully understood, so it's currently unknown where the rings' position values are located?
2) Would it be possible to make the rings solid like in the Dreamcast version?
#2613
Posted 22 September 2017 - 12:10 AM

Quote
Both I guess? I looked through the binary and found a bunch of floats, but they didn't make much sense as coordinates or rotation values. So it was easier to just do it all manually rather than figure it out.
Quote
The ones placed on the ground are solid, but for the ones rotating in the air I disabled collision on purpose. They're very glitchy even in the original, it's nearly impossible to touch them as Gamma for example.
#2614
Posted 22 September 2017 - 12:24 AM

PkR, on 22 September 2017 - 12:10 AM, said:
I see. Perhaps it would be possible to get the rings' positions by running the DLC in a Dreamcast emulator and looking at the memory?
Failing that, I could try finding all rings in the Dreamcast version to see if there are any missing ones. I was planning to re-play the SA1 DLC challenges sometime anyway, so I guess this is as good a time as any to search for the Millennium Rings again.
PkR, on 22 September 2017 - 12:10 AM, said:
In that case, may I request an alternate version that keeps all rings solid like in the original? For me, part of the fun was standing on top of the rings as Sonic and exploiting their curvature with the Spindash to reach high places

Unrelated, but here's a bug report about the Enhanced Emerald Coast mod: The distortion effect in the sea looks glitchy, as only a section of it tends to get distorted. Beyond a certain point, the sea is unaffected by it, resulting in a gap.
#2615
Posted 22 September 2017 - 04:09 AM

Blue Spikeball, on 22 September 2017 - 12:24 AM, said:
Maybe. This isn't something I'd be interested to do, but if you end up finding anything please post here because it may help with figuring out the other DLC stuff.
Quote

Assuming you have Visual Studio and everything, you can disable the if condition by commenting out or deleting lines 183, 184 and 189 in Y2K.cpp. That will make all rings solid.
Quote
This is just the way the original wave effect works, which I described here in the part about enhancements. It's actually a bit better than in SA1 now because I used a few UV workarounds to make the ocean look less jittery, also in my implementation the "big" ocean doesn't disappear behind Sonic during the wave effect, and when it ends there is no visible model swap. The gaps, however, are still there because the high-poly ocean model is small and doesn't connect with the rest of the ocean. Other than remodeling the high-poly ocean and rewriting the code for the whole thing the only "fix" I can think of is using vertex welding, the same way body parts are connected in character models. However, I know next to nothing about that stuff.
#2616
Posted 22 September 2017 - 06:56 AM

(I translated the Italian parts of the error message)
Le informazioni su come richiamare il debug JIT (Just-In-Time) anziché questa finestra sono riportate in fondo al messaggio. ("the information on how to call back the JIT debug instead of this window is shown at the bottom of this message") ************** Testo dell'eccezione ************** System.InvalidOperationException: Errore di WaitForInputIdle. È possibile che il processo non abbia un'interfaccia grafica. (WaitForInputIdle error. It's possibile the process may not have a graphic interface.) in System.Diagnostics.Process.WaitForInputIdle(Int32 milliseconds) in SADXModManager.MainForm.saveAndPlayButton_Click(Object sender, EventArgs e) in E:\AutoBuild\sadx-mod-loader\SADXModManager\MainForm.cs:riga 798 (line 798) in System.Windows.Forms.Control.OnClick(EventArgs e) in System.Windows.Forms.Button.OnClick(EventArgs e) in System.Windows.Forms.Button.WndProc(Message& m) in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** Assembly caricati ************** mscorlib Versione assembly: 4.0.0.0 Versione Win32: 4.7.2114.0 built by: NET47REL1LAST Base di codice: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- SADXModManager Versione assembly: 1.0.0.0 Versione Win32: 1.0.0.0 Base di codice: file:///C:/Users/Michele/Desktop/sadx/Sonic%20Adventure%20DX/SADXModManager.exe ---------------------------------------- System.Windows.Forms Versione assembly: 4.0.0.0 Versione Win32: 4.7.2114.0 built by: NET47REL1LAST Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Versione assembly: 4.0.0.0 Versione Win32: 4.7.2114.0 built by: NET47REL1LAST Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Drawing Versione assembly: 4.0.0.0 Versione Win32: 4.7.2114.0 built by: NET47REL1LAST Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Versione assembly: 4.0.0.0 Versione Win32: 4.7.2053.0 built by: NET47REL1 Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Versione assembly: 4.0.0.0 Versione Win32: 4.7.2114.0 built by: NET47REL1LAST Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Versione assembly: 4.0.0.0 Versione Win32: 4.7.2114.0 built by: NET47REL1LAST Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- Microsoft.GeneratedCode Versione assembly: 1.0.0.0 Versione Win32: 4.7.2114.0 built by: NET47REL1LAST Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.resources Versione assembly: 4.0.0.0 Versione Win32: 4.6.1055.0 built by: NETFXREL2 Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.resources/v4.0_4.0.0.0_it_b77a5c561934e089/System.resources.dll ---------------------------------------- System.Windows.Forms.resources Versione assembly: 4.0.0.0 Versione Win32: 4.6.1055.0 built by: NETFXREL2 Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_it_b77a5c561934e089/System.Windows.Forms.resources.dll ---------------------------------------- mscorlib.resources Versione assembly: 4.0.0.0 Versione Win32: 4.6.1055.0 built by: NETFXREL2 Base di codice: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_it_b77a5c561934e089/mscorlib.resources.dll ---------------------------------------- ************** Debug JIT ************** Per abilitare il debug JIT, è necessario impostare il valore jitDebugging nella sezione system.windows.forms del file di configurazione dell'applicazione o del computer (machine.config). L'applicazione inoltre deve essere compilata con il debug abilitato. Ad esempio: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> Quando il debug JIT è abilitato, tutte le eccezioni non gestite vengono inviate al debugger JIT registrato nel computer, anziché essere gestite da questa finestra di dialogo.
Does this have anything to do with the DS3 controller I'm using? For reference, here's a list of the mods I'm using:
Mod1=SADXFE Mod2=input-mod Mod3=sadx-dc-lighting Mod4=adx music Mod5=DC_Bosses Mod6=DC_Casinopolis Mod7=DC_EggCarrier Mod8=DC_EmeraldCoast Mod9=DC_FinalEgg Mod10=DC_General Mod11=DC_HotShelter Mod12=DC_IceCap Mod13=DC_LostWorld Mod14=DC_MysticRuins Mod15=DC_Past Mod16=DC_RedMountain Mod17=DC_SkyDeck Mod18=DC_SpeedHighway Mod19=DC_StationSquare Mod20=DC_SubGames Mod21=DC_TwinklePark Mod22=DC_WindyValley Mod23=OptionalMods\\Cowgirl Mod24=OptionalMods\\RevertECDrawDistance Mod25=OptionalMods\\TrainDaytime Mod26=SETFixes Mod27=SoundOverhaul Mod28=ECGardenOceanFix Mod29=OptionalMods\\DisableSA1Titlescreen Mod30=HD_DCStyle Mod31=DisableUpgradeModels Mod32=DC_Branding
Thank you in advance.
#2617
Posted 22 September 2017 - 08:13 AM

#2618
Posted 22 September 2017 - 09:16 AM

#2619
Posted 22 September 2017 - 12:33 PM

Dark Sonic, on 22 September 2017 - 08:13 AM, said:
Yeah, I think updating the dll is what fixed it.
MainMemory, on 22 September 2017 - 09:16 AM, said:
Oops. Sorry about that.
Thank you both!
#2620
Posted 22 September 2017 - 01:50 PM

Also HD GUI should be listed after DC Branding. With your current mod order a lot of HD textures are being replaced by Dreamcast resolution textures.
#2621
Posted 22 September 2017 - 02:39 PM

PkR, on 22 September 2017 - 12:10 AM, said:
Quote
Both I guess? I looked through the binary and found a bunch of floats, but they didn't make much sense as coordinates or rotation values. So it was easier to just do it all manually rather than figure it out.
Back when I initially wrote the decryptor, I tried to find the same data as well. I was expecting to see the usual SET format used for other object placement, since the DLC had the ability to place objects and SET entries are pretty easy to recognize on their own, but I didn't see anything like that in any of the files. I also confirmed at that time there is no SH4 assembly code in any of the downloads, so it seems that all logic in the downloads just comes from pre-defined features that the downloads can use. I still think there's got to be some equivalent of SET data in there, since the location of things probably wouldn't have all been defined ahead of time. The other odd thing is the lack of a reference to SSRACING.ADX in the file. In the SA2 downloads, once those were decompressed you could easily find the filename of the custom music track for Kart race downloads and even change it, but here there's no sign of it. Even if it were PRS compressed, text usually doesn't compress well in PRS and you'd still see part of RACING since the characters don't repeat. At some point this may make me want to look at the data again and see if I can figure out some of the unknown regions. Maybe in addition to encrypting the entire file, perhaps some sections were compressed as well. I don't think there's any additional encryption though, the data isn't random enough.
I may have posted some of this information before, I just can't remember at this point if I did or not.
#2622
Posted 22 September 2017 - 02:48 PM

sonicblur, on 22 September 2017 - 02:39 PM, said:
Yeah, I also think there should be something like that in there. For the Y2K DLC, the data probably isn't in the PRS-compressed binary though because most of it is occupied by the ring model. Anyway this needs to be looked into. 0x280 to 0x7C0 in the decrypted VMS file looks interesting.
Quote
I'm going to guess it works the same way as the other music tracks - there's a unique track ID for each file, so the argument for the function that plays the music is just a number. The music IDs for Super Sonic Racing (87) and Palmtree Panic (84) are included even in SADX, so that's probably how it works in SA1 too.
EDIT: Looks like someone has figured it out! Now we have the exact coordinates for ring placement.
EDIT2: so ok, there's a 30-byte structure with the following:
0x00 1 byte Level ID
0x01 1 byte Act number
0x02 1 byte X scale multiplied by 10 (typical values: 10, 15, 30 etc.)
0x03 1 byte Y scale multiplied by 10
0x04 1 byte Z scale multiplied by 10
0x05 1 byte X rotation speed (multiple of 16/65535 in BAMS)
0x06 1 byte Y rotation speed (multiple of 16/65535 in BAMS)
0x07 1 byte Z rotation speed (multiple of 16/65535 in BAMS)
0x08 1 byte Probably used to determine if the model has collision. Can be 0 (normal), 80 (no collision) or FF.
0x09 1 byte DLC-specific object type. For Y2K it's 0 for the ring, 3 for the poster
0x0A 1 byte Unknown. Seems to be either 0x10 or 0x01
0x0B 1 byte Unknown
0x0C 1 byte May be used as an ID in missions where you collect items
0x0D 1 byte Probably unused
0x0E 1 byte Message ID to display when you touch the object
0x0F 1 byte Collision sphere radius?
0x10 1 byte Unknown
0x11 1 byte Sound/Music ID to play when touching/collecting the object.
0x12 2 bytes X rotation (BAMS)
0x14 2 bytes Y rotation (BAMS)
0x16 2 bytes Z rotation (BAMS)
0x18 2 bytes X coordinate
0x1A 2 bytes Y coordinate
0x1C 2 bytes Z coordinate
#2623
Posted 22 September 2017 - 05:41 PM

#2624
Posted 22 September 2017 - 05:50 PM

#2625
Posted 22 September 2017 - 06:05 PM

That reminds me, is the byte structure for the DLC Twinkle Park track any similar, like which ones represent an object's coordinates on a map? You said that you manually added the entrance to the track in SADX to where it was located on the other side of the sewer river in SA1DC, right?