Please no chain letters, tag games, "send this to 10 people" kinda things
I've hated this since 2006 and I haven't mellowed out in the meantime

shark vs the universe
we're not kids anymore.
let's talk about Bridgerton tea, my ask is open
Stranger Things

β£ Chile in a Photography β£
tumblr dot com
Mike Driver

JVL
πͺΌ
almost home

romaβ


Origami Around
Monterey Bay Aquarium

β
Today's Document
dirt enthusiast
Cosimo Galluzzi
wallacepolsom
Keni
seen from Malaysia
seen from United States
seen from Australia
seen from TΓΌrkiye
seen from Singapore
seen from United States
seen from Vietnam
seen from Poland
seen from Israel
seen from China
seen from Argentina

seen from Malaysia

seen from United States
seen from Ireland
seen from Ireland
seen from Ireland
seen from Brazil

seen from United States
seen from United States

seen from Australia
@haut-gothique
Please no chain letters, tag games, "send this to 10 people" kinda things
I've hated this since 2006 and I haven't mellowed out in the meantime

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch β’ No registration required β’ HD streaming
Managed to make a "true" courtyard by editing 3D Array files in CH SimPE. I've dreamt of this since 2011 when I was having an infernal time building my Hogwarts lot without any possibility of real courtyards.
But I'll be DAMNED if I'm gonna "highlight 0x02, change byte, commit, change byte, commit, change byte, commit, change byte, commit" for every single square of a huge courtyard, three times over.
Gotta dust off that SimPE repo and do it myself!
Look ma, no dirty tricks!
Calling all shader creators: proposal to make a public Git repo for solving shader conflicts
As more shader edits get released, a problem that plagues creators and downloaders alike is the issue of conflicts between shaders that modify the same resource. Obviously, since they're scripts written a certain way and implementing a certain behaviour, there can only be one per each original .matshad. This leads to the need to make your shader mod compatible with other mods that change unrelated stuff within the same .matshad, and the combinatorics for that can get very tiresome very quickly. Additionally, since everyone names their file however they want and there's no standardisation, and downloaders need to look into the package with SimPE and see if they have any other shader mods with the same TGI or contents (not an easy or automated thing to do, since SimPE doesn't display .matshad names), it's very easy to have conflicting shader mods.
Enter Git. For those who don't know, Git is a free and open-source version control software that makes it very easy for multiple people to collaborate on shared code, compute differences between two versions of the same file and apply just the differences, switch between different versions of a file, restore stuff back to an initial clean slate, view and revert your changes piece-by-piece as you work, and way way more. I'm willing to shill for Git for a very wide variety of use cases, it's a really cool tool. It has a bit of a learning curve, especially for people who are not very technical or comfortable in command line, but there are GUI tools for those who prefer them (e.g. Sourcetree), and in addition maybe I can write some batch or shell scripts for making things easy for newbies.
Note: I will not go very much into detail explaining basic Git terminology here, but I'll try to make this comprehensible to those with no experience. I've added a brief guide to Git under the cut.
How it works
First things first, everyone who uses this system, whether as a shader programmer or as a downloader, needs to download and install Git on their PCs.
I will make a public repo on my Github account containing all Maxis shaders, each in their individual folder named after the included .matshad. A given folder will have two files: .package (added to gitignore), and .matshad. Creators are kindly asked not to rename them; this way we know immediately when the same resource has been modified. Git will only track the changes to the .matshad, because even though .package files containing a .matshad have huge chunks of plaintext, they're still ultimately binary files and Git is bad at processing those. The initial commit of the Git repo on the master branch will contain the Maxis shaders in their unmodified state as of M&G. The master branch will stay clean; no pull requests into it will be approved. This is so that people can easily switch back to vanilla shaders.
Creators will push their commits to their own branches on the remote repo. They're asked to please base their work off the initial Maxis commit to the greatest extent possible, and not on other creators' work, unless they work on the same piece of code as someone else whose work they want to include. This is to make it easy for people to pick and choose whatever they like.
Downloaders will clone the repo into their Downloads folder.
When they want to search for new shaders to download, they'll do a git fetch or git pull.
They'll make a local branch into which they'll cherry pick commits for each shader mod they want in their game. (Cherry pick, not merge, unless you have the exact same taste in shaders as a given creator.)
Then they'll open the .gitignored package with SimPE and replace the contents of the .matshad included in the package with the ones of the separate .matshad. This process can be manual or I could make a script for it.
Note on the binary conundrum
It is technically perfectly possible to add .package files or any binaries to a Git repo, either just them or alongside a separate .matshad. The advantage of this method is that users no longer have to manually replace the .matshad in the .package, which can be nifty for inexperienced or inattentive users. The drawback is that Git saves changes to binary files as the whole damn file, which can make the repo balloon up to large sizes with successive changes. Assuming you don't download new shaders all day every day, the trade-off can be worth it. Idk. Discuss.
Misc comments & possible problems
Git is useful, but it's not very smart. In particular it doesn't speak Matshad (or C++, or Python, or even English). You can have situations where a merge is completed successfully, but this leaves the shader in an inconsistent state, and the game either fails to load any hood/lot or flashes pink everywhere. In situations like these, know you have just downloaded a shader that's incompatible with what you already had on your local branch, and you need to revert the commit (or the nuclear option, go back to vanilla shaders).
Please don't push your local branch with everything you use in your own game. Do a git log to ensure your branch history is clean. The original repo won't come with a local branch for personal use; you need to make that yourself. Tutorials and sometimes scripts will be provided for everything a downloader needs to do.
Backup branches can be created to save the state of your shaders when you're happy with how your game looks and are worried about future shaders breaking it.
Make sure your downloads manager doesn't delete the files that make a Git repo because it sees them as non-packages and therefore junk. (Haven't tested this and normally Git files stay in a hidden folder, but just in case.)
Poll
I gotta admit I'm not very experienced with Github yet, as opposed to Bitbucket or Azure, so I don't know how easy it is for creators to push to secondary branches of a repo they don't own, if someone needs to approve that, or if it's easier for them to fork the repo and start their own changes and downloaders who cloned the original repo can pull commits from the fork, etc. If you know more about that, please discuss in the comments, esp. as applied to TS2 shaders.
ANYWAY. I'd like shader creators (and shader creators only), especially those who have already uploaded shaders, to please vote on whether they'd prefer to make a Github account themselves and push their own commits, or if they'd rather not bother with all this Git stuff and prefer me to make a commit with their modifications on their behalf (with the right credits and all that).
Please note that no action will be taken imminently towards yours or anyone's work; the Git repo doesn't exist yet and I won't upload things without people's permission, unless they've been inactive for 10 years or whatever. I just want to gather opinions to see which implementation will be the most popular.
Poll for creators: How would you prefer your work to be published to the Github repo? (Please don't vote if you're not a creator of TS2 shaders.)
I'd rather make a Github account myself and push my own commits
I'd rather ask you to publish the commit on my behalf and credit me
I don't want my shaders included in this Git repo at all
Conclusion
And that's it! Please let me know in the comments if any part of this is harebrained or if this all sounds too complicated for a bunch of Sims 2 downloads. I will nevertheless continue to sing the praises of Git (and I would also like to add that Git proficiency looks pretty good on your resume, for those thinking of going into tech).
The Git repo is now live!
For now I've gone with the solution of adding .matshad files only, and I'm planning the addition of a script that would generate the corresponding .matshad.xml for easy importing into SimPE for all Maxis shaders.
That will go into the main branch, so if anyone wants to commit their own shaders in their dedicated branch before the script is ready, I'm going to ask them to pretty please do a rebase off main afterwards.
Reminder that no shader modifications will go into main. Do not make PRs with your changes into main. Commit them into their own separate branches.
The main branch must remain on the Maxis version of shaders so that it's easy to switch back to the original, even for people who aren't very skilled with Git.
---
That being said, I'm open to hearing out people's suggestions for this! I'm new to being in charge of a Github repo and don't have a perfectly well-defined plan for where to take this, so as a community we will figure out best practices as we go along, probably.
Just ADHD Things
I have around 200 historically accurate medieval clothing mesh projects put together from TSM bits and pieces, totalling around 1GB of mesh data.
Not ONE of them is finished. Not one of them is UV mapped.
Most of them are stuck at the point where I have gathered together all the various frankenmeshing bits, decided I had a cool concept, didn't bother sewing them together, and moved on to the next project.
Somebody stop me.
π

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch β’ No registration required β’ HD streaming
Kinda sorta managed to write a shader for Sim specularity. Qualifiers entirely warranted, because this is not how I hoped it would look, nor how I first tried to implement it.
The version you're seeing doesn't even use the specular mask, in fact; it adds the diffuse to itself, because when I tried to sample the specular mask, for some reason the sampler kept trying to emboss and colour my texture, the way you'd get that purplish normal map from a grayscale bump map β and it looked like crap when used as a specular mask. This is appropriate to do for normal maps, but not for specular or any other. The only texture that was sampled normally by default was the diffuse texture. No idea what caused this behaviour. So this is a hackish solution to get around this issue; the problem is that it leaves the player/creator with little control over the final result of the material. (Like, yeah, it makes sense for brighter areas to be more shiny in the case of hair, but let's say you have a white tee under a black leather jacket, and the t-shirt isn't shiny but the jacket is.) And also I'm not happy with the blockiness.
Gotta say this is the most difficult thing I've done for TS2 so far (but hey, maybe one day I'll be neck-deep into an ASI mod wishing it could be as easy as this!). Sim shaders are written nothing like object shaders; I could borrow very little code. I did learn a lot, though.
Haven't tested with Sim skin and not looking forward to it. As some of you know, skin/overlay/makeup textures get composited, and while there is supposed to be some support in the shaders for compositing specularity, it's obviously not done yet and it looks like a headache. Clothes probably work the same as hair.
If anyone has any input on the normalified sampling, or just has some feedback to offer on whether this is something they'd like in their game, I'd love to hear from you!
Discovered the cause of my mysterious sampling issues with the spec map: it wasn't my code that was wrong, at least not massively so, it's just that I was testing with the wrong specmap file format, lmao.
PSA, there's a huge difference between Raw8Bit and ExtRaw8Bit file formats. Raw8Bit is the one used for normal maps and it seems to apply some funny bump-to-normal image processing behind the scenes, to the extent that the asm sampler itself fills in the bits with the purple stuff you see below.
In this image I used the same SimStandardMaterial shader code and the same textures for diffuse/normal/spec (what's supposed to be the specmap is a bullshit texture of white circles on a black background, this was made for testing purposes to see clearly what areas get lit). The only difference is the file format of the spec map.
This is still not how it's supposed to look like, the game doesn't seem to do much of anything with my bullshit specmap, and I still need to work on the code to discover how ExtRaw8Bit stores its data. But hey, no more weird sampling and a faint trace of specularity! Making progress!
is it possible to make new aspiration?
I donβt think it is, unfortunately. One reason I think it wonβt ever be possible is that the things that control which wants a sim of a particular aspiration is biased towards rolling - want trees - do so using boolean keys (true/false values) named after the aspirations. I suspect the way the game recognizes these bool keys and how they correspond to the different aspiration flags in a simβs persondata is hard-coded, and so I donβt know how weβd be able to tell the game which wants that aspiration would roll whichβ¦ is sort of the whole point of an aspiration.
There might be a workaround available. I would like to point out that want trees have access to the entirety of PersonData, as discovered by Lamare when she made her mod for interest-based career wants. That includes the aspiration flags dword. (You can tie in wants with loads of things, from unused fields to random stuff like whether the Sim is sitting.) There are some corner cases with secondary custom aspirations where it's not clear whether all wants can be set for all aspirations, depending on how flag math can be done in XML, but it should be possible.
So we may be able to make custom aspirations from a functional point of view. We can make the tokens, we have extra room in the PersonData field for new aspiration flags, but it might be hard/impossible to make a UI representation of the aspiration, namely to get your custom aspiration UI element to show up while hiding the others. And then of course there are all the places aspirations are referenced in BHAVs β not impossible to find, just an enormous amount of work.
EDIT: Here is an example of how a PersonData field can be referenced in the want trees, from Lamare's mod. It wouldn't be a bool key (that includes things like age, personality, and aspiration), it would be a range key for PersonData at a certain index.
Calling all shader creators: proposal to make a public Git repo for solving shader conflicts
As more shader edits get released, a problem that plagues creators and downloaders alike is the issue of conflicts between shaders that modify the same resource. Obviously, since they're scripts written a certain way and implementing a certain behaviour, there can only be one per each original .matshad. This leads to the need to make your shader mod compatible with other mods that change unrelated stuff within the same .matshad, and the combinatorics for that can get very tiresome very quickly. Additionally, since everyone names their file however they want and there's no standardisation, and downloaders need to look into the package with SimPE and see if they have any other shader mods with the same TGI or contents (not an easy or automated thing to do, since SimPE doesn't display .matshad names), it's very easy to have conflicting shader mods.
Enter Git. For those who don't know, Git is a free and open-source version control software that makes it very easy for multiple people to collaborate on shared code, compute differences between two versions of the same file and apply just the differences, switch between different versions of a file, restore stuff back to an initial clean slate, view and revert your changes piece-by-piece as you work, and way way more. I'm willing to shill for Git for a very wide variety of use cases, it's a really cool tool. It has a bit of a learning curve, especially for people who are not very technical or comfortable in command line, but there are GUI tools for those who prefer them (e.g. Sourcetree), and in addition maybe I can write some batch or shell scripts for making things easy for newbies.
Note: I will not go very much into detail explaining basic Git terminology here, but I'll try to make this comprehensible to those with no experience. I've added a brief guide to Git under the cut.
How it works
First things first, everyone who uses this system, whether as a shader programmer or as a downloader, needs to download and install Git on their PCs.
I will make a public repo on my Github account containing all Maxis shaders, each in their individual folder named after the included .matshad. A given folder will have two files: .package (added to gitignore), and .matshad. Creators are kindly asked not to rename them; this way we know immediately when the same resource has been modified. Git will only track the changes to the .matshad, because even though .package files containing a .matshad have huge chunks of plaintext, they're still ultimately binary files and Git is bad at processing those. The initial commit of the Git repo on the master branch will contain the Maxis shaders in their unmodified state as of M&G. The master branch will stay clean; no pull requests into it will be approved. This is so that people can easily switch back to vanilla shaders.
Creators will push their commits to their own branches on the remote repo. They're asked to please base their work off the initial Maxis commit to the greatest extent possible, and not on other creators' work, unless they work on the same piece of code as someone else whose work they want to include. This is to make it easy for people to pick and choose whatever they like.
Downloaders will clone the repo into their Downloads folder.
When they want to search for new shaders to download, they'll do a git fetch or git pull.
They'll make a local branch into which they'll cherry pick commits for each shader mod they want in their game. (Cherry pick, not merge, unless you have the exact same taste in shaders as a given creator.)
Then they'll open the .gitignored package with SimPE and replace the contents of the .matshad included in the package with the ones of the separate .matshad. This process can be manual or I could make a script for it.
Note on the binary conundrum
It is technically perfectly possible to add .package files or any binaries to a Git repo, either just them or alongside a separate .matshad. The advantage of this method is that users no longer have to manually replace the .matshad in the .package, which can be nifty for inexperienced or inattentive users. The drawback is that Git saves changes to binary files as the whole damn file, which can make the repo balloon up to large sizes with successive changes. Assuming you don't download new shaders all day every day, the trade-off can be worth it. Idk. Discuss.
Misc comments & possible problems
Git is useful, but it's not very smart. In particular it doesn't speak Matshad (or C++, or Python, or even English). You can have situations where a merge is completed successfully, but this leaves the shader in an inconsistent state, and the game either fails to load any hood/lot or flashes pink everywhere. In situations like these, know you have just downloaded a shader that's incompatible with what you already had on your local branch, and you need to revert the commit (or the nuclear option, go back to vanilla shaders).
Please don't push your local branch with everything you use in your own game. Do a git log to ensure your branch history is clean. The original repo won't come with a local branch for personal use; you need to make that yourself. Tutorials and sometimes scripts will be provided for everything a downloader needs to do.
Backup branches can be created to save the state of your shaders when you're happy with how your game looks and are worried about future shaders breaking it.
Make sure your downloads manager doesn't delete the files that make a Git repo because it sees them as non-packages and therefore junk. (Haven't tested this and normally Git files stay in a hidden folder, but just in case.)
Poll
I gotta admit I'm not very experienced with Github yet, as opposed to Bitbucket or Azure, so I don't know how easy it is for creators to push to secondary branches of a repo they don't own, if someone needs to approve that, or if it's easier for them to fork the repo and start their own changes and downloaders who cloned the original repo can pull commits from the fork, etc. If you know more about that, please discuss in the comments, esp. as applied to TS2 shaders.
ANYWAY. I'd like shader creators (and shader creators only), especially those who have already uploaded shaders, to please vote on whether they'd prefer to make a Github account themselves and push their own commits, or if they'd rather not bother with all this Git stuff and prefer me to make a commit with their modifications on their behalf (with the right credits and all that).
Please note that no action will be taken imminently towards yours or anyone's work; the Git repo doesn't exist yet and I won't upload things without people's permission, unless they've been inactive for 10 years or whatever. I just want to gather opinions to see which implementation will be the most popular.
Poll for creators: How would you prefer your work to be published to the Github repo? (Please don't vote if you're not a creator of TS2 shaders.)
I'd rather make a Github account myself and push my own commits
I'd rather ask you to publish the commit on my behalf and credit me
I don't want my shaders included in this Git repo at all
Conclusion
And that's it! Please let me know in the comments if any part of this is harebrained or if this all sounds too complicated for a bunch of Sims 2 downloads. I will nevertheless continue to sing the praises of Git (and I would also like to add that Git proficiency looks pretty good on your resume, for those thinking of going into tech).
Status update for various shader mods
Object (stdMat) indoor specularity: ready for release; I finally found the attenuation coefficients that reduced lighting from lamps or windows and eliminated them, which meant I could revert the changes to roomLightingType in Lighting.txt, which meant I could decouple this project from my lighting mod. Tbh I'm procrastinating a bit on this until I create a bunch of specular objects to show off the shaders, and that's a whole 'nother can of worms.
Transparent lot skirt road: has minor issues (seams), and besides I would really like to enable normal and specular passes for both hood and lot skirt, as well as "true" lighting on the ground and surrounding objects and, if I can, sampling of texgen terrain paints, for more variety.
Seasonal hood terrains: halfway done, blocked by planned additions to the neighborhood.matshad.
Sim specularity: freshly out of the oven and shoddy-looking
Kinda sorta managed to write a shader for Sim specularity. Qualifiers entirely warranted, because this is not how I hoped it would look, nor how I first tried to implement it.
The version you're seeing doesn't even use the specular mask, in fact; it adds the diffuse to itself, because when I tried to sample the specular mask, for some reason the sampler kept trying to emboss and colour my texture, the way you'd get that purplish normal map from a grayscale bump map β and it looked like crap when used as a specular mask. This is appropriate to do for normal maps, but not for specular or any other. The only texture that was sampled normally by default was the diffuse texture. No idea what caused this behaviour. So this is a hackish solution to get around this issue; the problem is that it leaves the player/creator with little control over the final result of the material. (Like, yeah, it makes sense for brighter areas to be more shiny in the case of hair, but let's say you have a white tee under a black leather jacket, and the t-shirt isn't shiny but the jacket is.) And also I'm not happy with the blockiness.
Gotta say this is the most difficult thing I've done for TS2 so far (but hey, maybe one day I'll be neck-deep into an ASI mod wishing it could be as easy as this!). Sim shaders are written nothing like object shaders; I could borrow very little code. I did learn a lot, though.
Haven't tested with Sim skin and not looking forward to it. As some of you know, skin/overlay/makeup textures get composited, and while there is supposed to be some support in the shaders for compositing specularity, it's obviously not done yet and it looks like a headache. Clothes probably work the same as hair.
If anyone has any input on the normalified sampling, or just has some feedback to offer on whether this is something they'd like in their game, I'd love to hear from you!

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch β’ No registration required β’ HD streaming
Currently toying with The Guild 3 scenario editor and damn, these terrain icons look kinda familiar :D
Finally cracked the shader code enough to produce transparent lot skirt road textures.
Quickly made an improved lot skirt shader with rough terrain, cliffs and shores, using some of the same techniques I used for making the hood terrain in Unity TS2.
This is just a rough quick experiment to see if it was possible and if it would look good in the first place.Β
Making it actually usable and react properly to lighting requires a complete rewrite, but it confirms that it is indeed possible!
(This is lot view)
@lazyduchess: If you want, I can continue this project and see if I can make it into a completely functional replacement of the current lot skirt view. Just send me the shader files and I'll see what I can do.
I'm currently working on seasonal and varied hood terrain replacements for all seasons and terrain types; I got very good results with a first draft and it's kind of a letdown to lose all that variety from the neighbourhood view once you enter a lot. That's why I'd really like to see this to the end.
Making some progress with deciphering what the hell PaintMaps in NeighborhoodTerrain.ini are all about.
It seems that actually the way the game is coded allows for quite a lot of variation. Each terrain type (lush/desert/etc) has a variable/user-definable number of categories of paint; each category has a certain number of textures which have the form [category name]_[number suffix]. Even supposing the limits are the maximum we see in the game, of four categories per terrain type and three variants per category, that still gives us 12 possible textures for one terrain type! I do suspect the actual limit might be higher, possibly up to 8x8 or 16x16.
PaintMaps seem to indicate probability curves depending on two dimensions: distance from road, and elevation. I think the "Y" represents distance from road, and the "X" represents elevation; for the Lush terrain, I've noticed one category (wet, it seems) is always applied around roads, then on row 11 the other type (drydry) may be set to ensure it always borders the road zone regardless of elevation, and then at a certain point it begins being used for very high elevation regions, leading me to think that the "X" axis of the graph goes from high to low elevation.
How far the texture blends might be determined by the SpreadCurves.
Categories are blendable with each other, but within a category, textures are always tileable.
Texture variation per category seems chosen at random.
Theoretically, it's perfectly possible to set a different lot skirt texture for each category, only there cannot be a different lot skirt texture for each variant, as the lot view doesn't have that info. We should expect different lot skirt textures to blend with each other. A problem arises (and this is probably why someone at Maxis decided to make just one lot skirt texture to rule them all) if the lot is placed in a blend zone between two different textures β it's going to cause seams with the texture of the lot itself.
I should also note here that there is no support in the shaders right now for displaying more than one lot skirt texture (and this can be whatever is set in NeighborhoodTerrain.ini for the area in question), and this may be something accessible only to the caller of the shader, which is hardcoded in the executable. (But we can code literal values in the shaders too. π) I know @lazyduchess was working on an alternative here.
Currently it's not very likely to have a lot placed in a drydry zone unless you use the LotAdjuster to push it way back into the woods, but with different paint maps this could be possible.
Simfileshare email troubles
Does anyone know if the @simfileshare admins are still active/taking care of the website?
I've lost access to the email address I had used for SFS signup β the account hasn't been hacked or anything, I still have the correct login data, but it wants me to sign in using my old PC which doesn't work anymore "for security" (thanks a bunch, AOL). I have great doubts I will EVER get it back even if by some miracle my old HDD hasn't been wiped and my pluggable USB network card still works after 16 years. Tried to use a browser data backup, no email cookies. Called AOL support, they told me to purchase a telecom plan which isn't available in my country to even speak to them.
And since I haven't logged into SFS in a while, the issue has essentially transferred over to my SFS account too β I logged in with the right data, but then it sent a verification code to the email address I'm locked out of "for security".
I know there's been a hack last year and these measures have been taken for site security, but if anything happens to the email address, you're SOL.
I've mailed Nysha about the issue from another email address, but it mentions on the website to please send support requests via mail from the same address as the SFS account one, which means people with my kind of issue are screwed if this is not just for convenience and affects email visibility in any way (whitelists/spam filters).
I'm posting this publicly (1) so that people know that the person asking for my SFS account verification skip is the real me and not some impersonator, (2) to announce that I won't be posting any new CC until the issue is solved (I know this is rich coming from someone who hasn't uploaded anything in a year and yes, there are other sharing sites, but I'm a loyalist), and (3) to ask people to please signal boost or confirm if they have had similar issues with SFS, because if there's more of us, maybe the account recovery issue will be dealt with more speedily.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch β’ No registration required β’ HD streaming
So I figured there are all these SDSC fields that have a dedicated UI and points from 0 to 10 and all, and just kinda... sit there...
Habemus specular!
Finally made some progress with my specular lighting mod. A while ago I discussed with Crisps&Kerosene whether it's possible to enable specular highlights indoors and/or from lamp lights. Both of us noticed that objects received no specular light from windows, and in addition I was having trouble seeing any specularity at all from lamps.
After a lot of experimentation, it turns out the game supports more realistic lighting both indoors and outdoors, without heavy shader programming. Here are my findings:
Initially I went into the shader files and saw a few instances of an adjustedSpecular parameter being set as the stdMatSpecPower times a smallish coefficient (0.2 - 0.75). Guessed a higher percentage of the original spec power means more spec power, right? Guessed wrong! C&K was seeing lamp specularity in her game while I could notice not a speck of it (pardon the pun) in my own because I had unwittingly modded it out of mine myself. I noticed the error when it seemed I was getting better specularity without my shader mod than with it. So, in a hail Mary pass, I tried to set all adjustedSpecular coefficients to 0.1 and, lo and behold, finally we have specular lights indoors too.
Another parameter of interest is the roomLightingType from Lighting.txt. The default value is, I think, 3, and no mod that I know of has tried changing it. I've tried out a value of 4, in conjunction to a higher value for roomOverallStrength, and it made objects in general and indoor objects in particular way, way more responsive to shadows, specularity, and bump/normal maps, and overall just quite high-contrast. I don't dislike it, but it's unforgiving with all those custom objects that were cloned from a shiny vase or something and the creator didn't bother to adjust its reflectivity. (P.S. this param is set as a float for some reason, although it doesn't make much logical sense β there's no spectrum of types, and I only tested with integer values.)
Delving into the executable with Ghidra I could find an additional lightAttribOverride that isn't documented and may (emphasis on "may", I can't confirm it) affect object:window specularity, or in any case prove useful to someone. It's called relSpecIntensity and takes a float (decimal point) value.
ANYWAY.
What you're seeing here are two test objects: C&K's "half-hearted" specular mask test object, shown here in an unlit room at daytime, that shows specular highlights on the mapped side from where it used not to; and a 3D floor mesh I've made as part of a huge medieval build set, in various stages of testing.
There is still a lot more work to be done before releasing this. I'm still experimenting with the right TXMT parameters to set, dealing with an issue where sometimes the specular effect gets inverted (you see more of the shadowy part of the effect in a diametrically opposite color), and trying to tame those crazy shadows and highlights a bit. For now it looks pretty weird.
Eventually I hope to release it as a more general lighting overhaul that includes newly defined times of day (I'm halfway through reverse engineering the code for them and man, let me just say that if any guy at work coded like Ghidra, I'd fire him), to demonstrate what can be done with specular maps using the aforementioned build set, and to promote the use of specular maps on things as a general practice. It's a shame that the graphics engine is capable of this (welcome to 2005) and no objects ever use it.
For now, I just wanted to publish some pointers / documentation for whomever is interested in lighting and shader mods for TS2.