diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9de9d2c..50a2b82 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,68 +1,7 @@
-# 1.2
-
-Changes:
-
-- Cocoon Weaver Gene
-
-Fixes:
-
-- Cockeater Ability has now Icon of Cockeater Gene
-- Cockeater now leaves a bite wound!
-
-# 1.1.4
-
-Fixes:
-
-- Youth Fountain and Age Drainer **really** "stop" at 18 (#26, #28) and never age pawns
-- Drastically reduced vomiting time due to an missunderstanding (#29). `0.4` instead of `0.01`
-
-Sometimes life is like that, and you have to fix the fixes.
-It was never really broken, life is just very long.
-
-# 1.1.3
-
-Changes:
-
-- Youth Fountain and Age Drainer "stop" at 18 (#26)
-- Youth Fountain and Age Drainer activate only for pawns at 18 (#26)
-- Drained Pawns vomit less (from mtb 0.05 to 0.01)(#29)
-
-Fixes:
-
-- InsectBreeder would mess with normal Pawn-Animal pregancy for egg laying animals (#23)
-
-# 1.1.2
-
-Changes:
-
-- Added more cool images from WasMachenDennSachen (#22)
-
-Fixes:
-
-- Aphrodisiac Pheromones checks for children and other conditions (#25)
-
-# 1.1.1
-
-Changes:
-
-- Drastically increased mood-penalty for Fertilin-Loss (if the pawn is still too happy, there will never be a breakdown for missing fertilin)
-- No-Breast Genes add Nipples
-- Featureless Chest Gene (No Nipples at all, adds the RJW Featureless Chest as requested per some Kobold fetishists)
-
-Fixes:
-
-- Small and Big Male Genitalia had images wrong way round
-- Fertilin should activate at a MinAge of 18
-
-**Important**: The Fertilin Changes could throw errors! I tested a bit, but not a lot.
-So please reach out if you get something and I will try to fix it ASAP.
-
-# 1.1.0 (2023-03-04)
+# 1.1.0 (2023-xx-xx)
1.1.0-beta-1 was released on 05.02.2023.
-Changes since beta: Typos, Icons & Merge of Anal & Vaginal Absorber.
-
## Features:
- Succubus, other Fertilin Xenotypes (see below)
@@ -133,7 +72,6 @@ Currently Succubi and Incubi only spawn through a special event determined by th
- Genitalia Resizing triggers on 20th Birthday (#11)
- RJW-Gene-Inheritance Settings now do things (#13, Shabakur)
- Check for Animals in Orgasm Rush, no Orgasm Rush for and from Animals (#15)
-- Using Character Editor, it can happen that the Genes fired twice. I hoped to harden this issue by checking better (#19)
# 1.0.1 (2022-12-20)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 486a3b9..1f3d4d5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -16,7 +16,6 @@ But please consider also the following:
## Contributors
- Shabalox (MechBreeding, InsectBreeding, Animal Gene Inheritance)
-- WasMachenDennSachen (Various Icons)
## Other Credits
@@ -25,5 +24,5 @@ But please consider also the following:
- Many of the Icons I made (e.g. Genitalia Types) include things from [OpenMoji](https://openmoji.org/) which is awesome
- Placeholder, Rapist, Necrophile come from [RJW-Sexperience Ideology](https://gitgud.io/amevarashi/rjw-sexperience-ideology/)
- Hypersexual & Zoophile comes from [RJW](https://gitgud.io/Ed86/rjw)
-- Cockeater & Naked Prowess come from *WasMachenDennSachen* but I copied it from Discord Chat.
+- Cockeater & Naked Prowess come from *WasMachenSachen*.
- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur
\ No newline at end of file
diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index 7e3fd40..9878f26 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/AbilityDefs/Ability_CockEater.xml b/Common/Defs/AbilityDefs/Ability_CockEater.xml
index f74e38c..d333c1d 100644
--- a/Common/Defs/AbilityDefs/Ability_CockEater.xml
+++ b/Common/Defs/AbilityDefs/Ability_CockEater.xml
@@ -4,7 +4,7 @@
rjw_genes_cockeaterEat the cock of another pawn, restoring fertilin based on the size of the cock.
- Genes/Icons/cockeater
+ Things/Mote/Hearttruetruefalse
@@ -27,7 +27,8 @@
-
+
+
\ No newline at end of file
diff --git a/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml b/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml
deleted file mode 100644
index 06133a1..0000000
--- a/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- rjw_genes_cocoonweaver
-
- Weaves the victim into a (self-sustaining) cocoon. The victim cannot move, but can be bred.
- Things/Mote/Heart
- true
- true
- false
- Mote_CocoonStencil
- CocoonWeave
- CastAbilityOnThingMelee
- 404
-
- 30000
-
- Verb_CastAbilityTouch
- false
- -1
- 15
-
- true
- false
- false
- false
- true
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml
index 06e5618..82d5bd8 100644
--- a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml
+++ b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml
@@ -6,7 +6,7 @@
Enhance the strength and resilience of your naked body with fertilin.Genes/Icons/rjw_naked_prowessThings/Mote/Heart
- CastAbilityOnThing
+ CastAbilityOnThingFalseFalseTrue
diff --git a/Common/Defs/AbilityDefs/Ability_Seduce.xml b/Common/Defs/AbilityDefs/Ability_Seduce.xml
index 65c281a..3310595 100644
--- a/Common/Defs/AbilityDefs/Ability_Seduce.xml
+++ b/Common/Defs/AbilityDefs/Ability_Seduce.xml
@@ -9,7 +9,7 @@
truetruefalse
-
+ 10Mote_CoagulateStencil
diff --git a/Common/Defs/Effects/cocoonweave.xml b/Common/Defs/Effects/cocoonweave.xml
deleted file mode 100644
index 945e631..0000000
--- a/Common/Defs/Effects/cocoonweave.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
- CocoonWeave
-
-
-
-
-
-
- Mote_CocoonStencil
- MoteAttached
- Terrain
-
- 0.1
- 0.4
- 999999
- True
-
-
- Graphic_PawnBodySilhouette
- PawnSilhouetteStencil
- Things/Mote/Transparent
-
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneCategories.xml b/Common/Defs/GeneDefs/GeneCategories.xml
index 8106c8e..06b31cc 100644
--- a/Common/Defs/GeneDefs/GeneCategories.xml
+++ b/Common/Defs/GeneDefs/GeneCategories.xml
@@ -67,11 +67,6 @@
8
-
- rjw_genes_hive
-
- 7
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
index a2d7d7e..bd201cc 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
@@ -40,7 +40,7 @@
rjw_genes_breedingXenotypes with this Gene are Zoophile.
- Genes/Icons/Zoophile
+ Genes/Icons/Zoophile_254
diff --git a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
index 22764ea..c2acd4c 100644
--- a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
@@ -70,7 +70,7 @@
rjw_genes_no_breasts
- Females of this do not have a pair of breasts, but only nipples.
+ Females of this do not have a pair of breasts.Genes/Icons/No_BreastsRJW_Genes.Gene_NoBreasts706
@@ -106,7 +106,7 @@
rjw_genes_futa
- Males with this gene grow additional female genitalia, females grow additional male genitalia.
+ Males of this xenotype grow additional female genitalia, Females grow additional male genitalia.Genes/Icons/FutaRJW_Genes.Gene_Futa709
@@ -116,16 +116,4 @@
-
- rjw_genes_featureless_chest
-
- Carriers of this gene do not have breasts or nipples.
- Genes/Icons/No_Breasts
- RJW_Genes.Gene_FeaturelessChest
- 710
-
-
BreastAmount
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml b/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml
index c5d8826..cc26c04 100644
--- a/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_GenitaliaSizes.xml
@@ -10,7 +10,7 @@
rjw_genes_big_male_genitaliaPenises of this Xenotype are bigger.(Resizing takes place at 20th Birthday)
- Genes/Icons/Big_Male_Genitalia
+ Genes/Icons/Small_Male_GenitaliaRJW_Genes.Gene_BigMaleGenitalia751
@@ -22,7 +22,7 @@
rjw_genes_small_male_genitaliaPenises of this Xenotype are smaller. (Resizing takes place at 20th Birthday)
- Genes/Icons/Small_Male_Genitalia
+ Genes/Icons/Big_Male_GenitaliaRJW_Genes.Gene_SmallMaleGenitalia753
diff --git a/Common/Defs/GeneDefs/GeneDefs_Hive.xml b/Common/Defs/GeneDefs/GeneDefs_Hive.xml
deleted file mode 100644
index 8b6ab1f..0000000
--- a/Common/Defs/GeneDefs/GeneDefs_Hive.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- rjw_genes_cocoonweaver
-
- cocooner
- Carriers of this gene can produce a cocoon to prepare helpless victims for breeding.
- Things/Mote/Heart
- 11
- rjw_genes_hive
-
-
rjw_genes_cocoonweaver
-
-
- rjw_genes_cocoonweaver
-
- 1
- -1
-
-
-
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml
index e8987d0..cc70eae 100644
--- a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml
@@ -19,7 +19,6 @@
0rjw_genes_fertilin-2
- 18
-
+
\ No newline at end of file
diff --git a/Common/Textures/Genes/Icons/Extra_Anus.png b/Common/Textures/Genes/Icons/Extra_Anus.png
index 9dfbbb6..1075bbd 100644
Binary files a/Common/Textures/Genes/Icons/Extra_Anus.png and b/Common/Textures/Genes/Icons/Extra_Anus.png differ
diff --git a/Common/Textures/Genes/Icons/Extra_Breasts.png b/Common/Textures/Genes/Icons/Extra_Breasts.png
index 5e7cbc3..f2c470e 100644
Binary files a/Common/Textures/Genes/Icons/Extra_Breasts.png and b/Common/Textures/Genes/Icons/Extra_Breasts.png differ
diff --git a/Common/Textures/Genes/Icons/Genitalia_Demon.png b/Common/Textures/Genes/Icons/Genitalia_Demon.png
index d8ace83..7831b4d 100644
Binary files a/Common/Textures/Genes/Icons/Genitalia_Demon.png and b/Common/Textures/Genes/Icons/Genitalia_Demon.png differ
diff --git a/Common/Textures/Genes/Icons/Loose_Anus.png b/Common/Textures/Genes/Icons/Loose_Anus.png
index 86036d8..c96dec3 100644
Binary files a/Common/Textures/Genes/Icons/Loose_Anus.png and b/Common/Textures/Genes/Icons/Loose_Anus.png differ
diff --git a/Common/Textures/Genes/Icons/No_Anus.png b/Common/Textures/Genes/Icons/No_Anus.png
index 69f7d6b..f5a9a03 100644
Binary files a/Common/Textures/Genes/Icons/No_Anus.png and b/Common/Textures/Genes/Icons/No_Anus.png differ
diff --git a/Common/Textures/Genes/Icons/No_Male_Genitalia.png b/Common/Textures/Genes/Icons/No_Male_Genitalia.png
index 9104ea6..ce1fa4e 100644
Binary files a/Common/Textures/Genes/Icons/No_Male_Genitalia.png and b/Common/Textures/Genes/Icons/No_Male_Genitalia.png differ
diff --git a/Common/Textures/Genes/Icons/Tight_Anus.png b/Common/Textures/Genes/Icons/Tight_Anus.png
index 0e797de..dd355fb 100644
Binary files a/Common/Textures/Genes/Icons/Tight_Anus.png and b/Common/Textures/Genes/Icons/Tight_Anus.png differ
diff --git a/Common/Textures/Genes/Icons/Zoophile.png b/Common/Textures/Genes/Icons/Zoophile.png
index 75afdf4..ed45040 100644
Binary files a/Common/Textures/Genes/Icons/Zoophile.png and b/Common/Textures/Genes/Icons/Zoophile.png differ
diff --git a/Common/Textures/Genes/Icons/Zoophile_2.png b/Common/Textures/Genes/Icons/Zoophile_2.png
new file mode 100644
index 0000000..d313bcb
Binary files /dev/null and b/Common/Textures/Genes/Icons/Zoophile_2.png differ
diff --git a/Common/Textures/Genes/Icons/extra_male.png b/Common/Textures/Genes/Icons/extra_male.png
index c39e163..5390ecc 100644
Binary files a/Common/Textures/Genes/Icons/extra_male.png and b/Common/Textures/Genes/Icons/extra_male.png differ
diff --git a/Common/Textures/Things/Mote/Cocoon/WeaveA.psd b/Common/Textures/Things/Mote/Cocoon/WeaveA.psd
deleted file mode 100644
index 2328868..0000000
Binary files a/Common/Textures/Things/Mote/Cocoon/WeaveA.psd and /dev/null differ
diff --git a/Common/Textures/Things/Mote/Cocoon/WeaveB.psd b/Common/Textures/Things/Mote/Cocoon/WeaveB.psd
deleted file mode 100644
index c1a852e..0000000
Binary files a/Common/Textures/Things/Mote/Cocoon/WeaveB.psd and /dev/null differ
diff --git a/KNOWN_BUGS.md b/KNOWN_BUGS.md
index f9bc556..ebedd72 100644
--- a/KNOWN_BUGS.md
+++ b/KNOWN_BUGS.md
@@ -2,27 +2,6 @@
Collection of Known Bugs and reasons for their origin.
-## I changed Parts of a pawn and my genes do not apply!
-
-Issue: You had a pawn with "huge genitalia" and add a horse-cock with licentia or surgery. This new genitalia is not huge.
-
-Reason: The genes are applied when they are added. This is usually character-spawn. The genes change the attributes of the genitalia-hediff, and thus genitalia added after the genes are not affected.
-
-I think I will not gonna fix this.
-First of all, I think transplants wouldn't reasonably affected by genes.
-Second, for implementation I'd need to regularly check if every gene changed all relevant genitalia already, and do the same every x-ticks.
-This seems like a performance sink, so I will not gonna do it.
-
-## Pawn does not refresh empty Fertilin!
-
-Issue: A pawn has 0 (or low) Fertilin, and a mood debuff. But they do not do anything about it.
-
-Reason: Pawns might go on a mental break when their fertilin is low to rape people. However, if your pawn is generally happy, they will not have a mental break. Then they run around with low fertilin.
-
-Workarounds / Solutions: Depending on your Gene-Setup, you might consider a cum-based diet. You can also tweak sex-settings for more sex need and hookups. Lastly, you can edit the xml to give higher mood penalties, which will lead to more mental breakdowns.
-
-In general, I am happy to hear your feedback. If you have other ideas how to change this to be a bit tricky but not too punishing please let me know.
-
## Fertilin does not go up after Sex!
Error: An Incubus or Succubus had sex with another pawn, but did not gain Fertilin.
@@ -43,7 +22,6 @@ Error: You have a succubus using seduce on a hostile pawn, they start sex but im
Things to Consider:
1. Is your Succubus drafted? If not, they might have a flight-mode set and are scared of the enemy.
-2. Do you have mods changing combat AI? (CAI5000 or Combat Extended)
It seems that things changing Enemy Combat AI also affect this. One report was about CAI5000 and we also expect Combat Extended to be incompatible.
@@ -65,8 +43,6 @@ Maybe you can also fix it by changing `` in the Male/Fem
## Full-No-Genital-Genes get Genitals later
-*Update: Should be addressed with 1.1.1 and not appear anymore*
-
Error: I added all "no-XXX" genes but my pawn has genitalia on map!
Reason: If you go with Full-No-Genitals (No Penis, No Anus, No Breasts, No Vagina) then the pawn spawns without any Genitalia on the map,
@@ -76,8 +52,6 @@ however then the RJW base-logic runs the sexualizer.
## Log Pops up for Xenotypes with Female/Male Only Gene
-*Update: Should not appear anymore after 1.1 when used with current rjw versions*
-
Error:
When using a Xenotype with the Female only gene, upon refresh it can open the log with the following (red) statement:
diff --git a/README.md b/README.md
index f0a12ac..d138b8a 100644
--- a/README.md
+++ b/README.md
@@ -28,14 +28,9 @@ Please consider looking at [the known bugs](./KNOWN_BUGS.md)
I currently don't use Races after Biotech was introduced.
One of the main motivations was to have genes being added to the xenotypes that other mods and the base game add, e.g. adding demonic penis for impids.
-Some HAR races change sex-ages and behave unfriendly with this mod.
-You can make reports about that, but I might not fix it.
+## Load Order / Deps
-## Load Order, Dependencies and Conflicts
-
-Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience).
-
-**Conflicts:**
-1. Should not be used with the original RJW_Animal_Gene_Inheritance anymore.
-2. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
-3. CAI5000 will not crash, but will make *Seduce*-Ability fail. I think same goes for Combat Extended.
\ No newline at end of file
+1. Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience).
+2. Should not be used with the original RJW_Animal_Gene_Inheritance anymore.
+3. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
+4. CAI5000 will not crash, but will make *Seduce*-Ability fail.
\ No newline at end of file
diff --git a/Source/Genes/Breeding/PatchPawnExtensions.cs b/Source/Genes/Breeding/PatchPawnExtensions.cs
new file mode 100644
index 0000000..be2e2dc
--- /dev/null
+++ b/Source/Genes/Breeding/PatchPawnExtensions.cs
@@ -0,0 +1,24 @@
+using HarmonyLib;
+using rjw;
+using Verse;
+
+namespace RJW_Genes
+{
+ ///
+ /// Kindly provided by 'shabalox' https://github.com/Shabalox/RJW_Genes_Addons/
+ ///
+ /// Note on the logic: the result mentioned below is changing the result of fertilization (true or false) to true if the pawn has the insect-breeder gene.
+ ///
+ [HarmonyPatch(typeof(PawnExtensions), "RaceImplantEggs")]
+ public static class PatchPawnExtensions
+ {
+ [HarmonyPostfix]
+ public static void Postfix(Pawn pawn, ref bool __result)
+ {
+ if (!__result)
+ {
+ __result = GeneUtility.IsInsectBreeder(pawn);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs b/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs
deleted file mode 100644
index 8a93c51..0000000
--- a/Source/Genes/ExtraGenitalia/Gene_FeaturelessChest.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using Verse;
-using rjw;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class Gene_FeaturelessChest : RJW_Gene
- {
- internal Hediff removed_breasts;
- internal Hediff added_nipples;
- public override void PostMake()
- {
- base.PostMake();
-
- if (removed_breasts == null)
- {
- RemoveButStoreBreasts();
- AddFeaturelessBreast();
- }
- }
-
- public override void PostAdd()
- {
- base.PostAdd();
-
- if (removed_breasts == null)
- {
- RemoveButStoreBreasts();
- AddFeaturelessBreast();
- }
- }
-
- public override void PostRemove()
- {
- base.PostRemove();
- if (added_nipples != null)
- pawn.health.RemoveHediff(added_nipples);
- if (removed_breasts != null)
- pawn.health.AddHediff(removed_breasts);
- }
-
- internal void RemoveButStoreBreasts()
- {
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
-
- if (breastsToRemove != null)
- {
- removed_breasts = breastsToRemove;
- pawn.health.RemoveHediff(breastsToRemove);
- }
- }
-
- internal void AddFeaturelessBreast()
- {
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR);
- }
-
- }
-}
diff --git a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
index 874ff5f..ddc75a1 100644
--- a/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_NoBreasts.cs
@@ -6,15 +6,18 @@ namespace RJW_Genes
{
public class Gene_NoBreasts : RJW_Gene
{
- Hediff breastsToShrink;
- internal float oldSize = -1f;
+ internal Hediff removed_breasts;
+
+ // TODO: This gene only works if another Gene was set specifying the genitalia.
+ // If it is added later, it still works, but on creation it needs a different
+ // TODO: If all Genitalia are removed by genes, RJW adds some to the pawns at spawn. IDEA: Add male-nipples ?
public override void PostMake()
{
base.PostMake();
// Breasts are removed for female pawns!
- if (GenderUtility.IsFemale(pawn) && oldSize < 0)
+ if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
{
RemoveButStoreBreasts();
}
@@ -25,7 +28,7 @@ namespace RJW_Genes
base.PostAdd();
// Breasts are removed for female pawns!
- if (GenderUtility.IsFemale(pawn) && oldSize < 0)
+ if (GenderUtility.IsFemale(pawn) && removed_breasts == null)
{
RemoveButStoreBreasts();
}
@@ -34,33 +37,21 @@ namespace RJW_Genes
public override void PostRemove()
{
base.PostRemove();
- // Re-Add the old breasts
- if (oldSize != null)
- breastsToShrink.Severity = oldSize;
+ if(removed_breasts != null)
+ pawn.health.AddHediff(removed_breasts);
}
internal void RemoveButStoreBreasts()
{
var partBPR = Genital_Helper.get_breastsBPR(pawn);
- breastsToShrink = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
+ Hediff breastsToRemove = Genital_Helper.get_AllPartsHediffList(pawn).FindLast(x => GenitaliaUtility.IsBreasts(x));
- if(breastsToShrink != null)
+ if(breastsToRemove != null)
{
- oldSize = breastsToShrink.Severity;
- //pawn.health.RemoveHediff(breastsToRemove);
- breastsToShrink.Severity = 0f;
+ removed_breasts = breastsToRemove;
+ pawn.health.RemoveHediff(breastsToRemove);
}
}
- /*
- ///
- /// Adds a "rjw.featurelesschest", which means nipples but nothing else (like male human pawns do).
- ///
- internal void AddFeaturelessBreast()
- {
- var partBPR = Genital_Helper.get_breastsBPR(pawn);
- //this.added_nipples = pawn.health.AddHediff(Genital_Helper.featureless_chest, partBPR);
- }
- */
}
}
diff --git a/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs
index a6361aa..66cfd74 100644
--- a/Source/Genes/GeneUtility.cs
+++ b/Source/Genes/GeneUtility.cs
@@ -43,9 +43,7 @@ namespace RJW_Genes
{
if (HasLifeForce(pawn))
{
- Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType();
- if (gene == null || !gene.Active)
- return false;
+ Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType();
if (gene.Resource.Value < gene.targetValue)
{
return true;
@@ -59,8 +57,6 @@ namespace RJW_Genes
if (HasLifeForce(pawn))
{
Gene_LifeForce gene = pawn.genes.GetFirstGeneOfType();
- if (gene == null || !gene.Active)
- return false;
if (gene.Resource.Value < gene.MinLevelForAlert)
{
return true;
@@ -126,27 +122,4 @@ namespace RJW_Genes
public static bool IsCumEater(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_cum_eater); }
}
-}
-
-/*
-Exception in Verse.AI.ThinkNode_Priority TryIssueJobPackage: System.NullReferenceException: Object reference not set to an instance of an object
- at RJW_Genes.GeneUtility.HasLowLifeForce (Verse.Pawn pawn) [0x00014] in < 881b7541af8144a78a14c9dad08e43c7 >:0
- at RJW_Genes.ThinkNode_ConditionalLowLifeForce.Satisfied(Verse.Pawn p) [0x00000] in < 881b7541af8144a78a14c9dad08e43c7 >:0
- at Verse.AI.ThinkNode_Conditional.TryIssueJobPackage(Verse.Pawn pawn, Verse.AI.JobIssueParams jobParams) [0x00000] in < 38562b1a2ab64eacb931fb5df05ca994 >:0
- at Verse.AI.ThinkNode_Priority.TryIssueJobPackage(Verse.Pawn pawn, Verse.AI.JobIssueParams jobParams) [0x00022] in < 38562b1a2ab64eacb931fb5df05ca994 >:0
-UnityEngine.StackTraceUtility:ExtractStackTrace()
-Verse.Log:Error(string)
-Verse.AI.ThinkNode_Priority:TryIssueJobPackage(Verse.Pawn, Verse.AI.JobIssueParams)
-Verse.AI.ThinkNode_SubtreesByTag:TryIssueJobPackage(Verse.Pawn, Verse.AI.JobIssueParams)
-Verse.AI.ThinkNode_Priority:TryIssueJobPackage(Verse.Pawn, Verse.AI.JobIssueParams)
-Verse.AI.Pawn_JobTracker:DetermineNextJob(Verse.ThinkTreeDef &)
-Verse.AI.Pawn_JobTracker:TryFindAndStartJob()
-Verse.AI.Pawn_JobTracker:EndCurrentJob(Verse.AI.JobCondition, bool, bool)
-Verse.AI.Pawn_JobTracker:JobTrackerTick()
-Verse.Pawn:Tick()
-Verse.TickList:Tick()
-(wrapper dynamic - method) Verse.TickManager:Verse.TickManager.DoSingleTick_Patch2(Verse.TickManager)
-Verse.TickManager:TickManagerUpdate()
-Verse.Game:UpdatePlay()
-Verse.Root_Play:Update()
-*/
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs b/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs
deleted file mode 100644
index af362aa..0000000
--- a/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using Verse;
-using RimWorld;
-using rjw;
-
-namespace RJW_Genes
-{
- ///
- /// The CocoonWeaver Ability applies the RJW-Cocoon to a pawn.
- /// Friendly Pawns can always be cocooned, neutral and hostile pawns must be downed.
- ///
- public class CompAbilityEffect_CocoonWeaver : CompAbilityEffect
- {
- private new CompProperties_AbilityCocoonWeaver Props
- {
- get
- {
- return (CompProperties_AbilityCocoonWeaver)this.props;
- }
- }
-
-
- public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
- {
- base.Apply(target, dest);
-
- Pawn CocooningPawn = this.parent.pawn;
- Pawn PawnToCocoon = target.Pawn;
-
- // Error Case - Null Pawn
- if (PawnToCocoon == null)
- {
- return;
- }
-
- PawnToCocoon.health.AddHediff(HediffDef.Named("RJW_Cocoon"));
-
- }
-
- ///
- /// For validity, there are a few checks:
- /// 0. Target is not already cocooned
- /// 1. Target is either Colonist / Prisoner
- /// 2. If the Target is an enemy or neutral, it must be downed.
- ///
- public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
- {
- Pawn cocoonTarget = target.Pawn;
- if (cocoonTarget != null)
- {
- bool CocoonTargetIsColonistOrPrisoner = cocoonTarget.Faction == this.parent.pawn.Faction || cocoonTarget.IsPrisonerOfColony;
- bool CocoonTargetIsHostile = cocoonTarget.HostileTo(this.parent.pawn);
- bool CocoonTargetIsDowned = cocoonTarget.Downed;
-
- if (cocoonTarget.health.hediffSet.hediffs.Any(t => t.def.defName == "RJW_Cocoon"))
- {
- if (throwMessages)
- Messages.Message(cocoonTarget.Name + " is already cocooned.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
- return false;
- }
-
- if (!CocoonTargetIsColonistOrPrisoner && !(CocoonTargetIsHostile && CocoonTargetIsDowned))
- {
- if (throwMessages)
- {
- if(CocoonTargetIsHostile && !CocoonTargetIsDowned)
- {
- Messages.Message(cocoonTarget.Name + " is hostile, but not downed.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
- }
- else if (!CocoonTargetIsColonistOrPrisoner)
- {
- Messages.Message(cocoonTarget.Name + " is not a part of the colony or hostile.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
- }
- }
- return false;
- }
- }
- return base.Valid(target, throwMessages);
- }
-
- }
-}
diff --git a/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.cs b/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.cs
deleted file mode 100644
index e73d22d..0000000
--- a/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
-
-namespace RJW_Genes
-{
- public class CompProperties_AbilityCocoonWeaver : CompProperties_AbilityEffect
- {
- public CompProperties_AbilityCocoonWeaver()
- {
- this.compClass = typeof(CompAbilityEffect_CocoonWeaver);
- }
- }
-}
diff --git a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs
index 977c77b..dc0f0fa 100644
--- a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs
+++ b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs
@@ -51,9 +51,9 @@ namespace RJW_Genes
}
// Increase LifeForce for Biter
GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(CockBiter), gained_lifeforce);
+
// Handle Damage for Bitten
- CockBittenPawn.TakeDamage(new DamageInfo(DamageDefOf.Bite, 99999f, 999f, hitPart: Genital_Helper.get_genitalsBPR(CockBittenPawn)));
- //CockBittenPawn.health.RemoveHediff(part);
+ CockBittenPawn.health.RemoveHediff(part);
CockBittenPawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.rjw_genes_cock_eaten, CockBittenPawn, null);
//Only one penis at the time
diff --git a/Source/Genes/Life_Force/UI/Alert_LowFertilin.cs b/Source/Genes/Life_Force/UI/Alert_LowFertilin.cs
index 09601de..d76d4ce 100644
--- a/Source/Genes/Life_Force/UI/Alert_LowFertilin.cs
+++ b/Source/Genes/Life_Force/UI/Alert_LowFertilin.cs
@@ -42,7 +42,7 @@ namespace RJW_Genes
{
Pawn_GeneTracker genes = pawn.genes;
Gene_LifeForce gene_Lifeforce = (genes != null) ? genes.GetFirstGeneOfType() : null;
- if (gene_Lifeforce != null && gene_Lifeforce.Active && gene_Lifeforce.Value < gene_Lifeforce.MinLevelForAlert)
+ if (gene_Lifeforce != null && gene_Lifeforce.Value < gene_Lifeforce.MinLevelForAlert)
{
this.targets.Add(pawn);
this.targetLabels.Add(pawn.NameShortColored.Resolve());
diff --git a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
index 875d1dd..e3628dc 100644
--- a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
+++ b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
@@ -39,25 +39,9 @@ namespace RJW_Genes
{
foreach (Pawn pawn in map.mapPawns.AllPawns)
{
- // Return for trivial errors
- if (pawn == null || this.pawn == null || pawn == this.pawn)
- continue;
- // Check for position-existance
- if (pawn.Position == null || pos == null || pawn.Map == null)
- continue;
- // Do nothing if pawn is carried
- if (pawn.CarriedBy != null)
- continue;
- // Do nothing if Pawn is Baby or Child (#25)
- if (!pawn.ageTracker.Adult)
- continue;
- // Do nothing for pawns that also have pheromones
- if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
- continue;
-
- // Actual Logic:
- // Pawn qualifies in right distance and needs line of sight.
- if (pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map))
+ if (pawn != null && this.pawn != null && pawn != this.pawn
+ && pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map)
+ && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
{
yield return pawn;
}
diff --git a/Source/Genes/Special/Patch_AgeDrain.cs b/Source/Genes/Special/Patch_AgeDrain.cs
index 4138a78..2c7e55d 100644
--- a/Source/Genes/Special/Patch_AgeDrain.cs
+++ b/Source/Genes/Special/Patch_AgeDrain.cs
@@ -11,33 +11,28 @@ namespace RJW_Genes.Genes.Special
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
public static class Patch_AgeDrain
{
- /**
- * Update Issue #26:
- * There are options that a 16 yo pawn and a 16 yo pawn have sex,
- * or there are races that have a different age-limits.
- * I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
- */
const long AGE_TRANSFERED = 120000; // 120k == 2 days
- // 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
- const long MINIMUM_AGE = 18 * 60 * 60000 + 1;
+ // 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
+ const long MINIMUM_AGE = 20 * 60 * 60000 + 1;
+ // Comment Below in for debugging, changes years
+ // const long AGE_TRANSFERED = 12000000;
public static void Postfix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() )
{
return;
}
- if (GeneUtility.IsAgeDrainer(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks > MINIMUM_AGE)
+ if (GeneUtility.IsAgeDrainer(props.pawn))
{
var pawnAge = props.pawn.ageTracker.AgeBiologicalTicks;
//ModLog.Error($"Firing Age Drain \nMinimum Age is \t{MINIMUM_AGE} \nPawn Age is \t{pawnAge} \nTransferred \t{AGE_TRANSFERED}\nResulting in \t{pawnAge - AGE_TRANSFERED}");
// Make Partner older
props.partner.ageTracker.AgeBiologicalTicks += AGE_TRANSFERED;
- // Make Pawn younger if he is older than minimum age
- if (pawnAge - AGE_TRANSFERED > MINIMUM_AGE)
- props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED));
+ // Make Pawn younger
+ props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED));
}
}
diff --git a/Source/Genes/Special/Patch_Youth_Fountain.cs b/Source/Genes/Special/Patch_Youth_Fountain.cs
index bc07f1b..a1a1840 100644
--- a/Source/Genes/Special/Patch_Youth_Fountain.cs
+++ b/Source/Genes/Special/Patch_Youth_Fountain.cs
@@ -11,33 +11,34 @@ namespace RJW_Genes.Genes.Special
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
public static class Patch_Youth_Fountain
{
- /**
- * Update Issue #26:
- * There are options that a 16 yo pawn and a 16 yo pawn have sex,
- * or there are races that have a different age-limits.
- * I am not sure how I feel about this, but as some people that I consider "normal" asked me about this I changed it as requested in #26 and #28
- */
const long AGE_REDUCTION = 60000; // 60k == 1 day
- // 18 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
- const long MINIMUM_AGE = 18 * 60 * 60000 + 1;
+ // 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
+ const long MINIMUM_AGE = 20 * 60 * 60000 + 1;
+ // Comment Below in for debugging
+ // const long AGE_REDUCTION = 6000000; // 6000k == 100 days
public static void Postfix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
{
return;
}
- if (GeneUtility.IsYouthFountain(props.pawn) && props.pawn.ageTracker.AgeBiologicalTicks >= MINIMUM_AGE)
+ if (GeneUtility.IsYouthFountain(props.pawn))
{
var partnerAge = props.partner.ageTracker.AgeBiologicalTicks;
- if(partnerAge - AGE_REDUCTION > MINIMUM_AGE)
- props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION);
+ //ModLog.Error($"Firing Youth Fountain \nMinimum Age is \t{MINIMUM_AGE}\t{ticksToYears(MINIMUM_AGE)}y\nPawn Age is \t{partnerAge}\t{ticksToYears(partnerAge)}y \nTransferred \t {AGE_REDUCTION}\t{ticksToYears(AGE_REDUCTION)}y\nResulting in \t{partnerAge - AGE_REDUCTION}\t{ticksToYears(partnerAge - AGE_REDUCTION)}y");
+
+ props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION);
}
}
+ private static float ticksToYears(long ticks)
+ {
+ return (ticks / 60000f) / 60f;
+ }
}
}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index dbb4495..96bc6f5 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -44,6 +44,7 @@
+
@@ -58,7 +59,6 @@
-
@@ -87,8 +87,6 @@
-
-
diff --git a/TODOS.md b/TODOS.md
index 7e223a1..66083a5 100644
--- a/TODOS.md
+++ b/TODOS.md
@@ -1,6 +1,7 @@
# ToDos and Planned Genes
-Any help is very appreciated, even if it is just pointing me to existing similar projects.
+I have many ideas but not too much time / knowledge of Rimworld or Modding.
+So any help is very appreciated, even if it is just pointing me to existing similar projects.
## Additions to existing things
@@ -20,34 +21,6 @@ Any help is very appreciated, even if it is just pointing me to existing similar
**Self-Fertilizing Eggs** Pawns fertilize eggs that are put inside them (with themselves as a parent)
-**Death-Rest** until the pawn is cumflated.
-
-**Alpha / Beta Genes** that you can only have one alpha, and the alpha makes mostly beta children (1:10). This might fit with the xenotypes below. As this is an RJW mod, this should also somewhat affect sex (e.g. betas cannot impregnate betas).
-
-## Planned Xenotypes
-
-**Beastmaster:**
-
-- [] Animal Mating Call (Get fucked by everything nearby, potentially ending animal rage)
-- [] Pheromone Spit that marks a target for being raped by animals
-- [] Power-Boost & Bonding to animals through zoophilia
-- [] Maybe: Boost pregnancy times of Animals
-- [] Maybe: Make it Animal-Fertilin-Dependend
-- [] Either: Can only eat meat or cannot eat meat
-
-Can't help but think about Rexxar Porn now I am a bad person.
-
-**Hive Mother:**
-
-- [] Spawn the small scarabs
-- [] Fertilise Eggs inside her
-- [] Produce cocoons
-- [] Maybe: Insert "dropped" Insect eggs
-- [] Very fragile, no use except breeding
-- [] Maybe: can only eat insect jelly
-- [] Should look like a nice green-yellow alien as we all know fuckable insects would look like.
-- [] There can only be one Hive Mother, some penalties if there are others. This could be implement with an "Alpha Gene" that gives heavy penalties when other Alpha exists.
-
## Genes with Abilities and more Effects
There were some suggestions on the Discord I saved them somewhere else. I am far away from making that work, but to have them here:
@@ -55,9 +28,4 @@ There were some suggestions on the Discord I saved them somewhere else. I am far
- Genitalia deal damage as per size (on normal sex-use)
- Genitalia can cause Terror (as ability)
- Cumshot Sniper Abilities
-
-## Cleanups:
-
-- Streamline Filenames / Names to either be LifeForce or Fertilin (e.g. `Hediffs_Fertilin.xml` but `Pawnkind_LifeForce.xml`). I think most things are called LifeForce.
-- Similar cleanup for the patches, and make a note what to find where in the patches
-- Change Project structure to the 1.3, 1.4 Structure of other mods
\ No newline at end of file
+- Healing Pussy
\ No newline at end of file