The original devs probably didn't intend a lot of things, but I don't think that's what nostalgia for classic is really about.
Anyway, after thinking about it a little more, I felt like saying some stuff to no one in particular:
The reason locking the text of the global load file doesn't really prevent anything is this:
1. Models are loaded by name (well, by a 3-letter identifier like "HUM" for human male)
2. The client's model loader works in a "first thing loaded with this name wins" fashion -- whatever is loaded with the name "HUM" first blocks anything that tries to load with that name later.
3. None of the data files indicated by the globalload file are checked for integrity.
The result is that you can just shove any model you want into a file that is loaded before the "correct" one, and give it the name of the thing you want to replace. For Luclin models this is a bit limited in that there are only two (pointless) files in globalload that are flagged to allow them to load their extra-special player model animations correctly. NPC models like skeletons don't have this limitation and could be shoved into any file in globalload.
The easiest way to block this without also blocking people from doing harmless texture fixes/replacements would be to extract the .wld files from the .s3d files loaded by globalload and subject them to some integrity checks -- putting them through a few different crc / hash methods would probably be the lowest-effort way while still being fairly resilient against cheesing.
If you were only concerned about player models and skeletons, you could just move global_chr to the top of globalload and only do the integrity checks on its .wld file. This would ensure that all the player models and classic skeles are loaded before anything that could replace them. Edit: I think classic iksars are in a different global#_chr file so you'd need that one too.
|