nipkownix / re4_tweaks

Fixes and tweaks for the "UHD" port of Resident Evil 4
zlib License
340 stars 32 forks source link

UDAS sideloading, has anything else done it already? #337

Open emoose opened 2 years ago

emoose commented 2 years ago

Wrote a little about how game code seems to read from DAS files at https://github.com/emoose/re4-research/issues/3#issuecomment-1251189572

That gave me an idea of how sideloading could work for it, we could probably just hook DvdReadN so once a DAS has been read in, we scan a folder for loose files like [das_name]_[index].[ext], and any that exist we read in data for, figure out where it is in the offset-table, and just overwrite that to point at our new data.

It actually doesn't sound that hard now I wrote it down lol, but I'd guess depending on the DAS we might need to stay inside the same block of memory as the DAS itself, would probably need to copy/move existing data around to make sure replacing data doesn't waste any room too etc...

Like title says though I'm wondering if anything else like Raz0r allows UDAS sideloads too, it'd be good to try and keep things compatible if we can.

From what I've seen in GC debug it looks like DAS files were originally folders in the developer repo, so eg. pl00_094.FCV was probably originally at BIO4\Em\pl00\094.FCV (maybe with a different filename, which was lost when put inside the DAS), if nothing else does UDAS sideloads I guess we could probably do the same under the sideload folder.

(also pretty sure I heard there's a lot of duplicate files between different UDAS too, some way of handling that like replacing based on checksum of the original DAS data might be nice, but would be best to start with just replacing by index first)

FutonGama commented 2 years ago

Just to inform you how the Qingsheng DLL sideload work, is basically the same for Raz0r Companion.

Qingsheng DLL have sideload for many files. This dll last version is not released public yet, only a few people have it because we are testing everything first for he release that. Here a example of the DLL config file.

AEV=1 ITA=1 ITM=1 CAM=1 LIT=1 EFF=1 EAR=0 EAT=1 ESE=0 ETM=1 ETS=1 FSE=1 RTP=1 SAR=0 SAT=1 SHD=0 SMD=1 SMX=1 MDT=1 Esl=1 Every (2) enemies you kill,(3) enemies will spawn EMI=0 sfd=0 Extend footsteps=0 Press Z key to move item=0 Drop float=0 Be compatible HD project dll=1 Allocate more memory for SFD files=1 Can spawn more kinds of enemise=1 Auto-pickup random drop items=1 Arrange drop=1 AVL(aev lock)=1 04 04 04 04 04 FF FF FF FF FF 18 18 18 18 FF FF FF FF FF FF 20 20 FF FF FF FF FF FF FF FF 78 78 78 78 FF FF FF FF FF FF 07 FF FF FF FF FF FF FF FF FF 00 46 FF FF FF FF FF FF FF FF 01 FF FF FF FF FF FF FF FF FF 02 FF FF FF FF FF FF FF FF FF 0E FF FF FF FF FF FF FF FF FF 08 06 FF FF FF FF FF FF FF FF pack/yz2=1

Thats the configuration of sideload of some files inside udas and more configurations from the DLL. The configuration names are odd because he is chinese and have difficulty to translate to english.

explorer_RP8pGF6CQD

We have a folder named "Data" inside BIO4 folder and inside this folder we can create other folders with the map name and inside of it sideload the files renaming the file to 0000.AEV. 0000.ITA .. depends what file we need to sideload. I have think some weeks ago a way to sideload a entire UDAS file so with that be able to for example make the same Enemy sideload with diferent files for each map, this will be able to change the enemy model and animations for each scenary and improve the game variations. Its already possible with the DLL sideload the .pack file for each map.

Raz0r did that for the companion dll too but companion is very outdated already. Mr Curious and other people still use it because for change the DLL in the middle of the mod project is complicated.

qingsheng8848 commented 2 years ago

you have the right to expose my dll!

qingsheng8848 commented 2 years ago

I can provide my modified bytes if available.