mirror of
https://gitgud.io/lutepickle/rjw_menstruation.git
synced 2024-08-14 22:46:52 +00:00
Update the hookup transpilers to apply the estrus overrides in the other direction.
This commit is contained in:
parent
72e1712394
commit
41054f979e
3 changed files with 22 additions and 16 deletions
Binary file not shown.
|
@ -196,15 +196,16 @@ namespace RJW_Menstruation
|
||||||
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
|
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
|
||||||
{
|
{
|
||||||
// We only want the first fuckability check, i.e. the estrus-haver towards a partner
|
// We only want the first fuckability check, i.e. the estrus-haver towards a partner
|
||||||
bool found_fuckability = false;
|
bool first_fuckability = true;
|
||||||
foreach(CodeInstruction instruction in instructions)
|
foreach(CodeInstruction instruction in instructions)
|
||||||
{
|
{
|
||||||
if(!found_fuckability && instruction.LoadsField(MinimumFuckabilityToHookup))
|
if(instruction.LoadsField(MinimumFuckabilityToHookup))
|
||||||
{
|
{
|
||||||
found_fuckability = true;
|
yield return new CodeInstruction(first_fuckability ? OpCodes.Ldarg_0 : OpCodes.Ldarg_1);
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_0);
|
yield return new CodeInstruction(first_fuckability ? OpCodes.Ldarg_1 : OpCodes.Ldarg_0);
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_1);
|
|
||||||
yield return CodeInstruction.Call(typeof(Roll_To_Skip_Patch), nameof(FuckabilityThreshold));
|
yield return CodeInstruction.Call(typeof(Roll_To_Skip_Patch), nameof(FuckabilityThreshold));
|
||||||
|
first_fuckability = false;
|
||||||
}
|
}
|
||||||
else yield return instruction;
|
else yield return instruction;
|
||||||
}
|
}
|
||||||
|
@ -231,8 +232,8 @@ namespace RJW_Menstruation
|
||||||
{
|
{
|
||||||
LocalBuilder pawn_index = null;
|
LocalBuilder pawn_index = null;
|
||||||
// Like in the last one, we're only interested in the first of each
|
// Like in the last one, we're only interested in the first of each
|
||||||
bool found_first_attractiveness = false;
|
bool first_attractiveness = true;
|
||||||
bool found_first_relationship = false;
|
bool first_relationship = true;
|
||||||
foreach(CodeInstruction instruction in instructions)
|
foreach(CodeInstruction instruction in instructions)
|
||||||
{
|
{
|
||||||
// Get where the compiler decided to index the pawn at
|
// Get where the compiler decided to index the pawn at
|
||||||
|
@ -241,23 +242,27 @@ namespace RJW_Menstruation
|
||||||
pawn_index = (LocalBuilder)instruction.operand;
|
pawn_index = (LocalBuilder)instruction.operand;
|
||||||
yield return instruction;
|
yield return instruction;
|
||||||
}
|
}
|
||||||
else if (!found_first_attractiveness && instruction.LoadsField(MinimumAttractivenessToHookup))
|
else if (instruction.LoadsField(MinimumAttractivenessToHookup))
|
||||||
{
|
{
|
||||||
if (pawn_index?.LocalType != typeof(Pawn))
|
if (pawn_index?.LocalType != typeof(Pawn))
|
||||||
throw new System.InvalidOperationException($"pawn_index is not a Pawn ({pawn_index?.LocalType})");
|
throw new System.InvalidOperationException($"pawn_index is not a Pawn ({pawn_index?.LocalType})");
|
||||||
found_first_attractiveness = true;
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_0);
|
yield return first_attractiveness ? new CodeInstruction(OpCodes.Ldarg_0) : new CodeInstruction(OpCodes.Ldloc_S, pawn_index);
|
||||||
yield return new CodeInstruction(OpCodes.Ldloc_S, pawn_index);
|
yield return first_attractiveness ? new CodeInstruction(OpCodes.Ldloc_S, pawn_index) : new CodeInstruction(OpCodes.Ldarg_0);
|
||||||
|
|
||||||
yield return CodeInstruction.Call(typeof(FindBestPartner_Patch), nameof(AttractivenessThreshold));
|
yield return CodeInstruction.Call(typeof(FindBestPartner_Patch), nameof(AttractivenessThreshold));
|
||||||
}
|
first_attractiveness = false;
|
||||||
else if (!found_first_relationship && instruction.LoadsField(MinimumRelationshipToHookup))
|
}
|
||||||
|
else if (instruction.LoadsField(MinimumRelationshipToHookup))
|
||||||
{
|
{
|
||||||
if (pawn_index?.LocalType != typeof(Pawn))
|
if (pawn_index?.LocalType != typeof(Pawn))
|
||||||
throw new System.InvalidOperationException($"pawn_index is not a Pawn ({pawn_index?.LocalType})");
|
throw new System.InvalidOperationException($"pawn_index is not a Pawn ({pawn_index?.LocalType})");
|
||||||
found_first_relationship = true;
|
|
||||||
yield return new CodeInstruction(OpCodes.Ldarg_0);
|
yield return first_relationship ? new CodeInstruction(OpCodes.Ldarg_0) : new CodeInstruction(OpCodes.Ldloc_S, pawn_index);
|
||||||
yield return new CodeInstruction(OpCodes.Ldloc_S, pawn_index);
|
yield return first_relationship ? new CodeInstruction(OpCodes.Ldloc_S, pawn_index) : new CodeInstruction(OpCodes.Ldarg_0);
|
||||||
|
|
||||||
yield return CodeInstruction.Call(typeof(FindBestPartner_Patch), nameof(RelationshipThreshold));
|
yield return CodeInstruction.Call(typeof(FindBestPartner_Patch), nameof(RelationshipThreshold));
|
||||||
|
first_relationship = false;
|
||||||
}
|
}
|
||||||
else yield return instruction;
|
else yield return instruction;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ Version 1.0.6.3
|
||||||
- Fix pawn generation for races with a single lifestage.
|
- Fix pawn generation for races with a single lifestage.
|
||||||
- Show womb gizmo for males with vaginas, too.
|
- Show womb gizmo for males with vaginas, too.
|
||||||
- Show the status button in the health tab for pawns with more than one genital.
|
- Show the status button in the health tab for pawns with more than one genital.
|
||||||
|
- The hookup override will now apply for pawns in estrus being considered by others.
|
||||||
|
|
||||||
Version 1.0.6.2
|
Version 1.0.6.2
|
||||||
- Fix error/crash when a pawn in estrus (with hookup override enabled) looks for partners.
|
- Fix error/crash when a pawn in estrus (with hookup override enabled) looks for partners.
|
||||||
|
|
Loading…
Reference in a new issue