Talk:Lizards

so one question i have is can you adjust the regional lizard rep enough so that they either run away from you (very low rep) or all get tamed (high rep)?

Color Spectre Visualizer for Lizards
My gratitude.

I had a bunch of free time on my hands lately, so i decided to make something decently useful.

I remember seeing color spectres for some of the creatures on old wiki a while back. They're gone now.

So i decided to make my own visualizer.

I can provide high quality (up to filling every single pixel on my screen with slightly different variation of color) images which correctly display all possible spawn-colors of lizards.

Will be happy to improve this wiki.

--UninvitedReconsideration (talk) 08:54, 8 January 2023 (UTC)

Oh this is awesome! Thank you for making this!

Just wondering, does it automatically interpret the code and could it be used for other creatures too? (I'm overall quite curious about the way it works)

We already have visualizations for lizards, although they're not used in the pages yet - probably because they were made after the Lizards page was rehauled so they were not included in the initial effort, but I don't exactly remember. I actually also have tools (less convenient but functional) to make this sort of color ranges - you can find them in a few pages like Dropwig or Noodlefly -, but I haven't had the time to make one for every creature, so it would be great if your visualizer could be repurposed for some of the missing ones. (The ones that can have one of course, since a lot of them have too many variables to be represented in squares - even if in some cases I have a decent but not exhaustive workaround with triangular ranges, for example the one in the Grappling Worm page)

I do insist though, the fact you spent time on this is appreciated! Sorry for only giving you more tasks haha, don't feel forced to do anything else.

(Also I should mention that I'm intending to eventually try something better than color ranges and add into every page another kind of visualization: colorable screenshots of creatures with sliders that enable you to see the variations of every body part, which would both help visualize creatures more complex than lizards more intuitivly and provide support for the visualization of body parts with interdependent colors. The framework is working but now I need separate images of every body part in order to recolor them one by one, which is a more annoying problem. So in the meantime classic color ranges are still very welcome)

-- Candlesign (talk) 18:50, 8 January 2023 (UTC)

It's fairly simple actually, you just put in starting number and maximum deviation from in-game code for each value of the color model, then app automatically finds limits for the array of a colors which will have to be used. Abd then it's just simple one-by-one pixel filling. I used decompiled methods (instead of standart library) for maximum authenticity, in case they have some unique quirks.

Harder part is actually figuring out what happens under game's hood. Like vultures actually make use of saturation, which:
 * Tells how short-sighted i really am by not accounting for saturation in the first place and just setting it to a constant.
 * Actually requires a 3D projection to display all possible colors, which is slightly more (a lot more) complex than drawing a simple flat gradient. Triangular model can only work for a limited amount of colors, which in itself i approximation.
 * Code itself is inconsistent, some creatures make use of a separate graphics module, others have values hardcoded in class of a creature itself, some have plain RGB values, others make use of HSV ranges etc. etc. This makes my dnSpy digging considerebly longer, especially that i have very little familiarity to this game's code at all.

Another issue is that windows forms isn't a great rendering engine. It does not support complex gradients, and storing all colors in a single 2d array for ease of manipulation is very inefficent. At the end, every single pixel will have to drawn individually either way, which is horrendous for perfomance and makes changing already existing colors impossible without re-drawing them. There might be a simple solution for saturation though, i can make it scroll automatically through the value and then just record a gif, but that won't be really intuitive and if somebody would really want to see every single possible individual color in detail, they would have to dissect that gif by frames.

I should probably just move to OpenGL or anything that doesn't run on antiquated codebase made by microsoft 20+ years ago, really.

--UninvitedReconsideration (talk) 21:44, 8 January 2023 (UTC)

Ohh even if they're not as convenient to use gifs might be nice instead of the unsatisfying triangles, it's a good idea to make the missing dimension time instead of space. The hardest part seems to be making them as seamlessly perfect as the gradients, I can't think of any other way than prerendering images for all values and "manually" tying them together. (EDIT - as I was reminded of gifs have limited colors so I suppose it wouldn't work unless we find a way to use apngs instead)

Also yeah color is often complex enough to make code-digging and writing a completely case by case process - out of the creatures I've seen noodleflies and their layers of randomness-based if-else statements are the worst and are fortunately out of the way, but I'm sure there are other terribly tricky examples, like snails with their two interdependent three-dimensional (at least) colors. And I'm not even talking about scavengers because I fear their code with all my heart. Which is another point in favor of the in-wiki recoloring scripts, since all of these problems will just be solved by directly rewriting the code and making every variable manipulable.

-- Candlesign (talk) 00:32, 9 January 2023 (UTC)

I believe i figured out noot's main color spectre. Partially. It has pretty complex (relatively speaking, in terms of picking colors for creatures) logic, and requires either a 3D projection or multiple layered images (or gifs) to display gradient properly, since HSL values can change dramatically depending on other HSL values, but there's a single noodlefly variation which has static value of S, making it possible for me to draw it's spectre on a flat plane.

Here's an explaination, i tried to make it as simple as i could (i am not great at explaining things). Unnecessary formulas are omitted:


 * First of all, this.hue variable (i'll refer to variables with "this." prefix to avoid potentially confusing them with HSL values) is set. By default it's a range of [0.42, 0.58]


 * Then, this.lightness is picked.
 * If noodlefly is an infant it's set to [0.3, 1]
 * If not, then dice is rolled:
 * With a chance of 60.2% it's set to 0.4;
 * With a chance of 33%, it's set to [0, 2];
 * With a chance of 5.8% it's set to [0, 3].


 * If noodlefly is not an infant, it's this.lightness is < 0.4, random number between 0 and 1 (refered as RND[0, 1] later) > this.lightness and RND[0, 1] < 0.1, then set this.hue to RND[0, 1]
 * (Yes! Technically noodleflies can pick ANY hue they'd like, but it's lerped later which makes actual color more bland and chances of this happening are really low)


 * Then BodyColor is changed twice in ApplyPallete method.
 * First time it transforms BodyColor from HSL to RGB with following function:
 * HSL2RGB(this.hue + 0.478, lerpmap(this.lightness, 0.5, 1, 0.9, 0.5), lerp(0.1, 0.8, (this.lightness)^2)
 * I'll call this a transform formula in the future.


 * Then BodyColor uses color.Lerp function (which is an adaptation of normal linear interpolation for RGB unity color system) to interpolate bodycolor closer to desired color, which depends on this.lightness:
 * If this.lightness < 0.5:
 * color.Lerp(BodyColor, BlackColor, (InverseLerp(0.5, 0, this.lightness)^0.5
 * Interpolates to black, which is RGB[0,0,0].
 * If this.lightness > 0.5:
 * color.Lerp(BodyColor, FogColor, InverseLerp(0.5, 1, this.lightness) * 0.2
 * Interpolates to fog, exact value of which i couldn't find.

Okay, so, the most important part of all those formulas is that it's possible to calculate specific case scenarios for each this.lightness picks, and apply them in transform formula to get a range of HSL values which then can be used in renderer. So i did that, and the result for 0.4 this.lighting scenario is HSL0.898, 1.058], 0.9, [0.31, 0.89.

Then i slightly modified my app to support color lerping and voila!

I will try to both add support for triangular HSL models and find ranges for other noodlefly variants in the future, however, i cannot promise anything.

--UninvitedReconsideration (talk) 06:12, 9 January 2023 (UTC)

Oh don't worry about Noodleflies they're already done! You can see some squares on their page. For adult ones I decided to separate it in a few sections to keep it entirely proportional despite the different possible cases, which makes it confusing but I think it's completely exact. (Fun fact, the custom HSL to RGB code written by Joar has an issue which makes it return grey instead of wrapping back to 0 when the hue is higher than 1, so the right sides are colorless. Not sure if it's intended or not but it's a thing)

Speaking of which, the black and fog colors you didn't find come from the palette of the room. (Here is how to interpret those: https://cdn.discordapp.com/attachments/305139167300550666/1013925446108323980/Palette_0_Diagram.png)

-- Candlesign (talk) 17:32, 9 January 2023 (UTC)

downpour lizards
do you guys plan on adding the new lizard types in downpour, once more is found about em? coz ive found two so far. i found the turquoise lizard in drainage systems, and he cant go far out of the water i found him in and he has no legs and this caramel/brown-ish lizard i found in garbage wastes, who can jump slightly and spit the red-lizard projectiles at you