emoose / OutRun2006Tweaks

Turning and spinning and spinning and turning, woah!
MIT License
355 stars 0 forks source link

Modding tools #90

Open emoose opened 4 months ago

emoose commented 4 months ago

Since things are a bit scattered atm it'd probably be good to start a thread for any useful tools, feel free to link any other tools here too or discuss about how to mod the game.

General tools

OutRun2 tools

Other

envido32 commented 4 months ago

Oh this is truly amazing, thank you so much! This is so handy!

btw, there was a newer OutrunX v2.2 than the link you shared.

And not exactly a tool but there was a Course Editor in development at one point, I think this is the only alpha release available but it's still interesting to test.

Tenome commented 4 months ago

The course editor is fun, unfortunately it doesn't support hacking in 15+15 courses for the true endurance test since I think you'd have to change the level table to support that as well.

Has anyone looked into extracting/modifying the SFX?

Tenome commented 4 months ago

Are the flags for hitting checkpoints easy to find? I might want to try and make a LiveSplit for AutoSplitter later, which requires finding the memory addresses to watch.

envido32 commented 4 months ago

Are the flags for hitting checkpoints easy to find? I might want to try and make a LiveSplit for AutoSplitter later, which requires finding the memory addresses to watch.

I just tested CheatEngine for the fist time with Howard's CT files and to be honest is much more than I can chew...

But it seems to be hidden here somewhere

image

Tenome commented 4 months ago

Damn, I wished I checked Github first lol. I just wasted two hours scanning trying to find the value, thinking it might be a unique flag that was calculating the time difference, when I could have just used that CT table which already has what I think I need ("stages passed" and "actual stage number" that simply go up by one). Oh well, at least I was getting through my backlog of music the entire time and found some more songs to add to the CD switcher.

Edit: Hm, it's a start. Hitting the last goal doesn't actually increase it, though, so I have to figure out what to do with that. I'm trying to lock the timer and see which value the "Time Elapsed" address (007D39DC 4 byte) equals the checkpoint time, but I can't seem to actually freeze the timer when I check it off. It's always increasing by a split second before snapping back down to the value I set.

envido32 commented 3 months ago

Damn, I wished I checked Github first lol. I just wasted two hours scanning trying to find the value, thinking it might be a unique flag that was calculating the time difference, when I could have just used that CT table which already has what I think I need ("stages passed" and "actual stage number" that simply go up by one). Oh well, at least I was getting through my backlog of music the entire time and found some more songs to add to the CD switcher.

Edit: Hm, it's a start. Hitting the last goal doesn't actually increase it, though, so I have to figure out what to do with that. I'm trying to lock the timer and see which value the "Time Elapsed" address (007D39DC 4 byte) equals the checkpoint time, but I can't seem to actually freeze the timer when I check it off. It's always increasing by a split second before snapping back down to the value I set.

If you have more experience with CE Howard left a lot of useful information in that threat, from page 26 to 29 he explains how he found the stages files, made a lookup table and how they are connected. He event talks about what type of bugs or limitations he stumble-upon, very interesting stuff.

I wish I'll be able to give it a use soon, but my technical level is years behind. The track editor randomize sounded amazing to try but it seems that it was never released as far as I'm aware :(

emoose commented 3 months ago

OR2Tool 0.1.2: OR2Tool-0.1.2.zip

texture_X_atlas.json files will be exported to same folder as info.xml/texture_X.dds/etc.

You'll need to convert the DDS texture to png first (texconv -ft png texture_X.dds) and then flip it vertically, after that Atlased should be able to load the texture_X_atlas.json file for you.

There's no support for reading in updated atlas JSONs yet (added in 0.1.3 below), but the sprite_XXX numbers shown in Atlased do match the XML's <Sprite Index="XXX">, so you could update the XML yourself using the values from Atlased (note that XML expects end X/Y, not size which Atlased shows - just add the position + size from Atlased to get the end)

emoose commented 3 months ago

OR2Tool 0.1.3: OR2Tool-0.1.3.zip

Just use the normal commands to extract the XST and then update it from the XML, eg.

  1. Run or2tool spritefile_xst.sz to extract to spritefile folder (or drag+drop the xst into or2tool)
  2. update XML/JSON files inside there
  3. or2tool -xml spritefile\info.xml -o C:\Games\OR2006\Sprites\spritefile_new_xst.sz spritefile_xst.sz to update it, any JSON files that exist next to info.xml should also get read in.

image

Would probably be possible to let the game itself read in updated JSON atlas files as well, so we wouldn't have to share modded .sz files around - if there's still interest in atlas modding I can see if we can add something for that.

Sonic-TV commented 3 months ago

I guess atlas modding is kinda needed for multilingual texts. Some of the texts are just squeezing for fitting in the atlases. (Example: "position" on vs mode has a narrower spacing comparing to other texts.)

Tenome commented 3 months ago

We learned that if you use FXT Course Editor to make a custom mixed (2 + SP + Reversed) layout, vanilla players can still join the lobby and run the intended tracks (with the exception of Dusk/Night stages, which get switched to their daytime variants). However, the vanilla players will disappear from the modded players and vice versa when they change to the next track. Something to keep in mind if we ever get official custom track order support down the line. I believe Howard was working on that for his next FXT Editor update, which would have put a new menu for each custom track order in the in-game menu.

emoose commented 3 months ago

Kinda got texture extraction working for Online Arcade, mostly matched C2C texture format but they switched some Xbox structs to X360 ones, and also used X360 tiled swizzling too...

Sadly haven't found any textures that are actually higher res than C2C yet, maybe there's some that are less crispy though, I'll see if I can push a OR2Tool update for it soon.

I've only really looked at UI sprites though, maybe stage textures could have some improvements, has anyone noticed anything better quality in OA? IIRC S0L did mention it could have some things, maybe he meant the car models/shaders though.

Sonic-TV commented 3 months ago

I guess you can add supports for GZ files used in SDX now...

emoose commented 3 months ago

Looks like SDX GZ are normal gzip files but with a 0xB header "or2 2099304 " / 6F 72 32 20 32 30 39 39 33 30 34 20 If you delete those 0xB bytes, you can use "gzip -d spr_XXX.gz" to decompress to spr_XXX file Then to recompress you can use "gzip -k spr_XXX" to create spr_XXX.gz, then add those 0xB bytes to the beginning

Maybe will see if I can add extraction support to or2tool for them soon

Sonic-TV commented 3 months ago

Looks like SDX GZ are normal gzip files but with a 0xB header "or2 2099304 " / 6F 72 32 20 32 30 39 39 33 30 34 20 If you delete those 0xB bytes, you can use "gzip -d spr_XXX.gz" to decompress to spr_XXX file Then to recompress you can use "gzip -k spr_XXX" to create spr_XXX.gz, then add those 0xB bytes to the beginning

Maybe will see if I can add extraction support to or2tool for them soon

Thanks. Or you can make the tool pack the sprites in XST format as they are just pure XSTs inside of them.

Tenome commented 2 months ago

OR2Tool 0.1.3: OR2Tool-0.1.3.zip

Has anyone tried scaling the json's expected coordinates to accommodate larger spritesheets to make alignment easier? Can I just multiply them?

Sonic-TV commented 1 month ago

bugs here: if you extract SZ files in Outrun Online Arcade, the following error occurs. (Version 0.1.3) D:\Outrun Online Arcade\X360-ALL>or2tool .\sprite\spr_SPRANI_CLAR_RANK_Fxst.sz Decompressing XST... Reading XST... Unhandled exception. System.ArgumentOutOfRangeException: count ('-1572864') must be a non-negative value. (Parameter 'count') Actual value was -1572864. at System.ArgumentOutOfRangeException.ThrowNegative[T](T value, String paramName) at System.IO.BinaryReader.ReadBytes(Int32 count) at OutRun2Tool.XST.Read(IO io) at OutRun2Tool.Program.Main(String[] args)

emoose commented 1 month ago

Yeah arcade uses slightly diff format, did get something working for it at https://github.com/emoose/OutRun2006Tweaks/issues/90#issuecomment-2308370823 but changing code broke it for PC, I'll see if I can add some OA mode to it soon.

IIRC the textures weren't much different to PC though, at least the UI sprites anyway, not sure if track/car textures might have been changed.

Sonic-TV commented 1 month ago

Yeah arcade uses slightly diff format, did get something working for it at #90 (comment) but changing code broke it for PC, I'll see if I can add some OA mode to it soon.

IIRC the textures weren't much different to PC though, at least the UI sprites anyway, not sure if track/car textures might have been changed.

I'll wait then. Can your tool extract XMTs and BINs(used on models and courses), btw?

nhasa01 commented 1 month ago

Is it possible to add more elements ingame? I wanted to add more Ferrari cars but without taking away the ones that already exist in the game. I would also like to add more country flags without removing the ones that already exist in the game, as I have just changed the flag of Thailand to add the flag of my Brazil. It would be nice to be able to add the flags of all the countries in the world. Another question... Is it possible to implement an offline multiplayer split-screen mode up to 4, 6 or even 8 cars? It could be awesome play with other 6 or 7 friends on my 70" TV! image

Tenome commented 1 month ago

Actual modding is outside the scope of Tweaks, we won't be getting any new cars, etc.