Jump to content

[mod] [Abandoned] [Rimworld] Genital support patch for Lost Forest


Recommended Posts

Damn. Have 2 days off from Rimworld and crap kicks off big time. Guess LF will be going. Shame. I really liked it as well.

 

EDIT: I can see why people are pissed. Just loaded up my save and RJW buttons are gone, all my colonists hats are now showing despite having showhairnothats enabled and when drafted they all have spinning purple squares on them. Reading the comments on steam it seems this all comes from the authors new anti RJW code. Nasty move by the author essentially breaking someones save (if that is indeed what happened.)

 

EDIT EDIT: What would be involved in making the old 1.0 version compatible with 1.1 and just using a local copy? I'm not bothered about a lot of the fluff the author is adding anyway. I only want the LF girls for caravaning, base defence and the odd lewding.

Link to comment

The author is apparently rolling his mod back to match the rimworld version since Ludeon rolled back a hotfix they put out so like @NeverLucky4Life and @bearlyAlive has said maybe the corruption was unintentional.

 

In the bug log someone put

 

"please roll back your update, Ludeon rolled back the 2573 update to 2571 again"

 

and the author replied with

 

"I also confirmed it. This mod will soon be reverted to 1.1.2571."

 

Lets see if this fixes the save errors.

Link to comment

The author has rolled their version back to match rimworld and your mods work again @bearlyAlive.  I think I'm going to make a local copy while it works and use that until things calm down patch wise. Looks like the people blaming the author were wrong (about the save corruption anyway. Can't get away from their sneaky pawn downing antics though). Thanks.

Link to comment
19 hours ago, Pu8Consored8 said:

     I'm a learning programmer, but I don't know how to make mod at all,

     I  want to know about mod making because of this event. After all, I'm also one of the future developers. If you have time, could you tell me how or where you learned mod making, this can give me some directions or experience. Or any advice you think that may help.

     Some directional information is enough. I can learn other knowledge by myself then.

     Thx, I want to have the ability to make a fix patch like you one day.

https://www.sololearn.com/ for basics C#

+google

 

 

+rw modding wiki

+core sources

+other peoples mods

 

Link to comment
  • 2 weeks later...
10 minutes ago, Ronnie21093 said:

If you don't mind me asking, what happened with Gregtech?

it was years ago, and keep in mind the minecraft community functions differently then most game communities.  tons of mod packs run by lots of different people, ended up with lots of different mods interacting and people bitching to the mod authors instead of the mod pack developers when things break.

 

so gregtech is an expansive mod, covers a LOT of content and makes a lot of recipe changes.  one of the basic ones changes it so one log crafts into two planks instead of four.  another mod (might of been tinkers construct) changed it back and the gregtech author decided the correct response was to put in lockouts that would break games running any mods he found had changed anything his mod changed.

Link to comment
15 minutes ago, johnny2by4 said:

it was years ago, and keep in mind the minecraft community functions differently then most game communities.  tons of mod packs run by lots of different people, ended up with lots of different mods interacting and people bitching to the mod authors instead of the mod pack developers when things break.

 

so gregtech is an expansive mod, covers a LOT of content and makes a lot of recipe changes.  one of the basic ones changes it so one log crafts into two planks instead of four.  another mod (might of been tinkers construct) changed it back and the gregtech author decided the correct response was to put in lockouts that would break games running any mods he found had changed anything his mod changed.

Yikes. I hope he got a lot of backlash for that.

Link to comment
On 3/27/2020 at 11:27 PM, johnny2by4 said:

it was years ago, and keep in mind the minecraft community functions differently then most game communities.  tons of mod packs run by lots of different people, ended up with lots of different mods interacting and people bitching to the mod authors instead of the mod pack developers when things break.

 

so gregtech is an expansive mod, covers a LOT of content and makes a lot of recipe changes.  one of the basic ones changes it so one log crafts into two planks instead of four.  another mod (might of been tinkers construct) changed it back and the gregtech author decided the correct response was to put in lockouts that would break games running any mods he found had changed anything his mod changed.

This Gregtech feature was fully configurable. mDiyo (the tinker's construct) maintainer made it so Natura and Tinker's Construct would intentionally break said feature. Greg simply added a check that warned the user and exited the game if it found out that some mod changed back the amount of planks that a log would produce. After the whole drama ended mDiyo despite his promise kept the offending code in Natura. Greg did NOT add any form of DRM into his mod, "the gregtech author decided the correct response was to put in lockouts that would break games running any mods he found had changed anything his mod changed" is just false.

Link to comment
15 hours ago, zekeeeekeeeaa said:

 Greg did NOT add any form of DRM into his mod

Directly contradicts what you say here:

15 hours ago, zekeeeekeeeaa said:

simply added a check that warned the user and exited the game if it found out that some mod changed back the amount of planks that a log would produce.

 

That is the 'DRM' that Gregtech added. A mod author creating a function to exit the game if another mod changes how many planks a log produces is stupid, and authors whose mods were intentionally made incompatible with actually playing the game (i.e. not having it close itself) with Gregtech mods were not acting unreasonably to point out exactly how stupid that is. The only 'offending code' in this scenario is code that makes the program nonfunctional, i.e. exactly what Gregtech, by your own description, put into their mod.

 

 

Link to comment
On 3/31/2020 at 6:23 AM, 2561642 said:

Directly contradicts what you say here:

 

That is the 'DRM' that Gregtech added. A mod author creating a function to exit the game if another mod changes how many planks a log produces is stupid, and authors whose mods were intentionally made incompatible with actually playing the game (i.e. not having it close itself) with Gregtech mods were not acting unreasonably to point out exactly how stupid that is. The only 'offending code' in this scenario is code that makes the program nonfunctional, i.e. exactly what Gregtech, by your own description, put into their mod.

 

 

Is it DRM if your zip program when it detects an incorrect CRC code on your zip file which signifies that the file is corrupted, and ends up printing an error and exiting? Or is it DRM maybe that your compiler throws an error and exits if it detects a type error in a program that you are making?
The error in both of these cases warn you of an undesirable state. Would it not also be an undesirable state to find out that even though you selected the amount of planks to be produced per log to be 2 they end up being 4 and have to spend time finding out what the cause is?

Anyway, in this instance LF is acting like TConstract. TConstract broke a configurable(read: you can disable it) feature of GregTech, just like LF broke a configurable feature(bestiality) of RJW.

Link to comment
On 4/2/2020 at 7:41 PM, zekeeeekeeeaa said:

Is it DRM if your zip program when it detects an incorrect CRC code on your zip file which signifies that the file is corrupted, and ends up printing an error and exiting?

 

Utterly irrelevant to the discussion unless you legitimately can't understand the difference between a failure state reached via unreadable or unusable data and a failure state artificially created when a successful result (4) didn't match what someone arbitrarily decided it should be (2). What Gregtech did would, in the context of file decompression, be equivalent to your zip extractor exiting because it detected a fully valid CRC code that the person who programmed the zip extractor happened to dislike.

 

On 4/2/2020 at 7:41 PM, zekeeeekeeeaa said:

Or is it DRM maybe that your compiler throws an error and exits if it detects a type error in a program that you are making?

 

Since you seem to really be struggling with this distinction, here's another analogy. In the context of code compilation, what Gregtech did would be equivalent to your compiler exiting before it even started compiling because some compiler dev didn't like one of your variable names.

 

On 4/2/2020 at 7:41 PM, zekeeeekeeeaa said:

The error in both of these cases warn you of an undesirable state. Would it not also be an undesirable state to find out that even though you selected the amount of planks to be produced per log to be 2 they end up being 4 and have to spend time finding out what the cause is?

 

Those aren't 'undesirable' states - the two scenarios you described are literally unusable states - exiting is arguably the least useful response to them, but an unreadable zip file and an uncompilable source code file result in a program's inability to progress through normal operation. Somebody changing a number of planks resulting from logs back to 4 from your change to 2 in no way makes the program unusable, in no way leads to an inability to progress through normal operation, and is only made problematic when specific functionality is added to shut down the program because Gregtech's developer can't stomach the idea of somebody else changing a variable that he didn't even create (he changed default log behavior, meaning he just changed functionality Mojang had already implemented).

 

On 4/2/2020 at 7:41 PM, zekeeeekeeeaa said:

Anyway, in this instance LF is acting like TConstract. TConstract broke a configurable(read: you can disable it) feature of GregTech, just like LF broke a configurable feature(bestiality) of RJW.

https://ftb.gamepedia.com/Conflicts_between_mDiyo_and_GregoriusT

 

No, actually, IGNI (the LF dev) is acting much more like the GregTech dev did - i.e. being a petty idiot putting deliberately functionality breaking code into his mod to spite the other based on some perceived slight or minor disagreement. Ultimately, GregTech was the only one who actually broke the entire game's functionality in one of these virtual slapfights.

To this day many modpacks do not include GregTech, and his lasting reputation in the modern Minecraft modding community is that of a petulant child whose work is ultimately not good enough to be worth using if it means you have to deal with him.

Link to comment
22 hours ago, 2561642 said:


failure state reached via unreadable or unusable data

I never mentioned anything about "unreadable" or "unusable" data. Just because the CRC is invalid it does not mean that the actual data in the file is also invalid/unusable. Only that the file as a whole is invalid.
 

22 hours ago, 2561642 said:

What Gregtech did would, in the context of file decompression, be equivalent to your zip extractor exiting because it detected a fully valid CRC code that the person who programmed the zip extractor happened to dislike.

More like, TiC went around and replaced all instances of the number 2 to the number 4 in zip files and you are complaining about the zip extractor refusing to extract these files because it sees them as corrupted.
 

22 hours ago, 2561642 said:

what Gregtech did would be equivalent to your compiler exiting before it even started compiling because some compiler dev didn't like one of your variable names.

What TiC did would be equivalent to your compiler replacing all of your mov instructions to add because the compiler dev thinks that nobody should be allowed to use mov.

 

22 hours ago, 2561642 said:

Those aren't 'undesirable' states - the two scenarios you described are literally unusable states

"undesirable state" is an actual terminology used in the field of computability theory. This does not hold true for unusable states. (but even if it was, I am pretty sure that any unusable state would also be undesirable).
 

22 hours ago, 2561642 said:

unreadable zip file and an uncompilable source code file

Except that I am not talking about either. The data inside a zip file with an incorrect CRC might as well be readable, and source code with a type error might as well be compilable.
 

22 hours ago, 2561642 said:

Somebody changing a number of planks resulting from logs back to 4 from your change to 2 in no way makes the program unusable

Neither does a program changing your default search engine without warning, but it is still an undesirable state.
 

22 hours ago, 2561642 said:

It might surprise you but I was there when it happened.

 

23 hours ago, 2561642 said:

No, actually, IGNI (the LF dev) is acting much more like the GregTech dev did - i.e. being a petty idiot putting deliberately functionality breaking code into his mod to spite the other based on some perceived slight or minor disagreement

Okay, since you do not seem to understand I will make it clear to you.
Greg: Hmm, how to make Minecraft more balanced? Aha, I know! I will reduce the planks produced from 4 to 2. I will also make sure to allow the users to disable the this feature if they so wish!
mDiyo: Why would anyone set the number of planks to 2 in Minecraft?? I do not like this! Nobody should be allowed to change the number of planks!! Stop having fun!!!

in the same spirit:
RJW creators: Hmm, how to make Rimworld more fun? Aha, I know! Sex with animals! I will also make sure to allow the users to disable the this feature if they so wish!
IGNI: Why would anyone have sex with animals in Rimworld?? I do not like this! Nobody should be able to have sex with the animals from my mod!! Stop having fun!!!

What mDiyo did is even worse than IGNI, as LE 1: only prevents having sex with LE animals and 2: only works against RJW (I presume), while TiC 1: enforces said change on the vanilla workbench as well as any other mod that uses the vanilla recipes (rather than just the TiC workstation) and 2: would even break your custom recipes if you decided to set your log->plank number to any number other than 4 even if you did not have GregTech installed.
 

23 hours ago, 2561642 said:

To this day many modpacks do not include GregTech

And this is fine, but don't pretend that this is due to the drama. I see a lot of modpacks including forestry(exploding bees anyone?) and TiC for example. Rather, it is because of the contents of the mod. GregTech feels more of a total conversion mod similar to TFC rather than a small mod like TiC. In addition to that GregTech is a grindfest and unsuitable for new players. In a similar spirit TiC is overpowered and extremely suited for new/casual players.
 

23 hours ago, 2561642 said:

An unsourced wall of text about a 2013 drama posted only 7 months ago. I am going to skip this one.

Link to comment
On 4/8/2020 at 4:49 PM, zekeeeekeeeaa said:

I never mentioned anything about "unreadable" or "unusable" data. Just because the CRC is invalid it does not mean that the actual data in the file is also invalid/unusable. Only that the file as a whole is invalid.

Signifying that the data is or isn't readable/usable (which equates to 'can be extracted' in the context of decompressing archives) is the purpose of zip checksums. Invalid checksum = corrupted data. If the file as a whole is invalid, at least some part of its data *has* to be invalid, because if all the data in the file was valid, the CRC of the archive would match the CRC of the resulting file structure once the archive was extracted, and then you wouldn't have CRC errors in the first place. The CRC is generated from all of the data after compression and is part of the resulting compressed data, and then again after decompression, and then compared. If somehow the data is usable but the CRC isn't, then the CRC itself is the invalid data - and it's a poor analogy for anything mDiyo or GregoriusT did because neither of them added corrupted data to the client via their mods.

 

On 4/8/2020 at 4:49 PM, zekeeeekeeeaa said:

More like, TiC went around and replaced all instances of the number 2 to the number 4 in zip files and you are complaining about the zip extractor refusing to extract these files because it sees them as corrupted.

If we want to really break it down, it flows like this:

-Mojang releases a zip archive that contains many instances of the number '4'; some of these instances determine the number of plank blocks to result from a recipe of one log

-GregoriusT changes these particular instances from '4' to '2'

-mDiyo changes these instances from '2' to '4' regardless of what other mods do to the contents of the zip files

-GregoriusT makes the zip file unreadable and exits your zip extractor if it finds a '4' that he had changed to a '2'

 

Nothing any of them did involved making data actually corrupted - the zip extractor can extract '4's just as easily as '2's. Program terminating errors are not the place for whining about the fact you don't like another mod.

 

On 4/8/2020 at 4:49 PM, zekeeeekeeeaa said:

What TiC did would be equivalent to your compiler replacing all of your mov instructions to add because the compiler dev thinks that nobody should be allowed to use mov.

I'm pretty sure 'add' can approximate 'mov' if preceded by an opcode to set the destination register/address to 0. TiC added an annoyance for anyone trying to set the yield of the log recipe to anything but 4, that's true - but none of it made any data corrupt or unusable. It just made some of the data do something GregoriusT disliked.

 

On 4/8/2020 at 4:49 PM, zekeeeekeeeaa said:

"undesirable state" is an actual terminology used in the field of computability theory. This does not hold true for unusable states. (but even if it was, I am pretty sure that any unusable state would also be undesirable).

The field of computability theory is concerned with defining which problems can or cannot be solved algorithmically (or efficiently, but the two are very closely related). It has nothing to do with whether or not a program runs to completion or error - in fact, running to completion or error is in itself proof that the input data was solvable algorithmically (albeit with an unusable result and potentially signifying a fault in the algorithm itself in the case of an error). Computability theory is not programming, in any case - it's mathematical proofs made to categorize problems. In the field of programming, I used 'unusable state' as a substitute for 'failure state,' which I admit was my bad. It's also a substitute for the much longer 'state in which the data provided has led to an inability of the program to progress without error, indicating that said data cannot be used by this program.' Now the issue could be in the program or the inputs (or both), but it makes the inputs unusable either way.

On 4/8/2020 at 4:49 PM, zekeeeekeeeaa said:

Except that I am not talking about either. The data inside a zip file with an incorrect CRC might as well be readable, and source code with a type error might as well be compilable.

Ok... so, kinda yes to the first thing, but a hard no to the second. As stated, incorrect CRC indicates a mismatch of the data - what you extracted from the zip archive is not what the zip archive's CRC says should be there. It *might* be usable, but the thing that was literally designed to tell you whether or not it was usable/correct (the CRC) says that it is not.

 

As for source code... that's not how compilation works. A type error can result in a number of things, the most likely and most dangerous of which being accessing and altering memory outside what was supposed to be accessible to a function, usually referred to as a segmentation fault. A type error is never compilable, because there are no valid assembly opcodes to compile it to. Now, a mistakenly typed variable *might* compile if the mistaken type happens to be compatible with everything you're doing with that variable, but in that case the variable would likely cause issues at runtime. In either case, the program exiting due to reaching a failure state has nothing to do with the value of the variable itself - which is what GregoriusT's 'shut the game down if this 2 is a 4' code did.

 

On 4/8/2020 at 4:49 PM, zekeeeekeeeaa said:

Neither does a program changing your default search engine without warning, but it is still an undesirable state.

You're not using the Computability Theory definition of 'undesirable state' here - you're conflating a state that the user might not desire with a state that the program itself can literally not progress successfully from. If the browser dev followed GregoriusT's example, the browser would suddenly start closing itself without warning when it detected a change to the default search engine. 

 

On 4/8/2020 at 4:49 PM, zekeeeekeeeaa said:

What mDiyo did is even worse than IGNI, as LE 1: only prevents having sex with LE animals and 2: only works against RJW (I presume), while TiC 1: enforces said change on the vanilla workbench as well as any other mod that uses the vanilla recipes (rather than just the TiC workstation) and 2: would even break your custom recipes if you decided to set your log->plank number to any number other than 4 even if you did not have GregTech installed.

I've perused the LF .dll, it's sloppy as hell in regards to 'disabling' RJW, and the LF function is literally called 'RJWblocker'. The original LF 'blocker' specifically looks for RJW functions by package name and sedates pawns if they attempt to initiate any RJW action with a LF target, which results in nonsense like pawns being sedated if they try to masturbate near furniture from LF. In this way, it's actually probably more akin to (though notably less extreme than) what the Forestry dev did with making bees explode in terms of the danger of loss of progress ingame as opposed to GregTech closing out the game. So far, it seems like the attempt to break RJW altogether wasn't actually a response to people sidestepping that 'RJWblocker' function, but might just be IGNI screwing up the build process on the latest version of LF. That said, IGNI has set the precedent of messing with other people's mods without telling anyone that these dangers of having both LF and RJW installed existed (let alone the fact that the dangers only exist because IGNI put them there). According to somebody on the Ludeon thread for LF, it's actually against the RimWorld EULA, but I haven't bothered to read through it yet.

Link to comment
  • 3 weeks later...
  • 1 month later...

Out of curiosity, I decided to inspect the LF dll and check out how they have been doing things. It seems they changed since the last time they updated that from "RJWBlocker" to simply a namespace named "n"

 

You don't even need to compile a new dll for this, anyone with DNSpy or any DLL editor can simply delete that "n" harmony patcher namespace that was made solely for this as it's not referenced or needed anywhere else and the mod will no longer be able to stop you from using RJW functions, as long as you have @bearlyAlive's gender patcher, of course.

 

I've attached the whole mod which you can extract as a local file in your mods folder and the dll which I altered, located in "YourSteamDirectory\steamapps\workshop\content\294100\1847010407\1.1\Assemblies" for those who wish to only throw the dll in there instead of using a local mod.

 

Have fun, y'all.

 

 

Also, @Ed86 I thought you'd want to see this so, this is the code that does everything. It simply uses the default jobtracker to search if anything is calling a job named "rjw" and denies that, if any creature has a name prefix of "LF."

 

namespace LF_HarmonyPatche
{
	[HarmonyPatch(typeof(Pawn_JobTracker), "StartJob", new Type[]
	{
		typeof(Job),
		typeof(JobCondition),
		typeof(ThinkNode),
		typeof(bool),
		typeof(bool),
		typeof(ThinkTreeDef),
		typeof(JobTag?),
		typeof(bool),
		typeof(bool)
	})]
	internal class n
	{
		private static bool Prefix(Pawn_JobTracker __instance, Job newJob, JobCondition lastJobEndCondition = 0, ThinkNode jobGiver = null, bool resumeCurJobAfterwards = false, bool cancelBusyStances = true, ThinkTreeDef thinkTree = null, JobTag? tag = null, bool fromQueue = false, bool canReturnCurJobToPool = false)
		{
			string @namespace = newJob.def.driverClass.Namespace;
			bool flag = @namespace == "rjw";
			if (flag)
			{
				Pawn value = Traverse.Create(__instance).Field("pawn").GetValue<Pawn>();
				Pawn pawn = newJob.targetA.Thing as Pawn;
				Pawn pawn2 = newJob.targetB.Thing as Pawn;
				Pawn pawn3 = newJob.targetC.Thing as Pawn;
				bool flag2 = value.def.defName.Contains("LF") || (pawn != null && pawn.def.defName.Contains("LF")) || (pawn2 != null && pawn2.def.defName.Contains("LF")) || (pawn3 != null && pawn3.def.defName.Contains("LF"));
				bool flag3 = flag2;
				if (flag3)
				{
					Messages.Message("LostForest is incompatible with that.", value, MessageTypeDefOf.NegativeEvent, false);
					value.health.AddHediff(HediffDefOf.Anesthetic, null, null, null);
					bool flag4 = !value.Downed;
					if (flag4)
					{
						value.stances.SetStance(new Stance_Cooldown(600, null, null));
						return false;
					}
				}
			}
			return true;
		}
	}
}

 

 

 

LF - 15-06-2020 Edit.zip LF_CoreLibrary.dll

Link to comment
1 hour ago, Some_Maj said:

Also, @Ed86 I thought you'd want to see this so, this is the code that does everything. It simply uses the default jobtracker to search if anything is calling a job named "rjw" and denies that, if any creature has a name prefix of "LF."

 

Quick question though, I haven't ever modded for rimworld, but does harmony allow one to completely replace this patch of theirs? If so, I guess an easy fix would be to patch it with a stub.

 

maybe, you can probably also unpatch it with other mod

i personally found LF annoying af, spamming sound effects and stuff, idk why would anyone play with it

Link to comment
4 hours ago, Ed86 said:

maybe, you can probably also unpatch it with other mod

i personally found LF annoying af, spamming sound effects and stuff, idk why would anyone play with it

To be fair, I find the sound effects pretty annoying as well but the pets do have some cool abilities.

 

Also, would you happen to have an example of this type of code laying somewhere? I'd be more than happy to try to compile a permanent patch for the folks who want it that acts as a separate local mod.

Link to comment
45 minutes ago, Some_Maj said:

To be fair, I find the sound effects pretty annoying as well but the pets do have some cool abilities.

 

Also, would you happen to have an example of this type of code laying somewhere? I'd be more than happy to try to compile a permanent patch for the folks who want it that acts as a separate local mod.

That patch exists, and I give it out via PM request.

Link to comment
1 hour ago, Some_Maj said:

To be fair, I find the sound effects pretty annoying as well but the pets do have some cool abilities.

 

Also, would you happen to have an example of this type of code laying somewhere? I'd be more than happy to try to compile a permanent patch for the folks who want it that acts as a separate local mod.

this removes all harmony patches of LF, sort of last resort

imo its better to make local copy of LF and use dnspy to remove "n" from LF assembly

LostForestRimworldReEnabler.7z

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use