From 0a59c07ae20cf8d545c4d98007553c2f8c7934e8 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 17 Dec 2017 16:00:36 +0000 Subject: [PATCH 01/18] Cleanup and fix dependency location. --- Assemblies/Vampire.dll | Bin 243712 -> 243712 bytes Source/Dependencies/0Harmony.dll | Bin 0 -> 65536 bytes Source/Dependencies/0JecsTools.dll | Bin 0 -> 78336 bytes Source/Dependencies/AbilityUser.dll | Bin 0 -> 70144 bytes Source/Dependencies/BadHygiene.dll | Bin 0 -> 127488 bytes Source/Dependencies/CompAnimated.dll | Bin 0 -> 8192 bytes .../Vampires/AI_Jobs/JobDriver_BloodVomit.cs | 4 +--- .../Vampires/AI_Jobs/JobDriver_Diablerie.cs | 2 -- .../Vampires/AI_Jobs/JobDriver_DigAndHide.cs | 3 +-- Source/Vampires/AI_Jobs/JobDriver_Embrace.cs | 2 -- .../Vampires/AI_Jobs/JobDriver_EnterTorpor.cs | 1 - Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 6 +----- .../AI_Jobs/JobDriver_FeedAndDestroy.cs | 2 -- .../AI_Jobs/JobDriver_FeedAndReturn.cs | 2 -- Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs | 5 +---- .../AI_Jobs/JobDriver_MakeBloodBond.cs | 5 +---- Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs | 2 -- .../JobGiver_SeekShelterFromSunlight.cs | 2 -- .../Vampires/AI_Jobs/JobGiver_VampireBeast.cs | 4 ---- .../AI_Jobs/MentalState_Rotschreck.cs | 4 ---- .../AI_Jobs/MentalState_VampireBeast.cs | 4 ---- Source/Vampires/Buildings/Building_Coffin.cs | 6 +----- .../Vampires/Buildings/Building_HideyHole.cs | 6 +----- Source/Vampires/Buttons.cs | 3 +-- Source/Vampires/Components/CompBloodItem.cs | 6 +----- .../Components/CompProperties_BloodItem.cs | 6 +----- .../Components/CompProperties_VampBed.cs | 6 +----- Source/Vampires/Components/CompVampBed.cs | 4 +--- Source/Vampires/Components/CompVampire.cs | 1 - Source/Vampires/Defs/BloodType.cs | 7 +------ Source/Vampires/Defs/BloodlineDef.cs | 3 --- Source/Vampires/Defs/DisciplineDef.cs | 7 +------ .../Vampires/Defs/ScenPart_GameStartNight.cs | 3 +-- Source/Vampires/Defs/VampDefOf.cs | 6 +----- Source/Vampires/Defs/VitaeAbilityDef.cs | 7 +------ Source/Vampires/Discipline.cs | 7 +------ .../Animalism/DisciplineEffect_Beckoning.cs | 6 +----- .../Animalism/DisciplineEffect_Communion.cs | 6 +----- .../DisciplineEffect_NightwispRavens.cs | 7 +------ .../DisciplineEffect_SpectralWolf.cs | 6 +----- .../HediffCompProperties_TickGraphic.cs | 3 +-- .../Animalism/HediffComp_TickGraphic.cs | 5 +---- .../Disciplines/Animalism/PawnTemporary.cs | 6 +----- .../DisciplineEffect_CrocodileTongue.cs | 7 +------ .../DisciplineEffect_HeightenedSenses.cs | 7 +------ .../Auspex/DisciplineEffect_ReadMind.cs | 6 +----- .../DisciplineEffect_RevealIllusions.cs | 5 +---- .../Blood/DisciplineEffect_Hunger.cs | 5 +---- .../Blood/DisciplineEffect_Purge.cs | 6 +----- .../Blood/DisciplineEffect_StemTheTide.cs | 6 +----- .../Blood/DisciplineEffect_UnstoppableTide.cs | 6 +----- .../Dominate/DisciplineEffect_Mesmerise.cs | 7 +------ .../Dominate/DisciplineEffect_Possession.cs | 8 +------- .../Dominate/DisciplineEffect_Sleep.cs | 7 +------ .../Dominate/DisciplineEffect_Suicide.cs | 7 +------ .../Flight/DisciplineEffect_LongFlight.cs | 6 +----- .../Flight/DisciplineEffect_ShortFlight.cs | 7 +------ .../Flight/DisciplineEffect_SkyFall.cs | 6 +----- .../Flight/DisciplineEffect_WingBuffet.cs | 6 +----- .../Fortitude/PassiveEffect_DamageSoak.cs | 9 +-------- .../DisciplineEffect_ArmOfTheAbyss.cs | 6 +----- .../DisciplineEffect_BlackMetamorphosis.cs | 7 +------ .../DisciplineEffect_EnterTheAbyss.cs | 5 +---- .../DisciplineEffect_TenebrousForm.cs | 7 +------ .../Protean/DisciplineEffect_BatForm.cs | 7 +------ .../Protean/DisciplineEffect_FeralClaws.cs | 4 +--- .../Protean/DisciplineEffect_MistForm.cs | 7 +------ .../Protean/DisciplineEffect_WarForm.cs | 7 +------ .../Thaumaturgy/DisciplineEffect_BloodBoil.cs | 7 +------ .../DisciplineEffect_BloodSalvo.cs | 7 +------ .../DisciplineEffect_BloodShield.cs | 7 +------ .../DisciplineEffect_BloodStrike.cs | 7 +------ .../Thaumaturgy/Projectile_BloodBoil.cs | 2 -- .../Thaumaturgy/Projectile_BloodReturner.cs | 4 ---- .../Thaumaturgy/Projectile_BloodStealer.cs | 4 ---- .../DisciplineEffect_RegenerateLimb.cs | 4 +--- .../DisciplineEffect_VampiricHealing.cs | 7 +------ .../Disciplines/Verb_UseAbilityPawnEffect.cs | 6 +----- .../DisciplineEffect_CorruptForm.cs | 5 +---- .../DisciplineEffect_PerfectForm.cs | 7 +------ .../DisciplineEffect_ShapeMonstrosity.cs | 7 +------ .../Vicissitude/DisciplineEffect_ZuloForm.cs | 7 +------ Source/Vampires/FlyingObject.cs | 3 --- .../Vampires/HarmonyPatches/HarmonyPatches.cs | 1 - .../HarmonyPatches/HarmonyPatches_Caravan.cs | 6 +----- .../HarmonyPatches_DebugTools.cs | 1 - .../HarmonyPatches_PathFixes.cs | 5 +---- .../HarmonyPatches/VampHumanlikeOrders.cs | 2 -- .../Hediffs/Gizmo_HediffShieldStatus.cs | 3 +-- .../HediffCompProperties_AnimalForm.cs | 3 +-- .../HediffCompProperties_Possession.cs | 3 +-- .../HediffCompProperties_SkillOffset.cs | 1 - .../Vampires/Hediffs/HediffComp_AnimalForm.cs | 4 +--- .../Vampires/Hediffs/HediffComp_Possession.cs | 4 +--- .../Vampires/Hediffs/HediffComp_ReadMind.cs | 4 +--- Source/Vampires/Hediffs/HediffComp_Shield.cs | 4 +--- .../Hediffs/HediffComp_SkillOffset.cs | 4 +--- Source/Vampires/Hediffs/HediffVampirism.cs | 4 +--- .../Hediffs/HediffVampirism_Gargoyle.cs | 7 +------ .../Hediffs/HediffVampirism_Lasombre.cs | 7 +------ .../Hediffs/HediffVampirism_Pijavica.cs | 7 +------ .../Hediffs/HediffVampirism_Tremere.cs | 7 +------ .../Hediffs/HediffVampirism_Tzimisce.cs | 7 +------ .../Hediffs/HediffVampirism_VampGiver.cs | 1 - .../Hediffs/HediffWithComps_BeastHunger.cs | 7 +------ .../HediffWithComps_SunlightExposure.cs | 6 +----- .../Hediffs/Hediff_AddedPart_Fangs.cs | 7 +------ Source/Vampires/ITab_Pawn_NeedsCorpse.cs | 1 - Source/Vampires/Need_Blood.cs | 2 -- Source/Vampires/Properties/AssemblyInfo.cs | 1 - Source/Vampires/ScenPart_LongerNights.cs | 7 +------ Source/Vampires/ScenPart_StartingVampires.cs | 4 +--- Source/Vampires/SkillSheet.cs | 6 +----- Source/Vampires/UI/Alert_VampireInSunlight.cs | 3 +-- Source/Vampires/UI/Alert_VampireStarving.cs | 3 +-- Source/Vampires/UI/VampireCardUtility.cs | 5 +---- .../Utilities/BloodFeedModeUtility.cs | 3 --- Source/Vampires/Utilities/BloodItemUtility.cs | 7 +------ .../Vampires/Utilities/BloodPreferabilty.cs | 7 +------ Source/Vampires/Utilities/BloodTypeUtility.cs | 6 +----- Source/Vampires/Utilities/BloodUtility.cs | 2 -- .../Utilities/ResurrectedPawnUtility.cs | 12 ++++-------- .../Utilities/VampSunlightPathUtility.cs | 5 ----- .../Vampires/Utilities/VampireBiteUtility.cs | 2 -- Source/Vampires/Utilities/VampireGen.cs | 2 -- .../Utilities/VampireGraphicUtility.cs | 3 --- .../Utilities/VampireRelationUtility.cs | 3 --- .../Vampires/Utilities/VampireSkinColors.cs | 6 +----- .../Utilities/VampireThoughtUtility.cs | 3 --- Source/Vampires/Utilities/VampireUtility.cs | 6 +----- .../Utilities/VampireWitnessUtility.cs | 2 -- Source/Vampires/VampAbility.cs | 6 +----- Source/Vampires/Vampire.csproj | 10 +++++----- Source/Vampires/VampireCorpse.cs | 3 +-- Source/Vampires/Workers/EmbraceWorker.cs | 4 +--- .../Workers/PawnRelationWorker_Childe.cs | 3 +-- .../Workers/PawnRelationWorker_Sire.cs | 3 +-- .../Workers/Recipe_ExtractBloodPack.cs | 3 +-- .../Workers/Recipe_ExtractBloodVial.cs | 3 +-- .../Vampires/WorldComponent_VampireTracker.cs | 5 +---- 140 files changed, 108 insertions(+), 548 deletions(-) create mode 100644 Source/Dependencies/0Harmony.dll create mode 100644 Source/Dependencies/0JecsTools.dll create mode 100644 Source/Dependencies/AbilityUser.dll create mode 100644 Source/Dependencies/BadHygiene.dll create mode 100644 Source/Dependencies/CompAnimated.dll diff --git a/Assemblies/Vampire.dll b/Assemblies/Vampire.dll index 615754054e0689d4803683f03b035da9671f8878..0ba61fba83e1c5d5e09535b7d3ace20075878a46 100644 GIT binary patch delta 24265 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 #{m2@Ill<|% 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 U0GYv2w*MD0*FXLHYe#|q3mf->X8-^I literal 0 HcmV?d00001 diff --git a/Source/Dependencies/0JecsTools.dll b/Source/Dependencies/0JecsTools.dll new file mode 100644 index 0000000000000000000000000000000000000000..2d1033cb0b599283cf09f7fd2001dbc4a91cdad5 GIT binary patch literal 78336 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

PdwP27&lh=*($m;(-`9i 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 literal 0 HcmV?d00001 diff --git a/Source/Dependencies/CompAnimated.dll b/Source/Dependencies/CompAnimated.dll new file mode 100644 index 0000000000000000000000000000000000000000..f18dd007ba01daab915c4db093ef52330174f699 GIT binary patch literal 8192 zcmeHMYiu0Xbv}1?W_G!Jn7e%F6)S7Kyb{SZNy&Qo5xylVqC{~i*-|1?!`&e{;O@+N zW+;-TDX)N7jf%u}jMj*ew1C>Cg^CmnAX|-%*lmQmh?@j<0|!Wd6iEXYLE03qi=su1 zLh5(!%yLOdDO?~wS|FF2GxwZ(&bjAx@14CGIr9QVh)BhA>lV>B@#fYe;r|TE7;gCF z>kafu&G+y7ra1cj`^IN1FI94#Y1b&Ga)xa?ernQ8xpQ{PvQq=cv#Fw!H#7D1@ok~% z(Lti4B0~Ltx93b{wx7_JRITVFS`UgIP#@ikcM4Ar9->CsR|314!1l{l1_Yg3gnFK3 zR{mFghbWWKe(@mDaqjdGy~2UGy`3YfyPfuN@Dx#O6<-Ya;Z=CXHy3>11FZlUlfH&_ z1CuR9bS~q1ZVs5Vtp^=;bR(Wstq0a;T(jVSQQCSAgRE;ao>i@fsBaZ2yD5$<8r!Cj zMxWSD^e*BhB=vs}hLkic)R&^LGz}$fyDAh!BcyaIOZO1P=MtD^7Z6Mr_Yr$#7g1AZ zjIx*(q6t!#pi6C!DN7ht+r+xK-rh}$k_M^=6DdzKi}Ezw1%wnJGp|ddaP(y!4As=O zQFIsdN9Y{bz@H#>G#*(3pSpz|y%}k}DQctbjV{JZsn3CwhKX@f+BdIa+nY!yL3Nq{ z8q^~lb+Dq*9WMQMvcT< z)0+U(p8y~wq8&*iD|(#TPE%w_rUOxEgVRmXM6`WJMfXag&W=}w8no6iy(!j~ZqS=* z5;g5LN*a86ysd7vW<((5qeN_1Q>Q}TLR65C1T`bnvM6}Yj_rzr;zR`09nEctrBAN( zwWSpIYvGTKYx`3ab?%c6$e1}CBShj}xWMXE2f2$oTLI!xeR&&mwhi9qo|;gl0DE>< zf#$ntgLh3@8znUOfpvk@p_tf@k6}9M;b(BXYC2X`+}Qz8uPoh<*ZSSHHA`u9nr{l! zbrV~-j%t>6GT&NfT0mybwd81YiG96*B@@5URsl{sddnREijx6cdH|qFOK9!;D3n<0 z1j+q6Dm>kV-i2;}K-bc4bklnnAY*OI*csxOdmmnv>T0HFKv10hATJ+a7Q`uvI7N3| zr;oofckFr-+y_}cSiJ6anAF~T`wvv%S=^Tmr+9ef|aV$EZ4Y_ zewbD9`c|liLyv|rUK$E2glL)9x#B&-W^>_$T`mbF{iw9#UFcQPpJI+4fL(prBYh&= z33*>V-<|2qJlMIf8zCX=l?A}hV}`94i2e=lr=fRi)^{y?+GCDVJ<Y@BnCe;04ULwXfhzGBX-b@z}k;S5pI{=p(V4Q0wrRkO+B3GnwtE#nXd_$1sIF z61Wc&Qrk4v@C8Z#lC~Qeeov0pNch+4Z$eL2VYsL<+#TiFH%e_| zQZ^^yJ_(Z&KBGLRB&k+A1o$n$ICVq6PWPzKt4Z2IOxY*(JK&7d1v&bJ@;vNp0pvJh z)uC~12z*>Dhz0S;3U&_IN#vmpQH?3*g-&Op49`c`3qc3Pd!WB07D2J}Wx!Fr40slB zG{ssk#ah)f&^8%jj>P;B`$O@0Xt@|-*Yqy}dm+T?#XFGu7m2-u9qUDmeRd0>y+l{( zYa&M5u(dGuWBOB3OGmdc_E$70Gw@W1Ex^7y`eTV*T7Lt%uA_I?VC?xd6qG{WMeRf= zgT6|msD2G)%hlvW8ylnaF0`-ZWFDr}&<#ysGiB`?0OPb1u#vhXJRo7Ogu@b^knpsG z24D+Wvj3!nZ_|CzjkHJ`alS9o5A+QEJ$+Rir=L?wJ4qkX0p$$+C;hhm1YM?1%_1TC zqBgv`p}Bzn7~y^_xXLSidPPZljfTZ{v^VKx zdLKD!rc3JE^lf^9-T~#S^d2}5X+NVA;vMk|^fzc9(iM7`{vB`z&=4=FAA$2#?G|06 zE2=79rhk=EZ|F%>L{?odE>gF;Nn8{^)i(=6JQV#1oc|HoCY}_(rR)?hi=XQcKuVyB zuFx^){5Ji*HVDd_(6dOKyDQ?DIwBU~9b3roY5>Lk%2{!hexy$ch3+L^WU!OG4cJ6K z0Ng|$0&YbHGuVOalnm{b@F5BNCH>Qs1U)M$pOG*}U7*a;XOwQ*Pk%%|LRIiyvr)Z{ zmnY#X;&t@Dr~f(N1L7|+yFk?__|x!2C<>@jjl^pyM>j|({+~ao6 zlu-$}O)9PQMvZy<(~v!CO_^EWm<||W<62^W!8F`{BR6AGHN#XIw{o-IxFaJ<{%T}w z&i1XMIlfpj4;yyAVA3JeXKcuIiXnw#B{du}iYA@3Eq`&)p0;e0MhwgLP1}IsEJG{N zaiOPLER#qRWoL}M>2e83RF;Hh3sO^qT$X~wN!?Ntb)llAcc1h_B-~JH9hAVoZ&l%2TU*LTBWsv zoPMhyCC1Exu^@Ziox&)Q{9MkzbD-ZTExOk9%w30yCBt5<%7kg-IWft}^Ut3cluK21bm9AzW*i!*;6#v%oP{>B^x2#CJ7eOlkw8Tj|KaW6`=ksGJ)X zsc0TWjEAtBI7|uGOc;eB$EC4g3zHPe@b*m8!NT$?9t~K=w2eL1%B_&X^2iKhbz(=# zn(lckXWlU!l&tBlj0ejO>Bj*8_Aw)8R(G`9HaIHELXm~z5vDH`Dt$BO*mcTqKQ%o-E=y zsYMkf+1nb8Cwmn|X-N!=05Da-2bE}u;VUS)2%YGNSe+($R6SX~2%5t4G+|nN_Qgmf z%FiatmupE$l)s36qWq;8R3uLWt%U(fOS1esu%I@oCwr44m@wI^r6^gx!uq}jdq(t@ z28f`A@)MFzHpsUaL<@2<=5_M6e^TU=C_y`ktx3&O$krpmL7u%rxm>}8k*0x4Kk=pQWVMtlXZ>B-o_aI6s3mPK#*ei zY0JGx8m^{U0-%mTZ%l;uy_@+*;keTJ7T&10g z;3APu;kV)h;2@2mH;n&jIR<z$AC~FEjf;?x;zQMi-3DS)weFYA zm%*`Ez#q3$xUUg(6!Ozjnq^8j;Mn?U9FY8fT6fY?xPwU15lFG0rqq^#51p`4UZ&zk zjbmEX8)PpJUj7JhbFfzS_DtL@4+o`OFY?8oCq-0M0TE0gwrjI^H(8$dSK3g}e5c&AX3zhX M&hTqx|A!;+-=*tvzyJUM literal 0 HcmV?d00001 diff --git a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs index 8692e80..066845a 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; -using Vampire; using Verse; using Verse.AI; using RimWorld; diff --git a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs index e3e1f8d..5a47bd3 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs index 10b0d70..7106b99 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs index 14a73ac..dfe4c1b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs index 1646f97..c3de600 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs @@ -1,5 +1,4 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; using Verse; diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index c029223..d8a6bd4 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -1,13 +1,9 @@ -using AbilityUser; -using RimWorld; +using RimWorld; using System; using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using UnityEngine; using Verse; using Verse.AI; -using Verse.Sound; namespace Vampire { diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index 96210bd..385f2a2 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -1,9 +1,7 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs index c128411..3891979 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs index 0ed0f6c..22b4faf 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs @@ -1,12 +1,9 @@ -using AbilityUser; -using RimWorld; +using RimWorld; using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; -using Verse.Sound; namespace Vampire { diff --git a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs index e431a5b..2b89f06 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs @@ -1,8 +1,5 @@ -using RimWorld; -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs index 03ab9f2..a161283 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs @@ -1,6 +1,4 @@ using RimWorld; -using System; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs index 17b408f..5047b64 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs @@ -2,8 +2,6 @@ using Verse; using Verse.AI; using RimWorld; -using System.Collections.Generic; -using System.Linq; namespace Vampire { diff --git a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs index 6c7909c..cd107ad 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs @@ -1,8 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs index 0cf4fd7..8ccc2f0 100644 --- a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs +++ b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs @@ -1,8 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs index 3d4f0f6..c9c02db 100644 --- a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs @@ -1,8 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; using Verse.AI; diff --git a/Source/Vampires/Buildings/Building_Coffin.cs b/Source/Vampires/Buildings/Building_Coffin.cs index a68362a..ea46fbf 100644 --- a/Source/Vampires/Buildings/Building_Coffin.cs +++ b/Source/Vampires/Buildings/Building_Coffin.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using RimWorld; using Verse; -using Verse.AI; namespace Vampire { diff --git a/Source/Vampires/Buildings/Building_HideyHole.cs b/Source/Vampires/Buildings/Building_HideyHole.cs index 527bcea..9b0cc0c 100644 --- a/Source/Vampires/Buildings/Building_HideyHole.cs +++ b/Source/Vampires/Buildings/Building_HideyHole.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Buttons.cs b/Source/Vampires/Buttons.cs index 1a33527..47677ea 100644 --- a/Source/Vampires/Buttons.cs +++ b/Source/Vampires/Buttons.cs @@ -1,5 +1,4 @@ -using System; -using UnityEngine; +using UnityEngine; using Verse; namespace Vampire diff --git a/Source/Vampires/Components/CompBloodItem.cs b/Source/Vampires/Components/CompBloodItem.cs index a91216d..52da951 100644 --- a/Source/Vampires/Components/CompBloodItem.cs +++ b/Source/Vampires/Components/CompBloodItem.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Components/CompProperties_BloodItem.cs b/Source/Vampires/Components/CompProperties_BloodItem.cs index 1b7f819..48ee56b 100644 --- a/Source/Vampires/Components/CompProperties_BloodItem.cs +++ b/Source/Vampires/Components/CompProperties_BloodItem.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Components/CompProperties_VampBed.cs b/Source/Vampires/Components/CompProperties_VampBed.cs index c68c109..4a0f72e 100644 --- a/Source/Vampires/Components/CompProperties_VampBed.cs +++ b/Source/Vampires/Components/CompProperties_VampBed.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Components/CompVampBed.cs b/Source/Vampires/Components/CompVampBed.cs index b21b15d..eb355d4 100644 --- a/Source/Vampires/Components/CompVampBed.cs +++ b/Source/Vampires/Components/CompVampBed.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; using RimWorld; using Verse.AI; diff --git a/Source/Vampires/Components/CompVampire.cs b/Source/Vampires/Components/CompVampire.cs index cf1bdb1..95b4268 100644 --- a/Source/Vampires/Components/CompVampire.cs +++ b/Source/Vampires/Components/CompVampire.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; using AbilityUser; diff --git a/Source/Vampires/Defs/BloodType.cs b/Source/Vampires/Defs/BloodType.cs index d03ef2b..0104bd6 100644 --- a/Source/Vampires/Defs/BloodType.cs +++ b/Source/Vampires/Defs/BloodType.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public enum BloodType : int { diff --git a/Source/Vampires/Defs/BloodlineDef.cs b/Source/Vampires/Defs/BloodlineDef.cs index 75cef41..0572f54 100644 --- a/Source/Vampires/Defs/BloodlineDef.cs +++ b/Source/Vampires/Defs/BloodlineDef.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; using Verse; using UnityEngine; diff --git a/Source/Vampires/Defs/DisciplineDef.cs b/Source/Vampires/Defs/DisciplineDef.cs index 73396ee..18abe6f 100644 --- a/Source/Vampires/Defs/DisciplineDef.cs +++ b/Source/Vampires/Defs/DisciplineDef.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Collections.Generic; using Verse; -using AbilityUser; namespace Vampire { diff --git a/Source/Vampires/Defs/ScenPart_GameStartNight.cs b/Source/Vampires/Defs/ScenPart_GameStartNight.cs index a9ebfdb..a0863e9 100644 --- a/Source/Vampires/Defs/ScenPart_GameStartNight.cs +++ b/Source/Vampires/Defs/ScenPart_GameStartNight.cs @@ -1,5 +1,4 @@ -using System; -using UnityEngine; +using UnityEngine; using Verse; using RimWorld; diff --git a/Source/Vampires/Defs/VampDefOf.cs b/Source/Vampires/Defs/VampDefOf.cs index 9e78d83..aab4c6e 100644 --- a/Source/Vampires/Defs/VampDefOf.cs +++ b/Source/Vampires/Defs/VampDefOf.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Defs/VitaeAbilityDef.cs b/Source/Vampires/Defs/VitaeAbilityDef.cs index f517ca2..1504c24 100644 --- a/Source/Vampires/Defs/VitaeAbilityDef.cs +++ b/Source/Vampires/Defs/VitaeAbilityDef.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class VitaeAbilityDef : AbilityUser.AbilityDef { diff --git a/Source/Vampires/Discipline.cs b/Source/Vampires/Discipline.cs index 1c1fd3c..2efb326 100644 --- a/Source/Vampires/Discipline.cs +++ b/Source/Vampires/Discipline.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Collections.Generic; using Verse; -using AbilityUser; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs index 3be73bc..696072c 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs index b5af0ad..abde72c 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs index ee1e47f..0b805d7 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs index 6983686..0ddefb5 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs index e1cbbea..b907d7b 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs index 2d9040e..bd7d27f 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs @@ -1,7 +1,4 @@ -using System; -using RimWorld; -using Verse; -using System.Linq; +using Verse; using UnityEngine; namespace Vampire diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index 8f7e2a3..fdc99e9 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -1,9 +1,5 @@ -using Harmony; -using RimWorld; -using System; -using System.Collections.Generic; +using RimWorld; using System.Linq; -using System.Text; using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs index 212ebe2..45859c0 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs index 527d392..2ddd416 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs index 7caaa80..fa77c6e 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs index 981dd7a..e01c2b8 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using RimWorld; using Verse; diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs index 492a29a..b52781c 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using RimWorld; using Verse; diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs index 3477020..fe3aeaf 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs index bedc31d..6408de7 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Collections.Generic; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs index 8eaa3b3..b735897 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs index 926a5e1..7691d91 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs index e665777..087d732 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; -using Verse.AI; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs index 1e3061b..54082d4 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; -using Verse.AI; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs index 54299e7..540bb66 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs index 1dfd403..15612ca 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs index 9140eac..54150e1 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs index a10702e..d04499d 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs index 3c6d245..b21e735 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs index 766503d..00ffd49 100644 --- a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs +++ b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs @@ -1,11 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; - -namespace Vampire +namespace Vampire { public class PassiveEffect_DamageSoak : AbilityUser.PassiveEffectWorker { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs index 93d4485..8a88a03 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs index eb52b5b..5c1b54e 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs index 77ee47b..3ad8b19 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Linq; using RimWorld; using Verse; diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs index 2dcbf8b..086e772 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs index c855290..67de022 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs index aad70aa..20f8698 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs index 9657b6f..890ea69 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs index b94c63d..7654191 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs index 1075541..4f33ce6 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs index f226bed..ac94c8a 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs index 90a5494..09e3e18 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs index 1114b4d..1583979 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs index 5b0faa8..ffc0a46 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs @@ -1,9 +1,7 @@ using AbilityUser; using RimWorld; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs index 04a2a04..7f0a220 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs @@ -1,9 +1,5 @@ using AbilityUser; using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs index 402e49c..887cbe5 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs @@ -1,9 +1,5 @@ using AbilityUser; using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs index aa44354..031bf27 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs index 875b8a6..734fe44 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs index 3b35f65..98ff56b 100644 --- a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs +++ b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs index 80868b1..185e010 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs index be15bdc..6f22ebf 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs index 196057c..f3ca0b2 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs index bdb8baf..67958db 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/FlyingObject.cs b/Source/Vampires/FlyingObject.cs index a50f830..42f5124 100644 --- a/Source/Vampires/FlyingObject.cs +++ b/Source/Vampires/FlyingObject.cs @@ -1,8 +1,5 @@ using RimWorld; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index 39acb96..1238692 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -6,7 +6,6 @@ using System.Text; using Verse; using Verse.AI; -using System.Reflection; using UnityEngine; using RimWorld.Planet; using Verse.AI.Group; diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs index 7e2c646..84906e6 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs @@ -1,10 +1,6 @@ -using Harmony; -using RimWorld; +using RimWorld; using RimWorld.Planet; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs index d024490..2b33f9a 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs index 42455dd..2695744 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Text; using RimWorld; using Verse; using Verse.AI; diff --git a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs index c89bc82..4c30d8b 100644 --- a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs +++ b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using JecsTools; using UnityEngine; using Verse; diff --git a/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs b/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs index 713de4f..5889068 100644 --- a/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs +++ b/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs @@ -1,5 +1,4 @@ -using System; -using UnityEngine; +using UnityEngine; using Verse; namespace Vampire diff --git a/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs b/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs index c4b51d7..b2de81b 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs b/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs index d35d849..8a3274e 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs b/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs index 05a3e2d..3d6d041 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs @@ -1,5 +1,4 @@ using RimWorld; -using System; using Verse; namespace Vampire diff --git a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs index b1ae4d0..8e4503f 100644 --- a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs +++ b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs @@ -1,6 +1,4 @@ -using System; -using RimWorld; -using Verse; +using Verse; using System.Linq; using System.Text; diff --git a/Source/Vampires/Hediffs/HediffComp_Possession.cs b/Source/Vampires/Hediffs/HediffComp_Possession.cs index 547b7e0..ffceb12 100644 --- a/Source/Vampires/Hediffs/HediffComp_Possession.cs +++ b/Source/Vampires/Hediffs/HediffComp_Possession.cs @@ -1,6 +1,4 @@ -using System; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs index e0801fc..3b4c49a 100644 --- a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs +++ b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs @@ -1,6 +1,4 @@ -using System; -using RimWorld; -using Verse; +using Verse; using System.Text; namespace Vampire diff --git a/Source/Vampires/Hediffs/HediffComp_Shield.cs b/Source/Vampires/Hediffs/HediffComp_Shield.cs index 52aed18..5b43966 100644 --- a/Source/Vampires/Hediffs/HediffComp_Shield.cs +++ b/Source/Vampires/Hediffs/HediffComp_Shield.cs @@ -1,6 +1,4 @@ -using Harmony; -using RimWorld; -using System; +using RimWorld; using System.Collections.Generic; using System.Diagnostics; using UnityEngine; diff --git a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs index fda70b0..2eaf436 100644 --- a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs @@ -1,6 +1,4 @@ -using System; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Hediffs/HediffVampirism.cs b/Source/Vampires/Hediffs/HediffVampirism.cs index 67a9a1a..7b7dccd 100644 --- a/Source/Vampires/Hediffs/HediffVampirism.cs +++ b/Source/Vampires/Hediffs/HediffVampirism.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using System.Text; using RimWorld; using Verse; diff --git a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs index 84d6d47..26418f1 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Gargoyle : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs index d58f1c2..9d223f1 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Lasombra : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs index d3ba5f8..d467a56 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Pijavica : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs index cc3985d..c8e4bff 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Tremere : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs index dc12603..40ae933 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Tzimisce : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs index cc1ea45..d1dd15a 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Text; using Verse; diff --git a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs index dd601b6..568c4f5 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; -using Verse.Sound; namespace Vampire { diff --git a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs index 8e92712..6543fce 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; using Verse.Sound; using Verse.AI; diff --git a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs index 572a2c0..a03d929 100644 --- a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs +++ b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs index b92eeba..f052dd4 100644 --- a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs +++ b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs @@ -1,6 +1,5 @@ using RimWorld; using Verse; -using System; using UnityEngine; namespace Vampire diff --git a/Source/Vampires/Need_Blood.cs b/Source/Vampires/Need_Blood.cs index 30cbe4a..5e63188 100644 --- a/Source/Vampires/Need_Blood.cs +++ b/Source/Vampires/Need_Blood.cs @@ -3,8 +3,6 @@ using UnityEngine; using Verse; using RimWorld; -using Verse.Sound; -using Verse.AI; using System.Linq; namespace Vampire diff --git a/Source/Vampires/Properties/AssemblyInfo.cs b/Source/Vampires/Properties/AssemblyInfo.cs index 141014a..6e3d0b7 100644 --- a/Source/Vampires/Properties/AssemblyInfo.cs +++ b/Source/Vampires/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/Source/Vampires/ScenPart_LongerNights.cs b/Source/Vampires/ScenPart_LongerNights.cs index 6356696..5fa802c 100644 --- a/Source/Vampires/ScenPart_LongerNights.cs +++ b/Source/Vampires/ScenPart_LongerNights.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; +using UnityEngine; using Verse; using RimWorld; -using System.Collections; -using Harmony; namespace Vampire { diff --git a/Source/Vampires/ScenPart_StartingVampires.cs b/Source/Vampires/ScenPart_StartingVampires.cs index eb84003..d9bb334 100644 --- a/Source/Vampires/ScenPart_StartingVampires.cs +++ b/Source/Vampires/ScenPart_StartingVampires.cs @@ -1,10 +1,8 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using UnityEngine; using Verse; using RimWorld; -using System.Collections; using Harmony; namespace Vampire diff --git a/Source/Vampires/SkillSheet.cs b/Source/Vampires/SkillSheet.cs index 8cf903b..1818727 100644 --- a/Source/Vampires/SkillSheet.cs +++ b/Source/Vampires/SkillSheet.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Collections.Generic; using Verse; namespace Vampire diff --git a/Source/Vampires/UI/Alert_VampireInSunlight.cs b/Source/Vampires/UI/Alert_VampireInSunlight.cs index 6e63fd2..4445c3d 100644 --- a/Source/Vampires/UI/Alert_VampireInSunlight.cs +++ b/Source/Vampires/UI/Alert_VampireInSunlight.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; using Verse; diff --git a/Source/Vampires/UI/Alert_VampireStarving.cs b/Source/Vampires/UI/Alert_VampireStarving.cs index 228d6d3..5e47285 100644 --- a/Source/Vampires/UI/Alert_VampireStarving.cs +++ b/Source/Vampires/UI/Alert_VampireStarving.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; using Verse; diff --git a/Source/Vampires/UI/VampireCardUtility.cs b/Source/Vampires/UI/VampireCardUtility.cs index 30ed212..cfb06b8 100644 --- a/Source/Vampires/UI/VampireCardUtility.cs +++ b/Source/Vampires/UI/VampireCardUtility.cs @@ -1,9 +1,6 @@ -using Harmony; -using RimWorld; -using System; +using RimWorld; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; diff --git a/Source/Vampires/Utilities/BloodFeedModeUtility.cs b/Source/Vampires/Utilities/BloodFeedModeUtility.cs index 4d76281..f7322e5 100644 --- a/Source/Vampires/Utilities/BloodFeedModeUtility.cs +++ b/Source/Vampires/Utilities/BloodFeedModeUtility.cs @@ -1,8 +1,5 @@ using RimWorld; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using Verse; using Verse.Sound; diff --git a/Source/Vampires/Utilities/BloodItemUtility.cs b/Source/Vampires/Utilities/BloodItemUtility.cs index 30d7e5d..cb78f8a 100644 --- a/Source/Vampires/Utilities/BloodItemUtility.cs +++ b/Source/Vampires/Utilities/BloodItemUtility.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Utilities/BloodPreferabilty.cs b/Source/Vampires/Utilities/BloodPreferabilty.cs index 314a428..501e1b2 100644 --- a/Source/Vampires/Utilities/BloodPreferabilty.cs +++ b/Source/Vampires/Utilities/BloodPreferabilty.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public enum BloodPreferabilty : int { diff --git a/Source/Vampires/Utilities/BloodTypeUtility.cs b/Source/Vampires/Utilities/BloodTypeUtility.cs index 8926cbf..3306ec6 100644 --- a/Source/Vampires/Utilities/BloodTypeUtility.cs +++ b/Source/Vampires/Utilities/BloodTypeUtility.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; using RimWorld; namespace Vampire diff --git a/Source/Vampires/Utilities/BloodUtility.cs b/Source/Vampires/Utilities/BloodUtility.cs index 0d091a9..dab820b 100644 --- a/Source/Vampires/Utilities/BloodUtility.cs +++ b/Source/Vampires/Utilities/BloodUtility.cs @@ -1,8 +1,6 @@ using RimWorld; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs index 72da32f..2d383d6 100644 --- a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs +++ b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs @@ -2,11 +2,7 @@ // These are basic usings. Always let them be here. // ---------------------------------------------------------------------- using System; -using System.Collections.Generic; -using System.Diagnostics; using System.Reflection; -using System.Linq; -using System.Text; // ---------------------------------------------------------------------- // These are RimWorld-specific usings. Activate/Deactivate what you need: @@ -15,11 +11,11 @@ //using VerseBase; // Material/Graphics handling functions are found here using Verse; // RimWorld universal objects are here (like 'Building') using Verse.AI; // Needed when you do something with the AI -using Verse.AI.Group; -using Verse.Sound; // Needed when you do something with Sound -using Verse.Noise; // Needed when you do something with Noises +// Needed when you do something with Sound +// Needed when you do something with Noises using RimWorld; // RimWorld specific functions are found here (like 'Building_Battery') -using RimWorld.Planet; // RimWorld specific functions for world creation + +// RimWorld specific functions for world creation //using RimWorld.SquadAI; // RimWorld specific functions for squad brains namespace Vampire diff --git a/Source/Vampires/Utilities/VampSunlightPathUtility.cs b/Source/Vampires/Utilities/VampSunlightPathUtility.cs index cb99224..c4307da 100644 --- a/Source/Vampires/Utilities/VampSunlightPathUtility.cs +++ b/Source/Vampires/Utilities/VampSunlightPathUtility.cs @@ -1,9 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/Utilities/VampireBiteUtility.cs b/Source/Vampires/Utilities/VampireBiteUtility.cs index 3b03e91..93afe80 100644 --- a/Source/Vampires/Utilities/VampireBiteUtility.cs +++ b/Source/Vampires/Utilities/VampireBiteUtility.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/Utilities/VampireGen.cs b/Source/Vampires/Utilities/VampireGen.cs index 9f78e25..71780dd 100644 --- a/Source/Vampires/Utilities/VampireGen.cs +++ b/Source/Vampires/Utilities/VampireGen.cs @@ -1,8 +1,6 @@ using RimWorld; using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; diff --git a/Source/Vampires/Utilities/VampireGraphicUtility.cs b/Source/Vampires/Utilities/VampireGraphicUtility.cs index ac00326..30c19fe 100644 --- a/Source/Vampires/Utilities/VampireGraphicUtility.cs +++ b/Source/Vampires/Utilities/VampireGraphicUtility.cs @@ -1,9 +1,6 @@ using Harmony; using RimWorld; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using Verse; diff --git a/Source/Vampires/Utilities/VampireRelationUtility.cs b/Source/Vampires/Utilities/VampireRelationUtility.cs index cc2c887..58d5f00 100644 --- a/Source/Vampires/Utilities/VampireRelationUtility.cs +++ b/Source/Vampires/Utilities/VampireRelationUtility.cs @@ -1,8 +1,5 @@ using RimWorld; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/Utilities/VampireSkinColors.cs b/Source/Vampires/Utilities/VampireSkinColors.cs index 8045742..9232d84 100644 --- a/Source/Vampires/Utilities/VampireSkinColors.cs +++ b/Source/Vampires/Utilities/VampireSkinColors.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using Verse; -using RimWorld; using UnityEngine; namespace Vampire diff --git a/Source/Vampires/Utilities/VampireThoughtUtility.cs b/Source/Vampires/Utilities/VampireThoughtUtility.cs index 69f8224..58e8e1f 100644 --- a/Source/Vampires/Utilities/VampireThoughtUtility.cs +++ b/Source/Vampires/Utilities/VampireThoughtUtility.cs @@ -1,8 +1,5 @@ using RimWorld; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/Utilities/VampireUtility.cs b/Source/Vampires/Utilities/VampireUtility.cs index 35b47eb..5a0c170 100644 --- a/Source/Vampires/Utilities/VampireUtility.cs +++ b/Source/Vampires/Utilities/VampireUtility.cs @@ -1,12 +1,8 @@ -using AbilityUser; -using RimWorld; -using System; +using RimWorld; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; -using Verse.AI; namespace Vampire { diff --git a/Source/Vampires/Utilities/VampireWitnessUtility.cs b/Source/Vampires/Utilities/VampireWitnessUtility.cs index 055cc0e..6d0a447 100644 --- a/Source/Vampires/Utilities/VampireWitnessUtility.cs +++ b/Source/Vampires/Utilities/VampireWitnessUtility.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; using Verse.AI; diff --git a/Source/Vampires/VampAbility.cs b/Source/Vampires/VampAbility.cs index 9074ce5..11b7a03 100644 --- a/Source/Vampires/VampAbility.cs +++ b/Source/Vampires/VampAbility.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Text; using Verse; using AbilityUser; using UnityEngine; diff --git a/Source/Vampires/Vampire.csproj b/Source/Vampires/Vampire.csproj index f28035c..9ce6051 100644 --- a/Source/Vampires/Vampire.csproj +++ b/Source/Vampires/Vampire.csproj @@ -32,14 +32,14 @@ - ..\..\..\..\Harmony1091\0Harmony.dll + ..\Dependencies\0Harmony.dll - ..\..\..\JecsTools\Assemblies\0JecsTools.dll + ..\Dependencies\0JecsTools.dll False - ..\..\..\JecsTools\Assemblies\AbilityUser.dll + ..\Dependencies\AbilityUser.dll False @@ -47,11 +47,11 @@ False - C:\Users\mattw\Downloads\Dubs Bad Hygiene v1.2.2\Dubs Bad Hygiene\Assemblies\BadHygiene.dll + ..\Dependencies\BadHygiene.dll False - ..\..\..\JecsTools\Assemblies\CompAnimated.dll + ..\Dependencies\CompAnimated.dll False diff --git a/Source/Vampires/VampireCorpse.cs b/Source/Vampires/VampireCorpse.cs index dced462..a3edbf3 100644 --- a/Source/Vampires/VampireCorpse.cs +++ b/Source/Vampires/VampireCorpse.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; using RimWorld; diff --git a/Source/Vampires/Workers/EmbraceWorker.cs b/Source/Vampires/Workers/EmbraceWorker.cs index 85d805e..63b35de 100644 --- a/Source/Vampires/Workers/EmbraceWorker.cs +++ b/Source/Vampires/Workers/EmbraceWorker.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; diff --git a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs index 19106a3..b0cd7bf 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; using RimWorld; namespace Vampire diff --git a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs index 4ae20b7..6aaeecd 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; using RimWorld; namespace Vampire diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs index 34c6b37..07eff0f 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using Verse; using RimWorld; diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs index 68f2a40..c33acdf 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using Verse; using RimWorld; diff --git a/Source/Vampires/WorldComponent_VampireTracker.cs b/Source/Vampires/WorldComponent_VampireTracker.cs index 6962182..a9cf7fb 100644 --- a/Source/Vampires/WorldComponent_VampireTracker.cs +++ b/Source/Vampires/WorldComponent_VampireTracker.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using RimWorld; using Verse; using RimWorld.Planet; From 354a15baaf22e9f4fa61295f5c3657108d1ae373 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 17 Dec 2017 16:03:46 +0000 Subject: [PATCH 02/18] Moar Cleanup --- .../Vampires/AI_Jobs/JobDriver_BloodVomit.cs | 15 +- .../AI_Jobs/JobDriver_ConsumeBlood.cs | 118 +++++++------- .../Vampires/AI_Jobs/JobDriver_Diablerie.cs | 27 ++-- .../Vampires/AI_Jobs/JobDriver_DigAndHide.cs | 31 ++-- Source/Vampires/AI_Jobs/JobDriver_Embrace.cs | 26 +-- .../Vampires/AI_Jobs/JobDriver_EnterTorpor.cs | 14 +- Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 44 ++--- .../AI_Jobs/JobDriver_FeedAndDestroy.cs | 26 +-- .../AI_Jobs/JobDriver_FeedAndReturn.cs | 24 +-- Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs | 30 ++-- .../AI_Jobs/JobDriver_MakeBloodBond.cs | 15 +- Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs | 4 +- .../JobGiver_SeekShelterFromSunlight.cs | 10 +- .../Vampires/AI_Jobs/JobGiver_VampireBeast.cs | 34 ++-- .../AI_Jobs/MentalState_Rotschreck.cs | 9 +- .../AI_Jobs/MentalState_VampireBeast.cs | 11 +- Source/Vampires/Buildings/Building_Coffin.cs | 6 +- .../Vampires/Buildings/Building_HideyHole.cs | 5 +- Source/Vampires/Buttons.cs | 12 +- Source/Vampires/Components/CompBloodItem.cs | 4 +- .../Components/CompProperties_BloodItem.cs | 7 +- .../Components/CompProperties_VampBed.cs | 4 +- Source/Vampires/Components/CompVampBed.cs | 38 ++--- Source/Vampires/Components/CompVampire.cs | 152 +++++++++--------- Source/Vampires/Defs/BloodType.cs | 2 +- Source/Vampires/Defs/BloodlineDef.cs | 14 +- Source/Vampires/Defs/DisciplineDef.cs | 2 +- .../Vampires/Defs/ScenPart_GameStartNight.cs | 16 +- Source/Vampires/Defs/VampDefOf.cs | 2 +- Source/Vampires/Defs/VitaeAbilityDef.cs | 2 +- Source/Vampires/Discipline.cs | 16 +- .../Animalism/DisciplineEffect_Beckoning.cs | 9 +- .../Animalism/DisciplineEffect_Communion.cs | 12 +- .../DisciplineEffect_NightwispRavens.cs | 8 +- .../DisciplineEffect_SpectralWolf.cs | 10 +- .../HediffCompProperties_TickGraphic.cs | 4 +- .../Animalism/HediffComp_TickGraphic.cs | 18 +-- .../Disciplines/Animalism/PawnTemporary.cs | 52 +++--- .../DisciplineEffect_CrocodileTongue.cs | 5 +- .../DisciplineEffect_HeightenedSenses.cs | 5 +- .../Auspex/DisciplineEffect_ReadMind.cs | 10 +- .../DisciplineEffect_RevealIllusions.cs | 13 +- .../Blood/DisciplineEffect_Hunger.cs | 13 +- .../Blood/DisciplineEffect_Purge.cs | 3 +- .../Blood/DisciplineEffect_StemTheTide.cs | 2 +- .../Blood/DisciplineEffect_UnstoppableTide.cs | 8 +- .../Dominate/DisciplineEffect_Mesmerise.cs | 4 +- .../Dominate/DisciplineEffect_Possession.cs | 10 +- .../Dominate/DisciplineEffect_Sleep.cs | 3 +- .../Dominate/DisciplineEffect_Suicide.cs | 2 +- .../Flight/DisciplineEffect_LongFlight.cs | 8 +- .../Flight/DisciplineEffect_ShortFlight.cs | 6 +- .../Flight/DisciplineEffect_SkyFall.cs | 6 +- .../Flight/DisciplineEffect_WingBuffet.cs | 4 +- .../Fortitude/PassiveEffect_DamageSoak.cs | 2 +- .../DisciplineEffect_ArmOfTheAbyss.cs | 8 +- .../DisciplineEffect_BlackMetamorphosis.cs | 5 +- .../DisciplineEffect_EnterTheAbyss.cs | 16 +- .../DisciplineEffect_TenebrousForm.cs | 5 +- .../Protean/DisciplineEffect_BatForm.cs | 7 +- .../Protean/DisciplineEffect_FeralClaws.cs | 3 +- .../Protean/DisciplineEffect_MistForm.cs | 7 +- .../Protean/DisciplineEffect_WarForm.cs | 7 +- .../Thaumaturgy/DisciplineEffect_BloodBoil.cs | 2 +- .../DisciplineEffect_BloodSalvo.cs | 2 +- .../DisciplineEffect_BloodShield.cs | 6 +- .../DisciplineEffect_BloodStrike.cs | 2 +- .../Thaumaturgy/Projectile_BloodBoil.cs | 13 +- .../Thaumaturgy/Projectile_BloodReturner.cs | 5 +- .../Thaumaturgy/Projectile_BloodStealer.cs | 7 +- .../DisciplineEffect_RegenerateLimb.cs | 2 +- .../DisciplineEffect_VampiricHealing.cs | 5 +- .../Disciplines/Verb_UseAbilityPawnEffect.cs | 10 +- .../DisciplineEffect_CorruptForm.cs | 5 +- .../DisciplineEffect_PerfectForm.cs | 7 +- .../DisciplineEffect_ShapeMonstrosity.cs | 9 +- .../Vicissitude/DisciplineEffect_ZuloForm.cs | 7 +- Source/Vampires/FlyingObject.cs | 94 +++++------ .../Vampires/HarmonyPatches/HarmonyPatches.cs | 136 ++++++++-------- .../HarmonyPatches/HarmonyPatches_Caravan.cs | 7 +- .../HarmonyPatches_DebugTools.cs | 44 ++--- .../HarmonyPatches_PathFixes.cs | 4 +- .../HarmonyPatches/VampHumanlikeOrders.cs | 17 +- .../Hediffs/Gizmo_HediffShieldStatus.cs | 14 +- .../HediffCompProperties_AnimalForm.cs | 4 +- .../HediffCompProperties_Possession.cs | 4 +- .../HediffCompProperties_SkillOffset.cs | 4 +- .../Vampires/Hediffs/HediffComp_AnimalForm.cs | 21 +-- .../Vampires/Hediffs/HediffComp_Possession.cs | 18 +-- .../Vampires/Hediffs/HediffComp_ReadMind.cs | 6 +- Source/Vampires/Hediffs/HediffComp_Shield.cs | 96 +++++------ .../Hediffs/HediffComp_SkillOffset.cs | 6 +- Source/Vampires/Hediffs/HediffVampirism.cs | 37 +++-- .../Hediffs/HediffVampirism_Gargoyle.cs | 4 +- .../Hediffs/HediffVampirism_Lasombre.cs | 4 +- .../Hediffs/HediffVampirism_Pijavica.cs | 4 +- .../Hediffs/HediffVampirism_Tremere.cs | 4 +- .../Hediffs/HediffVampirism_Tzimisce.cs | 4 +- .../Hediffs/HediffVampirism_VampGiver.cs | 19 ++- .../Hediffs/HediffWithComps_BeastHunger.cs | 13 +- .../HediffWithComps_SunlightExposure.cs | 38 ++--- .../Hediffs/Hediff_AddedPart_Fangs.cs | 11 +- Source/Vampires/ITab_Pawn_NeedsCorpse.cs | 16 +- Source/Vampires/Need_Blood.cs | 136 ++++++++-------- Source/Vampires/ScenPart_LongerNights.cs | 8 +- Source/Vampires/ScenPart_StartingVampires.cs | 44 ++--- Source/Vampires/SkillSheet.cs | 6 +- Source/Vampires/UI/Alert_VampireInSunlight.cs | 14 +- Source/Vampires/UI/Alert_VampireStarving.cs | 14 +- Source/Vampires/UI/VampireCardUtility.cs | 15 +- .../Utilities/BloodFeedModeUtility.cs | 22 +-- Source/Vampires/Utilities/BloodItemUtility.cs | 5 +- .../Vampires/Utilities/BloodPreferabilty.cs | 2 +- Source/Vampires/Utilities/BloodTypeUtility.cs | 33 ++-- Source/Vampires/Utilities/BloodUtility.cs | 29 ++-- .../Utilities/ResurrectedPawnUtility.cs | 25 +-- .../Utilities/VampSunlightPathUtility.cs | 19 ++- .../Vampires/Utilities/VampireBiteUtility.cs | 8 +- Source/Vampires/Utilities/VampireGen.cs | 16 +- .../Utilities/VampireGraphicUtility.cs | 7 +- .../Utilities/VampireRelationUtility.cs | 8 +- .../Vampires/Utilities/VampireSkinColors.cs | 18 +-- .../Utilities/VampireThoughtUtility.cs | 17 +- Source/Vampires/Utilities/VampireUtility.cs | 11 +- .../Utilities/VampireWitnessUtility.cs | 23 +-- Source/Vampires/VampAbility.cs | 7 +- Source/Vampires/VampireCorpse.cs | 54 ++++--- Source/Vampires/Workers/EmbraceWorker.cs | 5 +- .../Workers/PawnRelationWorker_Childe.cs | 8 +- .../Workers/PawnRelationWorker_Sire.cs | 8 +- .../Workers/Recipe_ExtractBloodPack.cs | 13 +- .../Workers/Recipe_ExtractBloodVial.cs | 17 +- .../Vampires/WorldComponent_VampireTracker.cs | 15 +- 133 files changed, 1240 insertions(+), 1073 deletions(-) diff --git a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs index 066845a..9ffb4bf 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using System.Diagnostics; +using RimWorld; +using Vampire.Utilities; using Verse; using Verse.AI; -using RimWorld; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_BloodVomit : JobDriver { @@ -16,21 +17,21 @@ public override PawnPosture Posture { get { - return this.lastPosture; + return lastPosture; } } public override void Notify_LastPosture(PawnPosture posture, LayingDownState layingDown) { - this.lastPosture = posture; + lastPosture = posture; this.layingDown = layingDown; } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0, false); - Scribe_Values.Look(ref this.lastPosture, "lastPosture", PawnPosture.Standing, false); + Scribe_Values.Look(ref ticksLeft, "ticksLeft"); + Scribe_Values.Look(ref lastPosture, "lastPosture"); } [DebuggerHidden] @@ -67,7 +68,7 @@ protected override IEnumerable MakeNewToils() int curTicks = ticksLeft; if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite(), 1); + FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite()); if (pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); diff --git a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs index 1c65c12..355b841 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using RimWorld; using UnityEngine; +using Vampire.Components; +using Vampire.Utilities; using Verse; using Verse.AI; -using RimWorld; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_ConsumeBlood : JobDriver { @@ -26,7 +28,7 @@ private Thing IngestibleSource { get { - return base.job.GetTarget(TargetIndex.A).Thing; + return job.GetTarget(TargetIndex.A).Thing; } } @@ -34,32 +36,32 @@ private float ChewDurationMultiplier { get { - Thing ingestibleSource = this.IngestibleSource; + Thing ingestibleSource = IngestibleSource; if (ingestibleSource.def.ingestible != null && !ingestibleSource.def.ingestible.useEatingSpeedStat) { return 1f; } - return 1f / this.pawn.GetStatValue(StatDefOf.EatingSpeed, true); + return 1f / pawn.GetStatValue(StatDefOf.EatingSpeed); } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.usingNutrientPasteDispenser, "usingNutrientPasteDispenser", false, false); - Scribe_Values.Look(ref this.eatingFromInventory, "eatingFromInventory", false, false); + Scribe_Values.Look(ref usingNutrientPasteDispenser, "usingNutrientPasteDispenser"); + Scribe_Values.Look(ref eatingFromInventory, "eatingFromInventory"); } public override string GetReport() { - if (this.usingNutrientPasteDispenser) + if (usingNutrientPasteDispenser) { - return base.job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); + return job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); } - Thing thing = this.pawn.CurJob.targetA.Thing; + Thing thing = pawn.CurJob.targetA.Thing; if (thing != null && thing.def.ingestible != null && !thing.def.ingestible.ingestReportString.NullOrEmpty()) { - return string.Format(thing.def.ingestible.ingestReportString, this.pawn.CurJob.targetA.Thing.LabelShort); + return string.Format(thing.def.ingestible.ingestReportString, pawn.CurJob.targetA.Thing.LabelShort); } return base.GetReport(); } @@ -67,84 +69,84 @@ public override string GetReport() public override void Notify_Starting() { base.Notify_Starting(); - this.usingNutrientPasteDispenser = (this.IngestibleSource is Building_NutrientPasteDispenser); - this.eatingFromInventory = (this.pawn.inventory != null && this.pawn.inventory.Contains(this.IngestibleSource)); + usingNutrientPasteDispenser = (IngestibleSource is Building_NutrientPasteDispenser); + eatingFromInventory = (pawn.inventory != null && pawn.inventory.Contains(IngestibleSource)); } [DebuggerHidden] protected override IEnumerable MakeNewToils() { - if (!this.usingNutrientPasteDispenser) + if (!usingNutrientPasteDispenser) { - this.FailOn(() => !this.IngestibleSource.Destroyed && !this.IngestibleSource.IngestibleNow); + this.FailOn(() => !IngestibleSource.Destroyed && !IngestibleSource.IngestibleNow); } - Toil chew = Toils_Ingest.ChewIngestible(this.pawn, this.ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) - .FailOn((Toil x) => !this.IngestibleSource.Spawned - && (this.pawn.carryTracker == null || this.pawn.carryTracker.CarriedThing != this.IngestibleSource)) + Toil chew = Toils_Ingest.ChewIngestible(pawn, ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) + .FailOn((Toil x) => !IngestibleSource.Spawned + && (pawn.carryTracker == null || pawn.carryTracker.CarriedThing != IngestibleSource)) .FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); - foreach (Toil toil in this.PrepareToIngestToils(chew)) + foreach (Toil toil in PrepareToIngestToils(chew)) { yield return toil; } yield return chew; - yield return FinalizeIngest(this.pawn, TargetIndex.A); - yield return Toils_Jump.JumpIf(chew, () => this.pawn?.BloodNeed()?.CurLevelPercentage < 1f); + yield return FinalizeIngest(pawn, TargetIndex.A); + yield return Toils_Jump.JumpIf(chew, () => pawn?.BloodNeed()?.CurLevelPercentage < 1f); } private IEnumerable PrepareToIngestToils(Toil chewToil) { - if (this.usingNutrientPasteDispenser) + if (usingNutrientPasteDispenser) { - return this.PrepareToIngestToils_Dispenser(); + return PrepareToIngestToils_Dispenser(); } - if (this.pawn.RaceProps.ToolUser) + if (pawn.RaceProps.ToolUser) { - return this.PrepareToIngestToils_ToolUser(chewToil); + return PrepareToIngestToils_ToolUser(chewToil); } - return this.PrepareToIngestToils_NonToolUser(); + return PrepareToIngestToils_NonToolUser(); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_Dispenser() { yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, this.pawn); - yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); + yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, pawn); + yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) { - if (this.eatingFromInventory) + if (eatingFromInventory) { - yield return Toils_Misc.TakeItemFromInventoryToCarrier(this.pawn, TargetIndex.A); + yield return Toils_Misc.TakeItemFromInventoryToCarrier(pawn, TargetIndex.A); } else { - yield return this.ReserveFoodIfWillIngestWholeStack(); + yield return ReserveFoodIfWillIngestWholeStack(); Toil gotoToPickup = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Jump.JumpIf(gotoToPickup, () => this.pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); + yield return Toils_Jump.JumpIf(gotoToPickup, () => pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch).FailOnDespawnedNullOrForbidden(TargetIndex.A); yield return Toils_Jump.Jump(chewToil); yield return gotoToPickup; - yield return Toils_Ingest.PickupIngestible(TargetIndex.A, this.pawn); - Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C, 1, -1, null); + yield return Toils_Ingest.PickupIngestible(TargetIndex.A, pawn); + Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C); Toil findExtraFoodToCollect = new Toil(); findExtraFoodToCollect.initAction = delegate { - if (this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def) < this.job.takeExtraIngestibles) + if (pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def) < job.takeExtraIngestibles) { - Predicate validator = (Thing x) => this.pawn.CanReserve(x, 1, -1, null, false) - && !x.IsForbidden(this.pawn) && x.IsSociallyProper(this.pawn); - Thing thing = GenClosest.ClosestThingReachable(this.pawn.Position, this.pawn.Map, - ThingRequest.ForDef(this.IngestibleSource.def), PathEndMode.Touch, - TraverseParms.For(this.pawn, Danger.Deadly, TraverseMode.ByPawn, false), - 12f, validator, null, 0, -1, false, RegionType.Set_Passable, false); + Predicate validator = (Thing x) => pawn.CanReserve(x) + && !x.IsForbidden(pawn) && x.IsSociallyProper(pawn); + Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, + ThingRequest.ForDef(IngestibleSource.def), PathEndMode.Touch, + TraverseParms.For(pawn), + 12f, validator); if (thing != null) { - this.pawn.CurJob.SetTarget(TargetIndex.C, thing); - this.JumpToToil(reserveExtraFoodToCollect); + pawn.CurJob.SetTarget(TargetIndex.C, thing); + JumpToToil(reserveExtraFoodToCollect); } } }; @@ -153,17 +155,17 @@ private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) yield return reserveExtraFoodToCollect; yield return Toils_Goto.GotoThing(TargetIndex.C, PathEndMode.Touch); yield return Toils_Haul.TakeToInventory(TargetIndex.C, - () => this.job.takeExtraIngestibles - this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def)); + () => job.takeExtraIngestibles - pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def)); yield return findExtraFoodToCollect; } - yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); + yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_NonToolUser() { - yield return this.ReserveFoodIfWillIngestWholeStack(); + yield return ReserveFoodIfWillIngestWholeStack(); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); } @@ -173,12 +175,12 @@ private Toil ReserveFoodIfWillIngestWholeStack() { initAction = delegate { - if (this.pawn.Faction == null) + if (pawn.Faction == null) { return; } - Thing thing = this.pawn.CurJob.GetTarget(TargetIndex.A).Thing; - if (this.pawn.carryTracker.CarriedThing == thing) + Thing thing = pawn.CurJob.GetTarget(TargetIndex.A).Thing; + if (pawn.carryTracker.CarriedThing == thing) { return; } @@ -187,10 +189,10 @@ private Toil ReserveFoodIfWillIngestWholeStack() { if (!thing.Spawned) { - this.pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true); + pawn.jobs.EndCurrentJob(JobCondition.Incompletable); return; } - this.pawn.Reserve(thing, this.job, 1, -1, null); + pawn.Reserve(thing, job); } }, defaultCompleteMode = ToilCompleteMode.Instant @@ -202,8 +204,8 @@ private Toil ReserveFoodIfWillIngestWholeStack() public override bool ModifyCarriedThingDrawPos(ref Vector3 drawPos, ref bool behind, ref bool flip) { - IntVec3 cell = base.job.GetTarget(TargetIndex.B).Cell; - return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, this.pawn); + IntVec3 cell = job.GetTarget(TargetIndex.B).Cell; + return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, pawn); } public static bool ModifyCarriedThingDrawPosWorker(ref Vector3 drawPos, ref bool behind, ref bool flip, IntVec3 placeCell, Pawn pawn) @@ -249,15 +251,15 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { if (!(ingester.Position + ingester.Rotation.FacingCell).HasEatSurface(actor.Map) && ingester.GetPosture() == PawnPosture.Standing) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable, null); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable); } - Room room = ingester.GetRoom(RegionType.Set_Passable); + Room room = ingester.GetRoom(); if (room != null) { int scoreStageIndex = RoomStatDefOf.Impressiveness.GetScoreStageIndex(room.GetStat(RoomStatDefOf.Impressiveness)); if (ThoughtDefOf.AteInImpressiveDiningRoom.stages[scoreStageIndex] != null) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex), null); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex)); } } } @@ -270,7 +272,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { thing = thing.SplitOff(1); } - if (!thing.Destroyed) thing.Destroy(DestroyMode.Vanish); + if (!thing.Destroyed) thing.Destroy(); }; toil.defaultCompleteMode = ToilCompleteMode.Instant; return toil; @@ -278,7 +280,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) public override bool TryMakePreToilReservations() { - return this.pawn.Reserve(TargetA, this.job, 1, -1, null); + return pawn.Reserve(TargetA, job); } } } diff --git a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs index 5a47bd3..5e0df32 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs @@ -1,10 +1,13 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; +using RimWorld; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_Diablerie : JobDriver { @@ -16,13 +19,13 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -33,7 +36,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder, false); + BloodVictim.TransferBloodTo(1, BloodFeeder, false); } public override string GetReport() @@ -47,10 +50,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } @@ -60,8 +63,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - this.job.SetTarget(TargetIndex.A, p.Corpse); - this.pawn.Reserve(TargetA, this.job); + job.SetTarget(TargetIndex.A, p.Corpse); + pawn.Reserve(TargetA, job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -73,7 +76,7 @@ protected override IEnumerable MakeNewToils() VampireCorpse vampCorpse = ((VampireCorpse)TargetA.Thing); vampCorpse.Diableried = true; Pawn p = vampCorpse.InnerPawn; - this.pawn.VampComp().Notify_Diablerie(p.VampComp()); + pawn.VampComp().Notify_Diablerie(p.VampComp()); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs index 7106b99..e82dc5b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using System.Diagnostics; +using RimWorld; +using Vampire.Defs; using Verse; using Verse.AI; -using RimWorld; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_DigAndHide : JobDriver { @@ -15,40 +16,40 @@ public class JobDriver_DigAndHide : JobDriver [DebuggerHidden] protected override IEnumerable MakeNewToils() { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); if (TargetLocA != pawn.PositionHeld) yield return Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.Touch); Toil doWork = new Toil(); doWork.initAction = delegate { - this.workLeft = BaseWorkAmount; - this.job.SetTarget(TargetIndex.B, this.pawn); + workLeft = BaseWorkAmount; + job.SetTarget(TargetIndex.B, pawn); }; doWork.tickAction = delegate { if (GetActor().Downed || GetActor().Dead || GetActor().pather.MovingNow) { - this.EndJobWith(JobCondition.Incompletable); + EndJobWith(JobCondition.Incompletable); return; } - this.workLeft -= this.pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); - if (this.workLeft <= 0f) + workLeft -= pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); + if (workLeft <= 0f) { - Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole, null); - thing.SetFaction(this.pawn.Faction, null); - GenSpawn.Spawn(thing, this.TargetLocA, this.Map); + Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole); + thing.SetFaction(pawn.Faction); + GenSpawn.Spawn(thing, TargetLocA, Map); - Pawn actor = this.pawn; + Pawn actor = pawn; Building_Casket pod = (Building_Casket)thing; actor.DeSpawn(); pod.GetDirectlyHeldThings().TryAdd(actor); - this.ReadyForNextToil(); + ReadyForNextToil(); return; } //JoyUtility.JoyTickCheckEnd(this.pawn, JoyTickFullJoyAction.EndJob, 1f); }; - doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)this.workLeft / (float)BaseWorkAmount); + doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)workLeft / (float)BaseWorkAmount); doWork.defaultCompleteMode = ToilCompleteMode.Never; //doWork.FailOn(() => !JoyUtility.EnjoyableOutsideNow(this.pawn, null)); //doWork.FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); @@ -58,7 +59,7 @@ protected override IEnumerable MakeNewToils() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.workLeft, "workLeft", 0f, false); + Scribe_Values.Look(ref workLeft, "workLeft"); } public override bool TryMakePreToilReservations() diff --git a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs index dfe4c1b..a7b31e0 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs @@ -1,10 +1,12 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; +using RimWorld; +using Vampire.Components; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_Embrace : JobDriver { @@ -16,13 +18,13 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -33,7 +35,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); + BloodVictim.TransferBloodTo(1, BloodFeeder); } public override string GetReport() @@ -47,10 +49,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, this.GetActor()?.Faction != this.TargetA.Thing?.Faction, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, GetActor()?.Faction != TargetA.Thing?.Faction, false)) { yield return t; } @@ -60,8 +62,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - this.job.SetTarget(TargetIndex.A, p.Corpse); - this.pawn.Reserve(TargetA, this.job); + job.SetTarget(TargetIndex.A, p.Corpse); + pawn.Reserve(TargetA, job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -70,7 +72,7 @@ protected override IEnumerable MakeNewToils() { initAction = delegate () { - this.pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(this.pawn, Victim); + pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(pawn, Victim); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs index c3de600..a2a7d21 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs @@ -1,33 +1,33 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; +using RimWorld; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_EnterTorpor : JobDriver { public override bool TryMakePreToilReservations() { - return pawn.Reserve(TargetA, this.job); + return pawn.Reserve(TargetA, job); } [DebuggerHidden] protected override IEnumerable MakeNewToils() { this.FailOnDespawnedOrNull(TargetIndex.A); - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell); Toil prepare = Toils_General.Wait(500); prepare.FailOnCannotTouch(TargetIndex.A, PathEndMode.InteractionCell); - prepare.WithProgressBarToilDelay(TargetIndex.A, false, -0.5f); + prepare.WithProgressBarToilDelay(TargetIndex.A); yield return prepare; yield return new Toil { initAction = delegate { - Pawn actor = this.pawn; + Pawn actor = pawn; Building_Casket pod = (Building_Casket)actor.CurJob.targetA.Thing; actor.DeSpawn(); diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index d8a6bd4..030331d 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -1,11 +1,15 @@ -using RimWorld; -using System; +using System; using System.Collections.Generic; using System.Diagnostics; +using RimWorld; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Disciplines.Animalism; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_Feed : JobDriver { @@ -13,11 +17,11 @@ public class JobDriver_Feed : JobDriver public static float BaseFeedTime = 320f; public static float BaseCoolantThrowupChance = 0.25f; - protected Pawn Victim => base.job.targetA.Thing as Pawn; + protected Pawn Victim => job.targetA.Thing as Pawn; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); + protected Need_Blood BloodFeeder => GetActor().BloodNeed(); public override void Notify_Starting() { @@ -26,13 +30,13 @@ public override void Notify_Starting() public virtual void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); - if (Victim.IsAndroid() && !this.pawn.IsAndroid()) + BloodVictim.TransferBloodTo(1, BloodFeeder); + if (Victim.IsAndroid() && !pawn.IsAndroid()) { if (Rand.Value <= BaseCoolantThrowupChance) { - this.EndJobWith(JobCondition.Incompletable); - this.pawn.jobs.StartJob(new Job(JobDefOf.Vomit, this.pawn.PositionHeld)); + EndJobWith(JobCondition.Incompletable); + pawn.jobs.StartJob(new Job(JobDefOf.Vomit, pawn.PositionHeld)); } } @@ -43,9 +47,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); - this.AddEndCondition(delegate + AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -53,7 +57,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(this.job.def, this, this.pawn, this.TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(job.def, this, pawn, TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } @@ -62,7 +66,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, ThoughtDef victimThoughtDef, ThoughtDef actorThoughtDef, float workLeft, Action effect, Func stopCondition, bool needsGrapple = true, bool cleansWound = true, bool neverGiveUp = false) { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); Toil gotoToil = (actor?.Faction == TargetA.Thing?.Faction) ? Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch) : Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() @@ -71,7 +75,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { MoteMaker.MakeColonistActionOverlay(actor, ThingDefOf.Mote_ColonistAttacking); - workLeft = JobDriver_Feed.BaseFeedTime; + workLeft = BaseFeedTime; Pawn victim = TargetA.Thing as Pawn; if (victim != null) { @@ -91,7 +95,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, } if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); + actor.jobs.EndCurrentJob(JobCondition.Incompletable); } if (actor.IsVampire()) VampireBiteUtility.MakeNew(actor, victim); @@ -116,7 +120,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (victimThoughtDef != null) victimThought = (Thought_Memory)ThoughtMaker.MakeThought(victimThoughtDef); if (victimThought != null) { - victim.needs.mood.thoughts.memories.TryGainMemory(victimThought, null); + victim.needs.mood.thoughts.memories.TryGainMemory(victimThought); } } if (actor?.needs?.mood?.thoughts?.memories != null) @@ -125,7 +129,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (actorThoughtDef != null) actorThought = (Thought_Memory)ThoughtMaker.MakeThought(actorThoughtDef); if (actorThought != null) { - actor.needs.mood.thoughts.memories.TryGainMemory(actorThought, null); + actor.needs.mood.thoughts.memories.TryGainMemory(actorThought); } } @@ -134,7 +138,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); v.XP += 15; } workLeft = BaseFeedTime; @@ -176,7 +180,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index 385f2a2..c1e3d63 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -1,11 +1,13 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using RimWorld; +using Vampire.Components; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_FeedAndDestroy : JobDriver { @@ -18,8 +20,8 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } @@ -27,13 +29,13 @@ protected Pawn Master { get { - if (base.job.targetB.Thing is Pawn p) return p; - if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; + if (job.targetB.Thing is Pawn p) return p; + if (job.targetB.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -44,14 +46,14 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + BloodVictim.TransferBloodTo(1, Master.BloodNeed()); if (Victim.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside) is List parts) { for (int i = 0; i < 3; i++) { if (!Victim.Dead) { - Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, this.GetActor(), parts.RandomElement())); + Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, GetActor(), parts.RandomElement())); } } } @@ -68,10 +70,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs index 3891979..a318ef6 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs @@ -1,10 +1,12 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; +using RimWorld; +using Vampire.Components; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_FeedAndReturn : JobDriver { @@ -17,8 +19,8 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } @@ -26,13 +28,13 @@ protected Pawn Master { get { - if (base.job.targetB.Thing is Pawn p) return p; - if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; + if (job.targetB.Thing is Pawn p) return p; + if (job.targetB.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -43,7 +45,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + BloodVictim.TransferBloodTo(1, Master.BloodNeed()); } public override string GetReport() @@ -57,10 +59,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs index 22b4faf..bf7fc4f 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs @@ -1,11 +1,13 @@ -using RimWorld; -using System; +using System; using System.Collections.Generic; using System.Diagnostics; +using RimWorld; +using Vampire.Components; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_FeedSip : JobDriver { @@ -13,11 +15,11 @@ public class JobDriver_FeedSip : JobDriver private float workLeft = -1f; public static float BaseFeedTime = 320f; - protected Pawn Victim => (Pawn)base.job.targetA.Thing; + protected Pawn Victim => (Pawn)job.targetA.Thing; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); + protected Need_Blood BloodFeeder => GetActor().BloodNeed(); public override void Notify_Starting() { @@ -26,7 +28,7 @@ public override void Notify_Starting() public virtual void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); + BloodVictim.TransferBloodTo(1, BloodFeeder); } [DebuggerHidden] @@ -35,9 +37,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); - this.AddEndCondition(delegate + AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -45,7 +47,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(this, this.pawn, this.TargetA, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(this, pawn, TargetA, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } @@ -53,7 +55,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, float workLeft, Action effect, Func stopCondition) { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); Toil gotoToil = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() @@ -77,7 +79,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, GenClamor.DoClamor(actor, 10f, ClamorType.Harm); if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); + actor.jobs.EndCurrentJob(JobCondition.Incompletable); } if (actor?.VampComp()?.Bloodline?.bloodlineHediff?.CompProps()?.verbs is List verbProps) { @@ -107,7 +109,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); v.XP += 15; } workLeft = BaseFeedTime; @@ -136,7 +138,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs index 2b89f06..15eb33a 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using System.Diagnostics; +using Vampire.Components; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobDriver_MakeBloodBond : JobDriver { @@ -15,19 +16,19 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompThrall => Victim.GetComp(); - protected CompVampire CompMaster => this.GetActor().GetComp(); + protected CompVampire CompMaster => GetActor().GetComp(); protected Need_Blood BloodThrall => CompThrall.BloodPool; protected Need_Blood BloodMaster => CompMaster.BloodPool; private void DoEffect() { - this.BloodMaster.TransferBloodTo(1, BloodThrall); + BloodMaster.TransferBloodTo(1, BloodThrall); } [DebuggerHidden] @@ -36,14 +37,14 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOn(delegate { return BloodMaster.CurBloodPoints == 0; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, (Pawn)TargetA, this.GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, (Pawn)TargetA, GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs index a161283..b8aee3f 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs @@ -1,8 +1,10 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobGiver_GetBlood : ThinkNode_JobGiver { diff --git a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs index 5047b64..a26bb9c 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs @@ -1,9 +1,11 @@ using System; +using RimWorld; +using Vampire.Components; +using Vampire.Utilities; using Verse; using Verse.AI; -using RimWorld; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobGiver_SeekShelterFromSunlight : ThinkNode_JobGiver { @@ -19,7 +21,7 @@ public class JobGiver_SeekShelterFromSunlight : ThinkNode_JobGiver protected virtual IntVec3 GetExactWanderDest(Pawn pawn) { IntVec3 wanderRoot = pawn.PositionHeld; - return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, this.wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, this.maxDanger)); + return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, maxDanger)); } public override float GetPriority(Pawn pawn) @@ -42,7 +44,7 @@ protected override Job TryGiveJob(Pawn pawn) return null; if (pawn.Drafted) return null; - Room room = pawn.GetRoom(RegionType.Set_Passable); + Room room = pawn.GetRoom(); if (room != null) { if (room.PsychologicallyOutdoors) diff --git a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs index cd107ad..42f5faa 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs @@ -1,8 +1,10 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class JobGiver_VampireBeast : ThinkNode_JobGiver { @@ -24,28 +26,28 @@ protected override Job TryGiveJob(Pawn pawn) { return null; } - if (pawn?.TryGetAttackVerb(false) == null) + if (pawn?.TryGetAttackVerb() == null) { return null; } - Pawn pawn2 = this.FindPawnTarget(pawn); - if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) + Pawn pawn2 = FindPawnTarget(pawn); + if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) { if (pawn2.InAggroMentalState) - return this.MeleeAttackJob(pawn2); + return MeleeAttackJob(pawn2); else - return this.FeedJob(pawn2); + return FeedJob(pawn2); } - Building building = this.FindTurretTarget(pawn); + Building building = FindTurretTarget(pawn); if (building != null) { - return this.MeleeAttackJob(building); + return MeleeAttackJob(building); } if (pawn2 != null) { - using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings, false), PathEndMode.OnCell)) + using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings))) { if (!pawnPath.Found) { @@ -58,22 +60,22 @@ protected override Job TryGiveJob(Pawn pawn) //Job job = DigUtility.PassBlockerJob(pawn, thing, cellBeforeBlocker, true); //if (job != null) //{ - return this.MeleeAttackJob(thing); + return MeleeAttackJob(thing); //} } IntVec3 loc = pawnPath.LastCellBeforeBlockerOrFinalCell(pawn.MapHeld); - IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map, RegionType.Set_Passable), 9, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), null, null, RegionType.Set_Passable).RandomCell; + IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map), 9, TraverseParms.For(pawn)).RandomCell; if (randomCell == pawn.PositionHeld) { - return new Job(JobDefOf.Wait, 30, false); + return new Job(JobDefOf.Wait, 30); } return new Job(JobDefOf.Goto, randomCell); } } - Building buildingDoor = this.FindDoorTarget(pawn); + Building buildingDoor = FindDoorTarget(pawn); if (buildingDoor != null) { - return this.MeleeAttackJob(buildingDoor); + return MeleeAttackJob(buildingDoor); } return null; @@ -103,13 +105,13 @@ private Pawn FindPawnTarget(Pawn pawn) private Building FindTurretTarget(Pawn pawn) { - return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); + return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f); } private Building_Door FindDoorTarget(Pawn pawn) { - return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); + return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f); } } diff --git a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs index 8ccc2f0..a0375a8 100644 --- a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs +++ b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs @@ -1,13 +1,14 @@ using RimWorld; +using Vampire.Components; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class MentalState_Rotschreck : MentalState { - CompVampire vampComp => this.pawn.GetComp(); - Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); + CompVampire vampComp => pawn.GetComp(); + Need_Blood vampBlood => pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -19,7 +20,7 @@ public override void MentalStateTick() { base.MentalStateTick(); if (pawn.PositionHeld.Roofed(pawn.MapHeld)) - this.RecoverFromState(); + RecoverFromState(); //Room room = pawn.GetRoom(RegionType.Set_All); //if (room != null) //{ diff --git a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs index c9c02db..79e6504 100644 --- a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs @@ -1,13 +1,14 @@ using RimWorld; +using Vampire.Components; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.AI_Jobs { public class MentalState_VampireBeast : MentalState { - CompVampire vampComp => this.pawn.GetComp(); - Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); + CompVampire vampComp => pawn.GetComp(); + Need_Blood vampBlood => pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -20,9 +21,9 @@ public override void MentalStateTick() if (vampComp != null) { if (!vampComp.IsVampire) - this.RecoverFromState(); + RecoverFromState(); if (vampBlood.IsFull) - this.RecoverFromState(); + RecoverFromState(); } } diff --git a/Source/Vampires/Buildings/Building_Coffin.cs b/Source/Vampires/Buildings/Building_Coffin.cs index ea46fbf..3b0d2c0 100644 --- a/Source/Vampires/Buildings/Building_Coffin.cs +++ b/Source/Vampires/Buildings/Building_Coffin.cs @@ -2,7 +2,7 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Buildings { public class Building_Coffin : Building_Sarcophagus { @@ -23,14 +23,14 @@ public override IEnumerable GetGizmos() foreach (Gizmo g in base.GetGizmos()) yield return g; - Pawn p = (Pawn)this.ContainedThing; + Pawn p = (Pawn)ContainedThing; if (p == null) { p = this?.Corpse?.InnerPawn ?? null; } if (p != null) { - foreach (Gizmo y in HarmonyPatches.GraveGizmoGetter(p, this)) + foreach (Gizmo y in HarmonyPatches.HarmonyPatches.GraveGizmoGetter(p, this)) yield return y; } } diff --git a/Source/Vampires/Buildings/Building_HideyHole.cs b/Source/Vampires/Buildings/Building_HideyHole.cs index 9b0cc0c..6ce1798 100644 --- a/Source/Vampires/Buildings/Building_HideyHole.cs +++ b/Source/Vampires/Buildings/Building_HideyHole.cs @@ -1,14 +1,13 @@ using RimWorld; -using Verse; -namespace Vampire +namespace Vampire.Buildings { public class Building_HideyHole : Building_Grave { public override void Open() { base.Open(); - this.Destroy(DestroyMode.Vanish); + Destroy(); } } } diff --git a/Source/Vampires/Buttons.cs b/Source/Vampires/Buttons.cs index 47677ea..06deff7 100644 --- a/Source/Vampires/Buttons.cs +++ b/Source/Vampires/Buttons.cs @@ -7,12 +7,12 @@ namespace Vampire public static class TexButton { //VampireIcon - public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon", true); - public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon", true); - public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty", true); - public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull", true); - public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted", true); - public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed", true); + public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon"); + public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon"); + public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty"); + public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull"); + public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted"); + public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed"); //public static readonly Texture2D ROMV_Ashes = ContentFinder.Get("Things/Item/Resource/VampireAshes", true); } } \ No newline at end of file diff --git a/Source/Vampires/Components/CompBloodItem.cs b/Source/Vampires/Components/CompBloodItem.cs index 52da951..eb9ff03 100644 --- a/Source/Vampires/Components/CompBloodItem.cs +++ b/Source/Vampires/Components/CompBloodItem.cs @@ -1,9 +1,9 @@ using Verse; -namespace Vampire +namespace Vampire.Components { public class CompBloodItem : ThingComp { - public CompProperties_BloodItem Props => this.props as CompProperties_BloodItem; + public CompProperties_BloodItem Props => props as CompProperties_BloodItem; } } diff --git a/Source/Vampires/Components/CompProperties_BloodItem.cs b/Source/Vampires/Components/CompProperties_BloodItem.cs index 48ee56b..eb8c48b 100644 --- a/Source/Vampires/Components/CompProperties_BloodItem.cs +++ b/Source/Vampires/Components/CompProperties_BloodItem.cs @@ -1,12 +1,13 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Components { public class CompProperties_BloodItem : CompProperties { public BloodType bloodType = BloodType.LowBlood; public int bloodPoints = 1; - public CompProperties_BloodItem() => this.compClass = typeof(CompBloodItem); + public CompProperties_BloodItem() => compClass = typeof(CompBloodItem); } } diff --git a/Source/Vampires/Components/CompProperties_VampBed.cs b/Source/Vampires/Components/CompProperties_VampBed.cs index 4a0f72e..6b43558 100644 --- a/Source/Vampires/Components/CompProperties_VampBed.cs +++ b/Source/Vampires/Components/CompProperties_VampBed.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Components { public class CompProperties_VampBed : CompProperties { @@ -9,7 +9,7 @@ public class CompProperties_VampBed : CompProperties public CompProperties_VampBed() { - this.compClass = typeof(CompVampBed); + compClass = typeof(CompVampBed); } } } diff --git a/Source/Vampires/Components/CompVampBed.cs b/Source/Vampires/Components/CompVampBed.cs index eb355d4..3fa5f97 100644 --- a/Source/Vampires/Components/CompVampBed.cs +++ b/Source/Vampires/Components/CompVampBed.cs @@ -1,10 +1,12 @@ using System.Collections.Generic; using System.Linq; -using Verse; using RimWorld; +using Vampire.Defs; +using Vampire.Utilities; +using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.Components { //Spawns invisible beds on things. //Perfect for vampires @@ -12,22 +14,22 @@ public class CompVampBed : ThingComp { private Building_Bed bed; public Building_Bed Bed { get => bed; set => bed = value; } - public CompProperties_VampBed Props => this.props as CompProperties_VampBed; + public CompProperties_VampBed Props => props as CompProperties_VampBed; public override void PostSpawnSetup(bool respawningAfterLoad) { base.PostSpawnSetup(respawningAfterLoad); - if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (this.parent is Building b) + if (parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); - bed.SetFaction(this.parent.Faction); + GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); + bed.SetFaction(parent.Faction); } } @@ -36,28 +38,28 @@ public override IEnumerable CompFloatMenuOptions(Pawn selPawn) { //return base.CompFloatMenuOptions(selPawn); - if ((selPawn?.IsVampire() ?? false) && this.parent is Building_Grave g && !g.HasCorpse) + if ((selPawn?.IsVampire() ?? false) && parent is Building_Grave g && !g.HasCorpse) { yield return new FloatMenuOption("ROMV_EnterTorpor".Translate(new object[] { selPawn.Label }), delegate { - selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, this.parent)); - }, MenuOptionPriority.Default, null, null, 0f, null, null); + selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, parent)); + }); } } public override void CompTickRare() { base.CompTickRare(); - if (this.parent is Building_Grave g) + if (parent is Building_Grave g) { if (g.HasAnyContents) { if (bed != null && bed.Spawned) { - bed.Destroy(DestroyMode.Vanish); + bed.Destroy(); bed = null; } if (g.TryGetInnerInteractableThingOwner().FirstOrDefault(x => x is MinifiedThing) is MinifiedThing t) @@ -68,16 +70,16 @@ public override void CompTickRare() return; } - if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (this.parent is Building b) + if (parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); - bed.SetFaction(this.parent.Faction); + GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); + bed.SetFaction(parent.Faction); } if (bed != null && bed.Spawned && g.assignedPawn != null && ((bed?.AssignedPawns?.Contains(g.assignedPawn) ?? false) == false)) { @@ -94,7 +96,7 @@ public override void PostDeSpawn(Map map) base.PostDeSpawn(map); if (bed != null && bed.Spawned) { - bed.Destroy(DestroyMode.Vanish); + bed.Destroy(); bed = null; } } @@ -102,7 +104,7 @@ public override void PostDeSpawn(Map map) public override void PostExposeData() { base.PostExposeData(); - Scribe_References.Look(ref this.bed, "bed"); + Scribe_References.Look(ref bed, "bed"); } } } diff --git a/Source/Vampires/Components/CompVampire.cs b/Source/Vampires/Components/CompVampire.cs index 95b4268..85e186c 100644 --- a/Source/Vampires/Components/CompVampire.cs +++ b/Source/Vampires/Components/CompVampire.cs @@ -1,12 +1,16 @@ using System; using System.Collections.Generic; using System.Linq; +using AbilityUser; using RimWorld; +using Vampire.AI_Jobs; +using Vampire.Defs; +using Vampire.Hediffs; +using Vampire.Utilities; using Verse; -using AbilityUser; using Verse.AI; -namespace Vampire +namespace Vampire.Components { public enum VampState : int { @@ -59,7 +63,7 @@ public IntVec3 VampLastHomePoint if (vampLastHomePoint == null || vampLastHomeCheck < Find.TickManager.TicksGame) { vampLastHomeCheck = Find.TickManager.TicksGame + 500; - vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(this.Pawn); + vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(Pawn); } return vampLastHomePoint.Value; } @@ -124,7 +128,7 @@ public SkillSheet Sheet { if (sheet == null) { - sheet = new SkillSheet(this.Pawn); + sheet = new SkillSheet(Pawn); } return sheet; } @@ -138,7 +142,7 @@ public List Childer if (childer == null) { childer = new List(); - if (this.AbilityUser?.relations?.DirectRelations is List rels) + if (AbilityUser?.relations?.DirectRelations is List rels) { foreach (DirectPawnRelation rel in rels) { @@ -192,16 +196,16 @@ public BloodlineDef Bloodline { return bloodline; } set => bloodline = value; } public int Generation { get => generation; set => generation = value; } - public bool Thinblooded => this.generation > 13; - public Need_Blood BloodPool => this.AbilityUser?.needs?.TryGetNeed() ?? null; + public bool Thinblooded => generation > 13; + public Need_Blood BloodPool => AbilityUser?.needs?.TryGetNeed() ?? null; public float TrueCombatPower { get { float result = 0; - result += this.AbilityUser.kindDef.combatPower; + result += AbilityUser.kindDef.combatPower; result += 4000; - for (int i = 1; i <= this.generation; i++) + for (int i = 1; i <= generation; i++) { if (i == 2) { result -= 3000; continue; } if (i < 7) { result -= 100; continue; } @@ -215,13 +219,13 @@ public bool InSunlight { get { - if (this.AbilityUser.Spawned) + if (AbilityUser.Spawned) { - Map curMap = this.AbilityUser.Map; + Map curMap = AbilityUser.Map; if (curMap != null) { - if (VampireUtility.IsDaylight(this.AbilityUser) - && !this.AbilityUser.PositionHeld.Roofed(curMap)) + if (VampireUtility.IsDaylight(AbilityUser) + && !AbilityUser.PositionHeld.Roofed(curMap)) { return true; } @@ -242,8 +246,8 @@ public void Notify_LevelUp(bool sendNotification) { if (XP <= 0) XP = 1; Level++; - if (sendNotification && this.IsVampire && this.AbilityUser != null && this.AbilityUser.Spawned && this.AbilityUser.Faction == Faction.OfPlayerSilentFail) - Messages.Message("ROMV_LevelUp".Translate(this.AbilityUser), new RimWorld.Planet.GlobalTargetInfo(this.AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); + if (sendNotification && IsVampire && AbilityUser != null && AbilityUser.Spawned && AbilityUser.Faction == Faction.OfPlayerSilentFail) + Messages.Message("ROMV_LevelUp".Translate(AbilityUser), new RimWorld.Planet.GlobalTargetInfo(AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); } public void Notify_ResetAbilities() { @@ -252,7 +256,7 @@ public void Notify_ResetAbilities() public void Notify_UpdateAbilities() { - if (this.AbilityUser.IsVampire() && this is CompVampire) + if (AbilityUser.IsVampire() && this is CompVampire) { //Disciplines Skill Sheet if (Sheet?.Disciplines is List dd && !dd.NullOrEmpty()) @@ -263,9 +267,9 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef vd in vdd) { - if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) + if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) { - this.AddPawnAbility(vd); + AddPawnAbility(vd); } } @@ -277,22 +281,22 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef bloodVAD in bloodVADs) { - if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) + if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) { - this.AddPawnAbility(bloodVAD); + AddPawnAbility(bloodVAD); } } } //Regenerate Limb if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_RegenerateLimb) == null) { - this.AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); + AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); } //Vampiric Healing if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_VampiricHealing) == null) { - this.AddPawnAbility(VampDefOf.ROMV_VampiricHealing); + AddPawnAbility(VampDefOf.ROMV_VampiricHealing); } } } @@ -300,47 +304,47 @@ public void Notify_UpdateAbilities() public void GiveFeedJob(Pawn victim) { Job feedJob = new Job(VampDefOf.ROMV_Feed, victim); - this.AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); + AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); } public void GiveEmbraceJob(Pawn newChilde) { Job embraceJob = new Job(VampDefOf.ROMV_Embrace, newChilde); - this.AbilityUser.jobs.TryTakeOrderedJob(embraceJob, JobTag.Misc); + AbilityUser.jobs.TryTakeOrderedJob(embraceJob); } public void InitializeVampirism(Pawn newSire, BloodlineDef newBloodline = null, int newGeneration = -1, bool firstVampire = false) { //Log.Message("Init"); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); - VampireGen.TryGiveVampirismHediff(this.AbilityUser, newGeneration, newBloodline, newSire, firstVampire); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); + VampireGen.TryGiveVampirismHediff(AbilityUser, newGeneration, newBloodline, newSire, firstVampire); if (!firstVampire) { - this.bloodline = newBloodline;// sireComp.Bloodline; - this.generation = newGeneration;// + 1; - this.sire = newSire; - VampireRelationUtility.SetSireChildeRelations(this.AbilityUser, newSire?.VampComp() ?? null, newGeneration); + bloodline = newBloodline;// sireComp.Bloodline; + generation = newGeneration;// + 1; + sire = newSire; + VampireRelationUtility.SetSireChildeRelations(AbilityUser, newSire?.VampComp() ?? null, newGeneration); } else { - this.generation = 1; - this.bloodline = VampDefOf.ROMV_Caine; - this.sire = null; + generation = 1; + bloodline = VampDefOf.ROMV_Caine; + sire = null; } - VampireGen.TryGiveVampireAdditionalHediffs(this.AbilityUser); - if (VampireUtility.IsDaylight(this.AbilityUser)) VampireUtility.MakeSleepy(this.AbilityUser); - VampireUtility.AdjustTimeTables(this.AbilityUser); - - this.sheet = new SkillSheet(this.AbilityUser); - this.sheet.InitializeDisciplines(); - this.Notify_LevelUp(false); - this.AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" + VampireGen.TryGiveVampireAdditionalHediffs(AbilityUser); + if (VampireUtility.IsDaylight(AbilityUser)) VampireUtility.MakeSleepy(AbilityUser); + VampireUtility.AdjustTimeTables(AbilityUser); + + sheet = new SkillSheet(AbilityUser); + sheet.InitializeDisciplines(); + Notify_LevelUp(false); + AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" if (!bloodline.allowsHair) AbilityUser.story.hairDef = DefDatabase.GetNamed("Shaved"); if (this?.AbilityUser?.playerSettings != null) - this.AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; + AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; } public override void CompTick() @@ -363,7 +367,7 @@ public void SunlightWatcherTick() try { //Log.Message("SunlightWatcher"); - Pawn p = this.Pawn; + Pawn p = Pawn; Map m = p.MapHeld; IntVec3 i = p.PositionHeld; if (p.ParentHolder.IsEnclosingContainer()) @@ -377,7 +381,7 @@ public void SunlightWatcherTick() ThinkResult thinkResult = thinkNode_JobGiver.TryIssueJobPackage(p, default(JobIssueParams)); if (thinkResult.Job is Job j && j.IsSunlightSafeFor(p)) { - p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null, false); + p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null); } else { @@ -400,10 +404,10 @@ public void Notify_Starving(int lastNonStarvingTick) public void Notify_Embraced(CompVampire sireComp) { - InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1, false); + InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1); Messages.Message("ROMV_EmbracedSuccessfully".Translate(new object[] { - this.AbilityUser.LabelShort, + AbilityUser.LabelShort, sireComp.AbilityUser.LabelShort, sireComp.Bloodline.LabelCap }), MessageTypeDefOf.PositiveEvent); @@ -413,12 +417,12 @@ public void Notify_Diablerie(CompVampire victim) { Messages.Message("ROMV_DiablerieSuccessfully".Translate(new object[] { - this.AbilityUser.LabelShort, + AbilityUser.LabelShort, victim.AbilityUser.LabelShort }), MessageTypeDefOf.PositiveEvent); - this.Generation = Math.Min(this.Generation, victim.Generation); - this.Souls.Add(victim.AbilityUser); - VampireThoughtUtility.GiveThoughtsForDiablerie(this.AbilityUser); + Generation = Math.Min(Generation, victim.Generation); + Souls.Add(victim.AbilityUser); + VampireThoughtUtility.GiveThoughtsForDiablerie(AbilityUser); } #endregion Methods @@ -443,7 +447,7 @@ public override bool AllowStackWith(Thing other) } - public override float GrappleModifier => (IsVampire) ? 20 - this.generation : 0; + public override float GrappleModifier => (IsVampire) ? 20 - generation : 0; @@ -451,13 +455,13 @@ public override IEnumerable CompGetGizmosExtra() { if (Find.Selector.NumSelected == 1) { - for (int i = 0; i < this.AbilityData.AllPowers.Count; i++) + for (int i = 0; i < AbilityData.AllPowers.Count; i++) { - if (this.AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); + if (AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); } if (AbilityUser.Downed && AbilityUser.IsVampire()) { - Vampire.VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); + VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); yield return new Command_Action() { defaultLabel = bloodHeal.label, @@ -466,11 +470,11 @@ public override IEnumerable CompGetGizmosExtra() action = delegate { AbilityUser.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess, -1f); - this.BloodPool.AdjustBlood(-bloodHeal.bloodCost); - VampireUtility.Heal(this.AbilityUser); + MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess); + BloodPool.AdjustBlood(-bloodHeal.bloodCost); + VampireUtility.Heal(AbilityUser); }, - disabled = this.BloodPool.CurBloodPoints <= 0 + disabled = BloodPool.CurBloodPoints <= 0 }; } } @@ -479,22 +483,22 @@ public override IEnumerable CompGetGizmosExtra() public override void PostExposeData() { - Scribe_Defs.Look(ref this.bloodline, "bloodline"); - Scribe_Values.Look(ref this.generation, "generation"); - Scribe_Values.Look(ref this.level, "level", 0); - Scribe_Values.Look(ref this.xp, "xp", 0); - Scribe_Values.Look(ref this.abilityPoints, "abilityPoints", 0); - Scribe_Values.Look(ref this.curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); - Scribe_References.Look(ref this.sire, "sire"); - Scribe_Collections.Look(ref this.souls, "souls", LookMode.Reference); - Scribe_Deep.Look(ref this.sheet, "sheet", new object[] { this.AbilityUser }); + Scribe_Defs.Look(ref bloodline, "bloodline"); + Scribe_Values.Look(ref generation, "generation"); + Scribe_Values.Look(ref level, "level"); + Scribe_Values.Look(ref xp, "xp"); + Scribe_Values.Look(ref abilityPoints, "abilityPoints"); + Scribe_Values.Look(ref curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); + Scribe_References.Look(ref sire, "sire"); + Scribe_Collections.Look(ref souls, "souls", LookMode.Reference); + Scribe_Deep.Look(ref sheet, "sheet", new object[] { AbilityUser }); base.PostExposeData(); if (Scribe.mode == LoadSaveMode.PostLoadInit) { - this.AbilityData.Powers.Clear(); - if (this.AbilityUser.IsVampire() && (base.AbilityData.Powers == null || base.AbilityData.Powers.NullOrEmpty())) + AbilityData.Powers.Clear(); + if (AbilityUser.IsVampire() && (AbilityData.Powers == null || AbilityData.Powers.NullOrEmpty())) { - if (this.Sheet.Disciplines is List dd && !dd.NullOrEmpty()) + if (Sheet.Disciplines is List dd && !dd.NullOrEmpty()) { foreach (Discipline d in dd) { @@ -502,12 +506,12 @@ public override void PostExposeData() { foreach (VitaeAbilityDef vd in vds) { - this.AddPawnAbility(vd); + AddPawnAbility(vd); } } } } - this.Notify_UpdateAbilities(); + Notify_UpdateAbilities(); } } } diff --git a/Source/Vampires/Defs/BloodType.cs b/Source/Vampires/Defs/BloodType.cs index 0104bd6..33028f3 100644 --- a/Source/Vampires/Defs/BloodType.cs +++ b/Source/Vampires/Defs/BloodType.cs @@ -1,4 +1,4 @@ -namespace Vampire +namespace Vampire.Defs { public enum BloodType : int { diff --git a/Source/Vampires/Defs/BloodlineDef.cs b/Source/Vampires/Defs/BloodlineDef.cs index 0572f54..cb4e373 100644 --- a/Source/Vampires/Defs/BloodlineDef.cs +++ b/Source/Vampires/Defs/BloodlineDef.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; -using Verse; using UnityEngine; +using Vampire.Utilities; +using Vampire.Workers; +using Verse; -namespace Vampire +namespace Vampire.Defs { public class BloodlineDef : Def { @@ -27,12 +29,12 @@ public EmbraceWorker EmbraceWorker { get { - if (this.embraceWorkerInt == null) + if (embraceWorkerInt == null) { - this.embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(this.embraceWorker); - this.embraceWorkerInt.def = this; + embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(embraceWorker); + embraceWorkerInt.def = this; } - return this.embraceWorkerInt; + return embraceWorkerInt; } } diff --git a/Source/Vampires/Defs/DisciplineDef.cs b/Source/Vampires/Defs/DisciplineDef.cs index 18abe6f..8200c1d 100644 --- a/Source/Vampires/Defs/DisciplineDef.cs +++ b/Source/Vampires/Defs/DisciplineDef.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Verse; -namespace Vampire +namespace Vampire.Defs { public class DisciplineDef : Def { diff --git a/Source/Vampires/Defs/ScenPart_GameStartNight.cs b/Source/Vampires/Defs/ScenPart_GameStartNight.cs index a0863e9..c141f32 100644 --- a/Source/Vampires/Defs/ScenPart_GameStartNight.cs +++ b/Source/Vampires/Defs/ScenPart_GameStartNight.cs @@ -1,8 +1,8 @@ -using UnityEngine; +using RimWorld; +using UnityEngine; using Verse; -using RimWorld; -namespace Vampire +namespace Vampire.Defs { public class ScenPart_GameStartNight : ScenPart { @@ -14,16 +14,16 @@ public class ScenPart_GameStartNight : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f); - this.text = Widgets.TextArea(scenPartRect, this.text, false); + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f); + text = Widgets.TextArea(scenPartRect, text); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.text, "text", null, false); - Scribe_Values.Look(ref this.textKey, "textKey", null, false); - Scribe_Defs.Look(ref this.closeSound, "closeSound"); + Scribe_Values.Look(ref text, "text"); + Scribe_Values.Look(ref textKey, "textKey"); + Scribe_Defs.Look(ref closeSound, "closeSound"); } public override void PostGameStart() diff --git a/Source/Vampires/Defs/VampDefOf.cs b/Source/Vampires/Defs/VampDefOf.cs index aab4c6e..94ef39c 100644 --- a/Source/Vampires/Defs/VampDefOf.cs +++ b/Source/Vampires/Defs/VampDefOf.cs @@ -1,7 +1,7 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Defs { [DefOf] public static class VampDefOf diff --git a/Source/Vampires/Defs/VitaeAbilityDef.cs b/Source/Vampires/Defs/VitaeAbilityDef.cs index 1504c24..84cf674 100644 --- a/Source/Vampires/Defs/VitaeAbilityDef.cs +++ b/Source/Vampires/Defs/VitaeAbilityDef.cs @@ -1,4 +1,4 @@ -namespace Vampire +namespace Vampire.Defs { public class VitaeAbilityDef : AbilityUser.AbilityDef { diff --git a/Source/Vampires/Discipline.cs b/Source/Vampires/Discipline.cs index 2efb326..dd103c1 100644 --- a/Source/Vampires/Discipline.cs +++ b/Source/Vampires/Discipline.cs @@ -1,4 +1,6 @@ using System.Collections.Generic; +using Vampire.Defs; +using Vampire.Utilities; using Verse; namespace Vampire @@ -42,9 +44,9 @@ public void UpdateAbilities() public void Notify_Reset(Pawn p) { - p.VampComp().AbilityPoints += this.points; - this.points = 0; - this.level = 0; + p.VampComp().AbilityPoints += points; + points = 0; + level = 0; UpdateAbilities(); } @@ -78,10 +80,10 @@ public Discipline(DisciplineDef def) public void ExposeData() { - Scribe_Values.Look(ref this.level, "level"); - Scribe_Values.Look(ref this.points, "points"); - Scribe_Values.Look(ref this.prevPoints, "prevPoints"); - Scribe_Defs.Look(ref this.def, "def"); + Scribe_Values.Look(ref level, "level"); + Scribe_Values.Look(ref points, "points"); + Scribe_Values.Look(ref prevPoints, "prevPoints"); + Scribe_Defs.Look(ref def, "def"); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs index 696072c..625cd10 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs @@ -1,7 +1,8 @@ using RimWorld; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Animalism { public class DisciplineEffect_Beckoning : Verb_UseAbilityPawnEffect { @@ -11,15 +12,15 @@ public override void Effect(Pawn target) int count = new IntRange(15, 25).RandomInRange; IntVec3 loc; - if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal, null)) + if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal)) { - VampireUtility.SummonEffect(loc, this.CasterPawn.Map, this.CasterPawn, 10f); + VampireUtility.SummonEffect(loc, CasterPawn.Map, CasterPawn, 10f); for (int i = 0; i < count; i++) target.Map.wildSpawner.SpawnRandomWildAnimalAt(loc); } - Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map), null); + Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map)); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs index abde72c..d7a739d 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs @@ -1,22 +1,24 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Animalism { public class DisciplineEffect_Communion : AbilityUser.Verb_UseAbility { public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { for (int i = 1; i <= 3; i++) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BatSpectralKind, Faction.OfPlayer); - p.Master = this.CasterPawn; - VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 3f); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + p.Master = CasterPawn; + VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 3f); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs index 0b805d7..43a98d1 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs @@ -1,13 +1,15 @@ -using Verse; +using Vampire.Defs; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Animalism { public class DisciplineEffect_NightwispRavens : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - VampireUtility.SummonEffect(target.PositionHeld, this.CasterPawn.Map, this.CasterPawn, 2f); + VampireUtility.SummonEffect(target.PositionHeld, CasterPawn.Map, CasterPawn, 2f); HealthUtility.AdjustSeverity(target, VampDefOf.ROMV_NightwispRavens, 1.0f); } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs index 0ddefb5..ace6bc2 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs @@ -1,19 +1,21 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Animalism { public class DisciplineEffect_SpectralWolf : AbilityUser.Verb_UseAbility { public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_WolfSpectral, Faction.OfPlayer); - VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 2f); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 2f); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs index b907d7b..7e7d244 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Animalism { public class HediffCompProperties_TickGraphic : HediffCompProperties { @@ -10,7 +10,7 @@ public class HediffCompProperties_TickGraphic : HediffCompProperties public HediffCompProperties_TickGraphic() { - this.compClass = typeof(HediffComp_TickGraphic); + compClass = typeof(HediffComp_TickGraphic); } } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs index bd7d27f..7850b34 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs @@ -1,7 +1,7 @@ -using Verse; -using UnityEngine; +using UnityEngine; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Animalism { public class HediffComp_TickGraphic : HediffComp { @@ -17,7 +17,7 @@ public HediffCompProperties_TickGraphic Props { get { - return (HediffCompProperties_TickGraphic)this.props; + return (HediffCompProperties_TickGraphic)props; } } @@ -35,13 +35,13 @@ public override void CompPostTick(ref float severityAdjustment) curGraphicIndex = 0; } } - CurGraphic = this.Props.cycleGraphics[curGraphicIndex].Graphic; + CurGraphic = Props.cycleGraphics[curGraphicIndex].Graphic; if (CurGraphic != null) { - Material material = this.CurGraphic.MatSingle; + Material material = CurGraphic.MatSingle; Vector3 s = new Vector3(CurGraphic.drawSize.x, 1f, CurGraphic.drawSize.y); Matrix4x4 matrix = default(Matrix4x4); - matrix.SetTRS(this.Pawn.DrawPos, Quaternion.identity, s); + matrix.SetTRS(Pawn.DrawPos, Quaternion.identity, s); Graphics.DrawMesh(MeshPool.plane10, matrix, material, 0); } } @@ -49,8 +49,8 @@ public override void CompPostTick(ref float severityAdjustment) public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.curGraphicIndex, "curGraphicIndex", 0); - Scribe_Values.Look(ref this.activated, "activated", false); + Scribe_Values.Look(ref curGraphicIndex, "curGraphicIndex"); + Scribe_Values.Look(ref activated, "activated"); } } } diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index fdc99e9..dcfc244 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -1,10 +1,12 @@ -using RimWorld; -using System.Linq; +using System.Linq; +using RimWorld; using UnityEngine; +using Vampire.Defs; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.Disciplines.Animalism { public class PawnTemporary : Pawn { @@ -29,11 +31,11 @@ public override void Tick() { setup = true; - if (this.def == VampDefOf.ROMV_BatSpectralRace) + if (def == VampDefOf.ROMV_BatSpectralRace) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -41,21 +43,21 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } - if (this.def == VampDefOf.ROMV_BloodMistRace) + if (def == VampDefOf.ROMV_BloodMistRace) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -63,13 +65,13 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } @@ -79,11 +81,11 @@ public override void Tick() if (ticksUntilNextTryGiveJob < 0) { ticksUntilNextTryGiveJob = new IntRange(500, 700).RandomInRange; - if (this.def == VampDefOf.ROMV_BatSpectralRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndReturn) + if (def == VampDefOf.ROMV_BatSpectralRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndReturn) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -91,22 +93,22 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } - if (this.def == VampDefOf.ROMV_BloodMistRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndDestroy) + if (def == VampDefOf.ROMV_BloodMistRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndDestroy) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -114,20 +116,20 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } } ticksLeft--; - if (ticksLeft <= 0) this.Destroy(); + if (ticksLeft <= 0) Destroy(); if (Spawned) { @@ -139,14 +141,14 @@ public override void Tick() else { LocalTargetInfo target = this; - if (this.Spawned) + if (Spawned) { effecter.EffectTick(this, TargetInfo.Invalid); } MoteProgressBar mote = ((SubEffecter_ProgressBar)effecter.children[0]).mote; if (mote != null) { - float result = 1f - (float)(PawnTemporary.ticksToDestroy - this.ticksLeft) / (float)PawnTemporary.ticksToDestroy; + float result = 1f - (float)(ticksToDestroy - ticksLeft) / (float)ticksToDestroy; mote.progress = Mathf.Clamp01(result); mote.offsetZ = -0.5f; @@ -160,15 +162,15 @@ public override void Tick() public override void DeSpawn() { if (effecter != null) effecter.Cleanup(); - VampireUtility.SummonEffect(this.PositionHeld, this.MapHeld, this, 2f); + VampireUtility.SummonEffect(PositionHeld, MapHeld, this, 2f); base.DeSpawn(); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0); - Scribe_References.Look(ref this.master, "master"); + Scribe_Values.Look(ref ticksLeft, "ticksLeft"); + Scribe_References.Look(ref master, "master"); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs index 45859c0..9042e3a 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs @@ -1,6 +1,7 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Auspex { public class DisciplineEffect_CrocodileTongue : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs index 2ddd416..10095f1 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs @@ -1,6 +1,7 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Auspex { public class DisciplineEffect_HeightenedSenses : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs index fa77c6e..1d416d6 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs @@ -1,21 +1,23 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Hediffs; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Auspex { public class DisciplineEffect_ReadMind : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, this.CasterPawn, null); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, CasterPawn); if (hediff.TryGetComp() is HediffComp_ReadMind rm) { rm.MindBeingRead = target; } hediff.Severity = 1.0f; - this.CasterPawn.health.AddHediff(hediff, null, null); + CasterPawn.health.AddHediff(hediff, null, null); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs index e01c2b8..759f0fa 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using RimWorld; +using Vampire.Defs; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Auspex { public class DisciplineEffect_RevealIllusions : AbilityUser.Verb_UseAbility { @@ -24,7 +25,7 @@ public virtual void Effect() { if (defsToCheck.Contains(h.def)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap), -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap)); p.health.hediffSet.hediffs.Remove(h); } } @@ -33,15 +34,15 @@ public virtual void Effect() if (t.Cell != default(IntVec3) && t.Cell is IntVec3 c) { // Verse.FogGrid - if (this.CasterPawn.Map.fogGrid.IsFogged(c)) + if (CasterPawn.Map.fogGrid.IsFogged(c)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - this.CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); return; } else { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs index b52781c..a1a29ef 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs @@ -1,28 +1,29 @@ using System.Collections.Generic; using RimWorld; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Blood { public class DisciplineEffect_Hunger : AbilityUser.Verb_UseAbility { public virtual void Effect() { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - IntVec3 curCell = this.CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; - if (curCell.GetThingList(this.CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) + IntVec3 curCell = CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; + if (curCell.GetThingList(CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) { List temp = new List(things); foreach (Thing t in temp) { if (t.def.defName == "FilthBlood") { - this.CasterPawn.BloodNeed().AdjustBlood(1); - t.Destroy(DestroyMode.Vanish); + CasterPawn.BloodNeed().AdjustBlood(1); + t.Destroy(); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs index fe3aeaf..06f755a 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs @@ -1,7 +1,8 @@ using RimWorld; +using Vampire.Defs; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Blood { public class DisciplineEffect_Purge : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs index 6408de7..9ea7f43 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Blood { public class DisciplineEffect_StemTheTide : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs index b735897..6a84dd2 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs @@ -1,18 +1,20 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Disciplines.Animalism; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Blood { public class DisciplineEffect_UnstoppableTide : AbilityUser.Verb_UseAbility { public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BloodMistKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs index 7691d91..7fb5c05 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs @@ -1,13 +1,13 @@ using Verse; -namespace Vampire +namespace Vampire.Disciplines.Dominate { public class DisciplineEffect_Mesmerise : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - if (target.Faction == this.CasterPawn.Faction) //To avoid throwing red errors + if (target.Faction == CasterPawn.Faction) //To avoid throwing red errors target.ClearMind(); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs index 087d732..5d15122 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs @@ -1,16 +1,18 @@ -using Verse; +using Vampire.Defs; +using Vampire.Hediffs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Dominate { public class DisciplineEffect_Possession : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target, null); + Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target); hediff.Severity = 1.0f; target.health.AddHediff(hediff, null, null); - hediff.TryGetComp().ActivateEffect(this.CasterPawn); + hediff.TryGetComp().ActivateEffect(CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs index 54082d4..de5bec1 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs @@ -1,7 +1,8 @@ using RimWorld; +using Vampire.Defs; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Dominate { public class DisciplineEffect_Sleep : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs index 540bb66..99e4843 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Disciplines.Dominate { public class DisciplineEffect_Suicide : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs index 15612ca..dffc017 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs @@ -1,7 +1,7 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Flight { public class DisciplineEffect_LongFlight : AbilityUser.Verb_UseAbility @@ -11,9 +11,9 @@ public virtual void Effect() if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); - flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); + flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs index 54150e1..e56fc1c 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Disciplines.Flight { public class DisciplineEffect_ShortFlight : AbilityUser.Verb_UseAbility @@ -12,8 +12,8 @@ public virtual void Effect() Pawn caster = CasterPawn; LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); - flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); + flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); }, "LaunchingFlyer", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs index d04499d..d5bb437 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs @@ -1,7 +1,7 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Flight { public class DisciplineEffect_SkyFall : AbilityUser.Verb_UseAbility { @@ -11,11 +11,11 @@ public virtual void Effect() { LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); flyingObject.damageLaunched = false; flyingObject.timesToDamage = 3; flyingObject.explosion = true; - flyingObject.Launch(this.CasterPawn, target, this.CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, this.CasterPawn)); + flyingObject.Launch(CasterPawn, target, CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, CasterPawn)); }, "LaunchingFlyerSkyFall", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs index b21e735..ccac11f 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs @@ -1,14 +1,14 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Flight { public class DisciplineEffect_WingBuffet : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, this.CasterPawn); + GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs index 00ffd49..e97ccc3 100644 --- a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs +++ b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs @@ -1,4 +1,4 @@ -namespace Vampire +namespace Vampire.Disciplines.Fortitude { public class PassiveEffect_DamageSoak : AbilityUser.PassiveEffectWorker { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs index 8a88a03..e663029 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs @@ -1,7 +1,9 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Disciplines.Animalism; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Obtenebration { //ROMV_AbyssalArmKind public class DisciplineEffect_ArmOfTheAbyss : AbilityUser.Verb_UseAbility @@ -9,11 +11,11 @@ public class DisciplineEffect_ArmOfTheAbyss : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_AbyssalArmKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs index 5c1b54e..9d84261 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs @@ -1,6 +1,7 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Obtenebration { public class DisciplineEffect_BlackMetamorphosis : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs index 3ad8b19..5fadb84 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs @@ -2,22 +2,22 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Obtenebration { public class DisciplineEffect_EnterTheAbyss : AbilityUser.Verb_UseAbility { public void Effect() { - this.CasterPawn.Drawer.Notify_DebugAffected(); + CasterPawn.Drawer.Notify_DebugAffected(); if (TargetsAoE.FirstOrDefault(x => x is LocalTargetInfo y && y.Cell != default(IntVec3)) is LocalTargetInfo t) { - if (t.Cell.Standable(this.CasterPawn.MapHeld)) + if (t.Cell.Standable(CasterPawn.MapHeld)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - this.CasterPawn.Position = t.Cell; + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + CasterPawn.Position = t.Cell; return; } - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); } } @@ -29,14 +29,14 @@ public override bool CanHitTargetFrom(IntVec3 root, LocalTargetInfo targ) protected override bool TryCastShot() { - this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); return base.TryCastShot(); } public override void PostCastShot(bool inResult, out bool outResult) { - this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); outResult = true; } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs index 086e772..a3fcfb9 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs @@ -1,6 +1,7 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Obtenebration { public class DisciplineEffect_TenebrousForm : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs index 67de022..8f419d4 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs @@ -1,13 +1,14 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Protean { public class DisciplineEffect_BatForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs index 20f8698..1ddcc34 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using System.Linq; using RimWorld; +using Vampire.Defs; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Protean { public class DisciplineEffect_FeralClaws : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs index 890ea69..4ed0335 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs @@ -1,13 +1,14 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Protean { public class DisciplineEffect_MistForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs index 7654191..c135c0f 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs @@ -1,13 +1,14 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Protean { public class DisciplineEffect_WarForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs index 4f33ce6..89cf090 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Disciplines.Thaumaturgy { public class DisciplineEffect_BloodBoil : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs index ac94c8a..b75db83 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Disciplines.Thaumaturgy { public class DisciplineEffect_BloodSalvo : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs index 09e3e18..cbebe0a 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs @@ -1,6 +1,8 @@ -using Verse; +using Vampire.Defs; +using Vampire.Hediffs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Thaumaturgy { public class DisciplineEffect_BloodShield : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs index 1583979..42515e3 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Disciplines.Thaumaturgy { public class DisciplineEffect_BloodStrike : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs index ffc0a46..c599058 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs @@ -1,10 +1,11 @@ -using AbilityUser; -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using AbilityUser; +using RimWorld; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Thaumaturgy { public class Projectile_BloodBoil : Projectile_AbilityBase { @@ -18,13 +19,13 @@ public override void Impact_Override(Thing hitThing) int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite(), 1); + FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite()); } List parts = p.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside); for (int j = 0; j < 4; j++) { if (!p.Dead) - p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, this.Caster, parts.RandomElement())); + p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, Caster, parts.RandomElement())); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs index 7f0a220..5d1bbca 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs @@ -1,8 +1,9 @@ using AbilityUser; using RimWorld; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Thaumaturgy { public class Projectile_BloodReturner : Projectile_AbilityBase { @@ -11,7 +12,7 @@ public override void Impact_Override(Thing hitThing) base.Impact_Override(hitThing); if (hitThing is Pawn p && p.BloodNeed() is Need_Blood bn) { - MoteMaker.ThrowText(p.DrawPos, p.Map, "+2", -1f); + MoteMaker.ThrowText(p.DrawPos, p.Map, "+2"); bn.AdjustBlood(2); } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs index 887cbe5..6bee702 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs @@ -1,8 +1,9 @@ using AbilityUser; using RimWorld; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Thaumaturgy { public class Projectile_BloodStealer : Projectile_AbilityBase { @@ -12,13 +13,13 @@ public override void Impact_Override(Thing hitThing) if (hitThing is Pawn p && p?.BloodNeed() is Need_Blood bn && p.MapHeld != null) { - MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2", -1f); + MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2"); bn.AdjustBlood(-2); if (p.MapHeld != null && p.PositionHeld.IsValid) { Projectile_BloodReturner projectile = (Projectile_BloodReturner)GenSpawn.Spawn(ThingDef.Named("ROMV_BloodProjectile_Returner"), hitThing.PositionHeld, hitThing.MapHeld); - projectile.Launch(hitThing, this.origin.ToIntVec3(), null); + projectile.Launch(hitThing, origin.ToIntVec3()); } } } diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs index 031bf27..fd0ccd4 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs @@ -3,7 +3,7 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Vampirism { public class DisciplineEffect_RegenerateLimb : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs index 734fe44..a45ce3c 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs @@ -1,6 +1,7 @@ -using Verse; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Vampirism { public class DisciplineEffect_VampiricHealing : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs index 98ff56b..84605f3 100644 --- a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs +++ b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs @@ -1,24 +1,24 @@ using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Disciplines { public class Verb_UseAbilityPawnEffect : AbilityUser.Verb_UseAbility { public virtual void Effect(Pawn target) { - if (this.Ability.Def.MainVerb.isViolent && target.Faction != this.CasterPawn.Faction) + if (Ability.Def.MainVerb.isViolent && target.Faction != CasterPawn.Faction) { - target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, this.CasterPawn)); + target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, CasterPawn)); } target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); } public override void PostCastShot(bool inResult, out bool outResult) { if (inResult && - this.TargetsAoE[0].Thing is Pawn p) + TargetsAoE[0].Thing is Pawn p) { Effect(p); outResult = true; diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs index 185e010..5442b97 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs @@ -1,14 +1,15 @@ using System.Collections.Generic; using System.Linq; +using Vampire.Defs; using Verse; -namespace Vampire +namespace Vampire.Disciplines.Vicissitude { public class DisciplineEffect_CorruptForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { - if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) { base.Effect(target); int boolSel = Rand.Range(0, 2); diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs index 6f22ebf..3e57ef3 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs @@ -1,13 +1,14 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Vicissitude { public class DisciplineEffect_PerfectForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs index f3ca0b2..6d4b9d8 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs @@ -1,19 +1,20 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Vicissitude { public class DisciplineEffect_ShapeMonstrosity : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) { IntVec3 curLoc = target.PositionHeld; Map curMap = target.MapHeld; Name tempName = target.Name; target.DeSpawn(); - Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, this.CasterPawn.Faction); + Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, CasterPawn.Faction); GenSpawn.Spawn(p, curLoc, curMap); p.Name = tempName; } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs index 67958db..c80f8a3 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs @@ -1,13 +1,14 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Disciplines.Vicissitude { public class DisciplineEffect_ZuloForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); } } } diff --git a/Source/Vampires/FlyingObject.cs b/Source/Vampires/FlyingObject.cs index 42f5124..7bcc97b 100644 --- a/Source/Vampires/FlyingObject.cs +++ b/Source/Vampires/FlyingObject.cs @@ -24,7 +24,7 @@ protected int StartingTicksToImpact { get { - int num = Mathf.RoundToInt((this.origin - this.destination).magnitude / (this.speed / 100f)); + int num = Mathf.RoundToInt((origin - destination).magnitude / (speed / 100f)); if (num < 1) { num = 1; @@ -38,7 +38,7 @@ protected IntVec3 DestinationCell { get { - return new IntVec3(this.destination); + return new IntVec3(destination); } } @@ -46,8 +46,8 @@ public virtual Vector3 ExactPosition { get { - Vector3 b = (this.destination - this.origin) * (1f - (float)this.ticksToImpact / (float)this.StartingTicksToImpact); - return this.origin + b + Vector3.up * this.def.Altitude; + Vector3 b = (destination - origin) * (1f - (float)ticksToImpact / (float)StartingTicksToImpact); + return origin + b + Vector3.up * def.Altitude; } } @@ -55,7 +55,7 @@ public virtual Quaternion ExactRotation { get { - return Quaternion.LookRotation(this.destination - this.origin); + return Quaternion.LookRotation(destination - origin); } } @@ -63,32 +63,32 @@ public override Vector3 DrawPos { get { - return this.ExactPosition; + return ExactPosition; } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.origin, "origin", default(Vector3), false); - Scribe_Values.Look(ref this.destination, "destination", default(Vector3), false); - Scribe_Values.Look(ref this.ticksToImpact, "ticksToImpact", 0, false); - Scribe_Values.Look(ref this.timesToDamage, "timesToDamage", 0, false); - Scribe_Values.Look(ref this.damageLaunched, "damageLaunched", true); - Scribe_Values.Look(ref this.explosion, "explosion", false); - Scribe_References.Look(ref this.assignedTarget, "assignedTarget", false); - Scribe_References.Look(ref this.launcher, "launcher", false); - Scribe_References.Look(ref this.flyingThing, "flyingThing"); + Scribe_Values.Look(ref origin, "origin"); + Scribe_Values.Look(ref destination, "destination"); + Scribe_Values.Look(ref ticksToImpact, "ticksToImpact"); + Scribe_Values.Look(ref timesToDamage, "timesToDamage"); + Scribe_Values.Look(ref damageLaunched, "damageLaunched", true); + Scribe_Values.Look(ref explosion, "explosion"); + Scribe_References.Look(ref assignedTarget, "assignedTarget"); + Scribe_References.Look(ref launcher, "launcher"); + Scribe_References.Look(ref flyingThing, "flyingThing"); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing, DamageInfo? impactDamage) { - this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing, impactDamage); + Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing, impactDamage); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing) { - this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing); + Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing); } public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing flyingThing, DamageInfo? newDamageInfo = null) @@ -98,37 +98,37 @@ public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing f this.launcher = launcher; this.origin = origin; - this.impactDamage = newDamageInfo; + impactDamage = newDamageInfo; this.flyingThing = flyingThing; if (targ.Thing != null) { - this.assignedTarget = targ.Thing; + assignedTarget = targ.Thing; } - this.destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); - this.ticksToImpact = this.StartingTicksToImpact; + destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); + ticksToImpact = StartingTicksToImpact; } public override void Tick() { base.Tick(); - Vector3 exactPosition = this.ExactPosition; - this.ticksToImpact--; - if (!this.ExactPosition.InBounds(base.Map)) + Vector3 exactPosition = ExactPosition; + ticksToImpact--; + if (!ExactPosition.InBounds(Map)) { - this.ticksToImpact++; - base.Position = this.ExactPosition.ToIntVec3(); - this.Destroy(DestroyMode.Vanish); + ticksToImpact++; + Position = ExactPosition.ToIntVec3(); + Destroy(); return; } - base.Position = this.ExactPosition.ToIntVec3(); - if (this.ticksToImpact <= 0) + Position = ExactPosition.ToIntVec3(); + if (ticksToImpact <= 0) { - if (this.DestinationCell.InBounds(base.Map)) + if (DestinationCell.InBounds(Map)) { - base.Position = this.DestinationCell; + Position = DestinationCell; } - this.ImpactSomething(); + ImpactSomething(); return; } @@ -140,36 +140,36 @@ public override void Draw() { if (flyingThing is Pawn) { - if (this.DrawPos == null) return; - if (!this.DrawPos.ToIntVec3().IsValid) return; + if (DrawPos == null) return; + if (!DrawPos.ToIntVec3().IsValid) return; Pawn pawn = flyingThing as Pawn; - pawn.Drawer.DrawAt(this.DrawPos); + pawn.Drawer.DrawAt(DrawPos); //Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.graphic.MatFront, 0); } else { - Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.DrawMatSingle, 0); + Graphics.DrawMesh(MeshPool.plane10, DrawPos, ExactRotation, flyingThing.def.DrawMatSingle, 0); } - base.Comps_PostDraw(); + Comps_PostDraw(); } } private void ImpactSomething() { - if (this.assignedTarget != null) + if (assignedTarget != null) { - Pawn pawn = this.assignedTarget as Pawn; - if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (this.origin - this.destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) + Pawn pawn = assignedTarget as Pawn; + if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (origin - destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) { - this.Impact(null); + Impact(null); return; } - this.Impact(this.assignedTarget); + Impact(assignedTarget); return; } else { - this.Impact(null); + Impact(null); return; } } @@ -183,7 +183,7 @@ protected virtual void Impact(Thing hitThing) if (hitThing == null) { - if (this.Position.GetThingList(this.Map).FirstOrDefault(x => x == this.assignedTarget) is Pawn p) + if (Position.GetThingList(Map).FirstOrDefault(x => x == assignedTarget) is Pawn p) { hitThing = p; @@ -200,11 +200,11 @@ protected virtual void Impact(Thing hitThing) else hitThing.TakeDamage(impactDamage.Value); if (explosion) - GenExplosion.DoExplosion(this.Position, this.Map, 0.9f, DamageDefOf.Stun, this); + GenExplosion.DoExplosion(Position, Map, 0.9f, DamageDefOf.Stun, this); } - GenSpawn.Spawn(flyingThing, this.Position, this.Map); - this.Destroy(DestroyMode.Vanish); + GenSpawn.Spawn(flyingThing, Position, Map); + Destroy(); } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index 1238692..e98a691 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -1,17 +1,23 @@ -using Harmony; -using RimWorld; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; +using AbilityUser; +using Harmony; +using RimWorld; +using RimWorld.Planet; +using UnityEngine; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Disciplines.Animalism; +using Vampire.Hediffs; +using Vampire.UI; +using Vampire.Utilities; using Verse; using Verse.AI; -using UnityEngine; -using RimWorld.Planet; using Verse.AI.Group; -using AbilityUser; -namespace Vampire +namespace Vampire.HarmonyPatches { [StaticConstructorOnStartup] static partial class HarmonyPatches @@ -22,21 +28,21 @@ static HarmonyPatches() //Fixes issues with having no food need. harmony.Patch(AccessTools.Method(typeof(Pawn_NeedsTracker), "ShouldHaveNeed"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp)))); harmony.Patch(AccessTools.Method(typeof(ThinkNode_ConditionalNeedPercentageAbove), "Satisfied"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(Satisfied_Vamp))), null); //The wander handler now makes vampires wander indoors (for their safety). harmony.Patch(AccessTools.Method(typeof(PawnUtility), "KnownDangerAt"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp)))); harmony.Patch(AccessTools.Method(typeof(JoyUtility), "EnjoyableOutsideNow", new Type[] { typeof(Pawn), typeof(StringBuilder) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire)))); harmony.Patch(AccessTools.Method(typeof(JobGiver_GetRest), "FindGroundSleepSpotFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire)))); harmony.Patch(AccessTools.Method(typeof(JobGiver_TakeCombatEnhancingDrug), "TryGiveJob"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(TryGiveJob_DrugGiver_Vampire))), null); harmony.Patch(AccessTools.Method(typeof(ReachabilityUtility), "CanReach", new Type[] { typeof(Pawn), typeof(LocalTargetInfo), typeof(PathEndMode), typeof(Danger), typeof(bool), typeof(TraverseMode) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire)))); //The Doctor alert will no longer check a vampire to see if it's fed. harmony.Patch(AccessTools.Method(typeof(Alert_NeedDoctor), "get_Patients"), @@ -48,7 +54,7 @@ static HarmonyPatches() //Adds vampire right click float menus. harmony.Patch(AccessTools.Method(typeof(FloatMenuMakerMap), "AddHumanlikeOrders"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp)))); //Gives different skin color for Vampires harmony.Patch(AccessTools.Method(typeof(Pawn_StoryTracker), "get_SkinColor"), @@ -56,11 +62,11 @@ static HarmonyPatches() //Adds debug/dev tools for making vampires. harmony.Patch(AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DoListingItems_MapTools"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp)))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(ThingDef), "get_AllRecipes"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable)))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(Bill_Medical), "Notify_DoBillStarted"), @@ -74,15 +80,15 @@ static HarmonyPatches() harmony.Patch(AccessTools.Method(typeof(Building_Grave), "get_Graphic"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Graphic_VampBed))), null); harmony.Patch(AccessTools.Method(typeof(Building_Casket), "GetFloatMenuOptions"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed)))); harmony.Patch(AccessTools.Method(typeof(WorkGiver_BuryCorpses), "FindBestGrave"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed)))); //Caravan patches harmony.Patch(AccessTools.Method(typeof(Dialog_FormCaravan), "CheckForErrors"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires)))); harmony.Patch(AccessTools.Method(typeof(Caravan), "get_Resting"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires)))); //Lord_AI patches harmony.Patch(AccessTools.Method(typeof(Trigger_UrgentlyHungry), "ActivateOn"), @@ -94,11 +100,11 @@ static HarmonyPatches() //Changes vampire appearances and statistics based on their current forms harmony.Patch(AccessTools.Method(typeof(Pawn), "get_BodySize"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireBodySize)), null); + nameof(VampireBodySize))); harmony.Patch(AccessTools.Method(typeof(Pawn), "get_HealthScale"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireHealthScale)), null); + nameof(VampireHealthScale))); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveAllGraphics"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(Vamp_ResolveAllGraphics)), null); + nameof(Vamp_ResolveAllGraphics))); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveApparelGraphics"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_ResolveApparelGraphics)), null); harmony.Patch(AccessTools.Method(typeof(PawnRenderer), "RenderPawnInternal", new Type[] { typeof(Vector3), typeof(Quaternion), typeof(bool), typeof(Rot4), typeof(Rot4), typeof(RotDrawMode), typeof(bool), typeof(bool) }), new HarmonyMethod(typeof(VampireGraphicUtility), @@ -106,7 +112,7 @@ static HarmonyPatches() //Allows skill adjustments harmony.Patch(AccessTools.Method(typeof(SkillRecord), "get_Level"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel))); //Vampires do not age like others. harmony.Patch(AccessTools.Method(typeof(Pawn_AgeTracker), "BirthdayBiological"), @@ -118,7 +124,7 @@ static HarmonyPatches() //Adds vampire skill sheet button to CharacterCard harmony.Patch(AccessTools.Method(typeof(CharacterCardUtility), "DrawCharacterCard", new Type[] { typeof(Rect), typeof(Pawn), typeof(Action), typeof(Rect) }), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard))); //Fills the character card with a vampire skill sheet harmony.Patch(AccessTools.Method(typeof(ITab_Pawn_Character), "FillTab"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_FillTab)), null); @@ -157,32 +163,32 @@ static HarmonyPatches() //Patch to add comfort to vampire beds. harmony.Patch(AccessTools.Method(typeof(PawnUtility), "GainComfortFromCellIfPossible"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort))); //Patch to remove vampire's ability to bleed. harmony.Patch(AccessTools.Method(typeof(Hediff_Injury), "get_BleedRate"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate))); //Patch to hide vampire capacities. //harmony.Patch(AccessTools.Method(typeof(PawnCapacitiesHandler), "GetLevel"), null, // new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_HidePawnCapacities)), null); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetPawnCapacityTip"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip))); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetEfficiencyLabel"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel))); //Vampires do not worry about hot and cold harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Hot), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Cold), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); //Vampires are not affected by Hypothermia nor Heatstroke harmony.Patch(AccessTools.Method(typeof(HediffGiver_Heat), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); harmony.Patch(AccessTools.Method(typeof(HediffGiver_Hypothermia), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); harmony.Patch(AccessTools.Method(typeof(Pawn_HealthTracker), "AddHediff", new Type[] { typeof(Hediff), typeof(BodyPartRecord), typeof(DamageInfo?) }), new HarmonyMethod(typeof(HarmonyPatches), nameof(AddHediff)), null); @@ -216,7 +222,7 @@ static HarmonyPatches() //Vampires should not dislike the darkness. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Dark), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness))); //Fixes random red errors relating to food need checks in this method (WillIngestStackCountOf). @@ -226,16 +232,16 @@ static HarmonyPatches() //Vampires should tire very much during the daylight hours. harmony.Patch(AccessTools.Method(typeof(Need_Rest), "NeedInterval"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight))); // harmony.Patch(AccessTools.Method(typeof(GenCelestial), "CelestialSunGlowPercent"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent))); //Patches out binging behavior harmony.Patch(AccessTools.Method(typeof(JobGiver_Binge), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge))); //Patches corpse generation for vampires. harmony.Patch(AccessTools.Method(typeof(Pawn), "MakeCorpse"), @@ -243,33 +249,33 @@ static HarmonyPatches() //Vampire corpses can resurrect safely inside graves, sarcophogi, and caskets. harmony.Patch(AccessTools.Method(typeof(Building_Grave), "GetGizmos"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie))); //Caskets and coffins do not autoassign to colonists. harmony.Patch(AccessTools.Method(typeof(Pawn_Ownership), "ClaimBedIfNonMedical"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedsForTheUndead)), null); harmony.Patch(AccessTools.Method(typeof(RestUtility), "IsValidBedFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor))); //Vampires should never skygaze during sunrise... harmony.Patch(AccessTools.Method(typeof(JobDriver_Skygaze), "GetReport"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez))); //Vampire player should know about the rest curse. harmony.Patch(AccessTools.Method(typeof(Need), "GetTipString"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip))); //Vampires should not try to do drugs when idle. harmony.Patch(AccessTools.Method(typeof(JobGiver_IdleJoy), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs))); //Vampires should not be given food by wardens. harmony.Patch(AccessTools.Method(typeof(Pawn_GuestTracker), "get_CanBeBroughtFood"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood))); //Vampires should not be given food by wardens. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_CabinFever), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever))); #region DubsBadHygiene { @@ -400,7 +406,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra dReason = "ROMV_NoBloodRemaining".Translate(); } - Vampire.VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); + VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); if (!AbilityUser?.Dead ?? false) { @@ -419,7 +425,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra }; } - Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (AbilityUser?.Corpse?.GetRotStage() < RotStage.Dessicated) { yield return new Command_Action() @@ -431,11 +437,11 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra { AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); }, disabled = (AbilityUser?.BloodNeed()?.CurBloodPoints ?? 0) < 0 }; @@ -453,7 +459,7 @@ public static bool Vamp_MakeCorpse(Pawn __instance, Building_Grave assignedGrave __result = null; return false; } - VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse"), null); + VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse")); corpse.InnerPawn = __instance; corpse.BloodPoints = __instance.BloodNeed().CurBloodPoints; if (__instance.health.hediffSet.GetHediffs()?.Where(x => x.def == HediffDefOf.Burn && !x.IsTended())?.Count() > 3) @@ -608,7 +614,7 @@ public static bool Vamp_GuestFix(Pawn p, ref bool __result) if (p.IsVampire()) { __result = !p.Downed && p.health.hediffSet.BleedRateTotal <= 0f && p?.needs?.rest?.CurCategory < RestCategory.Exhausted && - !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff(false) && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; + !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff() && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; return false; } return true; @@ -654,13 +660,13 @@ public static bool Vamp_LovinFoodFix(Pawn pawn, Pawn partner, ref float __result __result = -1f; return false; } - float num = HarmonyPatches.LovinMtbSinglePawnFactor(pawn); + float num = LovinMtbSinglePawnFactor(pawn); if (num <= 0f) { __result = -1f; return false; } - float num2 = HarmonyPatches.LovinMtbSinglePawnFactor(partner); + float num2 = LovinMtbSinglePawnFactor(partner); if (num2 <= 0f) { __result = -1f; @@ -836,7 +842,7 @@ public static void Vamp_BedComfort(Pawn p) { if (edifice.TryGetComp() is CompVampBed vBed && vBed.Bed != null) { - float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort, true); + float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort); if (statValue >= 0f && p.needs != null && p.needs.comfort != null) { p.needs.comfort.ComfortUsed(statValue); @@ -1008,7 +1014,7 @@ public static bool Vamp_CanVisit(ref bool __result, Pawn pawn, Pawn sick, JoyCat { __result = sick.IsColonist && !sick.Dead && pawn != sick && sick.InBed() && sick.Awake() && !sick.IsForbidden(pawn) && sick.needs.joy != null && sick.needs.joy.CurCategory <= maxPatientJoy && InteractionUtility.CanReceiveInteraction(sick) && - pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None, 1, -1, null, false) && !HarmonyPatches.AboutToRecover(sick); + pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None) && !AboutToRecover(sick); return false; } return true; @@ -1167,7 +1173,7 @@ public static bool VampireBirthdayBiological(Pawn_AgeTracker __instance) Find.LetterStack.ReceiveLetter("LetterLabelBirthday".Translate(), "ROMV_VampireBirthday".Translate(new object[]{ p.Label, p.ageTracker.AgeBiologicalYears - }), LetterDefOf.PositiveEvent, p, null); + }), LetterDefOf.PositiveEvent, p); return false; } return true; @@ -1305,11 +1311,11 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra { if (__result != null && __result is Building_Grave g && g?.def.GetCompProperties() is CompProperties_VampBed b) { - Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m, 1, -1, null, false) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); + Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); if (corpse?.InnerPawn?.ownership != null && corpse?.InnerPawn?.ownership?.AssignedGrave != null) { Building_Grave assignedGrave = corpse?.InnerPawn?.ownership?.AssignedGrave; - if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false)) ?? false)) + if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p)) ?? false)) { __result = assignedGrave; return; @@ -1317,7 +1323,7 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra } Func priorityGetter = (Thing t) => (float)((IStoreSettingsParent)t).GetStoreSettings().Priority; Predicate validator = predicate; - __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator, priorityGetter); + __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p), 9999f, validator, priorityGetter); return; } } @@ -1385,7 +1391,7 @@ public static void GetFloatMenuOptions_VampBed(Building_Casket __instance, Pawn }), delegate { selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, __instance)); - }, MenuOptionPriority.Default, null, null, 0f, null, null)}); + })}); } } } @@ -1485,22 +1491,22 @@ private static void AddHumanlikeOrders_Vamp(Vector3 clickPos, Pawn pawn, ref Lis FloatMenuOption item5; if (bloodItem.def.IsPleasureDrug && pawn.IsTeetotaler()) { - item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); + item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null); } - else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly, false, TraverseMode.ByPawn)) + else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly)) { - item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); + item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null); } else { MenuOptionPriority priority = (!(bloodItem is Corpse)) ? MenuOptionPriority.Default : MenuOptionPriority.Low; item5 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, delegate { - bloodItem.SetForbidden(false, true); + bloodItem.SetForbidden(false); Job job = new Job(VampDefOf.ROMV_ConsumeBlood, bloodItem); job.count = BloodUtility.WillConsumeStackCountOf(pawn, bloodItem.def); - pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); - }, priority, null, null, 0f, null, null), pawn, bloodItem, "ReservedBy"); + pawn.jobs.TryTakeOrderedJob(job); + }, priority), pawn, bloodItem); } opts.Add(item5); } @@ -1544,7 +1550,7 @@ public static bool MakeNewToils_VampVomit(JobDriver_Vomit __instance, ref IEnume int curTicks = Traverse.Create(__instance).Field("ticksLeft").GetValue(); if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite(), 1); + FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite()); if (__instance.pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs index 84906e6..22a4137 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs @@ -1,9 +1,10 @@ -using RimWorld; +using System.Collections.Generic; +using RimWorld; using RimWorld.Planet; -using System.Collections.Generic; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.HarmonyPatches { static partial class HarmonyPatches { diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs index 2b33f9a..581ca26 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs @@ -1,11 +1,15 @@ -using Harmony; -using RimWorld; -using System; +using System; using System.Collections.Generic; using System.Linq; +using Harmony; +using RimWorld; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Hediffs; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.HarmonyPatches { static partial class HarmonyPatches { @@ -17,8 +21,8 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan "Spawn Vampire (Random)", new Action(()=> { Pawn randomVampire = - VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null, null, false); - GenSpawn.Spawn(randomVampire, UI.MouseCell(), Find.VisibleMap); + VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null); + GenSpawn.Spawn(randomVampire, Verse.UI.MouseCell(), Find.VisibleMap); }) }); @@ -27,14 +31,14 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (Default)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (!pawn.IsVampire()) { pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire"); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -44,11 +48,11 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (w/Settings)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { //pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); - Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Bloodlines(pawn))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Bloodlines(pawn))); //DebugTools.curTool = null; } })}); @@ -58,7 +62,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Remove Vampirism", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (pawn.IsVampire()) @@ -74,7 +78,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan pawn.health.RestorePart(rec); } pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire"); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -85,24 +89,24 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood"); } })}); AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Drain Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(-1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood"); } })}); @@ -110,12 +114,12 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add XP (100)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.VampComp() is CompVampire v) { v.XP += 100; pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP"); } })}); } @@ -132,7 +136,7 @@ private static List Options_Bloodlines(Pawn p) { list.Add(new DebugMenuOption(current.LabelCap, DebugMenuOptionMode.Action, delegate { - Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Generation(p, current))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Generation(p, current))); })); } @@ -150,7 +154,7 @@ private static List Options_Generation(Pawn p, BloodlineDef blo p.VampComp().InitializeVampirism(null, bloodline, curGen, curGen == 1); //Log.Message("0" + p.LabelShort + " " + i.ToString()); p.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire", -1f); + MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire"); })); } return list; diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs index 2695744..eb8de57 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs @@ -1,9 +1,11 @@ using System.Text; using RimWorld; +using Vampire.Components; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.HarmonyPatches { public static partial class HarmonyPatches { diff --git a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs index 4c30d8b..cea9069 100644 --- a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs +++ b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs @@ -2,10 +2,13 @@ using System.Collections.Generic; using JecsTools; using UnityEngine; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.HarmonyPatches { public class VampHumanlikeOrders : FloatMenuPatch { @@ -36,7 +39,7 @@ public override IEnumerable 1) { @@ -49,7 +52,7 @@ public override IEnumerable x != this.parent && x.TryGetComp() != null) is HediffWithComps h) + if (Pawn.health.hediffSet.hediffs.FirstOrDefault(x => x != parent && x.TryGetComp() != null) is HediffWithComps h) { - this.Pawn.health.hediffSet.hediffs.Remove(h); + Pawn.health.hediffSet.hediffs.Remove(h); } - this.Pawn.VampComp().CurrentForm = this.Props.animalToChangeInto; - this.Pawn.VampComp().CurFormGraphic = null; + Pawn.VampComp().CurrentForm = Props.animalToChangeInto; + Pawn.VampComp().CurFormGraphic = null; //Log.Message("CurrentForm set to " + this.Props.animalToChangeInto.label); } if (CompShouldRemove) { - this.Pawn.VampComp().CurrentForm = null; + Pawn.VampComp().CurrentForm = null; } } public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.activated, "activated", false); + Scribe_Values.Look(ref activated, "activated"); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_Possession.cs b/Source/Vampires/Hediffs/HediffComp_Possession.cs index ffceb12..f2d7a50 100644 --- a/Source/Vampires/Hediffs/HediffComp_Possession.cs +++ b/Source/Vampires/Hediffs/HediffComp_Possession.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Hediffs { public class HediffComp_Possession : HediffComp_Disappears { @@ -9,21 +9,21 @@ public class HediffComp_Possession : HediffComp_Disappears { get { - return (HediffCompProperties_Possession)this.props; + return (HediffCompProperties_Possession)props; } } public void ActivateEffect(Pawn activator) { - string text = this.Pawn.LabelIndefinite(); - if (this.Pawn.guest != null) + string text = Pawn.LabelIndefinite(); + if (Pawn.guest != null) { - this.Pawn.guest.SetGuestStatus(null, false); + Pawn.guest.SetGuestStatus(null); } - bool flag = this.Pawn.Name != null; - if (this.Pawn.Faction != activator.Faction) + bool flag = Pawn.Name != null; + if (Pawn.Faction != activator.Faction) { - this.Pawn.SetFaction(activator.Faction, this.Pawn); + Pawn.SetFaction(activator.Faction, Pawn); } } @@ -32,7 +32,7 @@ public override void CompPostTick(ref float severityAdjustment) base.CompPostTick(ref severityAdjustment); if (CompShouldRemove) { - HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("HeartAttack"), 1.0f); + HealthUtility.AdjustSeverity(Pawn, HediffDef.Named("HeartAttack"), 1.0f); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs index 3b4c49a..cee3d46 100644 --- a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs +++ b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs @@ -1,7 +1,7 @@ -using Verse; -using System.Text; +using System.Text; +using Verse; -namespace Vampire +namespace Vampire.Hediffs { public class HediffComp_ReadMind : HediffComp { diff --git a/Source/Vampires/Hediffs/HediffComp_Shield.cs b/Source/Vampires/Hediffs/HediffComp_Shield.cs index 5b43966..976c28c 100644 --- a/Source/Vampires/Hediffs/HediffComp_Shield.cs +++ b/Source/Vampires/Hediffs/HediffComp_Shield.cs @@ -1,11 +1,11 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; +using RimWorld; using UnityEngine; using Verse; using Verse.Sound; -namespace Vampire +namespace Vampire.Hediffs { [StaticConstructorOnStartup] public class HediffComp_Shield : HediffComp @@ -50,14 +50,14 @@ public string labelCap { get { - return this.Def.LabelCap; + return Def.LabelCap; } } public string label { get { - return this.Def.label; + return Def.label; } } @@ -73,7 +73,7 @@ public float Energy { get { - return this.energy; + return energy; } } @@ -81,7 +81,7 @@ public ShieldState ShieldState { get { - if (this.ticksToReset > 0) + if (ticksToReset > 0) { return ShieldState.Resetting; } @@ -93,23 +93,23 @@ private bool ShouldDisplay { get { - return !this.Pawn.Dead && !this.Pawn.Downed && (!this.Pawn.IsPrisonerOfColony || (this.Pawn.MentalStateDef != null && this.Pawn.MentalStateDef.IsAggro)) || (this.Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < this.lastKeepDisplayTick + this.KeepDisplayingTicks); + return !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || (Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro)) || (Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks); } } public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.energy, "energy", 0f, false); - Scribe_Values.Look(ref this.setup, "setup", false); - Scribe_Values.Look(ref this.ticksToReset, "ticksToReset", -1, false); - Scribe_Values.Look(ref this.lastKeepDisplayTick, "lastKeepDisplayTick", 0, false); + Scribe_Values.Look(ref energy, "energy"); + Scribe_Values.Look(ref setup, "setup"); + Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1); + Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick"); } [DebuggerHidden] public IEnumerable GetWornGizmos() { - if (Find.Selector.SingleSelectedThing == this.Pawn) + if (Find.Selector.SingleSelectedThing == Pawn) { yield return new Gizmo_HediffShieldStatus { @@ -127,9 +127,9 @@ public IEnumerable GetWornGizmos() public override void CompPostTick(ref float severityAdjustment) { base.CompPostTick(ref severityAdjustment); - if (this.Pawn == null) + if (Pawn == null) { - this.energy = 0f; + energy = 0f; return; } @@ -144,7 +144,7 @@ public override void CompPostTick(ref float severityAdjustment) if (!setup) { setup = true; - this.energy = this.EnergyMax; + energy = EnergyMax; KeepDisplaying(); } //{ @@ -158,28 +158,28 @@ public override void CompPostTick(ref float severityAdjustment) public bool CheckPreAbsorbDamage(DamageInfo dinfo) { - if (this.ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(this.Pawn.Position)) || dinfo.Def.isExplosive)) + if (ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(Pawn.Position)) || dinfo.Def.isExplosive)) { if (dinfo.Instigator != null) { AttachableThing attachableThing = dinfo.Instigator as AttachableThing; - if (attachableThing != null && attachableThing.parent == this.Pawn) + if (attachableThing != null && attachableThing.parent == Pawn) { return false; } } - this.energy -= (float)dinfo.Amount * this.EnergyLossPerDamage; + energy -= (float)dinfo.Amount * EnergyLossPerDamage; //if (dinfo.Def == DamageDefOf.EMP) //{ // this.energy = -1f; //} - if (this.energy < 0f) + if (energy < 0f) { - this.Break(); + Break(); } else { - this.AbsorbedDamage(dinfo); + AbsorbedDamage(dinfo); } return true; } @@ -188,73 +188,73 @@ public bool CheckPreAbsorbDamage(DamageInfo dinfo) public void KeepDisplaying() { - this.lastKeepDisplayTick = Find.TickManager.TicksGame; + lastKeepDisplayTick = Find.TickManager.TicksGame; } private void AbsorbedDamage(DamageInfo dinfo) { - SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - this.impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); - Vector3 loc = this.Pawn.TrueCenter() + this.impactAngleVect.RotatedBy(180f) * 0.5f; + SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); + impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); + Vector3 loc = Pawn.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; float num = Mathf.Min(10f, 2f + (float)dinfo.Amount / 10f); - MoteMaker.MakeStaticMote(loc, this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); + MoteMaker.MakeStaticMote(loc, Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); int num2 = (int)num; for (int i = 0; i < num2; i++) { - MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); + MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); } - this.lastAbsorbDamageTick = Find.TickManager.TicksGame; - this.KeepDisplaying(); + lastAbsorbDamageTick = Find.TickManager.TicksGame; + KeepDisplaying(); } public void NotifyRefilled() { - this.energy = this.EnergyMax; + energy = EnergyMax; } private void Break() { - SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - MoteMaker.MakeStaticMote(this.Pawn.TrueCenter(), this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); + SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); + MoteMaker.MakeStaticMote(Pawn.TrueCenter(), Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); for (int i = 0; i < 6; i++) { - Vector3 loc = this.Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); - MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); + Vector3 loc = Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); + MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); } - this.energy = 0f; - this.ticksToReset = this.StartingTicksToReset; + energy = 0f; + ticksToReset = StartingTicksToReset; } private void Reset() { - if (this.Pawn.Spawned) + if (Pawn.Spawned) { - SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - MoteMaker.ThrowLightningGlow(this.Pawn.TrueCenter(), this.Pawn.Map, 3f); + SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); + MoteMaker.ThrowLightningGlow(Pawn.TrueCenter(), Pawn.Map, 3f); } - this.ticksToReset = -1; - this.energy = this.EnergyOnReset; + ticksToReset = -1; + energy = EnergyOnReset; } public void DrawWornExtras() { - if (this.ShieldState == ShieldState.Active && this.ShouldDisplay) + if (ShieldState == ShieldState.Active && ShouldDisplay) { - float num = Mathf.Lerp(1.2f, 1.55f, this.energy); - Vector3 vector = this.Pawn.Drawer.DrawPos; + float num = Mathf.Lerp(1.2f, 1.55f, energy); + Vector3 vector = Pawn.Drawer.DrawPos; vector.y = Altitudes.AltitudeFor(AltitudeLayer.MoteOverhead); - int num2 = Find.TickManager.TicksGame - this.lastAbsorbDamageTick; + int num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick; if (num2 < 8) { float num3 = (float)(8 - num2) / 8f * 0.05f; - vector += this.impactAngleVect * num3; + vector += impactAngleVect * num3; num -= num3; } float angle = (float)Rand.Range(0, 360); Vector3 s = new Vector3(num, 1f, num); Matrix4x4 matrix = default(Matrix4x4); matrix.SetTRS(vector, Quaternion.AngleAxis(angle, Vector3.up), s); - Graphics.DrawMesh(MeshPool.plane10, matrix, HediffComp_Shield.BubbleMat, 0); + Graphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs index 2eaf436..b7fc28c 100644 --- a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire +namespace Vampire.Hediffs { public class HediffComp_SkillOffset : HediffComp { @@ -8,7 +8,7 @@ public HediffCompProperties_SkillOffset Props { get { - return (HediffCompProperties_SkillOffset)this.props; + return (HediffCompProperties_SkillOffset)props; } } @@ -16,7 +16,7 @@ public override string CompTipStringExtra { get { - return this.Props.skillDef.LabelCap + ": " + ((this.Props.offset >= 0) ? "+" : "") + this.Props.offset.ToString(); + return Props.skillDef.LabelCap + ": " + ((Props.offset >= 0) ? "+" : "") + Props.offset.ToString(); } } diff --git a/Source/Vampires/Hediffs/HediffVampirism.cs b/Source/Vampires/Hediffs/HediffVampirism.cs index 7b7dccd..ab3b2b7 100644 --- a/Source/Vampires/Hediffs/HediffVampirism.cs +++ b/Source/Vampires/Hediffs/HediffVampirism.cs @@ -1,9 +1,12 @@ using System.Linq; using System.Text; using RimWorld; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Hediffs { public class HediffVampirism : HediffWithComps @@ -21,7 +24,7 @@ public class HediffVampirism : HediffWithComps public override void PostTick() { base.PostTick(); - if (this.pawn.VampComp() is CompVampire v) + if (pawn.VampComp() is CompVampire v) { if (!initialized) @@ -32,7 +35,7 @@ public override void PostTick() { if (sire == null) - sire = VampireRelationUtility.FindSireFor(this.pawn, this.bloodline, this.generation).VampComp(); + sire = VampireRelationUtility.FindSireFor(pawn, bloodline, generation).VampComp(); if (generation < 0) generation = sire.Generation + 1; if (bloodline == null) @@ -44,7 +47,7 @@ public override void PostTick() { v.InitializeVampirism(sire?.AbilityUser ?? null, bloodline, generation, firstVampire); } - this.pawn.Drawer.renderer.graphics.ResolveAllGraphics(); + pawn.Drawer.renderer.graphics.ResolveAllGraphics(); } if (Find.TickManager.TicksGame % 60 == 0) @@ -53,7 +56,7 @@ public override void PostTick() HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_SunExposure, 0.001f); if (v.BloodPool?.CurLevelPercentage < 0.3f) HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_TheBeast, 0.001f); - if (this.pawn.health.hediffSet is HediffSet hdSet) + if (pawn.health.hediffSet is HediffSet hdSet) { if (hdSet.GetFirstHediffOfDef(HediffDefOf.Hypothermia) is Hediff hypoThermia) hdSet.hediffs.Remove(hypoThermia); @@ -69,13 +72,13 @@ public override string LabelBase { get { - if (this.pawn.VampComp().Generation != -1) + if (pawn.VampComp().Generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.pawn.VampComp().Generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(pawn.VampComp().Generation)); } - if (this.generation != -1) + if (generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(generation)); } return "Vampire"; } @@ -87,23 +90,23 @@ public override string TipStringExtra { StringBuilder s = new StringBuilder(); s.AppendLine("ROMV_HI_Bloodline".Translate(this?.pawn?.VampComp()?.Bloodline?.LabelCap ?? this?.bloodline?.label ?? "Unknown")); - s.AppendLine("ROMV_HI_Sire".Translate(this.pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(this.pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); - if (this.pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) + s.AppendLine("ROMV_HI_Sire".Translate(pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); + if (pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) { s.AppendLine("ROMV_HI_Childer".Translate("ROMV_HI_None".Translate())); } else { - string[] childerNames = new string[this.pawn.VampComp().Childer.Count]; + string[] childerNames = new string[pawn.VampComp().Childer.Count]; for (int i = 0; i < childerNames.Length; i++) - childerNames[i] = this.pawn.VampComp().Childer.ElementAt(i).LabelShort; + childerNames[i] = pawn.VampComp().Childer.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Childer".Translate(string.Join(", ", childerNames))); } - if (!this.pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) + if (!pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) { - string[] soulNames = new string[this.pawn.VampComp().Souls.Count]; + string[] soulNames = new string[pawn.VampComp().Souls.Count]; for (int i = 0; i < soulNames.Length; i++) - soulNames[i] = this.pawn.VampComp().Souls.ElementAt(i).LabelShort; + soulNames[i] = pawn.VampComp().Souls.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Souls".Translate(string.Join(", ", soulNames))); } if (this?.pawn?.VampComp()?.Thinblooded ?? false) @@ -142,7 +145,7 @@ public static string AddOrdinal(int num) public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.initialized, "initialized", false); + Scribe_Values.Look(ref initialized, "initialized"); //Scribe_Collections.Look(ref this.carriedBloodInfectors, "carriedBloodInfectors", LookMode.Deep, LookMode.Value); //Scribe_Collections.Look(ref this.carriedBloodDrugEffects, "carriedBloodDrugEffects", LookMode.Deep, LookMode.Value); } diff --git a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs index 26418f1..f6df8c4 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs @@ -1,4 +1,6 @@ -namespace Vampire +using Vampire.Defs; + +namespace Vampire.Hediffs { public class HediffVampirism_Gargoyle : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs index 9d223f1..3bcc2cd 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs @@ -1,4 +1,6 @@ -namespace Vampire +using Vampire.Defs; + +namespace Vampire.Hediffs { public class HediffVampirism_Lasombra : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs index d467a56..6adeb4d 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs @@ -1,4 +1,6 @@ -namespace Vampire +using Vampire.Defs; + +namespace Vampire.Hediffs { public class HediffVampirism_Pijavica : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs index c8e4bff..c5d8279 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs @@ -1,4 +1,6 @@ -namespace Vampire +using Vampire.Defs; + +namespace Vampire.Hediffs { public class HediffVampirism_Tremere : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs index 40ae933..d51c11e 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs @@ -1,4 +1,6 @@ -namespace Vampire +using Vampire.Defs; + +namespace Vampire.Hediffs { public class HediffVampirism_Tzimisce : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs index d1dd15a..253ef79 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs @@ -1,9 +1,12 @@ using System; using System.Collections.Generic; using System.Text; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Hediffs { public class HediffVampirism_VampGiver : HediffWithComps { @@ -15,7 +18,7 @@ public virtual int Generation { if (generation == -1) { - switch (this.CurStageIndex) + switch (CurStageIndex) { case 0: generation = 14; break; case 1: generation = Rand.Range(10, 13); break; @@ -39,7 +42,7 @@ public override string TipStringExtra { get { - int gen = this.generation; + int gen = generation; int math = (gen > 7) ? 10 + (Math.Abs(gen - 13)) : 10 * (Math.Abs(gen - 9)); StringBuilder s = new StringBuilder(); @@ -67,11 +70,11 @@ public override void PostTick() if (!setup) { bool setup = true; - if (this.pawn.VampComp() is CompVampire v) + if (pawn.VampComp() is CompVampire v) { - int generatonToSpawn = this.Generation; + int generatonToSpawn = Generation; //Pawn sire = VampireRelationUtility.FindSireFor(this.pawn, this.Bloodline, generatonToSpawn); - v.InitializeVampirism(null, this.Bloodline, generatonToSpawn); + v.InitializeVampirism(null, Bloodline, generatonToSpawn); } } base.PostTick(); @@ -80,8 +83,8 @@ public override void PostTick() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.setup, "setup", false); - Scribe_Values.Look(ref this.generation, "generation", -1); + Scribe_Values.Look(ref setup, "setup"); + Scribe_Values.Look(ref generation, "generation", -1); } } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs index 568c4f5..c86ef3d 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs @@ -1,7 +1,8 @@ using RimWorld; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Hediffs { public class HediffWithComps_BeastHunger : HediffWithComps { @@ -15,20 +16,20 @@ public override void Tick() if (Find.TickManager.TicksGame % checkRate == 0) { - if (this.pawn?.BloodNeed() is Need_Blood pB) + if (pawn?.BloodNeed() is Need_Blood pB) { - if (this.CurStageIndex == 3 && this.pawn.MentalStateDef != MentalState_VampireBeast) + if (CurStageIndex == 3 && pawn.MentalStateDef != MentalState_VampireBeast) { - this.pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); } if (pB.CurLevelPercentage < 0.3f) { - this.Severity += 0.005f; + Severity += 0.005f; } else { - this.Severity -= 0.2f; + Severity -= 0.2f; } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs index 6543fce..e255460 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs @@ -1,9 +1,11 @@ using RimWorld; +using Vampire.Defs; +using Vampire.Utilities; using Verse; -using Verse.Sound; using Verse.AI; +using Verse.Sound; -namespace Vampire +namespace Vampire.Hediffs { public class HediffWithComps_SunlightExposure : HediffWithComps, ISizeReporter { @@ -17,36 +19,36 @@ public override void Tick() { base.Tick(); - if (this.pawn == null && this.pawn?.Corpse?.InnerPawn == null) + if (pawn == null && pawn?.Corpse?.InnerPawn == null) { return; } - if (this.sustainer != null && !this.sustainer.Ended) + if (sustainer != null && !sustainer.Ended) { - this.sustainer.Maintain(); + sustainer.Maintain(); } else { //LongEventHandler.ExecuteWhenFinished(delegate //{ SoundDef def = SoundDef.Named("FireBurning"); - SoundInfo info = SoundInfo.InMap(new TargetInfo(this.pawn.Position, this.pawn.Map, false), MaintenanceType.PerTick); + SoundInfo info = SoundInfo.InMap(new TargetInfo(pawn.Position, pawn.Map), MaintenanceType.PerTick); info.volumeFactor *= 2; //this.sustainer = def.TrySpawnSustainer(info); //SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); - this.sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); + sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); //}); } if (sunBurningEffect != null) { - sunBurningEffect.EffectTick(this.pawn, this.pawn); + sunBurningEffect.EffectTick(pawn, pawn); if (Find.TickManager.TicksGame % 20 == 0) { - if (this.CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(this.pawn.DrawPos, this.pawn.Map, 1f); - if (this.CurStageIndex > 1 && Rand.Value < (this.CurStageIndex * 0.31f)) - MoteMaker.ThrowFireGlow(this.pawn.PositionHeld, this.pawn.Map, 1f); + if (CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(pawn.DrawPos, pawn.Map, 1f); + if (CurStageIndex > 1 && Rand.Value < (CurStageIndex * 0.31f)) + MoteMaker.ThrowFireGlow(pawn.PositionHeld, pawn.Map, 1f); } } if (Find.TickManager.TicksGame % checkRate == 0) @@ -63,16 +65,16 @@ public override void Tick() } } - if (this.CurStageIndex > 1) + if (CurStageIndex > 1) { Burn(); } - this.Severity += 0.017f; + Severity += 0.017f; } else { curSunDamage = 5; - this.Severity -= 0.2f; + Severity -= 0.2f; if (sunBurningEffect != null) sunBurningEffect = null; if (pawn?.MentalStateDef == VampDefOf.ROMV_Rotschreck) { pawn.MentalState.RecoverFromState(); } if (pawn?.CurJob?.def == VampDefOf.ROMV_DigAndHide) pawn.jobs.StopAll(); @@ -87,9 +89,9 @@ public void Burn() if (!pawn.Dead) { int dmgRange = curSunDamage; - DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage), -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown); + DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage)); dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside); - if (this.CurStageIndex > 2) + if (CurStageIndex > 2) curSunDamage += Rand.Range(1, 2); ApplyBurnDamage(dinfo); @@ -115,7 +117,7 @@ public void ApplyBurnDamage(DamageInfo dinfo) { h.CurState.RecoverFromState(); } - if (this.CurStageIndex > 1 && Rand.Value < this.Severity && !pawn.InMentalState) + if (CurStageIndex > 1 && Rand.Value < Severity && !pawn.InMentalState) { h.TryStartMentalState(VampDefOf.ROMV_Rotschreck); } @@ -133,7 +135,7 @@ public void RotCorpseAway() public float CurrentSize() { - switch (this.CurStageIndex) + switch (CurStageIndex) { case 1: return 8; diff --git a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs index a03d929..9144b4c 100644 --- a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs +++ b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs @@ -1,6 +1,7 @@ -using Verse; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.Hediffs { public class Hediff_AddedPart_Fangs : Hediff_AddedPart { @@ -13,7 +14,7 @@ public override bool ShouldRemove { get { - if (this.pawn.IsVampire()) + if (pawn.IsVampire()) return false; return true; } @@ -25,8 +26,8 @@ public override bool ShouldRemove /// public override void PostRemoved() { - if (!this.pawn.IsVampire()) - this.pawn.health.RestorePart(base.Part, this, false); + if (!pawn.IsVampire()) + pawn.health.RestorePart(Part, this, false); base.PostRemoved(); } diff --git a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs index f052dd4..c263aa9 100644 --- a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs +++ b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs @@ -12,11 +12,11 @@ private Pawn PawnForNeeds { get { - if (base.SelPawn != null) + if (SelPawn != null) { - return base.SelPawn; + return SelPawn; } - Corpse corpse = base.SelThing as Corpse; + Corpse corpse = SelThing as Corpse; if (corpse != null) { return corpse.InnerPawn; @@ -35,23 +35,23 @@ public override bool IsVisible public ITab_Pawn_NeedsCorpse() { - this.labelKey = "TabNeeds"; - this.tutorTag = "Needs"; + labelKey = "TabNeeds"; + tutorTag = "Needs"; } public override void OnOpen() { - this.thoughtScrollPosition = default(Vector2); + thoughtScrollPosition = default(Vector2); } protected override void FillTab() { - NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, this.size.x, this.size.y), PawnForNeeds, ref this.thoughtScrollPosition); + NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, size.x, size.y), PawnForNeeds, ref thoughtScrollPosition); } protected override void UpdateSize() { - this.size = NeedsCardUtility.GetSize(PawnForNeeds); + size = NeedsCardUtility.GetSize(PawnForNeeds); } } } diff --git a/Source/Vampires/Need_Blood.cs b/Source/Vampires/Need_Blood.cs index 5e63188..5991407 100644 --- a/Source/Vampires/Need_Blood.cs +++ b/Source/Vampires/Need_Blood.cs @@ -4,6 +4,8 @@ using Verse; using RimWorld; using System.Linq; +using Vampire.Components; +using Vampire.Utilities; namespace Vampire { @@ -39,13 +41,13 @@ public class Need_Blood : Need #endregion Variables #region Properties - public CompVampire CompVampire => this.pawn?.TryGetComp(); - public bool IsAnimal => this.pawn?.RaceProps?.Animal ?? false; - public bool IsFull => this.CurBloodPoints == this.MaxBloodPoints; - public bool Starving => CompVampire != null && CompVampire.IsVampire && this.CurCategory == HungerCategory.Starving; + public CompVampire CompVampire => pawn?.TryGetComp(); + public bool IsAnimal => pawn?.RaceProps?.Animal ?? false; + public bool IsFull => CurBloodPoints == MaxBloodPoints; + public bool Starving => CompVampire != null && CompVampire.IsVampire && CurCategory == HungerCategory.Starving; public bool ShouldDie => CurBloodPoints == 0; public float PercPerPoint => 1f / MaxBloodPoints; - public bool DrainingIsDeadly => this.CurBloodPoints <= 2 || (this.pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); + public bool DrainingIsDeadly => CurBloodPoints <= 2 || (pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); //public PreferredFeedMode PreferredFeedMode { get => preferredFeedMode; set => preferredFeedMode = value; } @@ -87,7 +89,7 @@ public int MaxBloodPoints int result = 7; if (IsAnimal) { - result = MaxBloodPointsForAnimal(this.pawn); + result = MaxBloodPointsForAnimal(pawn); } if (CompVampire != null && CompVampire.IsVampire) { @@ -118,13 +120,13 @@ public HungerCategory CurCategory { if (CompVampire != null && CompVampire.IsVampire) { - if (base.CurLevelPercentage <= 0f) + if (CurLevelPercentage <= 0f) return HungerCategory.Starving; - if (base.CurLevelPercentage < PercPerPoint * 2) + if (CurLevelPercentage < PercPerPoint * 2) return HungerCategory.UrgentlyHungry; - if (base.CurLevelPercentage < MaxLevel) + if (CurLevelPercentage < MaxLevel) return HungerCategory.Hungry; } return HungerCategory.Fed; @@ -146,9 +148,9 @@ public override float CurLevel public override float MaxLevel => MaxBloodPoints; public float BloodWanted - => this.MaxBloodPoints - this.CurBloodPoints; + => MaxBloodPoints - CurBloodPoints; - public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - this.lastNonStarvingTick); + public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - lastNonStarvingTick); public Need_Blood(Pawn pawn) : base(pawn) { } @@ -157,12 +159,12 @@ public override void ExposeData() //private int curBloodPoints = Int32.MinValue; //private int nextBloodChangeTick = Int32.MaxValue; base.ExposeData(); - Scribe_Values.Look(ref this.lastNonStarvingTick, "lastNonStarvingTick", -1, false); - Scribe_Values.Look(ref this.nextBloodChangeTick, "nextBloodChangeTick", -1, false); - Scribe_Values.Look(ref this.curBloodPoints, "curBloodPoints", -1, false); - Scribe_Values.Look(ref this.bloodFixer, "bloodFixer", false); - Scribe_Values.Look(ref this.preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); - Scribe_Values.Look(ref this.preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); + Scribe_Values.Look(ref lastNonStarvingTick, "lastNonStarvingTick", -1); + Scribe_Values.Look(ref nextBloodChangeTick, "nextBloodChangeTick", -1); + Scribe_Values.Look(ref curBloodPoints, "curBloodPoints", -1); + Scribe_Values.Look(ref bloodFixer, "bloodFixer"); + Scribe_Values.Look(ref preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); + Scribe_Values.Look(ref preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); } public int AdjustBlood(int amt, bool alert = true) @@ -172,10 +174,10 @@ public int AdjustBlood(int amt, bool alert = true) CurBloodPoints = Mathf.Clamp(CurBloodPoints + amt, 0, MaxBloodPoints); CurLevelPercentage = CurBloodPoints * PercPerPoint; - if (!this.pawn.IsVampire() && CurBloodPoints < prevBloodPoints) + if (!pawn.IsVampire() && CurBloodPoints < prevBloodPoints) { int diff = prevBloodPoints - CurBloodPoints; - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); } if (CurBloodPoints == 0) @@ -186,22 +188,22 @@ public int AdjustBlood(int amt, bool alert = true) public void Notify_NoBloodLeft(bool alert = true) { - if (this.pawn.Faction == Faction.OfPlayer) + if (pawn.Faction == Faction.OfPlayer) { if (alert) { - if (this.pawn.IsVampire()) - Messages.Message("ROMV_BloodDepletedVamp".Translate(this.pawn.LabelCap), MessageTypeDefOf.NeutralEvent); + if (pawn.IsVampire()) + Messages.Message("ROMV_BloodDepletedVamp".Translate(pawn.LabelCap), MessageTypeDefOf.NeutralEvent); else - Messages.Message("ROMV_BloodDepleted".Translate(this.pawn.LabelCap), MessageTypeDefOf.NegativeEvent); + Messages.Message("ROMV_BloodDepleted".Translate(pawn.LabelCap), MessageTypeDefOf.NegativeEvent); } } - if (!this.pawn.IsVampire()) + if (!pawn.IsVampire()) { - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 999f); - if (!this.pawn.Dead) this.pawn.Kill(null); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 999f); + if (!pawn.Dead) pawn.Kill(null); } } @@ -219,7 +221,7 @@ public override void NeedInterval() if (!bloodFixer) { bloodFixer = true; - this.nextBloodChangeTick = -1; + nextBloodChangeTick = -1; } //if ((pawn?.IsVampire() ?? false) && pawn.RaceProps != null && pawn.RaceProps.Humanlike && pawn.Faction != null && pawn.Faction == Faction.OfPlayer && @@ -245,23 +247,23 @@ public override void NeedInterval() //if (Find.TickManager.TicksGame % 250 == 0) //Log.Message("Ticks => " + Find.TickManager.TicksGame); - if (Find.TickManager.TicksGame > this.nextBloodChangeTick) + if (Find.TickManager.TicksGame > nextBloodChangeTick) { int math = Find.TickManager.TicksGame + GenDate.TicksPerDay; //Log.Message("BLOOD TICKS SET TO => " + math); - this.nextBloodChangeTick = math; + nextBloodChangeTick = math; AdjustBlood(BloodChangePerDay); } - if (!this.Starving) + if (!Starving) { - this.lastNonStarvingTick = Find.TickManager.TicksGame; + lastNonStarvingTick = Find.TickManager.TicksGame; } - if (!base.IsFrozen) + if (!IsFrozen) { - if (this.Starving) + if (Starving) { if (CompVampire != null && CompVampire.IsVampire) @@ -269,11 +271,11 @@ public override void NeedInterval() CompVampire.Notify_Starving(lastNonStarvingTick); } - else if (!this.pawn.Dead) + else if (!pawn.Dead) { - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 1f); - this.pawn.Kill(null); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 1f); + pawn.Kill(null); } } } @@ -282,10 +284,10 @@ public override void NeedInterval() public override void SetInitialLevel() { //base.CurLevelPercentage = 1.0f; - this.CurLevel = this.CurBloodPoints = this.MaxBloodPoints; + CurLevel = CurBloodPoints = MaxBloodPoints; if (Current.ProgramState == ProgramState.Playing) { - this.lastNonStarvingTick = Find.TickManager.TicksGame; + lastNonStarvingTick = Find.TickManager.TicksGame; } } @@ -293,23 +295,23 @@ public override string GetTipString() { return string.Concat(new string[] { - this.GetLabel(), + GetLabel(), ": ", - base.CurLevelPercentage.ToStringPercent(), + CurLevelPercentage.ToStringPercent(), " (", - this.CurLevel.ToString("0.##"), + CurLevel.ToString("0.##"), " / ", - this.MaxLevel.ToString("0.##"), + MaxLevel.ToString("0.##"), ")\n", - this.GetDescription() + GetDescription() }); } public string GetLabel() { - bool isVampire = this.pawn.IsVampire(); + bool isVampire = pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (this.pawn.IsAndroid()) + if (pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitae".Translate(); @@ -318,14 +320,14 @@ public string GetLabel() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_Vitae".Translate(); - return this.LabelCap; + return LabelCap; } public string GetDescription() { - bool isVampire = this.pawn.IsVampire(); + bool isVampire = pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (this.pawn.IsAndroid()) + if (pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitaeDesc".Translate(); @@ -334,13 +336,13 @@ public string GetDescription() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_VitaeDesc".Translate(); - return this.def.description; + return def.description; } public Color GetColorToUse() { - bool isVampire = this.pawn.IsVampire(); - if (this.pawn.IsAndroid()) + bool isVampire = pawn.IsVampire(); + if (pawn.IsAndroid()) { if (isVampire) return VampireUtility.ColorAndroidCoolantVitae; @@ -355,14 +357,14 @@ public Color GetColorToUse() public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, float customMargin = -1f, bool drawArrows = true, bool doTooltip = true) { - if (this.threshPercents == null) + if (threshPercents == null) { - this.threshPercents = new List(); + threshPercents = new List(); } - this.threshPercents.Clear(); + threshPercents.Clear(); for (int i = 1; i < MaxBloodPoints; i++) { - this.threshPercents.Add(PercPerPoint * i); + threshPercents.Add(PercPerPoint * i); } if (rect.height > 70f) { @@ -376,7 +378,7 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, } if (doTooltip) { - TooltipHandler.TipRegion(rect, new TipSignal(() => this.GetTipString(), rect.GetHashCode())); + TooltipHandler.TipRegion(rect, new TipSignal(() => GetTipString(), rect.GetHashCode())); } if (pawn != null && pawn.Faction == Faction.OfPlayerSilentFail && pawn.VampComp() is CompVampire v && v.IsVampire) @@ -394,32 +396,32 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, Text.Font = ((rect.height <= 55f) ? GameFont.Tiny : GameFont.Small); Text.Anchor = TextAnchor.LowerLeft; Rect rect2 = new Rect(rect.x + num3 + rect.width * 0.1f, rect.y, rect.width - num3 - rect.width * 0.1f, rect.height / 2f); - Widgets.Label(rect2, this.GetLabel()); + Widgets.Label(rect2, GetLabel()); Text.Anchor = TextAnchor.UpperLeft; Rect rect3 = new Rect(rect.x, rect.y + rect.height / 2f, rect.width, rect.height / 2f); rect3 = new Rect(rect3.x + num3, rect3.y, rect3.width - num3 * 2f, rect3.height - num2); Color colorToUse = GetColorToUse(); //(this.pawn?.IsVampire() ?? false) ? new Color(0.65f, 0.008f, 0.008f) : new Color(0.73f, 0.02f, 0.02f); - Widgets.FillableBar(rect3, this.CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); + Widgets.FillableBar(rect3, CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); //Widgets.FillableBar(rect3, this.CurLevelPercentage); if (drawArrows) { - Widgets.FillableBarChangeArrows(rect3, this.GUIChangeArrow); + Widgets.FillableBarChangeArrows(rect3, GUIChangeArrow); } - if (this.threshPercents != null) + if (threshPercents != null) { - for (int i = 0; i < Mathf.Min(this.threshPercents.Count, maxThresholdMarkers); i++) + for (int i = 0; i < Mathf.Min(threshPercents.Count, maxThresholdMarkers); i++) { - this.DrawBarThreshold(rect3, this.threshPercents[i]); + DrawBarThreshold(rect3, threshPercents[i]); } } - float curInstantLevelPercentage = this.CurInstantLevelPercentage; + float curInstantLevelPercentage = CurInstantLevelPercentage; if (curInstantLevelPercentage >= 0f) { - this.DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); + DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); } - if (!this.def.tutorHighlightTag.NullOrEmpty()) + if (!def.tutorHighlightTag.NullOrEmpty()) { - UIHighlighter.HighlightOpportunity(rect, this.def.tutorHighlightTag); + UIHighlighter.HighlightOpportunity(rect, def.tutorHighlightTag); } Text.Font = GameFont.Small; } @@ -430,7 +432,7 @@ private void DrawBarThreshold(Rect barRect, float threshPct) float num = (float)((barRect.width <= 60f) ? 1 : 2); Rect position = new Rect(barRect.x + barRect.width * threshPct - (num - 1f), barRect.y + barRect.height / 2f, num, barRect.height / 2f); Texture2D image; - if (threshPct < this.CurLevelPercentage) + if (threshPct < CurLevelPercentage) { image = BaseContent.BlackTex; GUI.color = new Color(1f, 1f, 1f, 0.9f); diff --git a/Source/Vampires/ScenPart_LongerNights.cs b/Source/Vampires/ScenPart_LongerNights.cs index 5fa802c..f0f9917 100644 --- a/Source/Vampires/ScenPart_LongerNights.cs +++ b/Source/Vampires/ScenPart_LongerNights.cs @@ -10,7 +10,7 @@ public class ScenPart_LongerNights : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 2 + 31f); + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 2 + 31f); DoVampModifierEditInterface(new Rect(scenPartRect.x, scenPartRect.y, scenPartRect.width, 31f)); } @@ -25,14 +25,14 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_NightLength".Translate().CapitalizeFirst()); Text.Anchor = TextAnchor.UpperLeft; - this.nightsLength = Widgets.HorizontalSlider(rect4, this.nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); + nightsLength = Widgets.HorizontalSlider(rect4, nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.nightsLength, "nightsLength", 0.1f); + Scribe_Values.Look(ref nightsLength, "nightsLength", 0.1f); } public override string Summary(Scenario scen) @@ -48,7 +48,7 @@ public string GetLongerNightsSummary() public override void Randomize() { base.Randomize(); - this.nightsLength = Rand.Range(0.1f, 1.0f); + nightsLength = Rand.Range(0.1f, 1.0f); } } } diff --git a/Source/Vampires/ScenPart_StartingVampires.cs b/Source/Vampires/ScenPart_StartingVampires.cs index d9bb334..eea9135 100644 --- a/Source/Vampires/ScenPart_StartingVampires.cs +++ b/Source/Vampires/ScenPart_StartingVampires.cs @@ -4,6 +4,8 @@ using Verse; using RimWorld; using Harmony; +using Vampire.Defs; +using Vampire.Hediffs; namespace Vampire { @@ -22,12 +24,12 @@ public class ScenPart_StartingVampires : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f + 31f); - if (Widgets.ButtonText(scenPartRect.TopPartPixels(ScenPart.RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate(), true, false, true)) + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f + 31f); + if (Widgets.ButtonText(scenPartRect.TopPartPixels(RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate())) { - FloatMenuUtility.MakeMenu(this.PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate + FloatMenuUtility.MakeMenu(PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate { - this.bloodline = bl; + bloodline = bl; }); } //Widgets.IntRange(new Rect(scenPartRect.x, scenPartRect.y + ScenPart.RowHeight, scenPartRect.width, 31f), listing.CurHeight.GetHashCode(), ref this.generationRange, 4, this.maxGeneration, "ROMV_VampireGeneration"); @@ -37,7 +39,7 @@ public override void DoEditInterface(Listing_ScenEdit listing) // RimWorld.ScenPart_PawnModifier protected void DoVampModifierEditInterface(Rect rect) { - Rect rect2 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 2, rect.width, 31); + Rect rect2 = new Rect(rect.x, rect.y + RowHeight * 2, rect.width, 31); Rect rect3 = rect2.LeftPart(0.333f).Rounded(); Rect rect4 = rect2.RightPart(0.666f).Rounded(); @@ -45,9 +47,9 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_Chance".Translate()); Text.Anchor = TextAnchor.UpperLeft; - this.vampChance = Widgets.HorizontalSlider(rect4, this.vampChance, 0f, 1f, false, "", "", ""); + vampChance = Widgets.HorizontalSlider(rect4, vampChance, 0f, 1f, false, "", "", ""); //Widgets.TextFieldNumeric(rect4, ref this, ref this.numOfVampsBuffer, 1, 50); - Rect rect5 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 3, rect.width, 31); + Rect rect5 = new Rect(rect.x, rect.y + RowHeight * 3, rect.width, 31); Rect rect6 = rect5.LeftPart(0.333f).Rounded(); Rect rect7 = rect5.RightPart(0.666f).Rounded(); @@ -55,15 +57,15 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect6, "ROMV_StartInCoffins".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.CheckboxLabeled(rect7, "", ref this.spawnInCoffins, false); - Rect rect8 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 4, rect.width, 31); + Widgets.CheckboxLabeled(rect7, "", ref spawnInCoffins); + Rect rect8 = new Rect(rect.x, rect.y + RowHeight * 4, rect.width, 31); Rect rect9 = rect8.LeftPart(0.666f).Rounded(); Rect rect10 = rect8.RightPart(0.333f).Rounded(); Text.Anchor = TextAnchor.MiddleRight; Widgets.Label(rect9, "ROMV_MaxVampires".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.TextFieldNumeric(rect10, ref this.maxVampires, ref this.maxVampiresBuf, 1, 100); + Widgets.TextFieldNumeric(rect10, ref maxVampires, ref maxVampiresBuf, 1, 100); } @@ -83,11 +85,11 @@ public override void ExposeData() //private IntRange generationRange = new IntRange(10, 13); //private int maxGeneration = 15; //private bool spawnInCoffins = false; - Scribe_Defs.Look(ref this.bloodline, "bloodline"); - Scribe_Values.Look(ref this.generationRange, "generationRange", default(IntRange), false); - Scribe_Values.Look(ref this.vampChance, "vampChance", 0.5f); - Scribe_Values.Look(ref this.maxVampires, "maxVampires", 1); - Scribe_Values.Look(ref this.spawnInCoffins, "spawnInCoffins", false); + Scribe_Defs.Look(ref bloodline, "bloodline"); + Scribe_Values.Look(ref generationRange, "generationRange"); + Scribe_Values.Look(ref vampChance, "vampChance", 0.5f); + Scribe_Values.Look(ref maxVampires, "maxVampires", 1); + Scribe_Values.Look(ref spawnInCoffins, "spawnInCoffins"); } public override string Summary(Scenario scen) @@ -119,11 +121,11 @@ public string GenRangeToString() public override void Randomize() { base.Randomize(); - this.vampChance = Rand.Range(0.2f, 0.8f); - this.bloodline = this.PossibleBloodlines().RandomElement(); - this.generationRange.max = Rand.Range(10, 15); - this.generationRange.min = Rand.Range(8, this.generationRange.max); - this.spawnInCoffins = (Rand.Value > 0.3) ? true : false; + vampChance = Rand.Range(0.2f, 0.8f); + bloodline = PossibleBloodlines().RandomElement(); + generationRange.max = Rand.Range(10, 15); + generationRange.min = Rand.Range(8, generationRange.max); + spawnInCoffins = (Rand.Value > 0.3) ? true : false; } public override void PostMapGenerate(Map map) @@ -153,7 +155,7 @@ public override void PostMapGenerate(Map map) bool instaDrop = Find.GameInitData.QuickStarted; if (usingDropPods) { - DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true, true); + DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true); } } } diff --git a/Source/Vampires/SkillSheet.cs b/Source/Vampires/SkillSheet.cs index 1818727..1bb7e7f 100644 --- a/Source/Vampires/SkillSheet.cs +++ b/Source/Vampires/SkillSheet.cs @@ -1,4 +1,6 @@ using System.Collections.Generic; +using Vampire.Defs; +using Vampire.Utilities; using Verse; namespace Vampire @@ -45,8 +47,8 @@ public SkillSheet(Pawn pawn) public void ExposeData() { - Scribe_References.Look(ref this.pawn, "pawn"); - Scribe_Collections.Look(ref this.disciplines, true, "disciplines", LookMode.Deep, new object[0]); + Scribe_References.Look(ref pawn, "pawn"); + Scribe_Collections.Look(ref disciplines, true, "disciplines", LookMode.Deep, new object[0]); } } } diff --git a/Source/Vampires/UI/Alert_VampireInSunlight.cs b/Source/Vampires/UI/Alert_VampireInSunlight.cs index 4445c3d..4e96271 100644 --- a/Source/Vampires/UI/Alert_VampireInSunlight.cs +++ b/Source/Vampires/UI/Alert_VampireInSunlight.cs @@ -1,10 +1,12 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using Verse; using RimWorld; +using Vampire.Components; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.UI { public class Alert_VampireInSunlight : Alert { @@ -32,14 +34,14 @@ private IEnumerable VampiresInTheSun public Alert_VampireInSunlight() { - this.defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); - this.defaultPriority = AlertPriority.Critical; + defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); + defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in this.VampiresInTheSun) + foreach (Pawn current in VampiresInTheSun) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -52,7 +54,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = this.VampiresInTheSun.FirstOrDefault(); + Pawn pawn = VampiresInTheSun.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/UI/Alert_VampireStarving.cs b/Source/Vampires/UI/Alert_VampireStarving.cs index 5e47285..1cd15b2 100644 --- a/Source/Vampires/UI/Alert_VampireStarving.cs +++ b/Source/Vampires/UI/Alert_VampireStarving.cs @@ -1,10 +1,12 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using Verse; using RimWorld; +using Vampire.Components; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.UI { public class Alert_VampireStarving : Alert { @@ -32,14 +34,14 @@ private IEnumerable VampiresStarving public Alert_VampireStarving() { - this.defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); - this.defaultPriority = AlertPriority.Critical; + defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); + defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in this.VampiresStarving) + foreach (Pawn current in VampiresStarving) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -52,7 +54,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = this.VampiresStarving.FirstOrDefault(); + Pawn pawn = VampiresStarving.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/UI/VampireCardUtility.cs b/Source/Vampires/UI/VampireCardUtility.cs index cfb06b8..8c064dd 100644 --- a/Source/Vampires/UI/VampireCardUtility.cs +++ b/Source/Vampires/UI/VampireCardUtility.cs @@ -1,10 +1,13 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using RimWorld; using UnityEngine; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.UI { public class VampireCardUtility { @@ -88,7 +91,7 @@ public static void DrawVampCard(Rect rect, Pawn pawn) TooltipHandler.TipRegion(rect7, new TipSignal("ROMV_CharacterSheet".Translate())); if (Widgets.ButtonImage(rect7, TexButton.ROMV_HumanIcon)) { - HarmonyPatches.isSwitched = false; + HarmonyPatches.HarmonyPatches.isSwitched = false; } Rect rectVampOptions = new Rect(CharacterCardUtility.PawnCardSize.x - 105f, 150f, 30f, 30f); @@ -178,14 +181,14 @@ public static void LevelPane(Rect inRect, CompVampire compVampire) if (DebugSettings.godMode) { Rect rectDebugPlus = new Rect(rectLevel.xMax, inRect.y, inRect.width * 0.3f, TextSize); - if (Widgets.ButtonText(rectDebugPlus, "+", true, false, true)) + if (Widgets.ButtonText(rectDebugPlus, "+")) { compVampire.Notify_LevelUp(false); } if (compVampire.Level > 0) { Rect rectDebugReset = new Rect(rectDebugPlus.x, rectDebugPlus.yMax + 1, rectDebugPlus.width, TextSize); - if (Widgets.ButtonText(rectDebugReset, "~", true, false, true)) + if (Widgets.ButtonText(rectDebugReset, "~")) { compVampire.Notify_ResetAbilities(); } diff --git a/Source/Vampires/Utilities/BloodFeedModeUtility.cs b/Source/Vampires/Utilities/BloodFeedModeUtility.cs index f7322e5..71942ea 100644 --- a/Source/Vampires/Utilities/BloodFeedModeUtility.cs +++ b/Source/Vampires/Utilities/BloodFeedModeUtility.cs @@ -1,10 +1,10 @@ -using RimWorld; -using System; +using System; +using RimWorld; using UnityEngine; using Verse; using Verse.Sound; -namespace Vampire +namespace Vampire.Utilities { [StaticConstructorOnStartup] public static class BloodFeedModeUtility @@ -26,8 +26,8 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) if (Widgets.ButtonImage(rect, icon)) { - vampBlood.preferredFeedMode = BloodFeedModeUtility.GetNextResponse(pawn); - SoundDefOf.TickHigh.PlayOneShotOnCamera(null); + vampBlood.preferredFeedMode = GetNextResponse(pawn); + SoundDefOf.TickHigh.PlayOneShotOnCamera(); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.HostilityResponse, KnowledgeAmount.SpecificInteraction); } UIHighlighter.HighlightOpportunity(rect, "ROMV_FeedMode"); @@ -50,7 +50,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.PrisonersOnly; else if (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.All; - SoundDefOf.TickHigh.PlayOneShotOnCamera(null); + SoundDefOf.TickHigh.PlayOneShotOnCamera(); } UIHighlighter.HighlightOpportunity(rectSub, "ROMV_FeedModeHumanoidType"); TooltipHandler.TipRegion(rectSub, string.Concat(new string[] @@ -117,15 +117,15 @@ public static Texture2D GetIcon(this PreferredFeedMode response) switch (response) { case PreferredFeedMode.None: - return BloodFeedModeUtility.NoneIcon; + return NoneIcon; case PreferredFeedMode.AnimalNonLethal: - return BloodFeedModeUtility.AnimalNonLethalIcon; + return AnimalNonLethalIcon; case PreferredFeedMode.AnimalLethal: - return BloodFeedModeUtility.AnimalLethalIcon; + return AnimalLethalIcon; case PreferredFeedMode.HumanoidNonLethal: - return BloodFeedModeUtility.HumanoidNonLethalIcon; + return HumanoidNonLethalIcon; case PreferredFeedMode.HumanoidLethal: - return BloodFeedModeUtility.HumanoidLethalIcon; + return HumanoidLethalIcon; default: return BaseContent.BadTex; } diff --git a/Source/Vampires/Utilities/BloodItemUtility.cs b/Source/Vampires/Utilities/BloodItemUtility.cs index cb78f8a..a886166 100644 --- a/Source/Vampires/Utilities/BloodItemUtility.cs +++ b/Source/Vampires/Utilities/BloodItemUtility.cs @@ -1,6 +1,7 @@ -using Verse; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class BloodItemUtility { diff --git a/Source/Vampires/Utilities/BloodPreferabilty.cs b/Source/Vampires/Utilities/BloodPreferabilty.cs index 501e1b2..6cc875e 100644 --- a/Source/Vampires/Utilities/BloodPreferabilty.cs +++ b/Source/Vampires/Utilities/BloodPreferabilty.cs @@ -1,4 +1,4 @@ -namespace Vampire +namespace Vampire.Utilities { public enum BloodPreferabilty : int { diff --git a/Source/Vampires/Utilities/BloodTypeUtility.cs b/Source/Vampires/Utilities/BloodTypeUtility.cs index 3306ec6..4b5e1eb 100644 --- a/Source/Vampires/Utilities/BloodTypeUtility.cs +++ b/Source/Vampires/Utilities/BloodTypeUtility.cs @@ -1,7 +1,8 @@ -using Verse; -using RimWorld; +using RimWorld; +using Vampire.Defs; +using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class BloodTypeUtility { @@ -11,37 +12,37 @@ public static BloodType BloodType(Pawn pawn) { if (pawn?.RaceProps?.Animal ?? false) { - return Vampire.BloodType.Animal; + return Defs.BloodType.Animal; } if (pawn?.RaceProps?.Humanlike ?? false) { - bool lowBlood = (BloodTypeUtility.IsLowblood(pawn)); - bool highBlood = (BloodTypeUtility.IsHighblood(pawn)); + bool lowBlood = (IsLowblood(pawn)); + bool highBlood = (IsHighblood(pawn)); - if (BloodTypeUtility.IsHighblood(pawn) && BloodTypeUtility.IsLowblood(pawn)) - return Vampire.BloodType.AverageBlood; + if (IsHighblood(pawn) && IsLowblood(pawn)) + return Defs.BloodType.AverageBlood; if (highBlood) - return Vampire.BloodType.HighBlood; + return Defs.BloodType.HighBlood; if (lowBlood) - return Vampire.BloodType.LowBlood; + return Defs.BloodType.LowBlood; - return Vampire.BloodType.AverageBlood; + return Defs.BloodType.AverageBlood; } } - return Vampire.BloodType.None; + return Defs.BloodType.None; } public static string GetLabel(this BloodType bloodtype) { switch (bloodtype) { - case Vampire.BloodType.Animal: + case Defs.BloodType.Animal: return "ROMV_BloodTypeAnimal".Translate(); - case Vampire.BloodType.AverageBlood: + case Defs.BloodType.AverageBlood: return "ROMV_BloodTypeAverage".Translate(); - case Vampire.BloodType.LowBlood: + case Defs.BloodType.LowBlood: return "ROMV_BloodTypeLow".Translate(); - case Vampire.BloodType.HighBlood: + case Defs.BloodType.HighBlood: return "ROMV_BloodTypeHigh".Translate(); } return "ROMV_BloodType_Unavailable".Translate(); diff --git a/Source/Vampires/Utilities/BloodUtility.cs b/Source/Vampires/Utilities/BloodUtility.cs index dab820b..505c4b9 100644 --- a/Source/Vampires/Utilities/BloodUtility.cs +++ b/Source/Vampires/Utilities/BloodUtility.cs @@ -1,11 +1,14 @@ -using RimWorld; -using System; +using System; using System.Collections.Generic; +using RimWorld; using UnityEngine; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Hediffs; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.Utilities { public static class BloodUtility { @@ -18,7 +21,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (canUseInventory) { if (flag) - thing = BloodUtility.BestBloodInInventory(getter, null, 0); + thing = BestBloodInInventory(getter, null, 0); if (thing != null) { if (getter.Faction != Faction.OfPlayer) @@ -36,12 +39,12 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe } } } - Thing thing2 = BloodUtility.BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); + Thing thing2 = BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); if (thing == null && thing2 == null) { if (canUseInventory && flag) { - thing = BloodUtility.BestBloodInInventory(getter, null, 0); + thing = BestBloodInInventory(getter, null, 0); if (thing != null) { bloodSource = thing; @@ -52,7 +55,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (thing2 == null && getter == eater) { - Pawn pawn = BloodUtility.BestPawnToHuntForVampire(getter); + Pawn pawn = BestPawnToHuntForVampire(getter); if (pawn != null) { bloodSource = pawn; @@ -147,7 +150,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate { return false; } - if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t, 1, -1, null, false)) + if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t)) { return false; } @@ -157,7 +160,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate }; Thing thing; Predicate validator = foodValidator; - thing = BloodUtility.SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator); + thing = SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter), 9999f, validator); return thing; } @@ -222,16 +225,16 @@ private static Pawn BestPawnToHuntForVampire(Pawn predator, bool desperate = fal //{ if (predator != pawn2) { - if (BloodUtility.IsAcceptableVictimFor(predator, pawn2, desperate)) + if (IsAcceptableVictimFor(predator, pawn2, desperate)) { - if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) + if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) { //if (!pawn2.IsForbidden(predator)) //{ if (!tutorialMode || pawn2.Faction != Faction.OfPlayer) { //Log.Message("Potential Prey: " + pawn2.Label); - float preyScoreFor = BloodUtility.GetPreyScoreFor(predator, pawn2); + float preyScoreFor = GetPreyScoreFor(predator, pawn2); //Log.Message("Potential Prey Score: " + preyScoreFor); if (preyScoreFor > num || pawn == null) @@ -421,7 +424,7 @@ public static Need_Blood BloodNeed(this Pawn pawn) // RimWorld.FoodUtility public static int WillConsumeStackCountOf(Pawn ingester, ThingDef def) { - int num = Mathf.Min(10, BloodUtility.StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); + int num = Mathf.Min(10, StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); if (num < 1) { num = 1; diff --git a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs index 2d383d6..fb892ef 100644 --- a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs +++ b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs @@ -1,24 +1,29 @@ // ---------------------------------------------------------------------- // These are basic usings. Always let them be here. // ---------------------------------------------------------------------- + using System; using System.Reflection; - +using RimWorld; +using UnityEngine; +using Verse; +using Verse.AI; // ---------------------------------------------------------------------- // These are RimWorld-specific usings. Activate/Deactivate what you need: // ---------------------------------------------------------------------- -using UnityEngine; // Always needed +// Always needed //using VerseBase; // Material/Graphics handling functions are found here -using Verse; // RimWorld universal objects are here (like 'Building') -using Verse.AI; // Needed when you do something with the AI +// RimWorld universal objects are here (like 'Building') +// Needed when you do something with the AI // Needed when you do something with Sound // Needed when you do something with Noises -using RimWorld; // RimWorld specific functions are found here (like 'Building_Battery') + +// RimWorld specific functions are found here (like 'Building_Battery') // RimWorld specific functions for world creation //using RimWorld.SquadAI; // RimWorld specific functions for squad brains -namespace Vampire +namespace Vampire.Utilities { class ResurrectedPawnUtility { @@ -27,7 +32,7 @@ public static Pawn DoGeneratePawnFromSource(Pawn sourcePawn, bool isBerserk = tr { PawnKindDef pawnKindDef = sourcePawn.kindDef; Faction factionDirect = isBerserk ? Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile) : Faction.OfPlayer; - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); try { pawn.kindDef = pawnKindDef; @@ -183,7 +188,7 @@ public static Pawn GenerateClonePawnFromSource(Pawn sourcePawn) { PawnKindDef pawnKindDef = PawnKindDef.Named("ReanimatedCorpse"); Faction factionDirect = Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile); - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); pawn.kindDef = pawnKindDef; pawn.SetFactionDirect(factionDirect); pawn.pather = new Pawn_PathFollower(pawn); @@ -338,10 +343,10 @@ public static void GenerateApparelFromSource(Pawn newPawn, Pawn sourcePawn) } else { - apparel = (Apparel)ThingMaker.MakeThing(current.def, null); + apparel = (Apparel)ThingMaker.MakeThing(current.def); } apparel.DrawColor = new Color(current.DrawColor.r, current.DrawColor.g, current.DrawColor.b, current.DrawColor.a); - newPawn.apparel.Wear(apparel, true); + newPawn.apparel.Wear(apparel); } } diff --git a/Source/Vampires/Utilities/VampSunlightPathUtility.cs b/Source/Vampires/Utilities/VampSunlightPathUtility.cs index c4307da..f9453bc 100644 --- a/Source/Vampires/Utilities/VampSunlightPathUtility.cs +++ b/Source/Vampires/Utilities/VampSunlightPathUtility.cs @@ -1,8 +1,11 @@ using RimWorld; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Hediffs; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.Utilities { public static class VampSunlightPathUtility { @@ -41,7 +44,7 @@ public static Job GetSunlightPathJob(Pawn pawn) return null; if (pawn.pather != null && pawn.pather.Destination != null && pawn.pather.Destination.IsSunlightSafeFor(pawn)) return null; - if (pawn.GetRoom(RegionType.Set_Passable) is Room room && room.PsychologicallyOutdoors) + if (pawn.GetRoom() is Room room && room.PsychologicallyOutdoors) { Job surviveJob; if (TryGoingToHomePoint(pawn, out surviveJob)) @@ -113,7 +116,7 @@ public static IntVec3 FindSafeZoneFor(Pawn pawn) { IntVec3 result = IntVec3.Invalid; Region region; - CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); + CellFinder.TryFindClosestRegionWith(pawn.GetRegion(), TraverseParms.For(pawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); if (region != null) { region.TryFindRandomCellInRegion(x => x.IsValid && x.x > 0 && x.z > 0 && x.InBounds(pawn.MapHeld) && x.GetDoor(pawn.MapHeld) == null, out result); @@ -159,7 +162,7 @@ public static bool TryDiggingHideyHole(Pawn pawn, out Job gotoJob) /// public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 center, Map map) { - if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map, false, null).Accepted) + if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map).Accepted) { return center; } @@ -167,8 +170,8 @@ public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 cent cellRect.ClipInsideMap(map); IntVec3 randomCell = cellRect.RandomCell; if (!CellFinder.TryFindRandomCellNear(center, map, 8, (IntVec3 c) => c.Standable(map) && - (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map, false, null).Accepted) && - (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors, Danger.Deadly, false)) ?? false), out randomCell)) + (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map).Accepted) && + (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors)) ?? false), out randomCell)) { //Log.Error("Found no place to build hideyhole for burning vampire."); randomCell = IntVec3.Invalid; @@ -239,7 +242,7 @@ public static bool IsSunlightSafeFor(this IntVec3 targ, Pawn pawn) /// public static bool CanSurviveTimeInSunlight(IntVec3 dest, Pawn pawn) { - PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn, PathEndMode.OnCell); + PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn); IntVec3 curVec; int cellsInSunlight = 0; while (path.NodesLeftCount > 1) @@ -319,7 +322,7 @@ public static int DetermineTicksUntilDaylight(Map map) public static IntVec3 FindCellSafeFromSunlight(Pawn pawn) { return CellFinderLoose.RandomCellWith(x => !IsZero(x) && x.IsValid && x.InBounds(pawn.MapHeld) && x.Roofed(pawn.MapHeld) && x.Walkable(pawn.MapHeld) - && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld, 1000); + && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld); } ///

diff --git a/Source/Vampires/Utilities/VampireBiteUtility.cs b/Source/Vampires/Utilities/VampireBiteUtility.cs index 93afe80..f4689f9 100644 --- a/Source/Vampires/Utilities/VampireBiteUtility.cs +++ b/Source/Vampires/Utilities/VampireBiteUtility.cs @@ -1,9 +1,9 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using RimWorld; using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class VampireBiteUtility { @@ -27,7 +27,7 @@ public static void MakeNew(Pawn actor, Pawn victim) actor.Drawer.Notify_MeleeAttackOn(victim); victim.TakeDamage(new DamageInfo(dmgDef, (int)(dmgAmount * BITEFACTOR), -1, actor, neckPart)); BattleLogEntry_MeleeCombat battleLogEntry_MeleeCombat = new BattleLogEntry_MeleeCombat(RulePackDefOf.Combat_Hit, dmgRules, - actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel, null, null); + actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel); Find.BattleLog.Add(battleLogEntry_MeleeCombat); } } diff --git a/Source/Vampires/Utilities/VampireGen.cs b/Source/Vampires/Utilities/VampireGen.cs index 71780dd..f0a659f 100644 --- a/Source/Vampires/Utilities/VampireGen.cs +++ b/Source/Vampires/Utilities/VampireGen.cs @@ -1,10 +1,12 @@ -using RimWorld; -using System; +using System; using System.Linq; +using RimWorld; using UnityEngine; +using Vampire.Defs; +using Vampire.Hediffs; using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class VampireGen { @@ -13,7 +15,7 @@ public static bool TryGiveVampirismHediff(Pawn pawn, int generation, BloodlineDe { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire?.VampComp() ?? null; vampHediff.generation = generation; @@ -29,7 +31,7 @@ public static bool TryGiveVampirismHediffFromSire(Pawn pawn, Pawn sire, bool fir { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire.VampComp(); vampHediff.generation = sire.VampComp().Generation + 1; @@ -47,7 +49,7 @@ public static void AddFangsHediff(Pawn pawn) if (bpR != null && pawn?.VampComp()?.Bloodline?.fangsHediff != null) { - pawn.health.RestorePart(bpR, null, true); + pawn.health.RestorePart(bpR); pawn.health.AddHediff(pawn.VampComp().Bloodline.fangsHediff, bpR, null); } } @@ -87,7 +89,7 @@ public static Pawn GenerateVampire(int generation, BloodlineDef bloodline, Pawn PawnGenerationRequest request = new PawnGenerationRequest( PawnKindDefOf.SpaceRefugee, Faction.OfSpacer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 20f, false, true, - true, false, false, false, false, null, null, null, null, null, null, null); + true, false, false, false, false, null, null, null, null, null, null); Pawn pawn = PawnGenerator.GeneratePawn(request); if (firstVampire) { diff --git a/Source/Vampires/Utilities/VampireGraphicUtility.cs b/Source/Vampires/Utilities/VampireGraphicUtility.cs index 30c19fe..aee3cc9 100644 --- a/Source/Vampires/Utilities/VampireGraphicUtility.cs +++ b/Source/Vampires/Utilities/VampireGraphicUtility.cs @@ -1,10 +1,11 @@ -using Harmony; +using System.Collections.Generic; +using Harmony; using RimWorld; -using System.Collections.Generic; using UnityEngine; +using Vampire.Components; using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class VampireGraphicUtility { diff --git a/Source/Vampires/Utilities/VampireRelationUtility.cs b/Source/Vampires/Utilities/VampireRelationUtility.cs index 58d5f00..49883ab 100644 --- a/Source/Vampires/Utilities/VampireRelationUtility.cs +++ b/Source/Vampires/Utilities/VampireRelationUtility.cs @@ -1,8 +1,10 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; +using RimWorld; +using Vampire.Components; +using Vampire.Defs; using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class VampireRelationUtility { diff --git a/Source/Vampires/Utilities/VampireSkinColors.cs b/Source/Vampires/Utilities/VampireSkinColors.cs index 9232d84..244d0f6 100644 --- a/Source/Vampires/Utilities/VampireSkinColors.cs +++ b/Source/Vampires/Utilities/VampireSkinColors.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -using Verse; using UnityEngine; +using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class VampireSkinColors { @@ -37,9 +37,9 @@ public SkinColorData(float melanin, float selector, Color color) private static int GetSkinDataIndexOfMelanin(float melanin) { int result = 0; - for (int i = 0; i < VampireSkinColors.MelaninTable.Length; i++) + for (int i = 0; i < MelaninTable.Length; i++) { - if (melanin < VampireSkinColors.MelaninTable[i].melanin) + if (melanin < MelaninTable[i].melanin) { break; } @@ -59,15 +59,15 @@ public static Color GetVampireSkinColor(Pawn pawn, float melanin) { return colors[skinDataIndexOfMelanin]; } - float tt = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + float tt = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); return Color.Lerp(colors[skinDataIndexOfMelanin], colors[skinDataIndexOfMelanin + 1], tt); } - if (skinDataIndexOfMelanin == VampireSkinColors.MelaninTable.Length - 1) + if (skinDataIndexOfMelanin == MelaninTable.Length - 1) { - return VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color; + return MelaninTable[skinDataIndexOfMelanin].color; } - float t = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); - return Color.Lerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].color, t); + float t = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + return Color.Lerp(MelaninTable[skinDataIndexOfMelanin].color, MelaninTable[skinDataIndexOfMelanin + 1].color, t); } } } diff --git a/Source/Vampires/Utilities/VampireThoughtUtility.cs b/Source/Vampires/Utilities/VampireThoughtUtility.cs index 58e8e1f..c9811c3 100644 --- a/Source/Vampires/Utilities/VampireThoughtUtility.cs +++ b/Source/Vampires/Utilities/VampireThoughtUtility.cs @@ -1,8 +1,9 @@ -using RimWorld; -using System.Linq; +using System.Linq; +using RimWorld; +using Vampire.Defs; using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class VampireThoughtUtility { @@ -12,7 +13,7 @@ public static void GiveThoughtsForDiablerie(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0), null); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0)); } public static void GiveThoughtsForDrinkingBlood(Pawn drainer) @@ -21,7 +22,7 @@ public static void GiveThoughtsForDrinkingBlood(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0), null); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0)); } @@ -50,7 +51,7 @@ public static void GiveThoughtsForPawnDiedOfBloodLoss(Pawn victim, Pawn drainer where x.IsColonist || x.IsPrisonerOfColony select x) { - current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex), null); + current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex)); } } @@ -71,11 +72,11 @@ where x.IsColonist || x.IsPrisonerOfColony { if (current == victim) { - current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested, null); + current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested); } else if (thoughtDef != null) { - current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef, null); + current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef); } } } diff --git a/Source/Vampires/Utilities/VampireUtility.cs b/Source/Vampires/Utilities/VampireUtility.cs index 5a0c170..2ab70ce 100644 --- a/Source/Vampires/Utilities/VampireUtility.cs +++ b/Source/Vampires/Utilities/VampireUtility.cs @@ -1,10 +1,13 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using RimWorld; using UnityEngine; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Hediffs; using Verse; -namespace Vampire +namespace Vampire.Utilities { public static class VampireUtility { @@ -68,7 +71,7 @@ public static void GiveVampXP(this Pawn vampire, int amount=15) { if (vampire?.VampComp() is CompVampire v && v.IsVampire && vampire.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount, -1f); + MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount); v.XP += amount; } } diff --git a/Source/Vampires/Utilities/VampireWitnessUtility.cs b/Source/Vampires/Utilities/VampireWitnessUtility.cs index 6d0a447..99a08d6 100644 --- a/Source/Vampires/Utilities/VampireWitnessUtility.cs +++ b/Source/Vampires/Utilities/VampireWitnessUtility.cs @@ -1,10 +1,11 @@ -using RimWorld; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using RimWorld; +using Vampire.Defs; using Verse; using Verse.AI; -namespace Vampire +namespace Vampire.Utilities { /// /// When crimes are committed, like feeding on visitors, @@ -30,9 +31,9 @@ public struct Crime public Crime(JobDef newCrimeDef, ThoughtDef newColonistThought, ThoughtDef newVisitorThought) { - this.CrimeDef = newCrimeDef; - this.ColonistThought = newColonistThought; - this.VisitorThought = newVisitorThought; + CrimeDef = newCrimeDef; + ColonistThought = newColonistThought; + VisitorThought = newVisitorThought; } } @@ -73,7 +74,7 @@ public static List WitnessesOf(Pawn criminal, Pawn victim, JobDef crime) IntVec3 intVec = criminal.Position + GenRadial.RadialPattern[num]; if (intVec.InBounds(map)) { - if (GenSight.LineOfSight(intVec, criminal.Position, map, true, null, 0, 0)) + if (GenSight.LineOfSight(intVec, criminal.Position, map, true)) { List thingList = intVec.GetThingList(map); for (int i = 0; i < thingList.Count; i++) @@ -155,7 +156,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) } //Log.Message("1"); - List witnesses = VampireWitnessUtility.WitnessesOf(criminal, victim, crime); + List witnesses = WitnessesOf(criminal, victim, crime); //Log.Message("2"); if (!witnesses.NullOrEmpty()) @@ -190,8 +191,8 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) .MakeThought(curCrime.VisitorThought); if (CanTakeWitnessJob(witness)) { - IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }, 23f); - witness.jobs.StartJob(new Verse.AI.Job(JobDefOf.FleeAndCower, fleeLoc)); + IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }); + witness.jobs.StartJob(new Job(JobDefOf.FleeAndCower, fleeLoc)); if (witness.Faction != null && !witness.Faction.HostileTo(criminal.Faction)) { witness.Faction.SetHostileTo(criminal.Faction, true); @@ -220,7 +221,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) thought_MemoryObservation.Target = criminal; //Log.Message("Loop 1 Step 8"); - witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation, null); + witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation); //Log.Message("Loop 1 Step 9"); } diff --git a/Source/Vampires/VampAbility.cs b/Source/Vampires/VampAbility.cs index 11b7a03..04f2860 100644 --- a/Source/Vampires/VampAbility.cs +++ b/Source/Vampires/VampAbility.cs @@ -2,12 +2,15 @@ using Verse; using AbilityUser; using UnityEngine; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; namespace Vampire { public class VampAbility : PawnAbility { - public CompVampire Vamp => this.Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); + public CompVampire Vamp => Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); public VitaeAbilityDef AbilityDef => Def as VitaeAbilityDef; public VampAbility() : base() { } @@ -62,7 +65,7 @@ public override bool CanCastPowerCheck(AbilityContext context, out string reason if (base.CanCastPowerCheck(context, out reason)) { reason = ""; - if (this.Def != null && this.Def is VitaeAbilityDef vampDef) + if (Def != null && Def is VitaeAbilityDef vampDef) { if (Pawn.BloodNeed().CurBloodPoints < vampDef.bloodCost) { diff --git a/Source/Vampires/VampireCorpse.cs b/Source/Vampires/VampireCorpse.cs index a3edbf3..e8f28e4 100644 --- a/Source/Vampires/VampireCorpse.cs +++ b/Source/Vampires/VampireCorpse.cs @@ -5,6 +5,8 @@ using Verse; using UnityEngine; using AbilityUser; +using Vampire.Defs; +using Vampire.Utilities; namespace Vampire { @@ -13,33 +15,33 @@ public class VampireCorpse : Corpse public VampireCorpse() : base() { - this.operationsBillStack = new BillStack(this); - this.innerContainer = new ThingOwner(this, true, LookMode.Reference); + operationsBillStack = new BillStack(this); + innerContainer = new ThingOwner(this, true, LookMode.Reference); } private bool ShouldVanish { get { - return this.InnerPawn.RaceProps.Animal && this.vanishAfterTimestamp > 0 && this.Age >= this.vanishAfterTimestamp && base.Spawned && this.GetRoom(RegionType.Set_Passable) != null && this.GetRoom(RegionType.Set_Passable).TouchesMapEdge && !base.Map.roofGrid.Roofed(base.Position); + return InnerPawn.RaceProps.Animal && vanishAfterTimestamp > 0 && Age >= vanishAfterTimestamp && Spawned && this.GetRoom() != null && this.GetRoom().TouchesMapEdge && !Map.roofGrid.Roofed(Position); } } private BodyPartRecord GetBestBodyPartToEat(Pawn ingester, float nutritionWanted) { - IEnumerable source = from x in this.InnerPawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined) - where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) > 0.001f + IEnumerable source = from x in InnerPawn.health.hediffSet.GetNotMissingParts() + where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(InnerPawn, x) > 0.001f select x; if (!source.Any()) { return null; } - return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) - nutritionWanted)); + return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(InnerPawn, x) - nutritionWanted)); } private void NotifyColonistBar() { - if (this.InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) + if (InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) { Find.ColonistBar.MarkColonistsDirty(); } @@ -77,7 +79,7 @@ private void NotifyColonistBar() continue; } HediffDef hediffDefFromDamage = HealthUtility.GetHediffDefFromDamage(DamageDefOf.Burn, p, rec); - Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p, null); + Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p); hediff_Injury.Part = rec; hediff_Injury.source = null; hediff_Injury.sourceBodyPartGroup = null; @@ -133,13 +135,13 @@ public override string GetInspectString() } else { - if (this.InnerPawn.Faction != null) + if (InnerPawn.Faction != null) { - s.AppendLine("Faction".Translate() + ": " + this.InnerPawn.Faction.Name); + s.AppendLine("Faction".Translate() + ": " + InnerPawn.Faction.Name); } s.AppendLine("DeadTime".Translate(new object[] { - this.Age.ToStringTicksToPeriod(false, false, true) + Age.ToStringTicksToPeriod(false) })); } return s.ToString().TrimEndNewlines(); @@ -154,20 +156,20 @@ public override void DrawAt(Vector3 drawLoc, bool flip = false) return; } if (!burnedToAshes) - this.InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); + InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); else - Ashes.Draw(drawLoc, Rot4.North, this, 0); + Ashes.Draw(drawLoc, Rot4.North, this); } - public bool CanResurrect => this.InnerPawn != null && !BurnedToAshes && this.InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; + public bool CanResurrect => InnerPawn != null && !BurnedToAshes && InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; public override IEnumerable GetGizmos() { foreach (Gizmo g in base.GetGizmos()) yield return g; - Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (CanResurrect) { yield return new Command_Action() @@ -177,14 +179,14 @@ public override IEnumerable GetGizmos() icon = bloodResurrection.uiIcon, action = delegate { - Pawn AbilityUser = this.InnerPawn; + Pawn AbilityUser = InnerPawn; AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); }, disabled = false }; @@ -196,18 +198,18 @@ public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.bloodPoints, "bloodPoints", -1); - Scribe_Values.Look(ref this.burnedToAshes, "burnedToAshes", false); - Scribe_Values.Look(ref this.diableried, "diableried", false); + Scribe_Values.Look(ref bloodPoints, "bloodPoints", -1); + Scribe_Values.Look(ref burnedToAshes, "burnedToAshes"); + Scribe_Values.Look(ref diableried, "diableried"); - Scribe_Values.Look(ref this.timeOfDeath, "timeOfDeath", 0, false); - Scribe_Values.Look(ref this.vanishAfterTimestamp, "vanishAfterTimestamp", 0, false); - Scribe_Values.Look(ref this.everBuriedInSarcophagus, "everBuriedInSarcophagus", false, false); - Scribe_Deep.Look(ref this.operationsBillStack, "operationsBillStack", new object[] + Scribe_Values.Look(ref timeOfDeath, "timeOfDeath"); + Scribe_Values.Look(ref vanishAfterTimestamp, "vanishAfterTimestamp"); + Scribe_Values.Look(ref everBuriedInSarcophagus, "everBuriedInSarcophagus"); + Scribe_Deep.Look(ref operationsBillStack, "operationsBillStack", new object[] { this }); - Scribe_Deep.Look>(ref this.innerContainer, "innerContainer", new object[] + Scribe_Deep.Look>(ref innerContainer, "innerContainer", new object[] { this }); diff --git a/Source/Vampires/Workers/EmbraceWorker.cs b/Source/Vampires/Workers/EmbraceWorker.cs index 63b35de..6a6997a 100644 --- a/Source/Vampires/Workers/EmbraceWorker.cs +++ b/Source/Vampires/Workers/EmbraceWorker.cs @@ -1,9 +1,12 @@ using System.Collections.Generic; using System.Linq; using RimWorld; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; using Verse; -namespace Vampire +namespace Vampire.Workers { public class EmbraceWorker { diff --git a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs index b0cd7bf..4744057 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs @@ -1,7 +1,9 @@ -using Verse; -using RimWorld; +using RimWorld; +using Vampire.Components; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.Workers { public class PawnRelationWorker_Childe : PawnRelationWorker { diff --git a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs index 6aaeecd..ffb3dda 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs @@ -1,7 +1,9 @@ -using Verse; -using RimWorld; +using RimWorld; +using Vampire.Components; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.Workers { public class PawnRelationWorker_Sire : PawnRelationWorker { diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs index 07eff0f..7ef67b5 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using System.Diagnostics; -using Verse; -using RimWorld; using System.Linq; +using RimWorld; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.Workers { public class Recipe_ExtractBloodPack : Recipe_Surgery { @@ -40,7 +41,7 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { //if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part)) @@ -54,7 +55,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, }); BloodItemUtility.SpawnBloodFromExtraction(pawn, true); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); int badGoodwillAmt = -3; if (flag) { @@ -77,7 +78,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs index c33acdf..88c093f 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using System.Diagnostics; -using Verse; -using RimWorld; using System.Linq; +using RimWorld; +using Vampire.Utilities; +using Verse; -namespace Vampire +namespace Vampire.Workers { public class Recipe_ExtractBloodVial : Recipe_Surgery { @@ -39,10 +40,10 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { - if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) + if (CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) { return; } @@ -51,9 +52,9 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, billDoer, pawn }); - BloodItemUtility.SpawnBloodFromExtraction(pawn, false); + BloodItemUtility.SpawnBloodFromExtraction(pawn); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); int badGoodwillAmt = -3; if (flag) { @@ -75,7 +76,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/WorldComponent_VampireTracker.cs b/Source/Vampires/WorldComponent_VampireTracker.cs index a9cf7fb..0ba86de 100644 --- a/Source/Vampires/WorldComponent_VampireTracker.cs +++ b/Source/Vampires/WorldComponent_VampireTracker.cs @@ -2,6 +2,9 @@ using System.Linq; using Verse; using RimWorld.Planet; +using Vampire.Components; +using Vampire.Defs; +using Vampire.Utilities; namespace Vampire { @@ -50,7 +53,7 @@ public List TryGeneratingBloodline(Pawn childe, BloodlineDef bloodline) } for (int curGen = 4; curGen < 14; curGen++) { - Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire, null, false); + Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire); futureGenerations.Add(newVamp); curSire = newVamp; } @@ -112,7 +115,7 @@ public List DormantVampires //Second Generation for (int i = 0; i < 3; i++) { - Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine, null, false); + Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine); generationTwo.Add(secondGenVamp); //Find.WorldPawns.PassToWorld(secondGenVamp, PawnDiscardDecideMode.KeepForever); } @@ -121,7 +124,7 @@ public List DormantVampires foreach (BloodlineDef clan in DefDatabase.AllDefs.Where(x => x != VampDefOf.ROMV_Caine && x != VampDefOf.ROMV_TheThree)) { Pawn randSecondGenVamp = generationTwo.RandomElement(); - Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp, null, false); + Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp); generationThree.Add(clanFounderVamp); //Find.WorldPawns.PassToWorld(clanFounderVamp, PawnDiscardDecideMode.KeepForever); } @@ -202,9 +205,9 @@ public void PrintVampires() public override void ExposeData() { base.ExposeData(); - Scribe_References.Look(ref this.firstVampire, "firstVampire"); - Scribe_Collections.Look(ref this.dormantVampires, "dormantVampires", LookMode.Deep); - Scribe_Collections.Look(ref this.activeVampires, "activeVampires", LookMode.Deep); + Scribe_References.Look(ref firstVampire, "firstVampire"); + Scribe_Collections.Look(ref dormantVampires, "dormantVampires", LookMode.Deep); + Scribe_Collections.Look(ref activeVampires, "activeVampires", LookMode.Deep); } } } From 2eda06d334e2b9026964ed723567d1bc5063139f Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 17 Dec 2017 16:28:00 +0000 Subject: [PATCH 03/18] Revert "Moar Cleanup" This reverts commit 354a15baaf22e9f4fa61295f5c3657108d1ae373. --- .../Vampires/AI_Jobs/JobDriver_BloodVomit.cs | 15 +- .../AI_Jobs/JobDriver_ConsumeBlood.cs | 118 +++++++------- .../Vampires/AI_Jobs/JobDriver_Diablerie.cs | 27 ++-- .../Vampires/AI_Jobs/JobDriver_DigAndHide.cs | 31 ++-- Source/Vampires/AI_Jobs/JobDriver_Embrace.cs | 26 ++- .../Vampires/AI_Jobs/JobDriver_EnterTorpor.cs | 14 +- Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 44 +++-- .../AI_Jobs/JobDriver_FeedAndDestroy.cs | 26 ++- .../AI_Jobs/JobDriver_FeedAndReturn.cs | 24 ++- Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs | 30 ++-- .../AI_Jobs/JobDriver_MakeBloodBond.cs | 15 +- Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs | 4 +- .../JobGiver_SeekShelterFromSunlight.cs | 10 +- .../Vampires/AI_Jobs/JobGiver_VampireBeast.cs | 34 ++-- .../AI_Jobs/MentalState_Rotschreck.cs | 9 +- .../AI_Jobs/MentalState_VampireBeast.cs | 11 +- Source/Vampires/Buildings/Building_Coffin.cs | 6 +- .../Vampires/Buildings/Building_HideyHole.cs | 5 +- Source/Vampires/Buttons.cs | 12 +- Source/Vampires/Components/CompBloodItem.cs | 4 +- .../Components/CompProperties_BloodItem.cs | 7 +- .../Components/CompProperties_VampBed.cs | 4 +- Source/Vampires/Components/CompVampBed.cs | 38 +++-- Source/Vampires/Components/CompVampire.cs | 152 +++++++++--------- Source/Vampires/Defs/BloodType.cs | 2 +- Source/Vampires/Defs/BloodlineDef.cs | 14 +- Source/Vampires/Defs/DisciplineDef.cs | 2 +- .../Vampires/Defs/ScenPart_GameStartNight.cs | 16 +- Source/Vampires/Defs/VampDefOf.cs | 2 +- Source/Vampires/Defs/VitaeAbilityDef.cs | 2 +- Source/Vampires/Discipline.cs | 16 +- .../Animalism/DisciplineEffect_Beckoning.cs | 9 +- .../Animalism/DisciplineEffect_Communion.cs | 12 +- .../DisciplineEffect_NightwispRavens.cs | 8 +- .../DisciplineEffect_SpectralWolf.cs | 10 +- .../HediffCompProperties_TickGraphic.cs | 4 +- .../Animalism/HediffComp_TickGraphic.cs | 18 +-- .../Disciplines/Animalism/PawnTemporary.cs | 52 +++--- .../DisciplineEffect_CrocodileTongue.cs | 5 +- .../DisciplineEffect_HeightenedSenses.cs | 5 +- .../Auspex/DisciplineEffect_ReadMind.cs | 10 +- .../DisciplineEffect_RevealIllusions.cs | 13 +- .../Blood/DisciplineEffect_Hunger.cs | 13 +- .../Blood/DisciplineEffect_Purge.cs | 3 +- .../Blood/DisciplineEffect_StemTheTide.cs | 2 +- .../Blood/DisciplineEffect_UnstoppableTide.cs | 8 +- .../Dominate/DisciplineEffect_Mesmerise.cs | 4 +- .../Dominate/DisciplineEffect_Possession.cs | 10 +- .../Dominate/DisciplineEffect_Sleep.cs | 3 +- .../Dominate/DisciplineEffect_Suicide.cs | 2 +- .../Flight/DisciplineEffect_LongFlight.cs | 8 +- .../Flight/DisciplineEffect_ShortFlight.cs | 6 +- .../Flight/DisciplineEffect_SkyFall.cs | 6 +- .../Flight/DisciplineEffect_WingBuffet.cs | 4 +- .../Fortitude/PassiveEffect_DamageSoak.cs | 2 +- .../DisciplineEffect_ArmOfTheAbyss.cs | 8 +- .../DisciplineEffect_BlackMetamorphosis.cs | 5 +- .../DisciplineEffect_EnterTheAbyss.cs | 16 +- .../DisciplineEffect_TenebrousForm.cs | 5 +- .../Protean/DisciplineEffect_BatForm.cs | 7 +- .../Protean/DisciplineEffect_FeralClaws.cs | 3 +- .../Protean/DisciplineEffect_MistForm.cs | 7 +- .../Protean/DisciplineEffect_WarForm.cs | 7 +- .../Thaumaturgy/DisciplineEffect_BloodBoil.cs | 2 +- .../DisciplineEffect_BloodSalvo.cs | 2 +- .../DisciplineEffect_BloodShield.cs | 6 +- .../DisciplineEffect_BloodStrike.cs | 2 +- .../Thaumaturgy/Projectile_BloodBoil.cs | 13 +- .../Thaumaturgy/Projectile_BloodReturner.cs | 5 +- .../Thaumaturgy/Projectile_BloodStealer.cs | 7 +- .../DisciplineEffect_RegenerateLimb.cs | 2 +- .../DisciplineEffect_VampiricHealing.cs | 5 +- .../Disciplines/Verb_UseAbilityPawnEffect.cs | 10 +- .../DisciplineEffect_CorruptForm.cs | 5 +- .../DisciplineEffect_PerfectForm.cs | 7 +- .../DisciplineEffect_ShapeMonstrosity.cs | 9 +- .../Vicissitude/DisciplineEffect_ZuloForm.cs | 7 +- Source/Vampires/FlyingObject.cs | 94 +++++------ .../Vampires/HarmonyPatches/HarmonyPatches.cs | 136 ++++++++-------- .../HarmonyPatches/HarmonyPatches_Caravan.cs | 7 +- .../HarmonyPatches_DebugTools.cs | 44 +++-- .../HarmonyPatches_PathFixes.cs | 4 +- .../HarmonyPatches/VampHumanlikeOrders.cs | 17 +- .../Hediffs/Gizmo_HediffShieldStatus.cs | 14 +- .../HediffCompProperties_AnimalForm.cs | 4 +- .../HediffCompProperties_Possession.cs | 4 +- .../HediffCompProperties_SkillOffset.cs | 4 +- .../Vampires/Hediffs/HediffComp_AnimalForm.cs | 21 ++- .../Vampires/Hediffs/HediffComp_Possession.cs | 18 +-- .../Vampires/Hediffs/HediffComp_ReadMind.cs | 6 +- Source/Vampires/Hediffs/HediffComp_Shield.cs | 96 +++++------ .../Hediffs/HediffComp_SkillOffset.cs | 6 +- Source/Vampires/Hediffs/HediffVampirism.cs | 37 ++--- .../Hediffs/HediffVampirism_Gargoyle.cs | 4 +- .../Hediffs/HediffVampirism_Lasombre.cs | 4 +- .../Hediffs/HediffVampirism_Pijavica.cs | 4 +- .../Hediffs/HediffVampirism_Tremere.cs | 4 +- .../Hediffs/HediffVampirism_Tzimisce.cs | 4 +- .../Hediffs/HediffVampirism_VampGiver.cs | 19 +-- .../Hediffs/HediffWithComps_BeastHunger.cs | 13 +- .../HediffWithComps_SunlightExposure.cs | 38 +++-- .../Hediffs/Hediff_AddedPart_Fangs.cs | 11 +- Source/Vampires/ITab_Pawn_NeedsCorpse.cs | 16 +- Source/Vampires/Need_Blood.cs | 136 ++++++++-------- Source/Vampires/ScenPart_LongerNights.cs | 8 +- Source/Vampires/ScenPart_StartingVampires.cs | 44 +++-- Source/Vampires/SkillSheet.cs | 6 +- Source/Vampires/UI/Alert_VampireInSunlight.cs | 14 +- Source/Vampires/UI/Alert_VampireStarving.cs | 14 +- Source/Vampires/UI/VampireCardUtility.cs | 15 +- .../Utilities/BloodFeedModeUtility.cs | 22 +-- Source/Vampires/Utilities/BloodItemUtility.cs | 5 +- .../Vampires/Utilities/BloodPreferabilty.cs | 2 +- Source/Vampires/Utilities/BloodTypeUtility.cs | 33 ++-- Source/Vampires/Utilities/BloodUtility.cs | 29 ++-- .../Utilities/ResurrectedPawnUtility.cs | 25 ++- .../Utilities/VampSunlightPathUtility.cs | 19 +-- .../Vampires/Utilities/VampireBiteUtility.cs | 8 +- Source/Vampires/Utilities/VampireGen.cs | 16 +- .../Utilities/VampireGraphicUtility.cs | 7 +- .../Utilities/VampireRelationUtility.cs | 8 +- .../Vampires/Utilities/VampireSkinColors.cs | 18 +-- .../Utilities/VampireThoughtUtility.cs | 17 +- Source/Vampires/Utilities/VampireUtility.cs | 11 +- .../Utilities/VampireWitnessUtility.cs | 23 ++- Source/Vampires/VampAbility.cs | 7 +- Source/Vampires/VampireCorpse.cs | 54 +++---- Source/Vampires/Workers/EmbraceWorker.cs | 5 +- .../Workers/PawnRelationWorker_Childe.cs | 8 +- .../Workers/PawnRelationWorker_Sire.cs | 8 +- .../Workers/Recipe_ExtractBloodPack.cs | 13 +- .../Workers/Recipe_ExtractBloodVial.cs | 17 +- .../Vampires/WorldComponent_VampireTracker.cs | 15 +- 133 files changed, 1073 insertions(+), 1240 deletions(-) diff --git a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs index 9ffb4bf..066845a 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs @@ -1,11 +1,10 @@ using System.Collections.Generic; using System.Diagnostics; -using RimWorld; -using Vampire.Utilities; using Verse; using Verse.AI; +using RimWorld; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_BloodVomit : JobDriver { @@ -17,21 +16,21 @@ public override PawnPosture Posture { get { - return lastPosture; + return this.lastPosture; } } public override void Notify_LastPosture(PawnPosture posture, LayingDownState layingDown) { - lastPosture = posture; + this.lastPosture = posture; this.layingDown = layingDown; } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref ticksLeft, "ticksLeft"); - Scribe_Values.Look(ref lastPosture, "lastPosture"); + Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0, false); + Scribe_Values.Look(ref this.lastPosture, "lastPosture", PawnPosture.Standing, false); } [DebuggerHidden] @@ -68,7 +67,7 @@ protected override IEnumerable MakeNewToils() int curTicks = ticksLeft; if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite()); + FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite(), 1); if (pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); diff --git a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs index 355b841..1c65c12 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs @@ -1,14 +1,12 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using RimWorld; using UnityEngine; -using Vampire.Components; -using Vampire.Utilities; using Verse; using Verse.AI; +using RimWorld; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_ConsumeBlood : JobDriver { @@ -28,7 +26,7 @@ private Thing IngestibleSource { get { - return job.GetTarget(TargetIndex.A).Thing; + return base.job.GetTarget(TargetIndex.A).Thing; } } @@ -36,32 +34,32 @@ private float ChewDurationMultiplier { get { - Thing ingestibleSource = IngestibleSource; + Thing ingestibleSource = this.IngestibleSource; if (ingestibleSource.def.ingestible != null && !ingestibleSource.def.ingestible.useEatingSpeedStat) { return 1f; } - return 1f / pawn.GetStatValue(StatDefOf.EatingSpeed); + return 1f / this.pawn.GetStatValue(StatDefOf.EatingSpeed, true); } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref usingNutrientPasteDispenser, "usingNutrientPasteDispenser"); - Scribe_Values.Look(ref eatingFromInventory, "eatingFromInventory"); + Scribe_Values.Look(ref this.usingNutrientPasteDispenser, "usingNutrientPasteDispenser", false, false); + Scribe_Values.Look(ref this.eatingFromInventory, "eatingFromInventory", false, false); } public override string GetReport() { - if (usingNutrientPasteDispenser) + if (this.usingNutrientPasteDispenser) { - return job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); + return base.job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); } - Thing thing = pawn.CurJob.targetA.Thing; + Thing thing = this.pawn.CurJob.targetA.Thing; if (thing != null && thing.def.ingestible != null && !thing.def.ingestible.ingestReportString.NullOrEmpty()) { - return string.Format(thing.def.ingestible.ingestReportString, pawn.CurJob.targetA.Thing.LabelShort); + return string.Format(thing.def.ingestible.ingestReportString, this.pawn.CurJob.targetA.Thing.LabelShort); } return base.GetReport(); } @@ -69,84 +67,84 @@ public override string GetReport() public override void Notify_Starting() { base.Notify_Starting(); - usingNutrientPasteDispenser = (IngestibleSource is Building_NutrientPasteDispenser); - eatingFromInventory = (pawn.inventory != null && pawn.inventory.Contains(IngestibleSource)); + this.usingNutrientPasteDispenser = (this.IngestibleSource is Building_NutrientPasteDispenser); + this.eatingFromInventory = (this.pawn.inventory != null && this.pawn.inventory.Contains(this.IngestibleSource)); } [DebuggerHidden] protected override IEnumerable MakeNewToils() { - if (!usingNutrientPasteDispenser) + if (!this.usingNutrientPasteDispenser) { - this.FailOn(() => !IngestibleSource.Destroyed && !IngestibleSource.IngestibleNow); + this.FailOn(() => !this.IngestibleSource.Destroyed && !this.IngestibleSource.IngestibleNow); } - Toil chew = Toils_Ingest.ChewIngestible(pawn, ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) - .FailOn((Toil x) => !IngestibleSource.Spawned - && (pawn.carryTracker == null || pawn.carryTracker.CarriedThing != IngestibleSource)) + Toil chew = Toils_Ingest.ChewIngestible(this.pawn, this.ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) + .FailOn((Toil x) => !this.IngestibleSource.Spawned + && (this.pawn.carryTracker == null || this.pawn.carryTracker.CarriedThing != this.IngestibleSource)) .FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); - foreach (Toil toil in PrepareToIngestToils(chew)) + foreach (Toil toil in this.PrepareToIngestToils(chew)) { yield return toil; } yield return chew; - yield return FinalizeIngest(pawn, TargetIndex.A); - yield return Toils_Jump.JumpIf(chew, () => pawn?.BloodNeed()?.CurLevelPercentage < 1f); + yield return FinalizeIngest(this.pawn, TargetIndex.A); + yield return Toils_Jump.JumpIf(chew, () => this.pawn?.BloodNeed()?.CurLevelPercentage < 1f); } private IEnumerable PrepareToIngestToils(Toil chewToil) { - if (usingNutrientPasteDispenser) + if (this.usingNutrientPasteDispenser) { - return PrepareToIngestToils_Dispenser(); + return this.PrepareToIngestToils_Dispenser(); } - if (pawn.RaceProps.ToolUser) + if (this.pawn.RaceProps.ToolUser) { - return PrepareToIngestToils_ToolUser(chewToil); + return this.PrepareToIngestToils_ToolUser(chewToil); } - return PrepareToIngestToils_NonToolUser(); + return this.PrepareToIngestToils_NonToolUser(); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_Dispenser() { yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, pawn); - yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); + yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, this.pawn); + yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) { - if (eatingFromInventory) + if (this.eatingFromInventory) { - yield return Toils_Misc.TakeItemFromInventoryToCarrier(pawn, TargetIndex.A); + yield return Toils_Misc.TakeItemFromInventoryToCarrier(this.pawn, TargetIndex.A); } else { - yield return ReserveFoodIfWillIngestWholeStack(); + yield return this.ReserveFoodIfWillIngestWholeStack(); Toil gotoToPickup = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Jump.JumpIf(gotoToPickup, () => pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); + yield return Toils_Jump.JumpIf(gotoToPickup, () => this.pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch).FailOnDespawnedNullOrForbidden(TargetIndex.A); yield return Toils_Jump.Jump(chewToil); yield return gotoToPickup; - yield return Toils_Ingest.PickupIngestible(TargetIndex.A, pawn); - Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C); + yield return Toils_Ingest.PickupIngestible(TargetIndex.A, this.pawn); + Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C, 1, -1, null); Toil findExtraFoodToCollect = new Toil(); findExtraFoodToCollect.initAction = delegate { - if (pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def) < job.takeExtraIngestibles) + if (this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def) < this.job.takeExtraIngestibles) { - Predicate validator = (Thing x) => pawn.CanReserve(x) - && !x.IsForbidden(pawn) && x.IsSociallyProper(pawn); - Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, - ThingRequest.ForDef(IngestibleSource.def), PathEndMode.Touch, - TraverseParms.For(pawn), - 12f, validator); + Predicate validator = (Thing x) => this.pawn.CanReserve(x, 1, -1, null, false) + && !x.IsForbidden(this.pawn) && x.IsSociallyProper(this.pawn); + Thing thing = GenClosest.ClosestThingReachable(this.pawn.Position, this.pawn.Map, + ThingRequest.ForDef(this.IngestibleSource.def), PathEndMode.Touch, + TraverseParms.For(this.pawn, Danger.Deadly, TraverseMode.ByPawn, false), + 12f, validator, null, 0, -1, false, RegionType.Set_Passable, false); if (thing != null) { - pawn.CurJob.SetTarget(TargetIndex.C, thing); - JumpToToil(reserveExtraFoodToCollect); + this.pawn.CurJob.SetTarget(TargetIndex.C, thing); + this.JumpToToil(reserveExtraFoodToCollect); } } }; @@ -155,17 +153,17 @@ private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) yield return reserveExtraFoodToCollect; yield return Toils_Goto.GotoThing(TargetIndex.C, PathEndMode.Touch); yield return Toils_Haul.TakeToInventory(TargetIndex.C, - () => job.takeExtraIngestibles - pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def)); + () => this.job.takeExtraIngestibles - this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def)); yield return findExtraFoodToCollect; } - yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); + yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_NonToolUser() { - yield return ReserveFoodIfWillIngestWholeStack(); + yield return this.ReserveFoodIfWillIngestWholeStack(); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); } @@ -175,12 +173,12 @@ private Toil ReserveFoodIfWillIngestWholeStack() { initAction = delegate { - if (pawn.Faction == null) + if (this.pawn.Faction == null) { return; } - Thing thing = pawn.CurJob.GetTarget(TargetIndex.A).Thing; - if (pawn.carryTracker.CarriedThing == thing) + Thing thing = this.pawn.CurJob.GetTarget(TargetIndex.A).Thing; + if (this.pawn.carryTracker.CarriedThing == thing) { return; } @@ -189,10 +187,10 @@ private Toil ReserveFoodIfWillIngestWholeStack() { if (!thing.Spawned) { - pawn.jobs.EndCurrentJob(JobCondition.Incompletable); + this.pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true); return; } - pawn.Reserve(thing, job); + this.pawn.Reserve(thing, this.job, 1, -1, null); } }, defaultCompleteMode = ToilCompleteMode.Instant @@ -204,8 +202,8 @@ private Toil ReserveFoodIfWillIngestWholeStack() public override bool ModifyCarriedThingDrawPos(ref Vector3 drawPos, ref bool behind, ref bool flip) { - IntVec3 cell = job.GetTarget(TargetIndex.B).Cell; - return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, pawn); + IntVec3 cell = base.job.GetTarget(TargetIndex.B).Cell; + return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, this.pawn); } public static bool ModifyCarriedThingDrawPosWorker(ref Vector3 drawPos, ref bool behind, ref bool flip, IntVec3 placeCell, Pawn pawn) @@ -251,15 +249,15 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { if (!(ingester.Position + ingester.Rotation.FacingCell).HasEatSurface(actor.Map) && ingester.GetPosture() == PawnPosture.Standing) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable, null); } - Room room = ingester.GetRoom(); + Room room = ingester.GetRoom(RegionType.Set_Passable); if (room != null) { int scoreStageIndex = RoomStatDefOf.Impressiveness.GetScoreStageIndex(room.GetStat(RoomStatDefOf.Impressiveness)); if (ThoughtDefOf.AteInImpressiveDiningRoom.stages[scoreStageIndex] != null) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex)); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex), null); } } } @@ -272,7 +270,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { thing = thing.SplitOff(1); } - if (!thing.Destroyed) thing.Destroy(); + if (!thing.Destroyed) thing.Destroy(DestroyMode.Vanish); }; toil.defaultCompleteMode = ToilCompleteMode.Instant; return toil; @@ -280,7 +278,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) public override bool TryMakePreToilReservations() { - return pawn.Reserve(TargetA, job); + return this.pawn.Reserve(TargetA, this.job, 1, -1, null); } } } diff --git a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs index 5e0df32..5a47bd3 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs @@ -1,13 +1,10 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Diagnostics; -using RimWorld; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_Diablerie : JobDriver { @@ -19,13 +16,13 @@ protected Pawn Victim { get { - if (job.targetA.Thing is Pawn p) return p; - if (job.targetA.Thing is Corpse c) return c.InnerPawn; + if (base.job.targetA.Thing is Pawn p) return p; + if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => GetActor().GetComp(); + protected CompVampire CompFeeder => this.GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -36,7 +33,7 @@ public override void Notify_Starting() private void DoEffect() { - BloodVictim.TransferBloodTo(1, BloodFeeder, false); + this.BloodVictim.TransferBloodTo(1, BloodFeeder, false); } public override string GetReport() @@ -50,10 +47,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return pawn == Victim; + return this.pawn == this.Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } @@ -63,8 +60,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - job.SetTarget(TargetIndex.A, p.Corpse); - pawn.Reserve(TargetA, job); + this.job.SetTarget(TargetIndex.A, p.Corpse); + this.pawn.Reserve(TargetA, this.job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -76,7 +73,7 @@ protected override IEnumerable MakeNewToils() VampireCorpse vampCorpse = ((VampireCorpse)TargetA.Thing); vampCorpse.Diableried = true; Pawn p = vampCorpse.InnerPawn; - pawn.VampComp().Notify_Diablerie(p.VampComp()); + this.pawn.VampComp().Notify_Diablerie(p.VampComp()); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs index e82dc5b..7106b99 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs @@ -1,11 +1,10 @@ using System.Collections.Generic; using System.Diagnostics; -using RimWorld; -using Vampire.Defs; using Verse; using Verse.AI; +using RimWorld; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_DigAndHide : JobDriver { @@ -16,40 +15,40 @@ public class JobDriver_DigAndHide : JobDriver [DebuggerHidden] protected override IEnumerable MakeNewToils() { - yield return Toils_Reserve.Reserve(TargetIndex.A); + yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); if (TargetLocA != pawn.PositionHeld) yield return Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.Touch); Toil doWork = new Toil(); doWork.initAction = delegate { - workLeft = BaseWorkAmount; - job.SetTarget(TargetIndex.B, pawn); + this.workLeft = BaseWorkAmount; + this.job.SetTarget(TargetIndex.B, this.pawn); }; doWork.tickAction = delegate { if (GetActor().Downed || GetActor().Dead || GetActor().pather.MovingNow) { - EndJobWith(JobCondition.Incompletable); + this.EndJobWith(JobCondition.Incompletable); return; } - workLeft -= pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); - if (workLeft <= 0f) + this.workLeft -= this.pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); + if (this.workLeft <= 0f) { - Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole); - thing.SetFaction(pawn.Faction); - GenSpawn.Spawn(thing, TargetLocA, Map); + Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole, null); + thing.SetFaction(this.pawn.Faction, null); + GenSpawn.Spawn(thing, this.TargetLocA, this.Map); - Pawn actor = pawn; + Pawn actor = this.pawn; Building_Casket pod = (Building_Casket)thing; actor.DeSpawn(); pod.GetDirectlyHeldThings().TryAdd(actor); - ReadyForNextToil(); + this.ReadyForNextToil(); return; } //JoyUtility.JoyTickCheckEnd(this.pawn, JoyTickFullJoyAction.EndJob, 1f); }; - doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)workLeft / (float)BaseWorkAmount); + doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)this.workLeft / (float)BaseWorkAmount); doWork.defaultCompleteMode = ToilCompleteMode.Never; //doWork.FailOn(() => !JoyUtility.EnjoyableOutsideNow(this.pawn, null)); //doWork.FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); @@ -59,7 +58,7 @@ protected override IEnumerable MakeNewToils() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref workLeft, "workLeft"); + Scribe_Values.Look(ref this.workLeft, "workLeft", 0f, false); } public override bool TryMakePreToilReservations() diff --git a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs index a7b31e0..dfe4c1b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs @@ -1,12 +1,10 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Diagnostics; -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_Embrace : JobDriver { @@ -18,13 +16,13 @@ protected Pawn Victim { get { - if (job.targetA.Thing is Pawn p) return p; - if (job.targetA.Thing is Corpse c) return c.InnerPawn; + if (base.job.targetA.Thing is Pawn p) return p; + if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => GetActor().GetComp(); + protected CompVampire CompFeeder => this.GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -35,7 +33,7 @@ public override void Notify_Starting() private void DoEffect() { - BloodVictim.TransferBloodTo(1, BloodFeeder); + this.BloodVictim.TransferBloodTo(1, BloodFeeder); } public override string GetReport() @@ -49,10 +47,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return pawn == Victim; + return this.pawn == this.Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, GetActor()?.Faction != TargetA.Thing?.Faction, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, this.GetActor()?.Faction != this.TargetA.Thing?.Faction, false)) { yield return t; } @@ -62,8 +60,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - job.SetTarget(TargetIndex.A, p.Corpse); - pawn.Reserve(TargetA, job); + this.job.SetTarget(TargetIndex.A, p.Corpse); + this.pawn.Reserve(TargetA, this.job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -72,7 +70,7 @@ protected override IEnumerable MakeNewToils() { initAction = delegate () { - pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(pawn, Victim); + this.pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(this.pawn, Victim); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs index a2a7d21..c3de600 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs @@ -1,33 +1,33 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Diagnostics; -using RimWorld; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_EnterTorpor : JobDriver { public override bool TryMakePreToilReservations() { - return pawn.Reserve(TargetA, job); + return pawn.Reserve(TargetA, this.job); } [DebuggerHidden] protected override IEnumerable MakeNewToils() { this.FailOnDespawnedOrNull(TargetIndex.A); - yield return Toils_Reserve.Reserve(TargetIndex.A); + yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell); Toil prepare = Toils_General.Wait(500); prepare.FailOnCannotTouch(TargetIndex.A, PathEndMode.InteractionCell); - prepare.WithProgressBarToilDelay(TargetIndex.A); + prepare.WithProgressBarToilDelay(TargetIndex.A, false, -0.5f); yield return prepare; yield return new Toil { initAction = delegate { - Pawn actor = pawn; + Pawn actor = this.pawn; Building_Casket pod = (Building_Casket)actor.CurJob.targetA.Thing; actor.DeSpawn(); diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index 030331d..d8a6bd4 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -1,15 +1,11 @@ -using System; +using RimWorld; +using System; using System.Collections.Generic; using System.Diagnostics; -using RimWorld; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Disciplines.Animalism; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_Feed : JobDriver { @@ -17,11 +13,11 @@ public class JobDriver_Feed : JobDriver public static float BaseFeedTime = 320f; public static float BaseCoolantThrowupChance = 0.25f; - protected Pawn Victim => job.targetA.Thing as Pawn; + protected Pawn Victim => base.job.targetA.Thing as Pawn; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => GetActor().GetComp(); + protected CompVampire CompFeeder => this.GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => GetActor().BloodNeed(); + protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); public override void Notify_Starting() { @@ -30,13 +26,13 @@ public override void Notify_Starting() public virtual void DoEffect() { - BloodVictim.TransferBloodTo(1, BloodFeeder); - if (Victim.IsAndroid() && !pawn.IsAndroid()) + this.BloodVictim.TransferBloodTo(1, BloodFeeder); + if (Victim.IsAndroid() && !this.pawn.IsAndroid()) { if (Rand.Value <= BaseCoolantThrowupChance) { - EndJobWith(JobCondition.Incompletable); - pawn.jobs.StartJob(new Job(JobDefOf.Vomit, pawn.PositionHeld)); + this.EndJobWith(JobCondition.Incompletable); + this.pawn.jobs.StartJob(new Job(JobDefOf.Vomit, this.pawn.PositionHeld)); } } @@ -47,9 +43,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return pawn == Victim; + return this.pawn == this.Victim; }); - AddEndCondition(delegate + this.AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -57,7 +53,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(job.def, this, pawn, TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(this.job.def, this, this.pawn, this.TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } @@ -66,7 +62,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, ThoughtDef victimThoughtDef, ThoughtDef actorThoughtDef, float workLeft, Action effect, Func stopCondition, bool needsGrapple = true, bool cleansWound = true, bool neverGiveUp = false) { - yield return Toils_Reserve.Reserve(TargetIndex.A); + yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); Toil gotoToil = (actor?.Faction == TargetA.Thing?.Faction) ? Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch) : Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() @@ -75,7 +71,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { MoteMaker.MakeColonistActionOverlay(actor, ThingDefOf.Mote_ColonistAttacking); - workLeft = BaseFeedTime; + workLeft = JobDriver_Feed.BaseFeedTime; Pawn victim = TargetA.Thing as Pawn; if (victim != null) { @@ -95,7 +91,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, } if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable); + actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); } if (actor.IsVampire()) VampireBiteUtility.MakeNew(actor, victim); @@ -120,7 +116,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (victimThoughtDef != null) victimThought = (Thought_Memory)ThoughtMaker.MakeThought(victimThoughtDef); if (victimThought != null) { - victim.needs.mood.thoughts.memories.TryGainMemory(victimThought); + victim.needs.mood.thoughts.memories.TryGainMemory(victimThought, null); } } if (actor?.needs?.mood?.thoughts?.memories != null) @@ -129,7 +125,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (actorThoughtDef != null) actorThought = (Thought_Memory)ThoughtMaker.MakeThought(actorThoughtDef); if (actorThought != null) { - actor.needs.mood.thoughts.memories.TryGainMemory(actorThought); + actor.needs.mood.thoughts.memories.TryGainMemory(actorThought, null); } } @@ -138,7 +134,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); v.XP += 15; } workLeft = BaseFeedTime; @@ -180,7 +176,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index c1e3d63..385f2a2 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -1,13 +1,11 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_FeedAndDestroy : JobDriver { @@ -20,8 +18,8 @@ protected Pawn Victim { get { - if (job.targetA.Thing is Pawn p) return p; - if (job.targetA.Thing is Corpse c) return c.InnerPawn; + if (base.job.targetA.Thing is Pawn p) return p; + if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } @@ -29,13 +27,13 @@ protected Pawn Master { get { - if (job.targetB.Thing is Pawn p) return p; - if (job.targetB.Thing is Corpse c) return c.InnerPawn; + if (base.job.targetB.Thing is Pawn p) return p; + if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => GetActor().GetComp(); + protected CompVampire CompFeeder => this.GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -46,14 +44,14 @@ public override void Notify_Starting() private void DoEffect() { - BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); if (Victim.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside) is List parts) { for (int i = 0; i < 3; i++) { if (!Victim.Dead) { - Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, GetActor(), parts.RandomElement())); + Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, this.GetActor(), parts.RandomElement())); } } } @@ -70,10 +68,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return pawn == Victim; + return this.pawn == this.Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs index a318ef6..3891979 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs @@ -1,12 +1,10 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Diagnostics; -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_FeedAndReturn : JobDriver { @@ -19,8 +17,8 @@ protected Pawn Victim { get { - if (job.targetA.Thing is Pawn p) return p; - if (job.targetA.Thing is Corpse c) return c.InnerPawn; + if (base.job.targetA.Thing is Pawn p) return p; + if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } @@ -28,13 +26,13 @@ protected Pawn Master { get { - if (job.targetB.Thing is Pawn p) return p; - if (job.targetB.Thing is Corpse c) return c.InnerPawn; + if (base.job.targetB.Thing is Pawn p) return p; + if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => GetActor().GetComp(); + protected CompVampire CompFeeder => this.GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -45,7 +43,7 @@ public override void Notify_Starting() private void DoEffect() { - BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); } public override string GetReport() @@ -59,10 +57,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return pawn == Victim; + return this.pawn == this.Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs index bf7fc4f..22b4faf 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs @@ -1,13 +1,11 @@ -using System; +using RimWorld; +using System; using System.Collections.Generic; using System.Diagnostics; -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_FeedSip : JobDriver { @@ -15,11 +13,11 @@ public class JobDriver_FeedSip : JobDriver private float workLeft = -1f; public static float BaseFeedTime = 320f; - protected Pawn Victim => (Pawn)job.targetA.Thing; + protected Pawn Victim => (Pawn)base.job.targetA.Thing; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => GetActor().GetComp(); + protected CompVampire CompFeeder => this.GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => GetActor().BloodNeed(); + protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); public override void Notify_Starting() { @@ -28,7 +26,7 @@ public override void Notify_Starting() public virtual void DoEffect() { - BloodVictim.TransferBloodTo(1, BloodFeeder); + this.BloodVictim.TransferBloodTo(1, BloodFeeder); } [DebuggerHidden] @@ -37,9 +35,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return pawn == Victim; + return this.pawn == this.Victim; }); - AddEndCondition(delegate + this.AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -47,7 +45,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(this, pawn, TargetA, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(this, this.pawn, this.TargetA, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } @@ -55,7 +53,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, float workLeft, Action effect, Func stopCondition) { - yield return Toils_Reserve.Reserve(TargetIndex.A); + yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); Toil gotoToil = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() @@ -79,7 +77,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, GenClamor.DoClamor(actor, 10f, ClamorType.Harm); if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable); + actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); } if (actor?.VampComp()?.Bloodline?.bloodlineHediff?.CompProps()?.verbs is List verbProps) { @@ -109,7 +107,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); v.XP += 15; } workLeft = BaseFeedTime; @@ -138,7 +136,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs index 15eb33a..2b89f06 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs @@ -1,10 +1,9 @@ using System.Collections.Generic; using System.Diagnostics; -using Vampire.Components; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobDriver_MakeBloodBond : JobDriver { @@ -16,19 +15,19 @@ protected Pawn Victim { get { - if (job.targetA.Thing is Pawn p) return p; - if (job.targetA.Thing is Corpse c) return c.InnerPawn; + if (base.job.targetA.Thing is Pawn p) return p; + if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompThrall => Victim.GetComp(); - protected CompVampire CompMaster => GetActor().GetComp(); + protected CompVampire CompMaster => this.GetActor().GetComp(); protected Need_Blood BloodThrall => CompThrall.BloodPool; protected Need_Blood BloodMaster => CompMaster.BloodPool; private void DoEffect() { - BloodMaster.TransferBloodTo(1, BloodThrall); + this.BloodMaster.TransferBloodTo(1, BloodThrall); } [DebuggerHidden] @@ -37,14 +36,14 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return pawn == Victim; + return this.pawn == this.Victim; }); this.FailOn(delegate { return BloodMaster.CurBloodPoints == 0; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, (Pawn)TargetA, GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, (Pawn)TargetA, this.GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs index b8aee3f..a161283 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs @@ -1,10 +1,8 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobGiver_GetBlood : ThinkNode_JobGiver { diff --git a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs index a26bb9c..5047b64 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs @@ -1,11 +1,9 @@ using System; -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; using Verse.AI; +using RimWorld; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobGiver_SeekShelterFromSunlight : ThinkNode_JobGiver { @@ -21,7 +19,7 @@ public class JobGiver_SeekShelterFromSunlight : ThinkNode_JobGiver protected virtual IntVec3 GetExactWanderDest(Pawn pawn) { IntVec3 wanderRoot = pawn.PositionHeld; - return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, maxDanger)); + return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, this.wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, this.maxDanger)); } public override float GetPriority(Pawn pawn) @@ -44,7 +42,7 @@ protected override Job TryGiveJob(Pawn pawn) return null; if (pawn.Drafted) return null; - Room room = pawn.GetRoom(); + Room room = pawn.GetRoom(RegionType.Set_Passable); if (room != null) { if (room.PsychologicallyOutdoors) diff --git a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs index 42f5faa..cd107ad 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs @@ -1,10 +1,8 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class JobGiver_VampireBeast : ThinkNode_JobGiver { @@ -26,28 +24,28 @@ protected override Job TryGiveJob(Pawn pawn) { return null; } - if (pawn?.TryGetAttackVerb() == null) + if (pawn?.TryGetAttackVerb(false) == null) { return null; } - Pawn pawn2 = FindPawnTarget(pawn); - if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) + Pawn pawn2 = this.FindPawnTarget(pawn); + if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) { if (pawn2.InAggroMentalState) - return MeleeAttackJob(pawn2); + return this.MeleeAttackJob(pawn2); else - return FeedJob(pawn2); + return this.FeedJob(pawn2); } - Building building = FindTurretTarget(pawn); + Building building = this.FindTurretTarget(pawn); if (building != null) { - return MeleeAttackJob(building); + return this.MeleeAttackJob(building); } if (pawn2 != null) { - using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings))) + using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings, false), PathEndMode.OnCell)) { if (!pawnPath.Found) { @@ -60,22 +58,22 @@ protected override Job TryGiveJob(Pawn pawn) //Job job = DigUtility.PassBlockerJob(pawn, thing, cellBeforeBlocker, true); //if (job != null) //{ - return MeleeAttackJob(thing); + return this.MeleeAttackJob(thing); //} } IntVec3 loc = pawnPath.LastCellBeforeBlockerOrFinalCell(pawn.MapHeld); - IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map), 9, TraverseParms.For(pawn)).RandomCell; + IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map, RegionType.Set_Passable), 9, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), null, null, RegionType.Set_Passable).RandomCell; if (randomCell == pawn.PositionHeld) { - return new Job(JobDefOf.Wait, 30); + return new Job(JobDefOf.Wait, 30, false); } return new Job(JobDefOf.Goto, randomCell); } } - Building buildingDoor = FindDoorTarget(pawn); + Building buildingDoor = this.FindDoorTarget(pawn); if (buildingDoor != null) { - return MeleeAttackJob(buildingDoor); + return this.MeleeAttackJob(buildingDoor); } return null; @@ -105,13 +103,13 @@ private Pawn FindPawnTarget(Pawn pawn) private Building FindTurretTarget(Pawn pawn) { - return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f); + return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); } private Building_Door FindDoorTarget(Pawn pawn) { - return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f); + return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); } } diff --git a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs index a0375a8..8ccc2f0 100644 --- a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs +++ b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs @@ -1,14 +1,13 @@ using RimWorld; -using Vampire.Components; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class MentalState_Rotschreck : MentalState { - CompVampire vampComp => pawn.GetComp(); - Need_Blood vampBlood => pawn.needs.TryGetNeed(); + CompVampire vampComp => this.pawn.GetComp(); + Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -20,7 +19,7 @@ public override void MentalStateTick() { base.MentalStateTick(); if (pawn.PositionHeld.Roofed(pawn.MapHeld)) - RecoverFromState(); + this.RecoverFromState(); //Room room = pawn.GetRoom(RegionType.Set_All); //if (room != null) //{ diff --git a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs index 79e6504..c9c02db 100644 --- a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs @@ -1,14 +1,13 @@ using RimWorld; -using Vampire.Components; using Verse; using Verse.AI; -namespace Vampire.AI_Jobs +namespace Vampire { public class MentalState_VampireBeast : MentalState { - CompVampire vampComp => pawn.GetComp(); - Need_Blood vampBlood => pawn.needs.TryGetNeed(); + CompVampire vampComp => this.pawn.GetComp(); + Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -21,9 +20,9 @@ public override void MentalStateTick() if (vampComp != null) { if (!vampComp.IsVampire) - RecoverFromState(); + this.RecoverFromState(); if (vampBlood.IsFull) - RecoverFromState(); + this.RecoverFromState(); } } diff --git a/Source/Vampires/Buildings/Building_Coffin.cs b/Source/Vampires/Buildings/Building_Coffin.cs index 3b0d2c0..ea46fbf 100644 --- a/Source/Vampires/Buildings/Building_Coffin.cs +++ b/Source/Vampires/Buildings/Building_Coffin.cs @@ -2,7 +2,7 @@ using RimWorld; using Verse; -namespace Vampire.Buildings +namespace Vampire { public class Building_Coffin : Building_Sarcophagus { @@ -23,14 +23,14 @@ public override IEnumerable GetGizmos() foreach (Gizmo g in base.GetGizmos()) yield return g; - Pawn p = (Pawn)ContainedThing; + Pawn p = (Pawn)this.ContainedThing; if (p == null) { p = this?.Corpse?.InnerPawn ?? null; } if (p != null) { - foreach (Gizmo y in HarmonyPatches.HarmonyPatches.GraveGizmoGetter(p, this)) + foreach (Gizmo y in HarmonyPatches.GraveGizmoGetter(p, this)) yield return y; } } diff --git a/Source/Vampires/Buildings/Building_HideyHole.cs b/Source/Vampires/Buildings/Building_HideyHole.cs index 6ce1798..9b0cc0c 100644 --- a/Source/Vampires/Buildings/Building_HideyHole.cs +++ b/Source/Vampires/Buildings/Building_HideyHole.cs @@ -1,13 +1,14 @@ using RimWorld; +using Verse; -namespace Vampire.Buildings +namespace Vampire { public class Building_HideyHole : Building_Grave { public override void Open() { base.Open(); - Destroy(); + this.Destroy(DestroyMode.Vanish); } } } diff --git a/Source/Vampires/Buttons.cs b/Source/Vampires/Buttons.cs index 06deff7..47677ea 100644 --- a/Source/Vampires/Buttons.cs +++ b/Source/Vampires/Buttons.cs @@ -7,12 +7,12 @@ namespace Vampire public static class TexButton { //VampireIcon - public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon"); - public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon"); - public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty"); - public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull"); - public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted"); - public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed"); + public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon", true); + public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon", true); + public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty", true); + public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull", true); + public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted", true); + public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed", true); //public static readonly Texture2D ROMV_Ashes = ContentFinder.Get("Things/Item/Resource/VampireAshes", true); } } \ No newline at end of file diff --git a/Source/Vampires/Components/CompBloodItem.cs b/Source/Vampires/Components/CompBloodItem.cs index eb9ff03..52da951 100644 --- a/Source/Vampires/Components/CompBloodItem.cs +++ b/Source/Vampires/Components/CompBloodItem.cs @@ -1,9 +1,9 @@ using Verse; -namespace Vampire.Components +namespace Vampire { public class CompBloodItem : ThingComp { - public CompProperties_BloodItem Props => props as CompProperties_BloodItem; + public CompProperties_BloodItem Props => this.props as CompProperties_BloodItem; } } diff --git a/Source/Vampires/Components/CompProperties_BloodItem.cs b/Source/Vampires/Components/CompProperties_BloodItem.cs index eb8c48b..48ee56b 100644 --- a/Source/Vampires/Components/CompProperties_BloodItem.cs +++ b/Source/Vampires/Components/CompProperties_BloodItem.cs @@ -1,13 +1,12 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Components +namespace Vampire { public class CompProperties_BloodItem : CompProperties { public BloodType bloodType = BloodType.LowBlood; public int bloodPoints = 1; - public CompProperties_BloodItem() => compClass = typeof(CompBloodItem); + public CompProperties_BloodItem() => this.compClass = typeof(CompBloodItem); } } diff --git a/Source/Vampires/Components/CompProperties_VampBed.cs b/Source/Vampires/Components/CompProperties_VampBed.cs index 6b43558..4a0f72e 100644 --- a/Source/Vampires/Components/CompProperties_VampBed.cs +++ b/Source/Vampires/Components/CompProperties_VampBed.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Components +namespace Vampire { public class CompProperties_VampBed : CompProperties { @@ -9,7 +9,7 @@ public class CompProperties_VampBed : CompProperties public CompProperties_VampBed() { - compClass = typeof(CompVampBed); + this.compClass = typeof(CompVampBed); } } } diff --git a/Source/Vampires/Components/CompVampBed.cs b/Source/Vampires/Components/CompVampBed.cs index 3fa5f97..eb355d4 100644 --- a/Source/Vampires/Components/CompVampBed.cs +++ b/Source/Vampires/Components/CompVampBed.cs @@ -1,12 +1,10 @@ using System.Collections.Generic; using System.Linq; -using RimWorld; -using Vampire.Defs; -using Vampire.Utilities; using Verse; +using RimWorld; using Verse.AI; -namespace Vampire.Components +namespace Vampire { //Spawns invisible beds on things. //Perfect for vampires @@ -14,22 +12,22 @@ public class CompVampBed : ThingComp { private Building_Bed bed; public Building_Bed Bed { get => bed; set => bed = value; } - public CompProperties_VampBed Props => props as CompProperties_VampBed; + public CompProperties_VampBed Props => this.props as CompProperties_VampBed; public override void PostSpawnSetup(bool respawningAfterLoad) { base.PostSpawnSetup(respawningAfterLoad); - if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (parent is Building b) + if (this.parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); - bed.SetFaction(parent.Faction); + GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); + bed.SetFaction(this.parent.Faction); } } @@ -38,28 +36,28 @@ public override IEnumerable CompFloatMenuOptions(Pawn selPawn) { //return base.CompFloatMenuOptions(selPawn); - if ((selPawn?.IsVampire() ?? false) && parent is Building_Grave g && !g.HasCorpse) + if ((selPawn?.IsVampire() ?? false) && this.parent is Building_Grave g && !g.HasCorpse) { yield return new FloatMenuOption("ROMV_EnterTorpor".Translate(new object[] { selPawn.Label }), delegate { - selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, parent)); - }); + selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, this.parent)); + }, MenuOptionPriority.Default, null, null, 0f, null, null); } } public override void CompTickRare() { base.CompTickRare(); - if (parent is Building_Grave g) + if (this.parent is Building_Grave g) { if (g.HasAnyContents) { if (bed != null && bed.Spawned) { - bed.Destroy(); + bed.Destroy(DestroyMode.Vanish); bed = null; } if (g.TryGetInnerInteractableThingOwner().FirstOrDefault(x => x is MinifiedThing) is MinifiedThing t) @@ -70,16 +68,16 @@ public override void CompTickRare() return; } - if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (parent is Building b) + if (this.parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); - bed.SetFaction(parent.Faction); + GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); + bed.SetFaction(this.parent.Faction); } if (bed != null && bed.Spawned && g.assignedPawn != null && ((bed?.AssignedPawns?.Contains(g.assignedPawn) ?? false) == false)) { @@ -96,7 +94,7 @@ public override void PostDeSpawn(Map map) base.PostDeSpawn(map); if (bed != null && bed.Spawned) { - bed.Destroy(); + bed.Destroy(DestroyMode.Vanish); bed = null; } } @@ -104,7 +102,7 @@ public override void PostDeSpawn(Map map) public override void PostExposeData() { base.PostExposeData(); - Scribe_References.Look(ref bed, "bed"); + Scribe_References.Look(ref this.bed, "bed"); } } } diff --git a/Source/Vampires/Components/CompVampire.cs b/Source/Vampires/Components/CompVampire.cs index 85e186c..95b4268 100644 --- a/Source/Vampires/Components/CompVampire.cs +++ b/Source/Vampires/Components/CompVampire.cs @@ -1,16 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using AbilityUser; using RimWorld; -using Vampire.AI_Jobs; -using Vampire.Defs; -using Vampire.Hediffs; -using Vampire.Utilities; using Verse; +using AbilityUser; using Verse.AI; -namespace Vampire.Components +namespace Vampire { public enum VampState : int { @@ -63,7 +59,7 @@ public IntVec3 VampLastHomePoint if (vampLastHomePoint == null || vampLastHomeCheck < Find.TickManager.TicksGame) { vampLastHomeCheck = Find.TickManager.TicksGame + 500; - vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(Pawn); + vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(this.Pawn); } return vampLastHomePoint.Value; } @@ -128,7 +124,7 @@ public SkillSheet Sheet { if (sheet == null) { - sheet = new SkillSheet(Pawn); + sheet = new SkillSheet(this.Pawn); } return sheet; } @@ -142,7 +138,7 @@ public List Childer if (childer == null) { childer = new List(); - if (AbilityUser?.relations?.DirectRelations is List rels) + if (this.AbilityUser?.relations?.DirectRelations is List rels) { foreach (DirectPawnRelation rel in rels) { @@ -196,16 +192,16 @@ public BloodlineDef Bloodline { return bloodline; } set => bloodline = value; } public int Generation { get => generation; set => generation = value; } - public bool Thinblooded => generation > 13; - public Need_Blood BloodPool => AbilityUser?.needs?.TryGetNeed() ?? null; + public bool Thinblooded => this.generation > 13; + public Need_Blood BloodPool => this.AbilityUser?.needs?.TryGetNeed() ?? null; public float TrueCombatPower { get { float result = 0; - result += AbilityUser.kindDef.combatPower; + result += this.AbilityUser.kindDef.combatPower; result += 4000; - for (int i = 1; i <= generation; i++) + for (int i = 1; i <= this.generation; i++) { if (i == 2) { result -= 3000; continue; } if (i < 7) { result -= 100; continue; } @@ -219,13 +215,13 @@ public bool InSunlight { get { - if (AbilityUser.Spawned) + if (this.AbilityUser.Spawned) { - Map curMap = AbilityUser.Map; + Map curMap = this.AbilityUser.Map; if (curMap != null) { - if (VampireUtility.IsDaylight(AbilityUser) - && !AbilityUser.PositionHeld.Roofed(curMap)) + if (VampireUtility.IsDaylight(this.AbilityUser) + && !this.AbilityUser.PositionHeld.Roofed(curMap)) { return true; } @@ -246,8 +242,8 @@ public void Notify_LevelUp(bool sendNotification) { if (XP <= 0) XP = 1; Level++; - if (sendNotification && IsVampire && AbilityUser != null && AbilityUser.Spawned && AbilityUser.Faction == Faction.OfPlayerSilentFail) - Messages.Message("ROMV_LevelUp".Translate(AbilityUser), new RimWorld.Planet.GlobalTargetInfo(AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); + if (sendNotification && this.IsVampire && this.AbilityUser != null && this.AbilityUser.Spawned && this.AbilityUser.Faction == Faction.OfPlayerSilentFail) + Messages.Message("ROMV_LevelUp".Translate(this.AbilityUser), new RimWorld.Planet.GlobalTargetInfo(this.AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); } public void Notify_ResetAbilities() { @@ -256,7 +252,7 @@ public void Notify_ResetAbilities() public void Notify_UpdateAbilities() { - if (AbilityUser.IsVampire() && this is CompVampire) + if (this.AbilityUser.IsVampire() && this is CompVampire) { //Disciplines Skill Sheet if (Sheet?.Disciplines is List dd && !dd.NullOrEmpty()) @@ -267,9 +263,9 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef vd in vdd) { - if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) + if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) { - AddPawnAbility(vd); + this.AddPawnAbility(vd); } } @@ -281,22 +277,22 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef bloodVAD in bloodVADs) { - if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) + if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) { - AddPawnAbility(bloodVAD); + this.AddPawnAbility(bloodVAD); } } } //Regenerate Limb if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_RegenerateLimb) == null) { - AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); + this.AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); } //Vampiric Healing if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_VampiricHealing) == null) { - AddPawnAbility(VampDefOf.ROMV_VampiricHealing); + this.AddPawnAbility(VampDefOf.ROMV_VampiricHealing); } } } @@ -304,47 +300,47 @@ public void Notify_UpdateAbilities() public void GiveFeedJob(Pawn victim) { Job feedJob = new Job(VampDefOf.ROMV_Feed, victim); - AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); + this.AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); } public void GiveEmbraceJob(Pawn newChilde) { Job embraceJob = new Job(VampDefOf.ROMV_Embrace, newChilde); - AbilityUser.jobs.TryTakeOrderedJob(embraceJob); + this.AbilityUser.jobs.TryTakeOrderedJob(embraceJob, JobTag.Misc); } public void InitializeVampirism(Pawn newSire, BloodlineDef newBloodline = null, int newGeneration = -1, bool firstVampire = false) { //Log.Message("Init"); - AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); - AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); - AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); - VampireGen.TryGiveVampirismHediff(AbilityUser, newGeneration, newBloodline, newSire, firstVampire); + this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); + this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); + this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); + VampireGen.TryGiveVampirismHediff(this.AbilityUser, newGeneration, newBloodline, newSire, firstVampire); if (!firstVampire) { - bloodline = newBloodline;// sireComp.Bloodline; - generation = newGeneration;// + 1; - sire = newSire; - VampireRelationUtility.SetSireChildeRelations(AbilityUser, newSire?.VampComp() ?? null, newGeneration); + this.bloodline = newBloodline;// sireComp.Bloodline; + this.generation = newGeneration;// + 1; + this.sire = newSire; + VampireRelationUtility.SetSireChildeRelations(this.AbilityUser, newSire?.VampComp() ?? null, newGeneration); } else { - generation = 1; - bloodline = VampDefOf.ROMV_Caine; - sire = null; + this.generation = 1; + this.bloodline = VampDefOf.ROMV_Caine; + this.sire = null; } - VampireGen.TryGiveVampireAdditionalHediffs(AbilityUser); - if (VampireUtility.IsDaylight(AbilityUser)) VampireUtility.MakeSleepy(AbilityUser); - VampireUtility.AdjustTimeTables(AbilityUser); - - sheet = new SkillSheet(AbilityUser); - sheet.InitializeDisciplines(); - Notify_LevelUp(false); - AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" + VampireGen.TryGiveVampireAdditionalHediffs(this.AbilityUser); + if (VampireUtility.IsDaylight(this.AbilityUser)) VampireUtility.MakeSleepy(this.AbilityUser); + VampireUtility.AdjustTimeTables(this.AbilityUser); + + this.sheet = new SkillSheet(this.AbilityUser); + this.sheet.InitializeDisciplines(); + this.Notify_LevelUp(false); + this.AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" if (!bloodline.allowsHair) AbilityUser.story.hairDef = DefDatabase.GetNamed("Shaved"); if (this?.AbilityUser?.playerSettings != null) - AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; + this.AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; } public override void CompTick() @@ -367,7 +363,7 @@ public void SunlightWatcherTick() try { //Log.Message("SunlightWatcher"); - Pawn p = Pawn; + Pawn p = this.Pawn; Map m = p.MapHeld; IntVec3 i = p.PositionHeld; if (p.ParentHolder.IsEnclosingContainer()) @@ -381,7 +377,7 @@ public void SunlightWatcherTick() ThinkResult thinkResult = thinkNode_JobGiver.TryIssueJobPackage(p, default(JobIssueParams)); if (thinkResult.Job is Job j && j.IsSunlightSafeFor(p)) { - p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null); + p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null, false); } else { @@ -404,10 +400,10 @@ public void Notify_Starving(int lastNonStarvingTick) public void Notify_Embraced(CompVampire sireComp) { - InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1); + InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1, false); Messages.Message("ROMV_EmbracedSuccessfully".Translate(new object[] { - AbilityUser.LabelShort, + this.AbilityUser.LabelShort, sireComp.AbilityUser.LabelShort, sireComp.Bloodline.LabelCap }), MessageTypeDefOf.PositiveEvent); @@ -417,12 +413,12 @@ public void Notify_Diablerie(CompVampire victim) { Messages.Message("ROMV_DiablerieSuccessfully".Translate(new object[] { - AbilityUser.LabelShort, + this.AbilityUser.LabelShort, victim.AbilityUser.LabelShort }), MessageTypeDefOf.PositiveEvent); - Generation = Math.Min(Generation, victim.Generation); - Souls.Add(victim.AbilityUser); - VampireThoughtUtility.GiveThoughtsForDiablerie(AbilityUser); + this.Generation = Math.Min(this.Generation, victim.Generation); + this.Souls.Add(victim.AbilityUser); + VampireThoughtUtility.GiveThoughtsForDiablerie(this.AbilityUser); } #endregion Methods @@ -447,7 +443,7 @@ public override bool AllowStackWith(Thing other) } - public override float GrappleModifier => (IsVampire) ? 20 - generation : 0; + public override float GrappleModifier => (IsVampire) ? 20 - this.generation : 0; @@ -455,13 +451,13 @@ public override IEnumerable CompGetGizmosExtra() { if (Find.Selector.NumSelected == 1) { - for (int i = 0; i < AbilityData.AllPowers.Count; i++) + for (int i = 0; i < this.AbilityData.AllPowers.Count; i++) { - if (AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); + if (this.AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); } if (AbilityUser.Downed && AbilityUser.IsVampire()) { - VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); + Vampire.VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); yield return new Command_Action() { defaultLabel = bloodHeal.label, @@ -470,11 +466,11 @@ public override IEnumerable CompGetGizmosExtra() action = delegate { AbilityUser.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess); - BloodPool.AdjustBlood(-bloodHeal.bloodCost); - VampireUtility.Heal(AbilityUser); + MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess, -1f); + this.BloodPool.AdjustBlood(-bloodHeal.bloodCost); + VampireUtility.Heal(this.AbilityUser); }, - disabled = BloodPool.CurBloodPoints <= 0 + disabled = this.BloodPool.CurBloodPoints <= 0 }; } } @@ -483,22 +479,22 @@ public override IEnumerable CompGetGizmosExtra() public override void PostExposeData() { - Scribe_Defs.Look(ref bloodline, "bloodline"); - Scribe_Values.Look(ref generation, "generation"); - Scribe_Values.Look(ref level, "level"); - Scribe_Values.Look(ref xp, "xp"); - Scribe_Values.Look(ref abilityPoints, "abilityPoints"); - Scribe_Values.Look(ref curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); - Scribe_References.Look(ref sire, "sire"); - Scribe_Collections.Look(ref souls, "souls", LookMode.Reference); - Scribe_Deep.Look(ref sheet, "sheet", new object[] { AbilityUser }); + Scribe_Defs.Look(ref this.bloodline, "bloodline"); + Scribe_Values.Look(ref this.generation, "generation"); + Scribe_Values.Look(ref this.level, "level", 0); + Scribe_Values.Look(ref this.xp, "xp", 0); + Scribe_Values.Look(ref this.abilityPoints, "abilityPoints", 0); + Scribe_Values.Look(ref this.curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); + Scribe_References.Look(ref this.sire, "sire"); + Scribe_Collections.Look(ref this.souls, "souls", LookMode.Reference); + Scribe_Deep.Look(ref this.sheet, "sheet", new object[] { this.AbilityUser }); base.PostExposeData(); if (Scribe.mode == LoadSaveMode.PostLoadInit) { - AbilityData.Powers.Clear(); - if (AbilityUser.IsVampire() && (AbilityData.Powers == null || AbilityData.Powers.NullOrEmpty())) + this.AbilityData.Powers.Clear(); + if (this.AbilityUser.IsVampire() && (base.AbilityData.Powers == null || base.AbilityData.Powers.NullOrEmpty())) { - if (Sheet.Disciplines is List dd && !dd.NullOrEmpty()) + if (this.Sheet.Disciplines is List dd && !dd.NullOrEmpty()) { foreach (Discipline d in dd) { @@ -506,12 +502,12 @@ public override void PostExposeData() { foreach (VitaeAbilityDef vd in vds) { - AddPawnAbility(vd); + this.AddPawnAbility(vd); } } } } - Notify_UpdateAbilities(); + this.Notify_UpdateAbilities(); } } } diff --git a/Source/Vampires/Defs/BloodType.cs b/Source/Vampires/Defs/BloodType.cs index 33028f3..0104bd6 100644 --- a/Source/Vampires/Defs/BloodType.cs +++ b/Source/Vampires/Defs/BloodType.cs @@ -1,4 +1,4 @@ -namespace Vampire.Defs +namespace Vampire { public enum BloodType : int { diff --git a/Source/Vampires/Defs/BloodlineDef.cs b/Source/Vampires/Defs/BloodlineDef.cs index cb4e373..0572f54 100644 --- a/Source/Vampires/Defs/BloodlineDef.cs +++ b/Source/Vampires/Defs/BloodlineDef.cs @@ -1,11 +1,9 @@ using System; using System.Collections.Generic; -using UnityEngine; -using Vampire.Utilities; -using Vampire.Workers; using Verse; +using UnityEngine; -namespace Vampire.Defs +namespace Vampire { public class BloodlineDef : Def { @@ -29,12 +27,12 @@ public EmbraceWorker EmbraceWorker { get { - if (embraceWorkerInt == null) + if (this.embraceWorkerInt == null) { - embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(embraceWorker); - embraceWorkerInt.def = this; + this.embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(this.embraceWorker); + this.embraceWorkerInt.def = this; } - return embraceWorkerInt; + return this.embraceWorkerInt; } } diff --git a/Source/Vampires/Defs/DisciplineDef.cs b/Source/Vampires/Defs/DisciplineDef.cs index 8200c1d..18abe6f 100644 --- a/Source/Vampires/Defs/DisciplineDef.cs +++ b/Source/Vampires/Defs/DisciplineDef.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Verse; -namespace Vampire.Defs +namespace Vampire { public class DisciplineDef : Def { diff --git a/Source/Vampires/Defs/ScenPart_GameStartNight.cs b/Source/Vampires/Defs/ScenPart_GameStartNight.cs index c141f32..a0863e9 100644 --- a/Source/Vampires/Defs/ScenPart_GameStartNight.cs +++ b/Source/Vampires/Defs/ScenPart_GameStartNight.cs @@ -1,8 +1,8 @@ -using RimWorld; -using UnityEngine; +using UnityEngine; using Verse; +using RimWorld; -namespace Vampire.Defs +namespace Vampire { public class ScenPart_GameStartNight : ScenPart { @@ -14,16 +14,16 @@ public class ScenPart_GameStartNight : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f); - text = Widgets.TextArea(scenPartRect, text); + Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f); + this.text = Widgets.TextArea(scenPartRect, this.text, false); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref text, "text"); - Scribe_Values.Look(ref textKey, "textKey"); - Scribe_Defs.Look(ref closeSound, "closeSound"); + Scribe_Values.Look(ref this.text, "text", null, false); + Scribe_Values.Look(ref this.textKey, "textKey", null, false); + Scribe_Defs.Look(ref this.closeSound, "closeSound"); } public override void PostGameStart() diff --git a/Source/Vampires/Defs/VampDefOf.cs b/Source/Vampires/Defs/VampDefOf.cs index 94ef39c..aab4c6e 100644 --- a/Source/Vampires/Defs/VampDefOf.cs +++ b/Source/Vampires/Defs/VampDefOf.cs @@ -1,7 +1,7 @@ using RimWorld; using Verse; -namespace Vampire.Defs +namespace Vampire { [DefOf] public static class VampDefOf diff --git a/Source/Vampires/Defs/VitaeAbilityDef.cs b/Source/Vampires/Defs/VitaeAbilityDef.cs index 84cf674..1504c24 100644 --- a/Source/Vampires/Defs/VitaeAbilityDef.cs +++ b/Source/Vampires/Defs/VitaeAbilityDef.cs @@ -1,4 +1,4 @@ -namespace Vampire.Defs +namespace Vampire { public class VitaeAbilityDef : AbilityUser.AbilityDef { diff --git a/Source/Vampires/Discipline.cs b/Source/Vampires/Discipline.cs index dd103c1..2efb326 100644 --- a/Source/Vampires/Discipline.cs +++ b/Source/Vampires/Discipline.cs @@ -1,6 +1,4 @@ using System.Collections.Generic; -using Vampire.Defs; -using Vampire.Utilities; using Verse; namespace Vampire @@ -44,9 +42,9 @@ public void UpdateAbilities() public void Notify_Reset(Pawn p) { - p.VampComp().AbilityPoints += points; - points = 0; - level = 0; + p.VampComp().AbilityPoints += this.points; + this.points = 0; + this.level = 0; UpdateAbilities(); } @@ -80,10 +78,10 @@ public Discipline(DisciplineDef def) public void ExposeData() { - Scribe_Values.Look(ref level, "level"); - Scribe_Values.Look(ref points, "points"); - Scribe_Values.Look(ref prevPoints, "prevPoints"); - Scribe_Defs.Look(ref def, "def"); + Scribe_Values.Look(ref this.level, "level"); + Scribe_Values.Look(ref this.points, "points"); + Scribe_Values.Look(ref this.prevPoints, "prevPoints"); + Scribe_Defs.Look(ref this.def, "def"); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs index 625cd10..696072c 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs @@ -1,8 +1,7 @@ using RimWorld; -using Vampire.Utilities; using Verse; -namespace Vampire.Disciplines.Animalism +namespace Vampire { public class DisciplineEffect_Beckoning : Verb_UseAbilityPawnEffect { @@ -12,15 +11,15 @@ public override void Effect(Pawn target) int count = new IntRange(15, 25).RandomInRange; IntVec3 loc; - if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal)) + if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal, null)) { - VampireUtility.SummonEffect(loc, CasterPawn.Map, CasterPawn, 10f); + VampireUtility.SummonEffect(loc, this.CasterPawn.Map, this.CasterPawn, 10f); for (int i = 0; i < count; i++) target.Map.wildSpawner.SpawnRandomWildAnimalAt(loc); } - Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map)); + Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map), null); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs index d7a739d..abde72c 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs @@ -1,24 +1,22 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Utilities; using Verse; -namespace Vampire.Disciplines.Animalism +namespace Vampire { public class DisciplineEffect_Communion : AbilityUser.Verb_UseAbility { public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { for (int i = 1; i <= 3; i++) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BatSpectralKind, Faction.OfPlayer); - p.Master = CasterPawn; - VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 3f); - GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); + p.Master = this.CasterPawn; + VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 3f); + GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs index 43a98d1..0b805d7 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs @@ -1,15 +1,13 @@ -using Vampire.Defs; -using Vampire.Utilities; -using Verse; +using Verse; -namespace Vampire.Disciplines.Animalism +namespace Vampire { public class DisciplineEffect_NightwispRavens : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - VampireUtility.SummonEffect(target.PositionHeld, CasterPawn.Map, CasterPawn, 2f); + VampireUtility.SummonEffect(target.PositionHeld, this.CasterPawn.Map, this.CasterPawn, 2f); HealthUtility.AdjustSeverity(target, VampDefOf.ROMV_NightwispRavens, 1.0f); } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs index ace6bc2..0ddefb5 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs @@ -1,21 +1,19 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Utilities; using Verse; -namespace Vampire.Disciplines.Animalism +namespace Vampire { public class DisciplineEffect_SpectralWolf : AbilityUser.Verb_UseAbility { public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_WolfSpectral, Faction.OfPlayer); - VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 2f); - GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); + VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 2f); + GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs index 7e7d244..b907d7b 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Verse; -namespace Vampire.Disciplines.Animalism +namespace Vampire { public class HediffCompProperties_TickGraphic : HediffCompProperties { @@ -10,7 +10,7 @@ public class HediffCompProperties_TickGraphic : HediffCompProperties public HediffCompProperties_TickGraphic() { - compClass = typeof(HediffComp_TickGraphic); + this.compClass = typeof(HediffComp_TickGraphic); } } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs index 7850b34..bd7d27f 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs @@ -1,7 +1,7 @@ -using UnityEngine; -using Verse; +using Verse; +using UnityEngine; -namespace Vampire.Disciplines.Animalism +namespace Vampire { public class HediffComp_TickGraphic : HediffComp { @@ -17,7 +17,7 @@ public HediffCompProperties_TickGraphic Props { get { - return (HediffCompProperties_TickGraphic)props; + return (HediffCompProperties_TickGraphic)this.props; } } @@ -35,13 +35,13 @@ public override void CompPostTick(ref float severityAdjustment) curGraphicIndex = 0; } } - CurGraphic = Props.cycleGraphics[curGraphicIndex].Graphic; + CurGraphic = this.Props.cycleGraphics[curGraphicIndex].Graphic; if (CurGraphic != null) { - Material material = CurGraphic.MatSingle; + Material material = this.CurGraphic.MatSingle; Vector3 s = new Vector3(CurGraphic.drawSize.x, 1f, CurGraphic.drawSize.y); Matrix4x4 matrix = default(Matrix4x4); - matrix.SetTRS(Pawn.DrawPos, Quaternion.identity, s); + matrix.SetTRS(this.Pawn.DrawPos, Quaternion.identity, s); Graphics.DrawMesh(MeshPool.plane10, matrix, material, 0); } } @@ -49,8 +49,8 @@ public override void CompPostTick(ref float severityAdjustment) public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref curGraphicIndex, "curGraphicIndex"); - Scribe_Values.Look(ref activated, "activated"); + Scribe_Values.Look(ref this.curGraphicIndex, "curGraphicIndex", 0); + Scribe_Values.Look(ref this.activated, "activated", false); } } } diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index dcfc244..fdc99e9 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -1,12 +1,10 @@ -using System.Linq; -using RimWorld; +using RimWorld; +using System.Linq; using UnityEngine; -using Vampire.Defs; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.Disciplines.Animalism +namespace Vampire { public class PawnTemporary : Pawn { @@ -31,11 +29,11 @@ public override void Tick() { setup = true; - if (def == VampDefOf.ROMV_BatSpectralRace) + if (this.def == VampDefOf.ROMV_BatSpectralRace) { if (Master == null) { - Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -43,21 +41,21 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } - if (def == VampDefOf.ROMV_BloodMistRace) + if (this.def == VampDefOf.ROMV_BloodMistRace) { if (Master == null) { - Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -65,13 +63,13 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } @@ -81,11 +79,11 @@ public override void Tick() if (ticksUntilNextTryGiveJob < 0) { ticksUntilNextTryGiveJob = new IntRange(500, 700).RandomInRange; - if (def == VampDefOf.ROMV_BatSpectralRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndReturn) + if (this.def == VampDefOf.ROMV_BatSpectralRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndReturn) { if (Master == null) { - Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -93,22 +91,22 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } - if (def == VampDefOf.ROMV_BloodMistRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndDestroy) + if (this.def == VampDefOf.ROMV_BloodMistRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndDestroy) { if (Master == null) { - Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -116,20 +114,20 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - jobs.TryTakeOrderedJob(newJob); + this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } } ticksLeft--; - if (ticksLeft <= 0) Destroy(); + if (ticksLeft <= 0) this.Destroy(); if (Spawned) { @@ -141,14 +139,14 @@ public override void Tick() else { LocalTargetInfo target = this; - if (Spawned) + if (this.Spawned) { effecter.EffectTick(this, TargetInfo.Invalid); } MoteProgressBar mote = ((SubEffecter_ProgressBar)effecter.children[0]).mote; if (mote != null) { - float result = 1f - (float)(ticksToDestroy - ticksLeft) / (float)ticksToDestroy; + float result = 1f - (float)(PawnTemporary.ticksToDestroy - this.ticksLeft) / (float)PawnTemporary.ticksToDestroy; mote.progress = Mathf.Clamp01(result); mote.offsetZ = -0.5f; @@ -162,15 +160,15 @@ public override void Tick() public override void DeSpawn() { if (effecter != null) effecter.Cleanup(); - VampireUtility.SummonEffect(PositionHeld, MapHeld, this, 2f); + VampireUtility.SummonEffect(this.PositionHeld, this.MapHeld, this, 2f); base.DeSpawn(); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref ticksLeft, "ticksLeft"); - Scribe_References.Look(ref master, "master"); + Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0); + Scribe_References.Look(ref this.master, "master"); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs index 9042e3a..45859c0 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs @@ -1,7 +1,6 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Auspex +namespace Vampire { public class DisciplineEffect_CrocodileTongue : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs index 10095f1..2ddd416 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs @@ -1,7 +1,6 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Auspex +namespace Vampire { public class DisciplineEffect_HeightenedSenses : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs index 1d416d6..fa77c6e 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs @@ -1,23 +1,21 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Hediffs; using Verse; -namespace Vampire.Disciplines.Auspex +namespace Vampire { public class DisciplineEffect_ReadMind : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); - HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, CasterPawn); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, this.CasterPawn, null); if (hediff.TryGetComp() is HediffComp_ReadMind rm) { rm.MindBeingRead = target; } hediff.Severity = 1.0f; - CasterPawn.health.AddHediff(hediff, null, null); + this.CasterPawn.health.AddHediff(hediff, null, null); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs index 759f0fa..e01c2b8 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs @@ -1,9 +1,8 @@ using System.Collections.Generic; using RimWorld; -using Vampire.Defs; using Verse; -namespace Vampire.Disciplines.Auspex +namespace Vampire { public class DisciplineEffect_RevealIllusions : AbilityUser.Verb_UseAbility { @@ -25,7 +24,7 @@ public virtual void Effect() { if (defsToCheck.Contains(h.def)) { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap)); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap), -1f); p.health.hediffSet.hediffs.Remove(h); } } @@ -34,15 +33,15 @@ public virtual void Effect() if (t.Cell != default(IntVec3) && t.Cell is IntVec3 c) { // Verse.FogGrid - if (CasterPawn.Map.fogGrid.IsFogged(c)) + if (this.CasterPawn.Map.fogGrid.IsFogged(c)) { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); - CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + this.CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); return; } else { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs index a1a29ef..b52781c 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs @@ -1,29 +1,28 @@ using System.Collections.Generic; using RimWorld; -using Vampire.Utilities; using Verse; -namespace Vampire.Disciplines.Blood +namespace Vampire { public class DisciplineEffect_Hunger : AbilityUser.Verb_UseAbility { public virtual void Effect() { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - IntVec3 curCell = CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; - if (curCell.GetThingList(CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) + IntVec3 curCell = this.CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; + if (curCell.GetThingList(this.CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) { List temp = new List(things); foreach (Thing t in temp) { if (t.def.defName == "FilthBlood") { - CasterPawn.BloodNeed().AdjustBlood(1); - t.Destroy(); + this.CasterPawn.BloodNeed().AdjustBlood(1); + t.Destroy(DestroyMode.Vanish); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs index 06f755a..fe3aeaf 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs @@ -1,8 +1,7 @@ using RimWorld; -using Vampire.Defs; using Verse; -namespace Vampire.Disciplines.Blood +namespace Vampire { public class DisciplineEffect_Purge : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs index 9ea7f43..6408de7 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Verse; -namespace Vampire.Disciplines.Blood +namespace Vampire { public class DisciplineEffect_StemTheTide : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs index 6a84dd2..b735897 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs @@ -1,20 +1,18 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Disciplines.Animalism; using Verse; -namespace Vampire.Disciplines.Blood +namespace Vampire { public class DisciplineEffect_UnstoppableTide : AbilityUser.Verb_UseAbility { public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BloodMistKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); + GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs index 7fb5c05..7691d91 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs @@ -1,13 +1,13 @@ using Verse; -namespace Vampire.Disciplines.Dominate +namespace Vampire { public class DisciplineEffect_Mesmerise : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - if (target.Faction == CasterPawn.Faction) //To avoid throwing red errors + if (target.Faction == this.CasterPawn.Faction) //To avoid throwing red errors target.ClearMind(); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs index 5d15122..087d732 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs @@ -1,18 +1,16 @@ -using Vampire.Defs; -using Vampire.Hediffs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Dominate +namespace Vampire { public class DisciplineEffect_Possession : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target); + Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target, null); hediff.Severity = 1.0f; target.health.AddHediff(hediff, null, null); - hediff.TryGetComp().ActivateEffect(CasterPawn); + hediff.TryGetComp().ActivateEffect(this.CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs index de5bec1..54082d4 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs @@ -1,8 +1,7 @@ using RimWorld; -using Vampire.Defs; using Verse; -namespace Vampire.Disciplines.Dominate +namespace Vampire { public class DisciplineEffect_Sleep : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs index 99e4843..540bb66 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Disciplines.Dominate +namespace Vampire { public class DisciplineEffect_Suicide : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs index dffc017..15612ca 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs @@ -1,7 +1,7 @@ using RimWorld; using Verse; -namespace Vampire.Disciplines.Flight +namespace Vampire { public class DisciplineEffect_LongFlight : AbilityUser.Verb_UseAbility @@ -11,9 +11,9 @@ public virtual void Effect() if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); - flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); + flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs index e56fc1c..54150e1 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Disciplines.Flight +namespace Vampire { public class DisciplineEffect_ShortFlight : AbilityUser.Verb_UseAbility @@ -12,8 +12,8 @@ public virtual void Effect() Pawn caster = CasterPawn; LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); - flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); + flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); }, "LaunchingFlyer", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs index d5bb437..d04499d 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs @@ -1,7 +1,7 @@ using RimWorld; using Verse; -namespace Vampire.Disciplines.Flight +namespace Vampire { public class DisciplineEffect_SkyFall : AbilityUser.Verb_UseAbility { @@ -11,11 +11,11 @@ public virtual void Effect() { LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); flyingObject.damageLaunched = false; flyingObject.timesToDamage = 3; flyingObject.explosion = true; - flyingObject.Launch(CasterPawn, target, CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, CasterPawn)); + flyingObject.Launch(this.CasterPawn, target, this.CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, this.CasterPawn)); }, "LaunchingFlyerSkyFall", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs index ccac11f..b21e735 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs @@ -1,14 +1,14 @@ using RimWorld; using Verse; -namespace Vampire.Disciplines.Flight +namespace Vampire { public class DisciplineEffect_WingBuffet : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, CasterPawn); + GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, this.CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs index e97ccc3..00ffd49 100644 --- a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs +++ b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs @@ -1,4 +1,4 @@ -namespace Vampire.Disciplines.Fortitude +namespace Vampire { public class PassiveEffect_DamageSoak : AbilityUser.PassiveEffectWorker { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs index e663029..8a88a03 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs @@ -1,9 +1,7 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Disciplines.Animalism; using Verse; -namespace Vampire.Disciplines.Obtenebration +namespace Vampire { //ROMV_AbyssalArmKind public class DisciplineEffect_ArmOfTheAbyss : AbilityUser.Verb_UseAbility @@ -11,11 +9,11 @@ public class DisciplineEffect_ArmOfTheAbyss : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_AbyssalArmKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); + GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs index 9d84261..5c1b54e 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs @@ -1,7 +1,6 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Obtenebration +namespace Vampire { public class DisciplineEffect_BlackMetamorphosis : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs index 5fadb84..3ad8b19 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs @@ -2,22 +2,22 @@ using RimWorld; using Verse; -namespace Vampire.Disciplines.Obtenebration +namespace Vampire { public class DisciplineEffect_EnterTheAbyss : AbilityUser.Verb_UseAbility { public void Effect() { - CasterPawn.Drawer.Notify_DebugAffected(); + this.CasterPawn.Drawer.Notify_DebugAffected(); if (TargetsAoE.FirstOrDefault(x => x is LocalTargetInfo y && y.Cell != default(IntVec3)) is LocalTargetInfo t) { - if (t.Cell.Standable(CasterPawn.MapHeld)) + if (t.Cell.Standable(this.CasterPawn.MapHeld)) { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); - CasterPawn.Position = t.Cell; + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + this.CasterPawn.Position = t.Cell; return; } - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); + MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); } } @@ -29,14 +29,14 @@ public override bool CanHitTargetFrom(IntVec3 root, LocalTargetInfo targ) protected override bool TryCastShot() { - CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); return base.TryCastShot(); } public override void PostCastShot(bool inResult, out bool outResult) { - CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); outResult = true; } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs index a3fcfb9..086e772 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs @@ -1,7 +1,6 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Obtenebration +namespace Vampire { public class DisciplineEffect_TenebrousForm : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs index 8f419d4..67de022 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs @@ -1,14 +1,13 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Protean +namespace Vampire { public class DisciplineEffect_BatForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); + HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs index 1ddcc34..20f8698 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs @@ -1,10 +1,9 @@ using System.Collections.Generic; using System.Linq; using RimWorld; -using Vampire.Defs; using Verse; -namespace Vampire.Disciplines.Protean +namespace Vampire { public class DisciplineEffect_FeralClaws : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs index 4ed0335..890ea69 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs @@ -1,14 +1,13 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Protean +namespace Vampire { public class DisciplineEffect_MistForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); + HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs index c135c0f..7654191 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs @@ -1,14 +1,13 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Protean +namespace Vampire { public class DisciplineEffect_WarForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); + HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs index 89cf090..4f33ce6 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Disciplines.Thaumaturgy +namespace Vampire { public class DisciplineEffect_BloodBoil : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs index b75db83..ac94c8a 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Disciplines.Thaumaturgy +namespace Vampire { public class DisciplineEffect_BloodSalvo : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs index cbebe0a..09e3e18 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs @@ -1,8 +1,6 @@ -using Vampire.Defs; -using Vampire.Hediffs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Thaumaturgy +namespace Vampire { public class DisciplineEffect_BloodShield : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs index 42515e3..1583979 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Disciplines.Thaumaturgy +namespace Vampire { public class DisciplineEffect_BloodStrike : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs index c599058..ffc0a46 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs @@ -1,11 +1,10 @@ -using System.Collections.Generic; -using System.Linq; -using AbilityUser; +using AbilityUser; using RimWorld; -using Vampire.Utilities; +using System.Collections.Generic; +using System.Linq; using Verse; -namespace Vampire.Disciplines.Thaumaturgy +namespace Vampire { public class Projectile_BloodBoil : Projectile_AbilityBase { @@ -19,13 +18,13 @@ public override void Impact_Override(Thing hitThing) int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite()); + FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite(), 1); } List parts = p.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside); for (int j = 0; j < 4; j++) { if (!p.Dead) - p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, Caster, parts.RandomElement())); + p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, this.Caster, parts.RandomElement())); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs index 5d1bbca..7f0a220 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs @@ -1,9 +1,8 @@ using AbilityUser; using RimWorld; -using Vampire.Utilities; using Verse; -namespace Vampire.Disciplines.Thaumaturgy +namespace Vampire { public class Projectile_BloodReturner : Projectile_AbilityBase { @@ -12,7 +11,7 @@ public override void Impact_Override(Thing hitThing) base.Impact_Override(hitThing); if (hitThing is Pawn p && p.BloodNeed() is Need_Blood bn) { - MoteMaker.ThrowText(p.DrawPos, p.Map, "+2"); + MoteMaker.ThrowText(p.DrawPos, p.Map, "+2", -1f); bn.AdjustBlood(2); } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs index 6bee702..887cbe5 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs @@ -1,9 +1,8 @@ using AbilityUser; using RimWorld; -using Vampire.Utilities; using Verse; -namespace Vampire.Disciplines.Thaumaturgy +namespace Vampire { public class Projectile_BloodStealer : Projectile_AbilityBase { @@ -13,13 +12,13 @@ public override void Impact_Override(Thing hitThing) if (hitThing is Pawn p && p?.BloodNeed() is Need_Blood bn && p.MapHeld != null) { - MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2"); + MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2", -1f); bn.AdjustBlood(-2); if (p.MapHeld != null && p.PositionHeld.IsValid) { Projectile_BloodReturner projectile = (Projectile_BloodReturner)GenSpawn.Spawn(ThingDef.Named("ROMV_BloodProjectile_Returner"), hitThing.PositionHeld, hitThing.MapHeld); - projectile.Launch(hitThing, origin.ToIntVec3()); + projectile.Launch(hitThing, this.origin.ToIntVec3(), null); } } } diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs index fd0ccd4..031bf27 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs @@ -3,7 +3,7 @@ using RimWorld; using Verse; -namespace Vampire.Disciplines.Vampirism +namespace Vampire { public class DisciplineEffect_RegenerateLimb : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs index a45ce3c..734fe44 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs @@ -1,7 +1,6 @@ -using Vampire.Utilities; -using Verse; +using Verse; -namespace Vampire.Disciplines.Vampirism +namespace Vampire { public class DisciplineEffect_VampiricHealing : Verb_UseAbilityPawnEffect { diff --git a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs index 84605f3..98ff56b 100644 --- a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs +++ b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs @@ -1,24 +1,24 @@ using RimWorld; using Verse; -namespace Vampire.Disciplines +namespace Vampire { public class Verb_UseAbilityPawnEffect : AbilityUser.Verb_UseAbility { public virtual void Effect(Pawn target) { - if (Ability.Def.MainVerb.isViolent && target.Faction != CasterPawn.Faction) + if (this.Ability.Def.MainVerb.isViolent && target.Faction != this.CasterPawn.Faction) { - target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, CasterPawn)); + target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, this.CasterPawn)); } target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); } public override void PostCastShot(bool inResult, out bool outResult) { if (inResult && - TargetsAoE[0].Thing is Pawn p) + this.TargetsAoE[0].Thing is Pawn p) { Effect(p); outResult = true; diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs index 5442b97..185e010 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs @@ -1,15 +1,14 @@ using System.Collections.Generic; using System.Linq; -using Vampire.Defs; using Verse; -namespace Vampire.Disciplines.Vicissitude +namespace Vampire { public class DisciplineEffect_CorruptForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { - if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) { base.Effect(target); int boolSel = Rand.Range(0, 2); diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs index 3e57ef3..6f22ebf 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs @@ -1,14 +1,13 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Vicissitude +namespace Vampire { public class DisciplineEffect_PerfectForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); + HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs index 6d4b9d8..f3ca0b2 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs @@ -1,20 +1,19 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Vicissitude +namespace Vampire { public class DisciplineEffect_ShapeMonstrosity : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) { IntVec3 curLoc = target.PositionHeld; Map curMap = target.MapHeld; Name tempName = target.Name; target.DeSpawn(); - Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, CasterPawn.Faction); + Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, this.CasterPawn.Faction); GenSpawn.Spawn(p, curLoc, curMap); p.Name = tempName; } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs index c80f8a3..67958db 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs @@ -1,14 +1,13 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Disciplines.Vicissitude +namespace Vampire { public class DisciplineEffect_ZuloForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); + HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); } } } diff --git a/Source/Vampires/FlyingObject.cs b/Source/Vampires/FlyingObject.cs index 7bcc97b..42f5124 100644 --- a/Source/Vampires/FlyingObject.cs +++ b/Source/Vampires/FlyingObject.cs @@ -24,7 +24,7 @@ protected int StartingTicksToImpact { get { - int num = Mathf.RoundToInt((origin - destination).magnitude / (speed / 100f)); + int num = Mathf.RoundToInt((this.origin - this.destination).magnitude / (this.speed / 100f)); if (num < 1) { num = 1; @@ -38,7 +38,7 @@ protected IntVec3 DestinationCell { get { - return new IntVec3(destination); + return new IntVec3(this.destination); } } @@ -46,8 +46,8 @@ public virtual Vector3 ExactPosition { get { - Vector3 b = (destination - origin) * (1f - (float)ticksToImpact / (float)StartingTicksToImpact); - return origin + b + Vector3.up * def.Altitude; + Vector3 b = (this.destination - this.origin) * (1f - (float)this.ticksToImpact / (float)this.StartingTicksToImpact); + return this.origin + b + Vector3.up * this.def.Altitude; } } @@ -55,7 +55,7 @@ public virtual Quaternion ExactRotation { get { - return Quaternion.LookRotation(destination - origin); + return Quaternion.LookRotation(this.destination - this.origin); } } @@ -63,32 +63,32 @@ public override Vector3 DrawPos { get { - return ExactPosition; + return this.ExactPosition; } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref origin, "origin"); - Scribe_Values.Look(ref destination, "destination"); - Scribe_Values.Look(ref ticksToImpact, "ticksToImpact"); - Scribe_Values.Look(ref timesToDamage, "timesToDamage"); - Scribe_Values.Look(ref damageLaunched, "damageLaunched", true); - Scribe_Values.Look(ref explosion, "explosion"); - Scribe_References.Look(ref assignedTarget, "assignedTarget"); - Scribe_References.Look(ref launcher, "launcher"); - Scribe_References.Look(ref flyingThing, "flyingThing"); + Scribe_Values.Look(ref this.origin, "origin", default(Vector3), false); + Scribe_Values.Look(ref this.destination, "destination", default(Vector3), false); + Scribe_Values.Look(ref this.ticksToImpact, "ticksToImpact", 0, false); + Scribe_Values.Look(ref this.timesToDamage, "timesToDamage", 0, false); + Scribe_Values.Look(ref this.damageLaunched, "damageLaunched", true); + Scribe_Values.Look(ref this.explosion, "explosion", false); + Scribe_References.Look(ref this.assignedTarget, "assignedTarget", false); + Scribe_References.Look(ref this.launcher, "launcher", false); + Scribe_References.Look(ref this.flyingThing, "flyingThing"); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing, DamageInfo? impactDamage) { - Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing, impactDamage); + this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing, impactDamage); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing) { - Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing); + this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing); } public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing flyingThing, DamageInfo? newDamageInfo = null) @@ -98,37 +98,37 @@ public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing f this.launcher = launcher; this.origin = origin; - impactDamage = newDamageInfo; + this.impactDamage = newDamageInfo; this.flyingThing = flyingThing; if (targ.Thing != null) { - assignedTarget = targ.Thing; + this.assignedTarget = targ.Thing; } - destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); - ticksToImpact = StartingTicksToImpact; + this.destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); + this.ticksToImpact = this.StartingTicksToImpact; } public override void Tick() { base.Tick(); - Vector3 exactPosition = ExactPosition; - ticksToImpact--; - if (!ExactPosition.InBounds(Map)) + Vector3 exactPosition = this.ExactPosition; + this.ticksToImpact--; + if (!this.ExactPosition.InBounds(base.Map)) { - ticksToImpact++; - Position = ExactPosition.ToIntVec3(); - Destroy(); + this.ticksToImpact++; + base.Position = this.ExactPosition.ToIntVec3(); + this.Destroy(DestroyMode.Vanish); return; } - Position = ExactPosition.ToIntVec3(); - if (ticksToImpact <= 0) + base.Position = this.ExactPosition.ToIntVec3(); + if (this.ticksToImpact <= 0) { - if (DestinationCell.InBounds(Map)) + if (this.DestinationCell.InBounds(base.Map)) { - Position = DestinationCell; + base.Position = this.DestinationCell; } - ImpactSomething(); + this.ImpactSomething(); return; } @@ -140,36 +140,36 @@ public override void Draw() { if (flyingThing is Pawn) { - if (DrawPos == null) return; - if (!DrawPos.ToIntVec3().IsValid) return; + if (this.DrawPos == null) return; + if (!this.DrawPos.ToIntVec3().IsValid) return; Pawn pawn = flyingThing as Pawn; - pawn.Drawer.DrawAt(DrawPos); + pawn.Drawer.DrawAt(this.DrawPos); //Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.graphic.MatFront, 0); } else { - Graphics.DrawMesh(MeshPool.plane10, DrawPos, ExactRotation, flyingThing.def.DrawMatSingle, 0); + Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.DrawMatSingle, 0); } - Comps_PostDraw(); + base.Comps_PostDraw(); } } private void ImpactSomething() { - if (assignedTarget != null) + if (this.assignedTarget != null) { - Pawn pawn = assignedTarget as Pawn; - if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (origin - destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) + Pawn pawn = this.assignedTarget as Pawn; + if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (this.origin - this.destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) { - Impact(null); + this.Impact(null); return; } - Impact(assignedTarget); + this.Impact(this.assignedTarget); return; } else { - Impact(null); + this.Impact(null); return; } } @@ -183,7 +183,7 @@ protected virtual void Impact(Thing hitThing) if (hitThing == null) { - if (Position.GetThingList(Map).FirstOrDefault(x => x == assignedTarget) is Pawn p) + if (this.Position.GetThingList(this.Map).FirstOrDefault(x => x == this.assignedTarget) is Pawn p) { hitThing = p; @@ -200,11 +200,11 @@ protected virtual void Impact(Thing hitThing) else hitThing.TakeDamage(impactDamage.Value); if (explosion) - GenExplosion.DoExplosion(Position, Map, 0.9f, DamageDefOf.Stun, this); + GenExplosion.DoExplosion(this.Position, this.Map, 0.9f, DamageDefOf.Stun, this); } - GenSpawn.Spawn(flyingThing, Position, Map); - Destroy(); + GenSpawn.Spawn(flyingThing, this.Position, this.Map); + this.Destroy(DestroyMode.Vanish); } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index e98a691..1238692 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -1,23 +1,17 @@ -using System; +using Harmony; +using RimWorld; +using System; using System.Collections.Generic; using System.Linq; using System.Text; -using AbilityUser; -using Harmony; -using RimWorld; -using RimWorld.Planet; -using UnityEngine; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Disciplines.Animalism; -using Vampire.Hediffs; -using Vampire.UI; -using Vampire.Utilities; using Verse; using Verse.AI; +using UnityEngine; +using RimWorld.Planet; using Verse.AI.Group; +using AbilityUser; -namespace Vampire.HarmonyPatches +namespace Vampire { [StaticConstructorOnStartup] static partial class HarmonyPatches @@ -28,21 +22,21 @@ static HarmonyPatches() //Fixes issues with having no food need. harmony.Patch(AccessTools.Method(typeof(Pawn_NeedsTracker), "ShouldHaveNeed"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp))), null); harmony.Patch(AccessTools.Method(typeof(ThinkNode_ConditionalNeedPercentageAbove), "Satisfied"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(Satisfied_Vamp))), null); //The wander handler now makes vampires wander indoors (for their safety). harmony.Patch(AccessTools.Method(typeof(PawnUtility), "KnownDangerAt"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp))), null); harmony.Patch(AccessTools.Method(typeof(JoyUtility), "EnjoyableOutsideNow", new Type[] { typeof(Pawn), typeof(StringBuilder) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire))), null); harmony.Patch(AccessTools.Method(typeof(JobGiver_GetRest), "FindGroundSleepSpotFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire))), null); harmony.Patch(AccessTools.Method(typeof(JobGiver_TakeCombatEnhancingDrug), "TryGiveJob"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(TryGiveJob_DrugGiver_Vampire))), null); harmony.Patch(AccessTools.Method(typeof(ReachabilityUtility), "CanReach", new Type[] { typeof(Pawn), typeof(LocalTargetInfo), typeof(PathEndMode), typeof(Danger), typeof(bool), typeof(TraverseMode) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire))), null); //The Doctor alert will no longer check a vampire to see if it's fed. harmony.Patch(AccessTools.Method(typeof(Alert_NeedDoctor), "get_Patients"), @@ -54,7 +48,7 @@ static HarmonyPatches() //Adds vampire right click float menus. harmony.Patch(AccessTools.Method(typeof(FloatMenuMakerMap), "AddHumanlikeOrders"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp))), null); //Gives different skin color for Vampires harmony.Patch(AccessTools.Method(typeof(Pawn_StoryTracker), "get_SkinColor"), @@ -62,11 +56,11 @@ static HarmonyPatches() //Adds debug/dev tools for making vampires. harmony.Patch(AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DoListingItems_MapTools"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp))), null); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(ThingDef), "get_AllRecipes"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable))), null); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(Bill_Medical), "Notify_DoBillStarted"), @@ -80,15 +74,15 @@ static HarmonyPatches() harmony.Patch(AccessTools.Method(typeof(Building_Grave), "get_Graphic"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Graphic_VampBed))), null); harmony.Patch(AccessTools.Method(typeof(Building_Casket), "GetFloatMenuOptions"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed))), null); harmony.Patch(AccessTools.Method(typeof(WorkGiver_BuryCorpses), "FindBestGrave"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed))), null); //Caravan patches harmony.Patch(AccessTools.Method(typeof(Dialog_FormCaravan), "CheckForErrors"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires))), null); harmony.Patch(AccessTools.Method(typeof(Caravan), "get_Resting"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires)))); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires))), null); //Lord_AI patches harmony.Patch(AccessTools.Method(typeof(Trigger_UrgentlyHungry), "ActivateOn"), @@ -100,11 +94,11 @@ static HarmonyPatches() //Changes vampire appearances and statistics based on their current forms harmony.Patch(AccessTools.Method(typeof(Pawn), "get_BodySize"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireBodySize))); + nameof(VampireBodySize)), null); harmony.Patch(AccessTools.Method(typeof(Pawn), "get_HealthScale"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireHealthScale))); + nameof(VampireHealthScale)), null); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveAllGraphics"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(Vamp_ResolveAllGraphics))); + nameof(Vamp_ResolveAllGraphics)), null); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveApparelGraphics"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_ResolveApparelGraphics)), null); harmony.Patch(AccessTools.Method(typeof(PawnRenderer), "RenderPawnInternal", new Type[] { typeof(Vector3), typeof(Quaternion), typeof(bool), typeof(Rot4), typeof(Rot4), typeof(RotDrawMode), typeof(bool), typeof(bool) }), new HarmonyMethod(typeof(VampireGraphicUtility), @@ -112,7 +106,7 @@ static HarmonyPatches() //Allows skill adjustments harmony.Patch(AccessTools.Method(typeof(SkillRecord), "get_Level"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel)), null); //Vampires do not age like others. harmony.Patch(AccessTools.Method(typeof(Pawn_AgeTracker), "BirthdayBiological"), @@ -124,7 +118,7 @@ static HarmonyPatches() //Adds vampire skill sheet button to CharacterCard harmony.Patch(AccessTools.Method(typeof(CharacterCardUtility), "DrawCharacterCard", new Type[] { typeof(Rect), typeof(Pawn), typeof(Action), typeof(Rect) }), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard)), null); //Fills the character card with a vampire skill sheet harmony.Patch(AccessTools.Method(typeof(ITab_Pawn_Character), "FillTab"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_FillTab)), null); @@ -163,32 +157,32 @@ static HarmonyPatches() //Patch to add comfort to vampire beds. harmony.Patch(AccessTools.Method(typeof(PawnUtility), "GainComfortFromCellIfPossible"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort)), null); //Patch to remove vampire's ability to bleed. harmony.Patch(AccessTools.Method(typeof(Hediff_Injury), "get_BleedRate"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate)), null); //Patch to hide vampire capacities. //harmony.Patch(AccessTools.Method(typeof(PawnCapacitiesHandler), "GetLevel"), null, // new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_HidePawnCapacities)), null); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetPawnCapacityTip"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip)), null); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetEfficiencyLabel"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel)), null); //Vampires do not worry about hot and cold harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Hot), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Cold), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); //Vampires are not affected by Hypothermia nor Heatstroke harmony.Patch(AccessTools.Method(typeof(HediffGiver_Heat), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); harmony.Patch(AccessTools.Method(typeof(HediffGiver_Hypothermia), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); harmony.Patch(AccessTools.Method(typeof(Pawn_HealthTracker), "AddHediff", new Type[] { typeof(Hediff), typeof(BodyPartRecord), typeof(DamageInfo?) }), new HarmonyMethod(typeof(HarmonyPatches), nameof(AddHediff)), null); @@ -222,7 +216,7 @@ static HarmonyPatches() //Vampires should not dislike the darkness. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Dark), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness)), null); //Fixes random red errors relating to food need checks in this method (WillIngestStackCountOf). @@ -232,16 +226,16 @@ static HarmonyPatches() //Vampires should tire very much during the daylight hours. harmony.Patch(AccessTools.Method(typeof(Need_Rest), "NeedInterval"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight)), null); // harmony.Patch(AccessTools.Method(typeof(GenCelestial), "CelestialSunGlowPercent"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent)), null); //Patches out binging behavior harmony.Patch(AccessTools.Method(typeof(JobGiver_Binge), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge)), null); //Patches corpse generation for vampires. harmony.Patch(AccessTools.Method(typeof(Pawn), "MakeCorpse"), @@ -249,33 +243,33 @@ static HarmonyPatches() //Vampire corpses can resurrect safely inside graves, sarcophogi, and caskets. harmony.Patch(AccessTools.Method(typeof(Building_Grave), "GetGizmos"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie)), null); //Caskets and coffins do not autoassign to colonists. harmony.Patch(AccessTools.Method(typeof(Pawn_Ownership), "ClaimBedIfNonMedical"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedsForTheUndead)), null); harmony.Patch(AccessTools.Method(typeof(RestUtility), "IsValidBedFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor)), null); //Vampires should never skygaze during sunrise... harmony.Patch(AccessTools.Method(typeof(JobDriver_Skygaze), "GetReport"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez)), null); //Vampire player should know about the rest curse. harmony.Patch(AccessTools.Method(typeof(Need), "GetTipString"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip)), null); //Vampires should not try to do drugs when idle. harmony.Patch(AccessTools.Method(typeof(JobGiver_IdleJoy), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs)), null); //Vampires should not be given food by wardens. harmony.Patch(AccessTools.Method(typeof(Pawn_GuestTracker), "get_CanBeBroughtFood"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood)), null); //Vampires should not be given food by wardens. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_CabinFever), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever)), null); #region DubsBadHygiene { @@ -406,7 +400,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra dReason = "ROMV_NoBloodRemaining".Translate(); } - VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); + Vampire.VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); if (!AbilityUser?.Dead ?? false) { @@ -425,7 +419,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra }; } - VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (AbilityUser?.Corpse?.GetRotStage() < RotStage.Dessicated) { yield return new Command_Action() @@ -437,11 +431,11 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra { AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); }, disabled = (AbilityUser?.BloodNeed()?.CurBloodPoints ?? 0) < 0 }; @@ -459,7 +453,7 @@ public static bool Vamp_MakeCorpse(Pawn __instance, Building_Grave assignedGrave __result = null; return false; } - VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse")); + VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse"), null); corpse.InnerPawn = __instance; corpse.BloodPoints = __instance.BloodNeed().CurBloodPoints; if (__instance.health.hediffSet.GetHediffs()?.Where(x => x.def == HediffDefOf.Burn && !x.IsTended())?.Count() > 3) @@ -614,7 +608,7 @@ public static bool Vamp_GuestFix(Pawn p, ref bool __result) if (p.IsVampire()) { __result = !p.Downed && p.health.hediffSet.BleedRateTotal <= 0f && p?.needs?.rest?.CurCategory < RestCategory.Exhausted && - !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff() && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; + !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff(false) && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; return false; } return true; @@ -660,13 +654,13 @@ public static bool Vamp_LovinFoodFix(Pawn pawn, Pawn partner, ref float __result __result = -1f; return false; } - float num = LovinMtbSinglePawnFactor(pawn); + float num = HarmonyPatches.LovinMtbSinglePawnFactor(pawn); if (num <= 0f) { __result = -1f; return false; } - float num2 = LovinMtbSinglePawnFactor(partner); + float num2 = HarmonyPatches.LovinMtbSinglePawnFactor(partner); if (num2 <= 0f) { __result = -1f; @@ -842,7 +836,7 @@ public static void Vamp_BedComfort(Pawn p) { if (edifice.TryGetComp() is CompVampBed vBed && vBed.Bed != null) { - float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort); + float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort, true); if (statValue >= 0f && p.needs != null && p.needs.comfort != null) { p.needs.comfort.ComfortUsed(statValue); @@ -1014,7 +1008,7 @@ public static bool Vamp_CanVisit(ref bool __result, Pawn pawn, Pawn sick, JoyCat { __result = sick.IsColonist && !sick.Dead && pawn != sick && sick.InBed() && sick.Awake() && !sick.IsForbidden(pawn) && sick.needs.joy != null && sick.needs.joy.CurCategory <= maxPatientJoy && InteractionUtility.CanReceiveInteraction(sick) && - pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None) && !AboutToRecover(sick); + pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None, 1, -1, null, false) && !HarmonyPatches.AboutToRecover(sick); return false; } return true; @@ -1173,7 +1167,7 @@ public static bool VampireBirthdayBiological(Pawn_AgeTracker __instance) Find.LetterStack.ReceiveLetter("LetterLabelBirthday".Translate(), "ROMV_VampireBirthday".Translate(new object[]{ p.Label, p.ageTracker.AgeBiologicalYears - }), LetterDefOf.PositiveEvent, p); + }), LetterDefOf.PositiveEvent, p, null); return false; } return true; @@ -1311,11 +1305,11 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra { if (__result != null && __result is Building_Grave g && g?.def.GetCompProperties() is CompProperties_VampBed b) { - Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); + Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m, 1, -1, null, false) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); if (corpse?.InnerPawn?.ownership != null && corpse?.InnerPawn?.ownership?.AssignedGrave != null) { Building_Grave assignedGrave = corpse?.InnerPawn?.ownership?.AssignedGrave; - if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p)) ?? false)) + if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false)) ?? false)) { __result = assignedGrave; return; @@ -1323,7 +1317,7 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra } Func priorityGetter = (Thing t) => (float)((IStoreSettingsParent)t).GetStoreSettings().Priority; Predicate validator = predicate; - __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p), 9999f, validator, priorityGetter); + __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator, priorityGetter); return; } } @@ -1391,7 +1385,7 @@ public static void GetFloatMenuOptions_VampBed(Building_Casket __instance, Pawn }), delegate { selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, __instance)); - })}); + }, MenuOptionPriority.Default, null, null, 0f, null, null)}); } } } @@ -1491,22 +1485,22 @@ private static void AddHumanlikeOrders_Vamp(Vector3 clickPos, Pawn pawn, ref Lis FloatMenuOption item5; if (bloodItem.def.IsPleasureDrug && pawn.IsTeetotaler()) { - item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null); + item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); } - else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly)) + else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly, false, TraverseMode.ByPawn)) { - item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null); + item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); } else { MenuOptionPriority priority = (!(bloodItem is Corpse)) ? MenuOptionPriority.Default : MenuOptionPriority.Low; item5 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, delegate { - bloodItem.SetForbidden(false); + bloodItem.SetForbidden(false, true); Job job = new Job(VampDefOf.ROMV_ConsumeBlood, bloodItem); job.count = BloodUtility.WillConsumeStackCountOf(pawn, bloodItem.def); - pawn.jobs.TryTakeOrderedJob(job); - }, priority), pawn, bloodItem); + pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); + }, priority, null, null, 0f, null, null), pawn, bloodItem, "ReservedBy"); } opts.Add(item5); } @@ -1550,7 +1544,7 @@ public static bool MakeNewToils_VampVomit(JobDriver_Vomit __instance, ref IEnume int curTicks = Traverse.Create(__instance).Field("ticksLeft").GetValue(); if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite()); + FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite(), 1); if (__instance.pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs index 22a4137..84906e6 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs @@ -1,10 +1,9 @@ -using System.Collections.Generic; -using RimWorld; +using RimWorld; using RimWorld.Planet; -using Vampire.Utilities; +using System.Collections.Generic; using Verse; -namespace Vampire.HarmonyPatches +namespace Vampire { static partial class HarmonyPatches { diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs index 581ca26..2b33f9a 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs @@ -1,15 +1,11 @@ -using System; +using Harmony; +using RimWorld; +using System; using System.Collections.Generic; using System.Linq; -using Harmony; -using RimWorld; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Hediffs; -using Vampire.Utilities; using Verse; -namespace Vampire.HarmonyPatches +namespace Vampire { static partial class HarmonyPatches { @@ -21,8 +17,8 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan "Spawn Vampire (Random)", new Action(()=> { Pawn randomVampire = - VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null); - GenSpawn.Spawn(randomVampire, Verse.UI.MouseCell(), Find.VisibleMap); + VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null, null, false); + GenSpawn.Spawn(randomVampire, UI.MouseCell(), Find.VisibleMap); }) }); @@ -31,14 +27,14 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (Default)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (!pawn.IsVampire()) { pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire"); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire", -1f); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -48,11 +44,11 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (w/Settings)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { //pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); - Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Bloodlines(pawn))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Bloodlines(pawn))); //DebugTools.curTool = null; } })}); @@ -62,7 +58,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Remove Vampirism", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (pawn.IsVampire()) @@ -78,7 +74,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan pawn.health.RestorePart(rec); } pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire"); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire", -1f); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -89,24 +85,24 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood"); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood", -1f); } })}); AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Drain Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(-1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood"); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood", -1f); } })}); @@ -114,12 +110,12 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add XP (100)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(Verse.UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.VampComp() is CompVampire v) { v.XP += 100; pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP"); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP", -1f); } })}); } @@ -136,7 +132,7 @@ private static List Options_Bloodlines(Pawn p) { list.Add(new DebugMenuOption(current.LabelCap, DebugMenuOptionMode.Action, delegate { - Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Generation(p, current))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Generation(p, current))); })); } @@ -154,7 +150,7 @@ private static List Options_Generation(Pawn p, BloodlineDef blo p.VampComp().InitializeVampirism(null, bloodline, curGen, curGen == 1); //Log.Message("0" + p.LabelShort + " " + i.ToString()); p.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire"); + MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire", -1f); })); } return list; diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs index eb8de57..2695744 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs @@ -1,11 +1,9 @@ using System.Text; using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.HarmonyPatches +namespace Vampire { public static partial class HarmonyPatches { diff --git a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs index cea9069..4c30d8b 100644 --- a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs +++ b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs @@ -2,13 +2,10 @@ using System.Collections.Generic; using JecsTools; using UnityEngine; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; using Verse; using Verse.AI; -namespace Vampire.HarmonyPatches +namespace Vampire { public class VampHumanlikeOrders : FloatMenuPatch { @@ -39,7 +36,7 @@ public override IEnumerable 1) { @@ -52,7 +49,7 @@ public override IEnumerable x != parent && x.TryGetComp() != null) is HediffWithComps h) + if (this.Pawn.health.hediffSet.hediffs.FirstOrDefault(x => x != this.parent && x.TryGetComp() != null) is HediffWithComps h) { - Pawn.health.hediffSet.hediffs.Remove(h); + this.Pawn.health.hediffSet.hediffs.Remove(h); } - Pawn.VampComp().CurrentForm = Props.animalToChangeInto; - Pawn.VampComp().CurFormGraphic = null; + this.Pawn.VampComp().CurrentForm = this.Props.animalToChangeInto; + this.Pawn.VampComp().CurFormGraphic = null; //Log.Message("CurrentForm set to " + this.Props.animalToChangeInto.label); } if (CompShouldRemove) { - Pawn.VampComp().CurrentForm = null; + this.Pawn.VampComp().CurrentForm = null; } } public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref activated, "activated"); + Scribe_Values.Look(ref this.activated, "activated", false); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_Possession.cs b/Source/Vampires/Hediffs/HediffComp_Possession.cs index f2d7a50..ffceb12 100644 --- a/Source/Vampires/Hediffs/HediffComp_Possession.cs +++ b/Source/Vampires/Hediffs/HediffComp_Possession.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Hediffs +namespace Vampire { public class HediffComp_Possession : HediffComp_Disappears { @@ -9,21 +9,21 @@ public class HediffComp_Possession : HediffComp_Disappears { get { - return (HediffCompProperties_Possession)props; + return (HediffCompProperties_Possession)this.props; } } public void ActivateEffect(Pawn activator) { - string text = Pawn.LabelIndefinite(); - if (Pawn.guest != null) + string text = this.Pawn.LabelIndefinite(); + if (this.Pawn.guest != null) { - Pawn.guest.SetGuestStatus(null); + this.Pawn.guest.SetGuestStatus(null, false); } - bool flag = Pawn.Name != null; - if (Pawn.Faction != activator.Faction) + bool flag = this.Pawn.Name != null; + if (this.Pawn.Faction != activator.Faction) { - Pawn.SetFaction(activator.Faction, Pawn); + this.Pawn.SetFaction(activator.Faction, this.Pawn); } } @@ -32,7 +32,7 @@ public override void CompPostTick(ref float severityAdjustment) base.CompPostTick(ref severityAdjustment); if (CompShouldRemove) { - HealthUtility.AdjustSeverity(Pawn, HediffDef.Named("HeartAttack"), 1.0f); + HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("HeartAttack"), 1.0f); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs index cee3d46..3b4c49a 100644 --- a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs +++ b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs @@ -1,7 +1,7 @@ -using System.Text; -using Verse; +using Verse; +using System.Text; -namespace Vampire.Hediffs +namespace Vampire { public class HediffComp_ReadMind : HediffComp { diff --git a/Source/Vampires/Hediffs/HediffComp_Shield.cs b/Source/Vampires/Hediffs/HediffComp_Shield.cs index 976c28c..5b43966 100644 --- a/Source/Vampires/Hediffs/HediffComp_Shield.cs +++ b/Source/Vampires/Hediffs/HediffComp_Shield.cs @@ -1,11 +1,11 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Diagnostics; -using RimWorld; using UnityEngine; using Verse; using Verse.Sound; -namespace Vampire.Hediffs +namespace Vampire { [StaticConstructorOnStartup] public class HediffComp_Shield : HediffComp @@ -50,14 +50,14 @@ public string labelCap { get { - return Def.LabelCap; + return this.Def.LabelCap; } } public string label { get { - return Def.label; + return this.Def.label; } } @@ -73,7 +73,7 @@ public float Energy { get { - return energy; + return this.energy; } } @@ -81,7 +81,7 @@ public ShieldState ShieldState { get { - if (ticksToReset > 0) + if (this.ticksToReset > 0) { return ShieldState.Resetting; } @@ -93,23 +93,23 @@ private bool ShouldDisplay { get { - return !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || (Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro)) || (Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks); + return !this.Pawn.Dead && !this.Pawn.Downed && (!this.Pawn.IsPrisonerOfColony || (this.Pawn.MentalStateDef != null && this.Pawn.MentalStateDef.IsAggro)) || (this.Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < this.lastKeepDisplayTick + this.KeepDisplayingTicks); } } public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref energy, "energy"); - Scribe_Values.Look(ref setup, "setup"); - Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1); - Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick"); + Scribe_Values.Look(ref this.energy, "energy", 0f, false); + Scribe_Values.Look(ref this.setup, "setup", false); + Scribe_Values.Look(ref this.ticksToReset, "ticksToReset", -1, false); + Scribe_Values.Look(ref this.lastKeepDisplayTick, "lastKeepDisplayTick", 0, false); } [DebuggerHidden] public IEnumerable GetWornGizmos() { - if (Find.Selector.SingleSelectedThing == Pawn) + if (Find.Selector.SingleSelectedThing == this.Pawn) { yield return new Gizmo_HediffShieldStatus { @@ -127,9 +127,9 @@ public IEnumerable GetWornGizmos() public override void CompPostTick(ref float severityAdjustment) { base.CompPostTick(ref severityAdjustment); - if (Pawn == null) + if (this.Pawn == null) { - energy = 0f; + this.energy = 0f; return; } @@ -144,7 +144,7 @@ public override void CompPostTick(ref float severityAdjustment) if (!setup) { setup = true; - energy = EnergyMax; + this.energy = this.EnergyMax; KeepDisplaying(); } //{ @@ -158,28 +158,28 @@ public override void CompPostTick(ref float severityAdjustment) public bool CheckPreAbsorbDamage(DamageInfo dinfo) { - if (ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(Pawn.Position)) || dinfo.Def.isExplosive)) + if (this.ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(this.Pawn.Position)) || dinfo.Def.isExplosive)) { if (dinfo.Instigator != null) { AttachableThing attachableThing = dinfo.Instigator as AttachableThing; - if (attachableThing != null && attachableThing.parent == Pawn) + if (attachableThing != null && attachableThing.parent == this.Pawn) { return false; } } - energy -= (float)dinfo.Amount * EnergyLossPerDamage; + this.energy -= (float)dinfo.Amount * this.EnergyLossPerDamage; //if (dinfo.Def == DamageDefOf.EMP) //{ // this.energy = -1f; //} - if (energy < 0f) + if (this.energy < 0f) { - Break(); + this.Break(); } else { - AbsorbedDamage(dinfo); + this.AbsorbedDamage(dinfo); } return true; } @@ -188,73 +188,73 @@ public bool CheckPreAbsorbDamage(DamageInfo dinfo) public void KeepDisplaying() { - lastKeepDisplayTick = Find.TickManager.TicksGame; + this.lastKeepDisplayTick = Find.TickManager.TicksGame; } private void AbsorbedDamage(DamageInfo dinfo) { - SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); - impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); - Vector3 loc = Pawn.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; + SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); + this.impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); + Vector3 loc = this.Pawn.TrueCenter() + this.impactAngleVect.RotatedBy(180f) * 0.5f; float num = Mathf.Min(10f, 2f + (float)dinfo.Amount / 10f); - MoteMaker.MakeStaticMote(loc, Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); + MoteMaker.MakeStaticMote(loc, this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); int num2 = (int)num; for (int i = 0; i < num2; i++) { - MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); + MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); } - lastAbsorbDamageTick = Find.TickManager.TicksGame; - KeepDisplaying(); + this.lastAbsorbDamageTick = Find.TickManager.TicksGame; + this.KeepDisplaying(); } public void NotifyRefilled() { - energy = EnergyMax; + this.energy = this.EnergyMax; } private void Break() { - SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); - MoteMaker.MakeStaticMote(Pawn.TrueCenter(), Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); + SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); + MoteMaker.MakeStaticMote(this.Pawn.TrueCenter(), this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); for (int i = 0; i < 6; i++) { - Vector3 loc = Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); - MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); + Vector3 loc = this.Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); + MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); } - energy = 0f; - ticksToReset = StartingTicksToReset; + this.energy = 0f; + this.ticksToReset = this.StartingTicksToReset; } private void Reset() { - if (Pawn.Spawned) + if (this.Pawn.Spawned) { - SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); - MoteMaker.ThrowLightningGlow(Pawn.TrueCenter(), Pawn.Map, 3f); + SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); + MoteMaker.ThrowLightningGlow(this.Pawn.TrueCenter(), this.Pawn.Map, 3f); } - ticksToReset = -1; - energy = EnergyOnReset; + this.ticksToReset = -1; + this.energy = this.EnergyOnReset; } public void DrawWornExtras() { - if (ShieldState == ShieldState.Active && ShouldDisplay) + if (this.ShieldState == ShieldState.Active && this.ShouldDisplay) { - float num = Mathf.Lerp(1.2f, 1.55f, energy); - Vector3 vector = Pawn.Drawer.DrawPos; + float num = Mathf.Lerp(1.2f, 1.55f, this.energy); + Vector3 vector = this.Pawn.Drawer.DrawPos; vector.y = Altitudes.AltitudeFor(AltitudeLayer.MoteOverhead); - int num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick; + int num2 = Find.TickManager.TicksGame - this.lastAbsorbDamageTick; if (num2 < 8) { float num3 = (float)(8 - num2) / 8f * 0.05f; - vector += impactAngleVect * num3; + vector += this.impactAngleVect * num3; num -= num3; } float angle = (float)Rand.Range(0, 360); Vector3 s = new Vector3(num, 1f, num); Matrix4x4 matrix = default(Matrix4x4); matrix.SetTRS(vector, Quaternion.AngleAxis(angle, Vector3.up), s); - Graphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0); + Graphics.DrawMesh(MeshPool.plane10, matrix, HediffComp_Shield.BubbleMat, 0); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs index b7fc28c..2eaf436 100644 --- a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs @@ -1,6 +1,6 @@ using Verse; -namespace Vampire.Hediffs +namespace Vampire { public class HediffComp_SkillOffset : HediffComp { @@ -8,7 +8,7 @@ public HediffCompProperties_SkillOffset Props { get { - return (HediffCompProperties_SkillOffset)props; + return (HediffCompProperties_SkillOffset)this.props; } } @@ -16,7 +16,7 @@ public override string CompTipStringExtra { get { - return Props.skillDef.LabelCap + ": " + ((Props.offset >= 0) ? "+" : "") + Props.offset.ToString(); + return this.Props.skillDef.LabelCap + ": " + ((this.Props.offset >= 0) ? "+" : "") + this.Props.offset.ToString(); } } diff --git a/Source/Vampires/Hediffs/HediffVampirism.cs b/Source/Vampires/Hediffs/HediffVampirism.cs index ab3b2b7..7b7dccd 100644 --- a/Source/Vampires/Hediffs/HediffVampirism.cs +++ b/Source/Vampires/Hediffs/HediffVampirism.cs @@ -1,12 +1,9 @@ using System.Linq; using System.Text; using RimWorld; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; using Verse; -namespace Vampire.Hediffs +namespace Vampire { public class HediffVampirism : HediffWithComps @@ -24,7 +21,7 @@ public class HediffVampirism : HediffWithComps public override void PostTick() { base.PostTick(); - if (pawn.VampComp() is CompVampire v) + if (this.pawn.VampComp() is CompVampire v) { if (!initialized) @@ -35,7 +32,7 @@ public override void PostTick() { if (sire == null) - sire = VampireRelationUtility.FindSireFor(pawn, bloodline, generation).VampComp(); + sire = VampireRelationUtility.FindSireFor(this.pawn, this.bloodline, this.generation).VampComp(); if (generation < 0) generation = sire.Generation + 1; if (bloodline == null) @@ -47,7 +44,7 @@ public override void PostTick() { v.InitializeVampirism(sire?.AbilityUser ?? null, bloodline, generation, firstVampire); } - pawn.Drawer.renderer.graphics.ResolveAllGraphics(); + this.pawn.Drawer.renderer.graphics.ResolveAllGraphics(); } if (Find.TickManager.TicksGame % 60 == 0) @@ -56,7 +53,7 @@ public override void PostTick() HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_SunExposure, 0.001f); if (v.BloodPool?.CurLevelPercentage < 0.3f) HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_TheBeast, 0.001f); - if (pawn.health.hediffSet is HediffSet hdSet) + if (this.pawn.health.hediffSet is HediffSet hdSet) { if (hdSet.GetFirstHediffOfDef(HediffDefOf.Hypothermia) is Hediff hypoThermia) hdSet.hediffs.Remove(hypoThermia); @@ -72,13 +69,13 @@ public override string LabelBase { get { - if (pawn.VampComp().Generation != -1) + if (this.pawn.VampComp().Generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(pawn.VampComp().Generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.pawn.VampComp().Generation)); } - if (generation != -1) + if (this.generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.generation)); } return "Vampire"; } @@ -90,23 +87,23 @@ public override string TipStringExtra { StringBuilder s = new StringBuilder(); s.AppendLine("ROMV_HI_Bloodline".Translate(this?.pawn?.VampComp()?.Bloodline?.LabelCap ?? this?.bloodline?.label ?? "Unknown")); - s.AppendLine("ROMV_HI_Sire".Translate(pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); - if (pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) + s.AppendLine("ROMV_HI_Sire".Translate(this.pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(this.pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); + if (this.pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) { s.AppendLine("ROMV_HI_Childer".Translate("ROMV_HI_None".Translate())); } else { - string[] childerNames = new string[pawn.VampComp().Childer.Count]; + string[] childerNames = new string[this.pawn.VampComp().Childer.Count]; for (int i = 0; i < childerNames.Length; i++) - childerNames[i] = pawn.VampComp().Childer.ElementAt(i).LabelShort; + childerNames[i] = this.pawn.VampComp().Childer.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Childer".Translate(string.Join(", ", childerNames))); } - if (!pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) + if (!this.pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) { - string[] soulNames = new string[pawn.VampComp().Souls.Count]; + string[] soulNames = new string[this.pawn.VampComp().Souls.Count]; for (int i = 0; i < soulNames.Length; i++) - soulNames[i] = pawn.VampComp().Souls.ElementAt(i).LabelShort; + soulNames[i] = this.pawn.VampComp().Souls.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Souls".Translate(string.Join(", ", soulNames))); } if (this?.pawn?.VampComp()?.Thinblooded ?? false) @@ -145,7 +142,7 @@ public static string AddOrdinal(int num) public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref initialized, "initialized"); + Scribe_Values.Look(ref this.initialized, "initialized", false); //Scribe_Collections.Look(ref this.carriedBloodInfectors, "carriedBloodInfectors", LookMode.Deep, LookMode.Value); //Scribe_Collections.Look(ref this.carriedBloodDrugEffects, "carriedBloodDrugEffects", LookMode.Deep, LookMode.Value); } diff --git a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs index f6df8c4..26418f1 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs @@ -1,6 +1,4 @@ -using Vampire.Defs; - -namespace Vampire.Hediffs +namespace Vampire { public class HediffVampirism_Gargoyle : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs index 3bcc2cd..9d223f1 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs @@ -1,6 +1,4 @@ -using Vampire.Defs; - -namespace Vampire.Hediffs +namespace Vampire { public class HediffVampirism_Lasombra : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs index 6adeb4d..d467a56 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs @@ -1,6 +1,4 @@ -using Vampire.Defs; - -namespace Vampire.Hediffs +namespace Vampire { public class HediffVampirism_Pijavica : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs index c5d8279..c8e4bff 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs @@ -1,6 +1,4 @@ -using Vampire.Defs; - -namespace Vampire.Hediffs +namespace Vampire { public class HediffVampirism_Tremere : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs index d51c11e..40ae933 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs @@ -1,6 +1,4 @@ -using Vampire.Defs; - -namespace Vampire.Hediffs +namespace Vampire { public class HediffVampirism_Tzimisce : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs index 253ef79..d1dd15a 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; using System.Text; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; using Verse; -namespace Vampire.Hediffs +namespace Vampire { public class HediffVampirism_VampGiver : HediffWithComps { @@ -18,7 +15,7 @@ public virtual int Generation { if (generation == -1) { - switch (CurStageIndex) + switch (this.CurStageIndex) { case 0: generation = 14; break; case 1: generation = Rand.Range(10, 13); break; @@ -42,7 +39,7 @@ public override string TipStringExtra { get { - int gen = generation; + int gen = this.generation; int math = (gen > 7) ? 10 + (Math.Abs(gen - 13)) : 10 * (Math.Abs(gen - 9)); StringBuilder s = new StringBuilder(); @@ -70,11 +67,11 @@ public override void PostTick() if (!setup) { bool setup = true; - if (pawn.VampComp() is CompVampire v) + if (this.pawn.VampComp() is CompVampire v) { - int generatonToSpawn = Generation; + int generatonToSpawn = this.Generation; //Pawn sire = VampireRelationUtility.FindSireFor(this.pawn, this.Bloodline, generatonToSpawn); - v.InitializeVampirism(null, Bloodline, generatonToSpawn); + v.InitializeVampirism(null, this.Bloodline, generatonToSpawn); } } base.PostTick(); @@ -83,8 +80,8 @@ public override void PostTick() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref setup, "setup"); - Scribe_Values.Look(ref generation, "generation", -1); + Scribe_Values.Look(ref this.setup, "setup", false); + Scribe_Values.Look(ref this.generation, "generation", -1); } } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs index c86ef3d..568c4f5 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs @@ -1,8 +1,7 @@ using RimWorld; -using Vampire.Utilities; using Verse; -namespace Vampire.Hediffs +namespace Vampire { public class HediffWithComps_BeastHunger : HediffWithComps { @@ -16,20 +15,20 @@ public override void Tick() if (Find.TickManager.TicksGame % checkRate == 0) { - if (pawn?.BloodNeed() is Need_Blood pB) + if (this.pawn?.BloodNeed() is Need_Blood pB) { - if (CurStageIndex == 3 && pawn.MentalStateDef != MentalState_VampireBeast) + if (this.CurStageIndex == 3 && this.pawn.MentalStateDef != MentalState_VampireBeast) { - pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); + this.pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); } if (pB.CurLevelPercentage < 0.3f) { - Severity += 0.005f; + this.Severity += 0.005f; } else { - Severity -= 0.2f; + this.Severity -= 0.2f; } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs index e255460..6543fce 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs @@ -1,11 +1,9 @@ using RimWorld; -using Vampire.Defs; -using Vampire.Utilities; using Verse; -using Verse.AI; using Verse.Sound; +using Verse.AI; -namespace Vampire.Hediffs +namespace Vampire { public class HediffWithComps_SunlightExposure : HediffWithComps, ISizeReporter { @@ -19,36 +17,36 @@ public override void Tick() { base.Tick(); - if (pawn == null && pawn?.Corpse?.InnerPawn == null) + if (this.pawn == null && this.pawn?.Corpse?.InnerPawn == null) { return; } - if (sustainer != null && !sustainer.Ended) + if (this.sustainer != null && !this.sustainer.Ended) { - sustainer.Maintain(); + this.sustainer.Maintain(); } else { //LongEventHandler.ExecuteWhenFinished(delegate //{ SoundDef def = SoundDef.Named("FireBurning"); - SoundInfo info = SoundInfo.InMap(new TargetInfo(pawn.Position, pawn.Map), MaintenanceType.PerTick); + SoundInfo info = SoundInfo.InMap(new TargetInfo(this.pawn.Position, this.pawn.Map, false), MaintenanceType.PerTick); info.volumeFactor *= 2; //this.sustainer = def.TrySpawnSustainer(info); //SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); - sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); + this.sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); //}); } if (sunBurningEffect != null) { - sunBurningEffect.EffectTick(pawn, pawn); + sunBurningEffect.EffectTick(this.pawn, this.pawn); if (Find.TickManager.TicksGame % 20 == 0) { - if (CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(pawn.DrawPos, pawn.Map, 1f); - if (CurStageIndex > 1 && Rand.Value < (CurStageIndex * 0.31f)) - MoteMaker.ThrowFireGlow(pawn.PositionHeld, pawn.Map, 1f); + if (this.CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(this.pawn.DrawPos, this.pawn.Map, 1f); + if (this.CurStageIndex > 1 && Rand.Value < (this.CurStageIndex * 0.31f)) + MoteMaker.ThrowFireGlow(this.pawn.PositionHeld, this.pawn.Map, 1f); } } if (Find.TickManager.TicksGame % checkRate == 0) @@ -65,16 +63,16 @@ public override void Tick() } } - if (CurStageIndex > 1) + if (this.CurStageIndex > 1) { Burn(); } - Severity += 0.017f; + this.Severity += 0.017f; } else { curSunDamage = 5; - Severity -= 0.2f; + this.Severity -= 0.2f; if (sunBurningEffect != null) sunBurningEffect = null; if (pawn?.MentalStateDef == VampDefOf.ROMV_Rotschreck) { pawn.MentalState.RecoverFromState(); } if (pawn?.CurJob?.def == VampDefOf.ROMV_DigAndHide) pawn.jobs.StopAll(); @@ -89,9 +87,9 @@ public void Burn() if (!pawn.Dead) { int dmgRange = curSunDamage; - DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage)); + DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage), -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown); dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside); - if (CurStageIndex > 2) + if (this.CurStageIndex > 2) curSunDamage += Rand.Range(1, 2); ApplyBurnDamage(dinfo); @@ -117,7 +115,7 @@ public void ApplyBurnDamage(DamageInfo dinfo) { h.CurState.RecoverFromState(); } - if (CurStageIndex > 1 && Rand.Value < Severity && !pawn.InMentalState) + if (this.CurStageIndex > 1 && Rand.Value < this.Severity && !pawn.InMentalState) { h.TryStartMentalState(VampDefOf.ROMV_Rotschreck); } @@ -135,7 +133,7 @@ public void RotCorpseAway() public float CurrentSize() { - switch (CurStageIndex) + switch (this.CurStageIndex) { case 1: return 8; diff --git a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs index 9144b4c..a03d929 100644 --- a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs +++ b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs @@ -1,7 +1,6 @@ -using Vampire.Utilities; -using Verse; +using Verse; -namespace Vampire.Hediffs +namespace Vampire { public class Hediff_AddedPart_Fangs : Hediff_AddedPart { @@ -14,7 +13,7 @@ public override bool ShouldRemove { get { - if (pawn.IsVampire()) + if (this.pawn.IsVampire()) return false; return true; } @@ -26,8 +25,8 @@ public override bool ShouldRemove /// public override void PostRemoved() { - if (!pawn.IsVampire()) - pawn.health.RestorePart(Part, this, false); + if (!this.pawn.IsVampire()) + this.pawn.health.RestorePart(base.Part, this, false); base.PostRemoved(); } diff --git a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs index c263aa9..f052dd4 100644 --- a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs +++ b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs @@ -12,11 +12,11 @@ private Pawn PawnForNeeds { get { - if (SelPawn != null) + if (base.SelPawn != null) { - return SelPawn; + return base.SelPawn; } - Corpse corpse = SelThing as Corpse; + Corpse corpse = base.SelThing as Corpse; if (corpse != null) { return corpse.InnerPawn; @@ -35,23 +35,23 @@ public override bool IsVisible public ITab_Pawn_NeedsCorpse() { - labelKey = "TabNeeds"; - tutorTag = "Needs"; + this.labelKey = "TabNeeds"; + this.tutorTag = "Needs"; } public override void OnOpen() { - thoughtScrollPosition = default(Vector2); + this.thoughtScrollPosition = default(Vector2); } protected override void FillTab() { - NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, size.x, size.y), PawnForNeeds, ref thoughtScrollPosition); + NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, this.size.x, this.size.y), PawnForNeeds, ref this.thoughtScrollPosition); } protected override void UpdateSize() { - size = NeedsCardUtility.GetSize(PawnForNeeds); + this.size = NeedsCardUtility.GetSize(PawnForNeeds); } } } diff --git a/Source/Vampires/Need_Blood.cs b/Source/Vampires/Need_Blood.cs index 5991407..5e63188 100644 --- a/Source/Vampires/Need_Blood.cs +++ b/Source/Vampires/Need_Blood.cs @@ -4,8 +4,6 @@ using Verse; using RimWorld; using System.Linq; -using Vampire.Components; -using Vampire.Utilities; namespace Vampire { @@ -41,13 +39,13 @@ public class Need_Blood : Need #endregion Variables #region Properties - public CompVampire CompVampire => pawn?.TryGetComp(); - public bool IsAnimal => pawn?.RaceProps?.Animal ?? false; - public bool IsFull => CurBloodPoints == MaxBloodPoints; - public bool Starving => CompVampire != null && CompVampire.IsVampire && CurCategory == HungerCategory.Starving; + public CompVampire CompVampire => this.pawn?.TryGetComp(); + public bool IsAnimal => this.pawn?.RaceProps?.Animal ?? false; + public bool IsFull => this.CurBloodPoints == this.MaxBloodPoints; + public bool Starving => CompVampire != null && CompVampire.IsVampire && this.CurCategory == HungerCategory.Starving; public bool ShouldDie => CurBloodPoints == 0; public float PercPerPoint => 1f / MaxBloodPoints; - public bool DrainingIsDeadly => CurBloodPoints <= 2 || (pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); + public bool DrainingIsDeadly => this.CurBloodPoints <= 2 || (this.pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); //public PreferredFeedMode PreferredFeedMode { get => preferredFeedMode; set => preferredFeedMode = value; } @@ -89,7 +87,7 @@ public int MaxBloodPoints int result = 7; if (IsAnimal) { - result = MaxBloodPointsForAnimal(pawn); + result = MaxBloodPointsForAnimal(this.pawn); } if (CompVampire != null && CompVampire.IsVampire) { @@ -120,13 +118,13 @@ public HungerCategory CurCategory { if (CompVampire != null && CompVampire.IsVampire) { - if (CurLevelPercentage <= 0f) + if (base.CurLevelPercentage <= 0f) return HungerCategory.Starving; - if (CurLevelPercentage < PercPerPoint * 2) + if (base.CurLevelPercentage < PercPerPoint * 2) return HungerCategory.UrgentlyHungry; - if (CurLevelPercentage < MaxLevel) + if (base.CurLevelPercentage < MaxLevel) return HungerCategory.Hungry; } return HungerCategory.Fed; @@ -148,9 +146,9 @@ public override float CurLevel public override float MaxLevel => MaxBloodPoints; public float BloodWanted - => MaxBloodPoints - CurBloodPoints; + => this.MaxBloodPoints - this.CurBloodPoints; - public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - lastNonStarvingTick); + public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - this.lastNonStarvingTick); public Need_Blood(Pawn pawn) : base(pawn) { } @@ -159,12 +157,12 @@ public override void ExposeData() //private int curBloodPoints = Int32.MinValue; //private int nextBloodChangeTick = Int32.MaxValue; base.ExposeData(); - Scribe_Values.Look(ref lastNonStarvingTick, "lastNonStarvingTick", -1); - Scribe_Values.Look(ref nextBloodChangeTick, "nextBloodChangeTick", -1); - Scribe_Values.Look(ref curBloodPoints, "curBloodPoints", -1); - Scribe_Values.Look(ref bloodFixer, "bloodFixer"); - Scribe_Values.Look(ref preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); - Scribe_Values.Look(ref preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); + Scribe_Values.Look(ref this.lastNonStarvingTick, "lastNonStarvingTick", -1, false); + Scribe_Values.Look(ref this.nextBloodChangeTick, "nextBloodChangeTick", -1, false); + Scribe_Values.Look(ref this.curBloodPoints, "curBloodPoints", -1, false); + Scribe_Values.Look(ref this.bloodFixer, "bloodFixer", false); + Scribe_Values.Look(ref this.preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); + Scribe_Values.Look(ref this.preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); } public int AdjustBlood(int amt, bool alert = true) @@ -174,10 +172,10 @@ public int AdjustBlood(int amt, bool alert = true) CurBloodPoints = Mathf.Clamp(CurBloodPoints + amt, 0, MaxBloodPoints); CurLevelPercentage = CurBloodPoints * PercPerPoint; - if (!pawn.IsVampire() && CurBloodPoints < prevBloodPoints) + if (!this.pawn.IsVampire() && CurBloodPoints < prevBloodPoints) { int diff = prevBloodPoints - CurBloodPoints; - HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); + HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); } if (CurBloodPoints == 0) @@ -188,22 +186,22 @@ public int AdjustBlood(int amt, bool alert = true) public void Notify_NoBloodLeft(bool alert = true) { - if (pawn.Faction == Faction.OfPlayer) + if (this.pawn.Faction == Faction.OfPlayer) { if (alert) { - if (pawn.IsVampire()) - Messages.Message("ROMV_BloodDepletedVamp".Translate(pawn.LabelCap), MessageTypeDefOf.NeutralEvent); + if (this.pawn.IsVampire()) + Messages.Message("ROMV_BloodDepletedVamp".Translate(this.pawn.LabelCap), MessageTypeDefOf.NeutralEvent); else - Messages.Message("ROMV_BloodDepleted".Translate(pawn.LabelCap), MessageTypeDefOf.NegativeEvent); + Messages.Message("ROMV_BloodDepleted".Translate(this.pawn.LabelCap), MessageTypeDefOf.NegativeEvent); } } - if (!pawn.IsVampire()) + if (!this.pawn.IsVampire()) { - HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 999f); - if (!pawn.Dead) pawn.Kill(null); + HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 999f); + if (!this.pawn.Dead) this.pawn.Kill(null); } } @@ -221,7 +219,7 @@ public override void NeedInterval() if (!bloodFixer) { bloodFixer = true; - nextBloodChangeTick = -1; + this.nextBloodChangeTick = -1; } //if ((pawn?.IsVampire() ?? false) && pawn.RaceProps != null && pawn.RaceProps.Humanlike && pawn.Faction != null && pawn.Faction == Faction.OfPlayer && @@ -247,23 +245,23 @@ public override void NeedInterval() //if (Find.TickManager.TicksGame % 250 == 0) //Log.Message("Ticks => " + Find.TickManager.TicksGame); - if (Find.TickManager.TicksGame > nextBloodChangeTick) + if (Find.TickManager.TicksGame > this.nextBloodChangeTick) { int math = Find.TickManager.TicksGame + GenDate.TicksPerDay; //Log.Message("BLOOD TICKS SET TO => " + math); - nextBloodChangeTick = math; + this.nextBloodChangeTick = math; AdjustBlood(BloodChangePerDay); } - if (!Starving) + if (!this.Starving) { - lastNonStarvingTick = Find.TickManager.TicksGame; + this.lastNonStarvingTick = Find.TickManager.TicksGame; } - if (!IsFrozen) + if (!base.IsFrozen) { - if (Starving) + if (this.Starving) { if (CompVampire != null && CompVampire.IsVampire) @@ -271,11 +269,11 @@ public override void NeedInterval() CompVampire.Notify_Starving(lastNonStarvingTick); } - else if (!pawn.Dead) + else if (!this.pawn.Dead) { - HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 1f); - pawn.Kill(null); + HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 1f); + this.pawn.Kill(null); } } } @@ -284,10 +282,10 @@ public override void NeedInterval() public override void SetInitialLevel() { //base.CurLevelPercentage = 1.0f; - CurLevel = CurBloodPoints = MaxBloodPoints; + this.CurLevel = this.CurBloodPoints = this.MaxBloodPoints; if (Current.ProgramState == ProgramState.Playing) { - lastNonStarvingTick = Find.TickManager.TicksGame; + this.lastNonStarvingTick = Find.TickManager.TicksGame; } } @@ -295,23 +293,23 @@ public override string GetTipString() { return string.Concat(new string[] { - GetLabel(), + this.GetLabel(), ": ", - CurLevelPercentage.ToStringPercent(), + base.CurLevelPercentage.ToStringPercent(), " (", - CurLevel.ToString("0.##"), + this.CurLevel.ToString("0.##"), " / ", - MaxLevel.ToString("0.##"), + this.MaxLevel.ToString("0.##"), ")\n", - GetDescription() + this.GetDescription() }); } public string GetLabel() { - bool isVampire = pawn.IsVampire(); + bool isVampire = this.pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (pawn.IsAndroid()) + if (this.pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitae".Translate(); @@ -320,14 +318,14 @@ public string GetLabel() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_Vitae".Translate(); - return LabelCap; + return this.LabelCap; } public string GetDescription() { - bool isVampire = pawn.IsVampire(); + bool isVampire = this.pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (pawn.IsAndroid()) + if (this.pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitaeDesc".Translate(); @@ -336,13 +334,13 @@ public string GetDescription() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_VitaeDesc".Translate(); - return def.description; + return this.def.description; } public Color GetColorToUse() { - bool isVampire = pawn.IsVampire(); - if (pawn.IsAndroid()) + bool isVampire = this.pawn.IsVampire(); + if (this.pawn.IsAndroid()) { if (isVampire) return VampireUtility.ColorAndroidCoolantVitae; @@ -357,14 +355,14 @@ public Color GetColorToUse() public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, float customMargin = -1f, bool drawArrows = true, bool doTooltip = true) { - if (threshPercents == null) + if (this.threshPercents == null) { - threshPercents = new List(); + this.threshPercents = new List(); } - threshPercents.Clear(); + this.threshPercents.Clear(); for (int i = 1; i < MaxBloodPoints; i++) { - threshPercents.Add(PercPerPoint * i); + this.threshPercents.Add(PercPerPoint * i); } if (rect.height > 70f) { @@ -378,7 +376,7 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, } if (doTooltip) { - TooltipHandler.TipRegion(rect, new TipSignal(() => GetTipString(), rect.GetHashCode())); + TooltipHandler.TipRegion(rect, new TipSignal(() => this.GetTipString(), rect.GetHashCode())); } if (pawn != null && pawn.Faction == Faction.OfPlayerSilentFail && pawn.VampComp() is CompVampire v && v.IsVampire) @@ -396,32 +394,32 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, Text.Font = ((rect.height <= 55f) ? GameFont.Tiny : GameFont.Small); Text.Anchor = TextAnchor.LowerLeft; Rect rect2 = new Rect(rect.x + num3 + rect.width * 0.1f, rect.y, rect.width - num3 - rect.width * 0.1f, rect.height / 2f); - Widgets.Label(rect2, GetLabel()); + Widgets.Label(rect2, this.GetLabel()); Text.Anchor = TextAnchor.UpperLeft; Rect rect3 = new Rect(rect.x, rect.y + rect.height / 2f, rect.width, rect.height / 2f); rect3 = new Rect(rect3.x + num3, rect3.y, rect3.width - num3 * 2f, rect3.height - num2); Color colorToUse = GetColorToUse(); //(this.pawn?.IsVampire() ?? false) ? new Color(0.65f, 0.008f, 0.008f) : new Color(0.73f, 0.02f, 0.02f); - Widgets.FillableBar(rect3, CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); + Widgets.FillableBar(rect3, this.CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); //Widgets.FillableBar(rect3, this.CurLevelPercentage); if (drawArrows) { - Widgets.FillableBarChangeArrows(rect3, GUIChangeArrow); + Widgets.FillableBarChangeArrows(rect3, this.GUIChangeArrow); } - if (threshPercents != null) + if (this.threshPercents != null) { - for (int i = 0; i < Mathf.Min(threshPercents.Count, maxThresholdMarkers); i++) + for (int i = 0; i < Mathf.Min(this.threshPercents.Count, maxThresholdMarkers); i++) { - DrawBarThreshold(rect3, threshPercents[i]); + this.DrawBarThreshold(rect3, this.threshPercents[i]); } } - float curInstantLevelPercentage = CurInstantLevelPercentage; + float curInstantLevelPercentage = this.CurInstantLevelPercentage; if (curInstantLevelPercentage >= 0f) { - DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); + this.DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); } - if (!def.tutorHighlightTag.NullOrEmpty()) + if (!this.def.tutorHighlightTag.NullOrEmpty()) { - UIHighlighter.HighlightOpportunity(rect, def.tutorHighlightTag); + UIHighlighter.HighlightOpportunity(rect, this.def.tutorHighlightTag); } Text.Font = GameFont.Small; } @@ -432,7 +430,7 @@ private void DrawBarThreshold(Rect barRect, float threshPct) float num = (float)((barRect.width <= 60f) ? 1 : 2); Rect position = new Rect(barRect.x + barRect.width * threshPct - (num - 1f), barRect.y + barRect.height / 2f, num, barRect.height / 2f); Texture2D image; - if (threshPct < CurLevelPercentage) + if (threshPct < this.CurLevelPercentage) { image = BaseContent.BlackTex; GUI.color = new Color(1f, 1f, 1f, 0.9f); diff --git a/Source/Vampires/ScenPart_LongerNights.cs b/Source/Vampires/ScenPart_LongerNights.cs index f0f9917..5fa802c 100644 --- a/Source/Vampires/ScenPart_LongerNights.cs +++ b/Source/Vampires/ScenPart_LongerNights.cs @@ -10,7 +10,7 @@ public class ScenPart_LongerNights : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 2 + 31f); + Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 2 + 31f); DoVampModifierEditInterface(new Rect(scenPartRect.x, scenPartRect.y, scenPartRect.width, 31f)); } @@ -25,14 +25,14 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_NightLength".Translate().CapitalizeFirst()); Text.Anchor = TextAnchor.UpperLeft; - nightsLength = Widgets.HorizontalSlider(rect4, nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); + this.nightsLength = Widgets.HorizontalSlider(rect4, this.nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref nightsLength, "nightsLength", 0.1f); + Scribe_Values.Look(ref this.nightsLength, "nightsLength", 0.1f); } public override string Summary(Scenario scen) @@ -48,7 +48,7 @@ public string GetLongerNightsSummary() public override void Randomize() { base.Randomize(); - nightsLength = Rand.Range(0.1f, 1.0f); + this.nightsLength = Rand.Range(0.1f, 1.0f); } } } diff --git a/Source/Vampires/ScenPart_StartingVampires.cs b/Source/Vampires/ScenPart_StartingVampires.cs index eea9135..d9bb334 100644 --- a/Source/Vampires/ScenPart_StartingVampires.cs +++ b/Source/Vampires/ScenPart_StartingVampires.cs @@ -4,8 +4,6 @@ using Verse; using RimWorld; using Harmony; -using Vampire.Defs; -using Vampire.Hediffs; namespace Vampire { @@ -24,12 +22,12 @@ public class ScenPart_StartingVampires : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f + 31f); - if (Widgets.ButtonText(scenPartRect.TopPartPixels(RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate())) + Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f + 31f); + if (Widgets.ButtonText(scenPartRect.TopPartPixels(ScenPart.RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate(), true, false, true)) { - FloatMenuUtility.MakeMenu(PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate + FloatMenuUtility.MakeMenu(this.PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate { - bloodline = bl; + this.bloodline = bl; }); } //Widgets.IntRange(new Rect(scenPartRect.x, scenPartRect.y + ScenPart.RowHeight, scenPartRect.width, 31f), listing.CurHeight.GetHashCode(), ref this.generationRange, 4, this.maxGeneration, "ROMV_VampireGeneration"); @@ -39,7 +37,7 @@ public override void DoEditInterface(Listing_ScenEdit listing) // RimWorld.ScenPart_PawnModifier protected void DoVampModifierEditInterface(Rect rect) { - Rect rect2 = new Rect(rect.x, rect.y + RowHeight * 2, rect.width, 31); + Rect rect2 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 2, rect.width, 31); Rect rect3 = rect2.LeftPart(0.333f).Rounded(); Rect rect4 = rect2.RightPart(0.666f).Rounded(); @@ -47,9 +45,9 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_Chance".Translate()); Text.Anchor = TextAnchor.UpperLeft; - vampChance = Widgets.HorizontalSlider(rect4, vampChance, 0f, 1f, false, "", "", ""); + this.vampChance = Widgets.HorizontalSlider(rect4, this.vampChance, 0f, 1f, false, "", "", ""); //Widgets.TextFieldNumeric(rect4, ref this, ref this.numOfVampsBuffer, 1, 50); - Rect rect5 = new Rect(rect.x, rect.y + RowHeight * 3, rect.width, 31); + Rect rect5 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 3, rect.width, 31); Rect rect6 = rect5.LeftPart(0.333f).Rounded(); Rect rect7 = rect5.RightPart(0.666f).Rounded(); @@ -57,15 +55,15 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect6, "ROMV_StartInCoffins".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.CheckboxLabeled(rect7, "", ref spawnInCoffins); - Rect rect8 = new Rect(rect.x, rect.y + RowHeight * 4, rect.width, 31); + Widgets.CheckboxLabeled(rect7, "", ref this.spawnInCoffins, false); + Rect rect8 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 4, rect.width, 31); Rect rect9 = rect8.LeftPart(0.666f).Rounded(); Rect rect10 = rect8.RightPart(0.333f).Rounded(); Text.Anchor = TextAnchor.MiddleRight; Widgets.Label(rect9, "ROMV_MaxVampires".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.TextFieldNumeric(rect10, ref maxVampires, ref maxVampiresBuf, 1, 100); + Widgets.TextFieldNumeric(rect10, ref this.maxVampires, ref this.maxVampiresBuf, 1, 100); } @@ -85,11 +83,11 @@ public override void ExposeData() //private IntRange generationRange = new IntRange(10, 13); //private int maxGeneration = 15; //private bool spawnInCoffins = false; - Scribe_Defs.Look(ref bloodline, "bloodline"); - Scribe_Values.Look(ref generationRange, "generationRange"); - Scribe_Values.Look(ref vampChance, "vampChance", 0.5f); - Scribe_Values.Look(ref maxVampires, "maxVampires", 1); - Scribe_Values.Look(ref spawnInCoffins, "spawnInCoffins"); + Scribe_Defs.Look(ref this.bloodline, "bloodline"); + Scribe_Values.Look(ref this.generationRange, "generationRange", default(IntRange), false); + Scribe_Values.Look(ref this.vampChance, "vampChance", 0.5f); + Scribe_Values.Look(ref this.maxVampires, "maxVampires", 1); + Scribe_Values.Look(ref this.spawnInCoffins, "spawnInCoffins", false); } public override string Summary(Scenario scen) @@ -121,11 +119,11 @@ public string GenRangeToString() public override void Randomize() { base.Randomize(); - vampChance = Rand.Range(0.2f, 0.8f); - bloodline = PossibleBloodlines().RandomElement(); - generationRange.max = Rand.Range(10, 15); - generationRange.min = Rand.Range(8, generationRange.max); - spawnInCoffins = (Rand.Value > 0.3) ? true : false; + this.vampChance = Rand.Range(0.2f, 0.8f); + this.bloodline = this.PossibleBloodlines().RandomElement(); + this.generationRange.max = Rand.Range(10, 15); + this.generationRange.min = Rand.Range(8, this.generationRange.max); + this.spawnInCoffins = (Rand.Value > 0.3) ? true : false; } public override void PostMapGenerate(Map map) @@ -155,7 +153,7 @@ public override void PostMapGenerate(Map map) bool instaDrop = Find.GameInitData.QuickStarted; if (usingDropPods) { - DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true); + DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true, true); } } } diff --git a/Source/Vampires/SkillSheet.cs b/Source/Vampires/SkillSheet.cs index 1bb7e7f..1818727 100644 --- a/Source/Vampires/SkillSheet.cs +++ b/Source/Vampires/SkillSheet.cs @@ -1,6 +1,4 @@ using System.Collections.Generic; -using Vampire.Defs; -using Vampire.Utilities; using Verse; namespace Vampire @@ -47,8 +45,8 @@ public SkillSheet(Pawn pawn) public void ExposeData() { - Scribe_References.Look(ref pawn, "pawn"); - Scribe_Collections.Look(ref disciplines, true, "disciplines", LookMode.Deep, new object[0]); + Scribe_References.Look(ref this.pawn, "pawn"); + Scribe_Collections.Look(ref this.disciplines, true, "disciplines", LookMode.Deep, new object[0]); } } } diff --git a/Source/Vampires/UI/Alert_VampireInSunlight.cs b/Source/Vampires/UI/Alert_VampireInSunlight.cs index 4e96271..4445c3d 100644 --- a/Source/Vampires/UI/Alert_VampireInSunlight.cs +++ b/Source/Vampires/UI/Alert_VampireInSunlight.cs @@ -1,12 +1,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; +using RimWorld; -namespace Vampire.UI +namespace Vampire { public class Alert_VampireInSunlight : Alert { @@ -34,14 +32,14 @@ private IEnumerable VampiresInTheSun public Alert_VampireInSunlight() { - defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); - defaultPriority = AlertPriority.Critical; + this.defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); + this.defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in VampiresInTheSun) + foreach (Pawn current in this.VampiresInTheSun) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -54,7 +52,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = VampiresInTheSun.FirstOrDefault(); + Pawn pawn = this.VampiresInTheSun.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/UI/Alert_VampireStarving.cs b/Source/Vampires/UI/Alert_VampireStarving.cs index 1cd15b2..5e47285 100644 --- a/Source/Vampires/UI/Alert_VampireStarving.cs +++ b/Source/Vampires/UI/Alert_VampireStarving.cs @@ -1,12 +1,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; using Verse; +using RimWorld; -namespace Vampire.UI +namespace Vampire { public class Alert_VampireStarving : Alert { @@ -34,14 +32,14 @@ private IEnumerable VampiresStarving public Alert_VampireStarving() { - defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); - defaultPriority = AlertPriority.Critical; + this.defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); + this.defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in VampiresStarving) + foreach (Pawn current in this.VampiresStarving) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -54,7 +52,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = VampiresStarving.FirstOrDefault(); + Pawn pawn = this.VampiresStarving.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/UI/VampireCardUtility.cs b/Source/Vampires/UI/VampireCardUtility.cs index 8c064dd..cfb06b8 100644 --- a/Source/Vampires/UI/VampireCardUtility.cs +++ b/Source/Vampires/UI/VampireCardUtility.cs @@ -1,13 +1,10 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Linq; -using RimWorld; using UnityEngine; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; using Verse; -namespace Vampire.UI +namespace Vampire { public class VampireCardUtility { @@ -91,7 +88,7 @@ public static void DrawVampCard(Rect rect, Pawn pawn) TooltipHandler.TipRegion(rect7, new TipSignal("ROMV_CharacterSheet".Translate())); if (Widgets.ButtonImage(rect7, TexButton.ROMV_HumanIcon)) { - HarmonyPatches.HarmonyPatches.isSwitched = false; + HarmonyPatches.isSwitched = false; } Rect rectVampOptions = new Rect(CharacterCardUtility.PawnCardSize.x - 105f, 150f, 30f, 30f); @@ -181,14 +178,14 @@ public static void LevelPane(Rect inRect, CompVampire compVampire) if (DebugSettings.godMode) { Rect rectDebugPlus = new Rect(rectLevel.xMax, inRect.y, inRect.width * 0.3f, TextSize); - if (Widgets.ButtonText(rectDebugPlus, "+")) + if (Widgets.ButtonText(rectDebugPlus, "+", true, false, true)) { compVampire.Notify_LevelUp(false); } if (compVampire.Level > 0) { Rect rectDebugReset = new Rect(rectDebugPlus.x, rectDebugPlus.yMax + 1, rectDebugPlus.width, TextSize); - if (Widgets.ButtonText(rectDebugReset, "~")) + if (Widgets.ButtonText(rectDebugReset, "~", true, false, true)) { compVampire.Notify_ResetAbilities(); } diff --git a/Source/Vampires/Utilities/BloodFeedModeUtility.cs b/Source/Vampires/Utilities/BloodFeedModeUtility.cs index 71942ea..f7322e5 100644 --- a/Source/Vampires/Utilities/BloodFeedModeUtility.cs +++ b/Source/Vampires/Utilities/BloodFeedModeUtility.cs @@ -1,10 +1,10 @@ -using System; -using RimWorld; +using RimWorld; +using System; using UnityEngine; using Verse; using Verse.Sound; -namespace Vampire.Utilities +namespace Vampire { [StaticConstructorOnStartup] public static class BloodFeedModeUtility @@ -26,8 +26,8 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) if (Widgets.ButtonImage(rect, icon)) { - vampBlood.preferredFeedMode = GetNextResponse(pawn); - SoundDefOf.TickHigh.PlayOneShotOnCamera(); + vampBlood.preferredFeedMode = BloodFeedModeUtility.GetNextResponse(pawn); + SoundDefOf.TickHigh.PlayOneShotOnCamera(null); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.HostilityResponse, KnowledgeAmount.SpecificInteraction); } UIHighlighter.HighlightOpportunity(rect, "ROMV_FeedMode"); @@ -50,7 +50,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.PrisonersOnly; else if (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.All; - SoundDefOf.TickHigh.PlayOneShotOnCamera(); + SoundDefOf.TickHigh.PlayOneShotOnCamera(null); } UIHighlighter.HighlightOpportunity(rectSub, "ROMV_FeedModeHumanoidType"); TooltipHandler.TipRegion(rectSub, string.Concat(new string[] @@ -117,15 +117,15 @@ public static Texture2D GetIcon(this PreferredFeedMode response) switch (response) { case PreferredFeedMode.None: - return NoneIcon; + return BloodFeedModeUtility.NoneIcon; case PreferredFeedMode.AnimalNonLethal: - return AnimalNonLethalIcon; + return BloodFeedModeUtility.AnimalNonLethalIcon; case PreferredFeedMode.AnimalLethal: - return AnimalLethalIcon; + return BloodFeedModeUtility.AnimalLethalIcon; case PreferredFeedMode.HumanoidNonLethal: - return HumanoidNonLethalIcon; + return BloodFeedModeUtility.HumanoidNonLethalIcon; case PreferredFeedMode.HumanoidLethal: - return HumanoidLethalIcon; + return BloodFeedModeUtility.HumanoidLethalIcon; default: return BaseContent.BadTex; } diff --git a/Source/Vampires/Utilities/BloodItemUtility.cs b/Source/Vampires/Utilities/BloodItemUtility.cs index a886166..cb78f8a 100644 --- a/Source/Vampires/Utilities/BloodItemUtility.cs +++ b/Source/Vampires/Utilities/BloodItemUtility.cs @@ -1,7 +1,6 @@ -using Vampire.Defs; -using Verse; +using Verse; -namespace Vampire.Utilities +namespace Vampire { public static class BloodItemUtility { diff --git a/Source/Vampires/Utilities/BloodPreferabilty.cs b/Source/Vampires/Utilities/BloodPreferabilty.cs index 6cc875e..501e1b2 100644 --- a/Source/Vampires/Utilities/BloodPreferabilty.cs +++ b/Source/Vampires/Utilities/BloodPreferabilty.cs @@ -1,4 +1,4 @@ -namespace Vampire.Utilities +namespace Vampire { public enum BloodPreferabilty : int { diff --git a/Source/Vampires/Utilities/BloodTypeUtility.cs b/Source/Vampires/Utilities/BloodTypeUtility.cs index 4b5e1eb..3306ec6 100644 --- a/Source/Vampires/Utilities/BloodTypeUtility.cs +++ b/Source/Vampires/Utilities/BloodTypeUtility.cs @@ -1,8 +1,7 @@ -using RimWorld; -using Vampire.Defs; -using Verse; +using Verse; +using RimWorld; -namespace Vampire.Utilities +namespace Vampire { public static class BloodTypeUtility { @@ -12,37 +11,37 @@ public static BloodType BloodType(Pawn pawn) { if (pawn?.RaceProps?.Animal ?? false) { - return Defs.BloodType.Animal; + return Vampire.BloodType.Animal; } if (pawn?.RaceProps?.Humanlike ?? false) { - bool lowBlood = (IsLowblood(pawn)); - bool highBlood = (IsHighblood(pawn)); + bool lowBlood = (BloodTypeUtility.IsLowblood(pawn)); + bool highBlood = (BloodTypeUtility.IsHighblood(pawn)); - if (IsHighblood(pawn) && IsLowblood(pawn)) - return Defs.BloodType.AverageBlood; + if (BloodTypeUtility.IsHighblood(pawn) && BloodTypeUtility.IsLowblood(pawn)) + return Vampire.BloodType.AverageBlood; if (highBlood) - return Defs.BloodType.HighBlood; + return Vampire.BloodType.HighBlood; if (lowBlood) - return Defs.BloodType.LowBlood; + return Vampire.BloodType.LowBlood; - return Defs.BloodType.AverageBlood; + return Vampire.BloodType.AverageBlood; } } - return Defs.BloodType.None; + return Vampire.BloodType.None; } public static string GetLabel(this BloodType bloodtype) { switch (bloodtype) { - case Defs.BloodType.Animal: + case Vampire.BloodType.Animal: return "ROMV_BloodTypeAnimal".Translate(); - case Defs.BloodType.AverageBlood: + case Vampire.BloodType.AverageBlood: return "ROMV_BloodTypeAverage".Translate(); - case Defs.BloodType.LowBlood: + case Vampire.BloodType.LowBlood: return "ROMV_BloodTypeLow".Translate(); - case Defs.BloodType.HighBlood: + case Vampire.BloodType.HighBlood: return "ROMV_BloodTypeHigh".Translate(); } return "ROMV_BloodType_Unavailable".Translate(); diff --git a/Source/Vampires/Utilities/BloodUtility.cs b/Source/Vampires/Utilities/BloodUtility.cs index 505c4b9..dab820b 100644 --- a/Source/Vampires/Utilities/BloodUtility.cs +++ b/Source/Vampires/Utilities/BloodUtility.cs @@ -1,14 +1,11 @@ -using System; +using RimWorld; +using System; using System.Collections.Generic; -using RimWorld; using UnityEngine; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Hediffs; using Verse; using Verse.AI; -namespace Vampire.Utilities +namespace Vampire { public static class BloodUtility { @@ -21,7 +18,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (canUseInventory) { if (flag) - thing = BestBloodInInventory(getter, null, 0); + thing = BloodUtility.BestBloodInInventory(getter, null, 0); if (thing != null) { if (getter.Faction != Faction.OfPlayer) @@ -39,12 +36,12 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe } } } - Thing thing2 = BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); + Thing thing2 = BloodUtility.BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); if (thing == null && thing2 == null) { if (canUseInventory && flag) { - thing = BestBloodInInventory(getter, null, 0); + thing = BloodUtility.BestBloodInInventory(getter, null, 0); if (thing != null) { bloodSource = thing; @@ -55,7 +52,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (thing2 == null && getter == eater) { - Pawn pawn = BestPawnToHuntForVampire(getter); + Pawn pawn = BloodUtility.BestPawnToHuntForVampire(getter); if (pawn != null) { bloodSource = pawn; @@ -150,7 +147,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate { return false; } - if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t)) + if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t, 1, -1, null, false)) { return false; } @@ -160,7 +157,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate }; Thing thing; Predicate validator = foodValidator; - thing = SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter), 9999f, validator); + thing = BloodUtility.SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator); return thing; } @@ -225,16 +222,16 @@ private static Pawn BestPawnToHuntForVampire(Pawn predator, bool desperate = fal //{ if (predator != pawn2) { - if (IsAcceptableVictimFor(predator, pawn2, desperate)) + if (BloodUtility.IsAcceptableVictimFor(predator, pawn2, desperate)) { - if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) + if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) { //if (!pawn2.IsForbidden(predator)) //{ if (!tutorialMode || pawn2.Faction != Faction.OfPlayer) { //Log.Message("Potential Prey: " + pawn2.Label); - float preyScoreFor = GetPreyScoreFor(predator, pawn2); + float preyScoreFor = BloodUtility.GetPreyScoreFor(predator, pawn2); //Log.Message("Potential Prey Score: " + preyScoreFor); if (preyScoreFor > num || pawn == null) @@ -424,7 +421,7 @@ public static Need_Blood BloodNeed(this Pawn pawn) // RimWorld.FoodUtility public static int WillConsumeStackCountOf(Pawn ingester, ThingDef def) { - int num = Mathf.Min(10, StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); + int num = Mathf.Min(10, BloodUtility.StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); if (num < 1) { num = 1; diff --git a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs index fb892ef..2d383d6 100644 --- a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs +++ b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs @@ -1,29 +1,24 @@ // ---------------------------------------------------------------------- // These are basic usings. Always let them be here. // ---------------------------------------------------------------------- - using System; using System.Reflection; -using RimWorld; -using UnityEngine; -using Verse; -using Verse.AI; + // ---------------------------------------------------------------------- // These are RimWorld-specific usings. Activate/Deactivate what you need: // ---------------------------------------------------------------------- -// Always needed +using UnityEngine; // Always needed //using VerseBase; // Material/Graphics handling functions are found here -// RimWorld universal objects are here (like 'Building') -// Needed when you do something with the AI +using Verse; // RimWorld universal objects are here (like 'Building') +using Verse.AI; // Needed when you do something with the AI // Needed when you do something with Sound // Needed when you do something with Noises - -// RimWorld specific functions are found here (like 'Building_Battery') +using RimWorld; // RimWorld specific functions are found here (like 'Building_Battery') // RimWorld specific functions for world creation //using RimWorld.SquadAI; // RimWorld specific functions for squad brains -namespace Vampire.Utilities +namespace Vampire { class ResurrectedPawnUtility { @@ -32,7 +27,7 @@ public static Pawn DoGeneratePawnFromSource(Pawn sourcePawn, bool isBerserk = tr { PawnKindDef pawnKindDef = sourcePawn.kindDef; Faction factionDirect = isBerserk ? Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile) : Faction.OfPlayer; - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); try { pawn.kindDef = pawnKindDef; @@ -188,7 +183,7 @@ public static Pawn GenerateClonePawnFromSource(Pawn sourcePawn) { PawnKindDef pawnKindDef = PawnKindDef.Named("ReanimatedCorpse"); Faction factionDirect = Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile); - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); pawn.kindDef = pawnKindDef; pawn.SetFactionDirect(factionDirect); pawn.pather = new Pawn_PathFollower(pawn); @@ -343,10 +338,10 @@ public static void GenerateApparelFromSource(Pawn newPawn, Pawn sourcePawn) } else { - apparel = (Apparel)ThingMaker.MakeThing(current.def); + apparel = (Apparel)ThingMaker.MakeThing(current.def, null); } apparel.DrawColor = new Color(current.DrawColor.r, current.DrawColor.g, current.DrawColor.b, current.DrawColor.a); - newPawn.apparel.Wear(apparel); + newPawn.apparel.Wear(apparel, true); } } diff --git a/Source/Vampires/Utilities/VampSunlightPathUtility.cs b/Source/Vampires/Utilities/VampSunlightPathUtility.cs index f9453bc..c4307da 100644 --- a/Source/Vampires/Utilities/VampSunlightPathUtility.cs +++ b/Source/Vampires/Utilities/VampSunlightPathUtility.cs @@ -1,11 +1,8 @@ using RimWorld; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Hediffs; using Verse; using Verse.AI; -namespace Vampire.Utilities +namespace Vampire { public static class VampSunlightPathUtility { @@ -44,7 +41,7 @@ public static Job GetSunlightPathJob(Pawn pawn) return null; if (pawn.pather != null && pawn.pather.Destination != null && pawn.pather.Destination.IsSunlightSafeFor(pawn)) return null; - if (pawn.GetRoom() is Room room && room.PsychologicallyOutdoors) + if (pawn.GetRoom(RegionType.Set_Passable) is Room room && room.PsychologicallyOutdoors) { Job surviveJob; if (TryGoingToHomePoint(pawn, out surviveJob)) @@ -116,7 +113,7 @@ public static IntVec3 FindSafeZoneFor(Pawn pawn) { IntVec3 result = IntVec3.Invalid; Region region; - CellFinder.TryFindClosestRegionWith(pawn.GetRegion(), TraverseParms.For(pawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); + CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); if (region != null) { region.TryFindRandomCellInRegion(x => x.IsValid && x.x > 0 && x.z > 0 && x.InBounds(pawn.MapHeld) && x.GetDoor(pawn.MapHeld) == null, out result); @@ -162,7 +159,7 @@ public static bool TryDiggingHideyHole(Pawn pawn, out Job gotoJob) /// public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 center, Map map) { - if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map).Accepted) + if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map, false, null).Accepted) { return center; } @@ -170,8 +167,8 @@ public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 cent cellRect.ClipInsideMap(map); IntVec3 randomCell = cellRect.RandomCell; if (!CellFinder.TryFindRandomCellNear(center, map, 8, (IntVec3 c) => c.Standable(map) && - (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map).Accepted) && - (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors)) ?? false), out randomCell)) + (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map, false, null).Accepted) && + (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors, Danger.Deadly, false)) ?? false), out randomCell)) { //Log.Error("Found no place to build hideyhole for burning vampire."); randomCell = IntVec3.Invalid; @@ -242,7 +239,7 @@ public static bool IsSunlightSafeFor(this IntVec3 targ, Pawn pawn) /// public static bool CanSurviveTimeInSunlight(IntVec3 dest, Pawn pawn) { - PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn); + PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn, PathEndMode.OnCell); IntVec3 curVec; int cellsInSunlight = 0; while (path.NodesLeftCount > 1) @@ -322,7 +319,7 @@ public static int DetermineTicksUntilDaylight(Map map) public static IntVec3 FindCellSafeFromSunlight(Pawn pawn) { return CellFinderLoose.RandomCellWith(x => !IsZero(x) && x.IsValid && x.InBounds(pawn.MapHeld) && x.Roofed(pawn.MapHeld) && x.Walkable(pawn.MapHeld) - && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld); + && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld, 1000); } /// public override void PostRemoved() - { - if (!this.pawn.IsVampire()) - this.pawn.health.RestorePart(base.Part, this, false); + { + if (!pawn.IsVampire()) + pawn.health.RestorePart(Part, this, false); base.PostRemoved(); } diff --git a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs index b92eeba..f5f4762 100644 --- a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs +++ b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs @@ -1,6 +1,5 @@ using RimWorld; using Verse; -using System; using UnityEngine; namespace Vampire @@ -13,11 +12,11 @@ private Pawn PawnForNeeds { get { - if (base.SelPawn != null) + if (SelPawn != null) { - return base.SelPawn; + return SelPawn; } - Corpse corpse = base.SelThing as Corpse; + Corpse corpse = SelThing as Corpse; if (corpse != null) { return corpse.InnerPawn; @@ -26,33 +25,27 @@ private Pawn PawnForNeeds } } - public override bool IsVisible - { - get - { - return PawnForNeeds.needs != null && PawnForNeeds.needs.AllNeeds.Count > 0; - } - } + public override bool IsVisible => PawnForNeeds.needs != null && PawnForNeeds.needs.AllNeeds.Count > 0; public ITab_Pawn_NeedsCorpse() { - this.labelKey = "TabNeeds"; - this.tutorTag = "Needs"; + labelKey = "TabNeeds"; + tutorTag = "Needs"; } public override void OnOpen() { - this.thoughtScrollPosition = default(Vector2); + thoughtScrollPosition = default(Vector2); } protected override void FillTab() { - NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, this.size.x, this.size.y), PawnForNeeds, ref this.thoughtScrollPosition); + NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, size.x, size.y), PawnForNeeds, ref thoughtScrollPosition); } protected override void UpdateSize() { - this.size = NeedsCardUtility.GetSize(PawnForNeeds); + size = NeedsCardUtility.GetSize(PawnForNeeds); } } } diff --git a/Source/Vampires/Need_Blood.cs b/Source/Vampires/Need_Blood.cs index 30cbe4a..5600b76 100644 --- a/Source/Vampires/Need_Blood.cs +++ b/Source/Vampires/Need_Blood.cs @@ -3,8 +3,6 @@ using UnityEngine; using Verse; using RimWorld; -using Verse.Sound; -using Verse.AI; using System.Linq; namespace Vampire @@ -41,13 +39,13 @@ public class Need_Blood : Need #endregion Variables #region Properties - public CompVampire CompVampire => this.pawn?.TryGetComp(); - public bool IsAnimal => this.pawn?.RaceProps?.Animal ?? false; - public bool IsFull => this.CurBloodPoints == this.MaxBloodPoints; - public bool Starving => CompVampire != null && CompVampire.IsVampire && this.CurCategory == HungerCategory.Starving; + public CompVampire CompVampire => pawn?.TryGetComp(); + public bool IsAnimal => pawn?.RaceProps?.Animal ?? false; + public bool IsFull => CurBloodPoints == MaxBloodPoints; + public bool Starving => CompVampire != null && CompVampire.IsVampire && CurCategory == HungerCategory.Starving; public bool ShouldDie => CurBloodPoints == 0; public float PercPerPoint => 1f / MaxBloodPoints; - public bool DrainingIsDeadly => this.CurBloodPoints <= 2 || (this.pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); + public bool DrainingIsDeadly => CurBloodPoints <= 2 || pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2; //public PreferredFeedMode PreferredFeedMode { get => preferredFeedMode; set => preferredFeedMode = value; } @@ -76,7 +74,7 @@ public int CurBloodPoints public int MaxBloodPointsForAnimal(Pawn p) { PawnKindDef def = p.kindDef; - int result = (def.RaceProps.baseBodySize < 1f) ? 1 : 2; + int result = def.RaceProps.baseBodySize < 1f ? 1 : 2; if (def == PawnKindDef.Named("Rat")) return 1; if (def == PawnKindDefOf.Thrumbo) return 10; return result; @@ -89,12 +87,12 @@ public int MaxBloodPoints int result = 7; if (IsAnimal) { - result = MaxBloodPointsForAnimal(this.pawn); + result = MaxBloodPointsForAnimal(pawn); } if (CompVampire != null && CompVampire.IsVampire) { int gen = CompVampire.Generation; - result = (gen > 7) ? 10 + (Math.Abs(gen - 13)) : 10 * (Math.Abs(gen - 9)); + result = gen > 7 ? 10 + Math.Abs(gen - 13) : 10 * Math.Abs(gen - 9); } return result; } @@ -120,13 +118,13 @@ public HungerCategory CurCategory { if (CompVampire != null && CompVampire.IsVampire) { - if (base.CurLevelPercentage <= 0f) + if (CurLevelPercentage <= 0f) return HungerCategory.Starving; - if (base.CurLevelPercentage < PercPerPoint * 2) + if (CurLevelPercentage < PercPerPoint * 2) return HungerCategory.UrgentlyHungry; - if (base.CurLevelPercentage < MaxLevel) + if (CurLevelPercentage < MaxLevel) return HungerCategory.Hungry; } return HungerCategory.Fed; @@ -135,7 +133,7 @@ public HungerCategory CurCategory #endregion Properties public override int GUIChangeArrow - => (CompVampire != null && CompVampire.IsVampire)? -1 : (CurLevel == MaxLevel) ? 0 : 1; + => CompVampire != null && CompVampire.IsVampire? -1 : CurLevel == MaxLevel ? 0 : 1; public override float CurInstantLevel => base.CurInstantLevel; public override float CurLevel { @@ -148,9 +146,9 @@ public override float CurLevel public override float MaxLevel => MaxBloodPoints; public float BloodWanted - => this.MaxBloodPoints - this.CurBloodPoints; + => MaxBloodPoints - CurBloodPoints; - public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - this.lastNonStarvingTick); + public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - lastNonStarvingTick); public Need_Blood(Pawn pawn) : base(pawn) { } @@ -159,12 +157,12 @@ public override void ExposeData() //private int curBloodPoints = Int32.MinValue; //private int nextBloodChangeTick = Int32.MaxValue; base.ExposeData(); - Scribe_Values.Look(ref this.lastNonStarvingTick, "lastNonStarvingTick", -1, false); - Scribe_Values.Look(ref this.nextBloodChangeTick, "nextBloodChangeTick", -1, false); - Scribe_Values.Look(ref this.curBloodPoints, "curBloodPoints", -1, false); - Scribe_Values.Look(ref this.bloodFixer, "bloodFixer", false); - Scribe_Values.Look(ref this.preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); - Scribe_Values.Look(ref this.preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); + Scribe_Values.Look(ref lastNonStarvingTick, "lastNonStarvingTick", -1); + Scribe_Values.Look(ref nextBloodChangeTick, "nextBloodChangeTick", -1); + Scribe_Values.Look(ref curBloodPoints, "curBloodPoints", -1); + Scribe_Values.Look(ref bloodFixer, "bloodFixer"); + Scribe_Values.Look(ref preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); + Scribe_Values.Look(ref preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); } public int AdjustBlood(int amt, bool alert = true) @@ -174,10 +172,10 @@ public int AdjustBlood(int amt, bool alert = true) CurBloodPoints = Mathf.Clamp(CurBloodPoints + amt, 0, MaxBloodPoints); CurLevelPercentage = CurBloodPoints * PercPerPoint; - if (!this.pawn.IsVampire() && CurBloodPoints < prevBloodPoints) + if (!pawn.IsVampire() && CurBloodPoints < prevBloodPoints) { int diff = prevBloodPoints - CurBloodPoints; - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); } if (CurBloodPoints == 0) @@ -188,22 +186,22 @@ public int AdjustBlood(int amt, bool alert = true) public void Notify_NoBloodLeft(bool alert = true) { - if (this.pawn.Faction == Faction.OfPlayer) + if (pawn.Faction == Faction.OfPlayer) { if (alert) { - if (this.pawn.IsVampire()) - Messages.Message("ROMV_BloodDepletedVamp".Translate(this.pawn.LabelCap), MessageTypeDefOf.NeutralEvent); + if (pawn.IsVampire()) + Messages.Message("ROMV_BloodDepletedVamp".Translate(pawn.LabelCap), MessageTypeDefOf.NeutralEvent); else - Messages.Message("ROMV_BloodDepleted".Translate(this.pawn.LabelCap), MessageTypeDefOf.NegativeEvent); + Messages.Message("ROMV_BloodDepleted".Translate(pawn.LabelCap), MessageTypeDefOf.NegativeEvent); } } - if (!this.pawn.IsVampire()) + if (!pawn.IsVampire()) { - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 999f); - if (!this.pawn.Dead) this.pawn.Kill(null); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 999f); + if (!pawn.Dead) pawn.Kill(null); } } @@ -221,7 +219,7 @@ public override void NeedInterval() if (!bloodFixer) { bloodFixer = true; - this.nextBloodChangeTick = -1; + nextBloodChangeTick = -1; } //if ((pawn?.IsVampire() ?? false) && pawn.RaceProps != null && pawn.RaceProps.Humanlike && pawn.Faction != null && pawn.Faction == Faction.OfPlayer && @@ -247,23 +245,23 @@ public override void NeedInterval() //if (Find.TickManager.TicksGame % 250 == 0) //Log.Message("Ticks => " + Find.TickManager.TicksGame); - if (Find.TickManager.TicksGame > this.nextBloodChangeTick) + if (Find.TickManager.TicksGame > nextBloodChangeTick) { int math = Find.TickManager.TicksGame + GenDate.TicksPerDay; //Log.Message("BLOOD TICKS SET TO => " + math); - this.nextBloodChangeTick = math; + nextBloodChangeTick = math; AdjustBlood(BloodChangePerDay); } - if (!this.Starving) + if (!Starving) { - this.lastNonStarvingTick = Find.TickManager.TicksGame; + lastNonStarvingTick = Find.TickManager.TicksGame; } - if (!base.IsFrozen) + if (!IsFrozen) { - if (this.Starving) + if (Starving) { if (CompVampire != null && CompVampire.IsVampire) @@ -271,11 +269,11 @@ public override void NeedInterval() CompVampire.Notify_Starving(lastNonStarvingTick); } - else if (!this.pawn.Dead) + else if (!pawn.Dead) { - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 1f); - this.pawn.Kill(null); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 1f); + pawn.Kill(null); } } } @@ -284,10 +282,10 @@ public override void NeedInterval() public override void SetInitialLevel() { //base.CurLevelPercentage = 1.0f; - this.CurLevel = this.CurBloodPoints = this.MaxBloodPoints; + CurLevel = CurBloodPoints = MaxBloodPoints; if (Current.ProgramState == ProgramState.Playing) { - this.lastNonStarvingTick = Find.TickManager.TicksGame; + lastNonStarvingTick = Find.TickManager.TicksGame; } } @@ -295,23 +293,23 @@ public override string GetTipString() { return string.Concat(new string[] { - this.GetLabel(), + GetLabel(), ": ", - base.CurLevelPercentage.ToStringPercent(), + CurLevelPercentage.ToStringPercent(), " (", - this.CurLevel.ToString("0.##"), + CurLevel.ToString("0.##"), " / ", - this.MaxLevel.ToString("0.##"), + MaxLevel.ToString("0.##"), ")\n", - this.GetDescription() + GetDescription() }); } public string GetLabel() { - bool isVampire = this.pawn.IsVampire(); + bool isVampire = pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (this.pawn.IsAndroid()) + if (pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitae".Translate(); @@ -320,14 +318,14 @@ public string GetLabel() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_Vitae".Translate(); - return this.LabelCap; + return LabelCap; } public string GetDescription() { - bool isVampire = this.pawn.IsVampire(); + bool isVampire = pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (this.pawn.IsAndroid()) + if (pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitaeDesc".Translate(); @@ -336,13 +334,13 @@ public string GetDescription() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_VitaeDesc".Translate(); - return this.def.description; + return def.description; } public Color GetColorToUse() { - bool isVampire = this.pawn.IsVampire(); - if (this.pawn.IsAndroid()) + bool isVampire = pawn.IsVampire(); + if (pawn.IsAndroid()) { if (isVampire) return VampireUtility.ColorAndroidCoolantVitae; @@ -357,14 +355,14 @@ public Color GetColorToUse() public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, float customMargin = -1f, bool drawArrows = true, bool doTooltip = true) { - if (this.threshPercents == null) + if (threshPercents == null) { - this.threshPercents = new List(); + threshPercents = new List(); } - this.threshPercents.Clear(); + threshPercents.Clear(); for (int i = 1; i < MaxBloodPoints; i++) { - this.threshPercents.Add(PercPerPoint * i); + threshPercents.Add(PercPerPoint * i); } if (rect.height > 70f) { @@ -378,7 +376,7 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, } if (doTooltip) { - TooltipHandler.TipRegion(rect, new TipSignal(() => this.GetTipString(), rect.GetHashCode())); + TooltipHandler.TipRegion(rect, new TipSignal(() => GetTipString(), rect.GetHashCode())); } if (pawn != null && pawn.Faction == Faction.OfPlayerSilentFail && pawn.VampComp() is CompVampire v && v.IsVampire) @@ -388,40 +386,40 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, } float num2 = 14f; - float num3 = (customMargin < 0f) ? (num2 + 15f) : customMargin; + float num3 = customMargin < 0f ? num2 + 15f : customMargin; if (rect.height < 50f) { num2 *= Mathf.InverseLerp(0f, 50f, rect.height); } - Text.Font = ((rect.height <= 55f) ? GameFont.Tiny : GameFont.Small); + Text.Font = rect.height <= 55f ? GameFont.Tiny : GameFont.Small; Text.Anchor = TextAnchor.LowerLeft; Rect rect2 = new Rect(rect.x + num3 + rect.width * 0.1f, rect.y, rect.width - num3 - rect.width * 0.1f, rect.height / 2f); - Widgets.Label(rect2, this.GetLabel()); + Widgets.Label(rect2, GetLabel()); Text.Anchor = TextAnchor.UpperLeft; Rect rect3 = new Rect(rect.x, rect.y + rect.height / 2f, rect.width, rect.height / 2f); rect3 = new Rect(rect3.x + num3, rect3.y, rect3.width - num3 * 2f, rect3.height - num2); Color colorToUse = GetColorToUse(); //(this.pawn?.IsVampire() ?? false) ? new Color(0.65f, 0.008f, 0.008f) : new Color(0.73f, 0.02f, 0.02f); - Widgets.FillableBar(rect3, this.CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); + Widgets.FillableBar(rect3, CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); //Widgets.FillableBar(rect3, this.CurLevelPercentage); if (drawArrows) { - Widgets.FillableBarChangeArrows(rect3, this.GUIChangeArrow); + Widgets.FillableBarChangeArrows(rect3, GUIChangeArrow); } - if (this.threshPercents != null) + if (threshPercents != null) { - for (int i = 0; i < Mathf.Min(this.threshPercents.Count, maxThresholdMarkers); i++) + for (int i = 0; i < Mathf.Min(threshPercents.Count, maxThresholdMarkers); i++) { - this.DrawBarThreshold(rect3, this.threshPercents[i]); + DrawBarThreshold(rect3, threshPercents[i]); } } - float curInstantLevelPercentage = this.CurInstantLevelPercentage; + float curInstantLevelPercentage = CurInstantLevelPercentage; if (curInstantLevelPercentage >= 0f) { - this.DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); + DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); } - if (!this.def.tutorHighlightTag.NullOrEmpty()) + if (!def.tutorHighlightTag.NullOrEmpty()) { - UIHighlighter.HighlightOpportunity(rect, this.def.tutorHighlightTag); + UIHighlighter.HighlightOpportunity(rect, def.tutorHighlightTag); } Text.Font = GameFont.Small; } @@ -429,10 +427,10 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, // RimWorld.Need private void DrawBarThreshold(Rect barRect, float threshPct) { - float num = (float)((barRect.width <= 60f) ? 1 : 2); + float num = (float)(barRect.width <= 60f ? 1 : 2); Rect position = new Rect(barRect.x + barRect.width * threshPct - (num - 1f), barRect.y + barRect.height / 2f, num, barRect.height / 2f); Texture2D image; - if (threshPct < this.CurLevelPercentage) + if (threshPct < CurLevelPercentage) { image = BaseContent.BlackTex; GUI.color = new Color(1f, 1f, 1f, 0.9f); diff --git a/Source/Vampires/PatchOperationModLoaded.cs b/Source/Vampires/PatchOperationModLoaded.cs new file mode 100644 index 0000000..44da493 --- /dev/null +++ b/Source/Vampires/PatchOperationModLoaded.cs @@ -0,0 +1,16 @@ +using System.Linq; +using System.Xml; +using Verse; + +namespace Vampire +{ + public class PatchOperationModLoaded : PatchOperation + { + private string modName; + + protected override bool ApplyWorker(XmlDocument xml) + { + return !modName.NullOrEmpty() && ModsConfig.ActiveModsInLoadOrder.Any(mod => mod.Name == modName); + } + } +} \ No newline at end of file diff --git a/Source/Vampires/Properties/AssemblyInfo.cs b/Source/Vampires/Properties/AssemblyInfo.cs index 141014a..6e3d0b7 100644 --- a/Source/Vampires/Properties/AssemblyInfo.cs +++ b/Source/Vampires/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/Source/Vampires/ScenPart_LongerNights.cs b/Source/Vampires/ScenPart_LongerNights.cs index 6356696..8f2e22e 100644 --- a/Source/Vampires/ScenPart_LongerNights.cs +++ b/Source/Vampires/ScenPart_LongerNights.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; +using UnityEngine; using Verse; using RimWorld; -using System.Collections; -using Harmony; namespace Vampire { @@ -15,7 +10,7 @@ public class ScenPart_LongerNights : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 2 + 31f); + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 2 + 31f); DoVampModifierEditInterface(new Rect(scenPartRect.x, scenPartRect.y, scenPartRect.width, 31f)); } @@ -30,14 +25,14 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_NightLength".Translate().CapitalizeFirst()); Text.Anchor = TextAnchor.UpperLeft; - this.nightsLength = Widgets.HorizontalSlider(rect4, this.nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); + nightsLength = Widgets.HorizontalSlider(rect4, nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.nightsLength, "nightsLength", 0.1f); + Scribe_Values.Look(ref nightsLength, "nightsLength", 0.1f); } public override string Summary(Scenario scen) @@ -47,13 +42,13 @@ public override string Summary(Scenario scen) public string GetLongerNightsSummary() { - return (this?.nightsLength == 1.0f) ? "ROMV_EternalDarkness".Translate() : "ROMV_NightLengthBy".Translate(nightsLength.ToStringPercent()); + return this?.nightsLength == 1.0f ? "ROMV_EternalDarkness".Translate() : "ROMV_NightLengthBy".Translate(nightsLength.ToStringPercent()); } public override void Randomize() { base.Randomize(); - this.nightsLength = Rand.Range(0.1f, 1.0f); + nightsLength = Rand.Range(0.1f, 1.0f); } } } diff --git a/Source/Vampires/ScenPart_StartingVampires.cs b/Source/Vampires/ScenPart_StartingVampires.cs index eb84003..a557498 100644 --- a/Source/Vampires/ScenPart_StartingVampires.cs +++ b/Source/Vampires/ScenPart_StartingVampires.cs @@ -1,10 +1,8 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using UnityEngine; using Verse; using RimWorld; -using System.Collections; using Harmony; namespace Vampire @@ -24,12 +22,12 @@ public class ScenPart_StartingVampires : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f + 31f); - if (Widgets.ButtonText(scenPartRect.TopPartPixels(ScenPart.RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate(), true, false, true)) + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f + 31f); + if (Widgets.ButtonText(scenPartRect.TopPartPixels(RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate())) { - FloatMenuUtility.MakeMenu(this.PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate + FloatMenuUtility.MakeMenu(PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate { - this.bloodline = bl; + bloodline = bl; }); } //Widgets.IntRange(new Rect(scenPartRect.x, scenPartRect.y + ScenPart.RowHeight, scenPartRect.width, 31f), listing.CurHeight.GetHashCode(), ref this.generationRange, 4, this.maxGeneration, "ROMV_VampireGeneration"); @@ -39,7 +37,7 @@ public override void DoEditInterface(Listing_ScenEdit listing) // RimWorld.ScenPart_PawnModifier protected void DoVampModifierEditInterface(Rect rect) { - Rect rect2 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 2, rect.width, 31); + Rect rect2 = new Rect(rect.x, rect.y + RowHeight * 2, rect.width, 31); Rect rect3 = rect2.LeftPart(0.333f).Rounded(); Rect rect4 = rect2.RightPart(0.666f).Rounded(); @@ -47,9 +45,9 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_Chance".Translate()); Text.Anchor = TextAnchor.UpperLeft; - this.vampChance = Widgets.HorizontalSlider(rect4, this.vampChance, 0f, 1f, false, "", "", ""); + vampChance = Widgets.HorizontalSlider(rect4, vampChance, 0f, 1f, false, "", "", ""); //Widgets.TextFieldNumeric(rect4, ref this, ref this.numOfVampsBuffer, 1, 50); - Rect rect5 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 3, rect.width, 31); + Rect rect5 = new Rect(rect.x, rect.y + RowHeight * 3, rect.width, 31); Rect rect6 = rect5.LeftPart(0.333f).Rounded(); Rect rect7 = rect5.RightPart(0.666f).Rounded(); @@ -57,15 +55,15 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect6, "ROMV_StartInCoffins".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.CheckboxLabeled(rect7, "", ref this.spawnInCoffins, false); - Rect rect8 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 4, rect.width, 31); + Widgets.CheckboxLabeled(rect7, "", ref spawnInCoffins); + Rect rect8 = new Rect(rect.x, rect.y + RowHeight * 4, rect.width, 31); Rect rect9 = rect8.LeftPart(0.666f).Rounded(); Rect rect10 = rect8.RightPart(0.333f).Rounded(); Text.Anchor = TextAnchor.MiddleRight; Widgets.Label(rect9, "ROMV_MaxVampires".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.TextFieldNumeric(rect10, ref this.maxVampires, ref this.maxVampiresBuf, 1, 100); + Widgets.TextFieldNumeric(rect10, ref maxVampires, ref maxVampiresBuf, 1, 100); } @@ -85,11 +83,11 @@ public override void ExposeData() //private IntRange generationRange = new IntRange(10, 13); //private int maxGeneration = 15; //private bool spawnInCoffins = false; - Scribe_Defs.Look(ref this.bloodline, "bloodline"); - Scribe_Values.Look(ref this.generationRange, "generationRange", default(IntRange), false); - Scribe_Values.Look(ref this.vampChance, "vampChance", 0.5f); - Scribe_Values.Look(ref this.maxVampires, "maxVampires", 1); - Scribe_Values.Look(ref this.spawnInCoffins, "spawnInCoffins", false); + Scribe_Defs.Look(ref bloodline, "bloodline"); + Scribe_Values.Look(ref generationRange, "generationRange"); + Scribe_Values.Look(ref vampChance, "vampChance", 0.5f); + Scribe_Values.Look(ref maxVampires, "maxVampires", 1); + Scribe_Values.Look(ref spawnInCoffins, "spawnInCoffins"); } public override string Summary(Scenario scen) @@ -105,7 +103,7 @@ public override string Summary(Scenario scen) public string GetChanceOrMax() { - return (this?.vampChance == 1.0f) ? maxVampires.ToString() : "ROMV_ChanceOf".Translate(vampChance.ToStringPercent()); + return this?.vampChance == 1.0f ? maxVampires.ToString() : "ROMV_ChanceOf".Translate(vampChance.ToStringPercent()); } public string GetInCoffinsString() @@ -115,17 +113,17 @@ public string GetInCoffinsString() public string GenRangeToString() { - return (HediffVampirism.AddOrdinal(this?.generationRange.min ?? 10) + "-" + HediffVampirism.AddOrdinal(this?.generationRange.max ?? 15)) ?? ""; + return HediffVampirism.AddOrdinal(this?.generationRange.min ?? 10) + "-" + HediffVampirism.AddOrdinal(this?.generationRange.max ?? 15) ?? ""; } public override void Randomize() { base.Randomize(); - this.vampChance = Rand.Range(0.2f, 0.8f); - this.bloodline = this.PossibleBloodlines().RandomElement(); - this.generationRange.max = Rand.Range(10, 15); - this.generationRange.min = Rand.Range(8, this.generationRange.max); - this.spawnInCoffins = (Rand.Value > 0.3) ? true : false; + vampChance = Rand.Range(0.2f, 0.8f); + bloodline = PossibleBloodlines().RandomElement(); + generationRange.max = Rand.Range(10, 15); + generationRange.min = Rand.Range(8, generationRange.max); + spawnInCoffins = Rand.Value > 0.3 ? true : false; } public override void PostMapGenerate(Map map) @@ -136,7 +134,7 @@ public override void PostMapGenerate(Map map) } if (spawnInCoffins) { - bool usingDropPods = Find.Scenario.AllParts.Any(x => x is ScenPart_PlayerPawnsArriveMethod s && ((PlayerPawnsArriveMethod)AccessTools.Field(typeof(ScenPart_PlayerPawnsArriveMethod), "method").GetValue(s)) == PlayerPawnsArriveMethod.DropPods); + bool usingDropPods = Find.Scenario.AllParts.Any(x => x is ScenPart_PlayerPawnsArriveMethod s && (PlayerPawnsArriveMethod)AccessTools.Field(typeof(ScenPart_PlayerPawnsArriveMethod), "method").GetValue(s) == PlayerPawnsArriveMethod.DropPods); List> list = new List>(); foreach (Pawn current in Find.GameInitData.startingPawns) { @@ -155,7 +153,7 @@ public override void PostMapGenerate(Map map) bool instaDrop = Find.GameInitData.QuickStarted; if (usingDropPods) { - DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true, true); + DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true); } } } @@ -164,8 +162,8 @@ public override void Notify_PawnGenerated(Pawn pawn, PawnGenerationContext conte { if (Find.VisibleMap == null) { - curVampires = Find.GameInitData.startingPawns.FindAll(x => x?.health?.hediffSet?.hediffs.FirstOrDefault(y => y.def.defName.Contains("Vampirism")) != null)?.Count() ?? 0; - BloodlineDef def = (randomBloodline) ? PossibleBloodlines().RandomElement() : bloodline; + curVampires = Find.GameInitData.startingPawns.FindAll(x => x?.health?.hediffSet?.hediffs.FirstOrDefault(y => y.def.defName.Contains("Vampirism")) != null)?.Count ?? 0; + BloodlineDef def = randomBloodline ? PossibleBloodlines().RandomElement() : bloodline; if (pawn.RaceProps.Humanlike && context == PawnGenerationContext.PlayerStarter) { if (!pawn?.story?.WorkTagIsDisabled(WorkTags.Violent) ?? false) diff --git a/Source/Vampires/SkillSheet.cs b/Source/Vampires/SkillSheet.cs index 8cf903b..86a6d42 100644 --- a/Source/Vampires/SkillSheet.cs +++ b/Source/Vampires/SkillSheet.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Collections.Generic; using Verse; namespace Vampire @@ -13,7 +9,9 @@ public class SkillSheet : IExposable private Pawn pawn; private List disciplines; - public Pawn Pawn { get { return pawn; } set { pawn = value; } } + public Pawn Pawn { get => pawn; + set => pawn = value; + } public List Disciplines => disciplines; public void InitializeDisciplines() @@ -49,8 +47,8 @@ public SkillSheet(Pawn pawn) public void ExposeData() { - Scribe_References.Look(ref this.pawn, "pawn"); - Scribe_Collections.Look(ref this.disciplines, true, "disciplines", LookMode.Deep, new object[0]); + Scribe_References.Look(ref pawn, "pawn"); + Scribe_Collections.Look(ref disciplines, true, "disciplines", LookMode.Deep, new object[0]); } } } diff --git a/Source/Vampires/UI/Alert_VampireInSunlight.cs b/Source/Vampires/UI/Alert_VampireInSunlight.cs index 6e63fd2..15288ab 100644 --- a/Source/Vampires/UI/Alert_VampireInSunlight.cs +++ b/Source/Vampires/UI/Alert_VampireInSunlight.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; using Verse; @@ -33,14 +32,14 @@ private IEnumerable VampiresInTheSun public Alert_VampireInSunlight() { - this.defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); - this.defaultPriority = AlertPriority.Critical; + defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); + defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in this.VampiresInTheSun) + foreach (Pawn current in VampiresInTheSun) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -53,7 +52,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = this.VampiresInTheSun.FirstOrDefault(); + Pawn pawn = VampiresInTheSun.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/UI/Alert_VampireStarving.cs b/Source/Vampires/UI/Alert_VampireStarving.cs index 228d6d3..59636aa 100644 --- a/Source/Vampires/UI/Alert_VampireStarving.cs +++ b/Source/Vampires/UI/Alert_VampireStarving.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; using Verse; @@ -33,14 +32,14 @@ private IEnumerable VampiresStarving public Alert_VampireStarving() { - this.defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); - this.defaultPriority = AlertPriority.Critical; + defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); + defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in this.VampiresStarving) + foreach (Pawn current in VampiresStarving) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -53,7 +52,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = this.VampiresStarving.FirstOrDefault(); + Pawn pawn = VampiresStarving.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/UI/VampireCardUtility.cs b/Source/Vampires/UI/VampireCardUtility.cs index 30ed212..0ecd9df 100644 --- a/Source/Vampires/UI/VampireCardUtility.cs +++ b/Source/Vampires/UI/VampireCardUtility.cs @@ -1,9 +1,6 @@ -using Harmony; -using RimWorld; -using System; +using RimWorld; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; @@ -140,7 +137,7 @@ public static void DrawVampCard(Rect rect, Pawn pawn) // float powersTextSize = Text.CalcSize("ROMV_Disciplines".Translate()).x; - Rect rectPowersLabel = new Rect((rect.width / 2) - (powersTextSize / 2), rectSkills.yMax + SectionOffset - 5, rect.width, HeaderSize); + Rect rectPowersLabel = new Rect(rect.width / 2 - powersTextSize / 2, rectSkills.yMax + SectionOffset - 5, rect.width, HeaderSize); Text.Font = GameFont.Medium; Widgets.Label(rectPowersLabel, "ROMV_Disciplines".Translate().CapitalizeFirst()); Text.Font = GameFont.Small; @@ -164,7 +161,7 @@ public static void DrawVampCard(Rect rect, Pawn pawn) { Rect rectDisciplines = new Rect(rect.x + ButtonSize, curY, rectPowersLabel.width, ButtonSize + Padding); PowersGUIHandler(rectDisciplines, compVampire, compVampire.Sheet.Disciplines[i]); - curY += ButtonSize + (Padding * 2) + (TextSize * 2); + curY += ButtonSize + Padding * 2 + TextSize * 2; } } GUI.EndGroup(); @@ -181,14 +178,14 @@ public static void LevelPane(Rect inRect, CompVampire compVampire) if (DebugSettings.godMode) { Rect rectDebugPlus = new Rect(rectLevel.xMax, inRect.y, inRect.width * 0.3f, TextSize); - if (Widgets.ButtonText(rectDebugPlus, "+", true, false, true)) + if (Widgets.ButtonText(rectDebugPlus, "+")) { compVampire.Notify_LevelUp(false); } if (compVampire.Level > 0) { Rect rectDebugReset = new Rect(rectDebugPlus.x, rectDebugPlus.yMax + 1, rectDebugPlus.width, TextSize); - if (Widgets.ButtonText(rectDebugReset, "~", true, false, true)) + if (Widgets.ButtonText(rectDebugReset, "~")) { compVampire.Notify_ResetAbilities(); } @@ -277,7 +274,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip Widgets.DrawTextureFitted(buttonRect, ability.uiIcon, 1.0f); } - else if (Widgets.ButtonImage(buttonRect, ability.uiIcon) && (compVampire.AbilityUser.Faction == Faction.OfPlayer)) + else if (Widgets.ButtonImage(buttonRect, ability.uiIcon) && compVampire.AbilityUser.Faction == Faction.OfPlayer) { //if (compVampire.AbilityPoints < ability.abilityCost) @@ -289,7 +286,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip // }), MessageTypeDefOf.RejectInput); // return; //} - if (compVampire.AbilityUser.story != null && (compVampire.AbilityUser.story.WorkTagIsDisabled(WorkTags.Violent) && ability.MainVerb.isViolent)) + if (compVampire.AbilityUser.story != null && compVampire.AbilityUser.story.WorkTagIsDisabled(WorkTags.Violent) && ability.MainVerb.isViolent) { Messages.Message("IsIncapableOfViolenceLower".Translate(new object[] { @@ -311,7 +308,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip case 2: modifier = 0.72f; break; case 3: modifier = 0.60f; break; } - if (count != 0) drawXOffset -= ((VampButtonPointSize * count) * modifier); + if (count != 0) drawXOffset -= VampButtonPointSize * count * modifier; else drawXOffset -= 2; for (int j = 0; j < count + 1; j++) @@ -319,7 +316,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip ++pntCount; float drawYOffset = VampButtonSize + TextSize + Padding; - Rect powerRegion = new Rect(inRect.x + drawXOffset + (VampButtonPointSize * j), inRect.y + drawYOffset, VampButtonPointSize, VampButtonPointSize); + Rect powerRegion = new Rect(inRect.x + drawXOffset + VampButtonPointSize * j, inRect.y + drawYOffset, VampButtonPointSize, VampButtonPointSize); if (discipline.Points >= pntCount) { Widgets.DrawTextureFitted(powerRegion, TexButton.ROMV_PointFull, 1.0f); @@ -332,7 +329,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip TooltipHandler.TipRegion(powerRegion, () => ability.GetDescription() + "\n" + compVampire.PostAbilityVerbCompDesc(ability.MainVerb), 398462); } ++count; - buttonXOffset += (ButtonSize * 3f) + Padding; + buttonXOffset += ButtonSize * 3f + Padding; } } } diff --git a/Source/Vampires/Utilities/BloodFeedModeUtility.cs b/Source/Vampires/Utilities/BloodFeedModeUtility.cs index 4d76281..67806ac 100644 --- a/Source/Vampires/Utilities/BloodFeedModeUtility.cs +++ b/Source/Vampires/Utilities/BloodFeedModeUtility.cs @@ -1,8 +1,5 @@ using RimWorld; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using Verse; using Verse.Sound; @@ -29,8 +26,8 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) if (Widgets.ButtonImage(rect, icon)) { - vampBlood.preferredFeedMode = BloodFeedModeUtility.GetNextResponse(pawn); - SoundDefOf.TickHigh.PlayOneShotOnCamera(null); + vampBlood.preferredFeedMode = GetNextResponse(pawn); + SoundDefOf.TickHigh.PlayOneShotOnCamera(); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.HostilityResponse, KnowledgeAmount.SpecificInteraction); } UIHighlighter.HighlightOpportunity(rect, "ROMV_FeedMode"); @@ -44,7 +41,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) })); if (vampBlood.preferredFeedMode > PreferredFeedMode.AnimalLethal) { - Texture2D iconSub = (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All) ? HumanoidTypeAll : HumanoidTypePrisonersOnly; + Texture2D iconSub = vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All ? HumanoidTypeAll : HumanoidTypePrisonersOnly; Rect rectSub = new Rect(pos.x, rect.yMax + 5f, 24f, 24f); if (Widgets.ButtonImage(rectSub, iconSub)) @@ -53,14 +50,14 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.PrisonersOnly; else if (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.All; - SoundDefOf.TickHigh.PlayOneShotOnCamera(null); + SoundDefOf.TickHigh.PlayOneShotOnCamera(); } UIHighlighter.HighlightOpportunity(rectSub, "ROMV_FeedModeHumanoidType"); TooltipHandler.TipRegion(rectSub, string.Concat(new string[] { "ROMV_FeedMode_CurrentType".Translate(), ": ", - (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All) ? "ROMV_FeedMode_TypeAll".Translate() : "ROMV_FeedMode_TypePrisonersOnly".Translate() + vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All ? "ROMV_FeedMode_TypeAll".Translate() : "ROMV_FeedMode_TypePrisonersOnly".Translate() })); } } @@ -120,15 +117,15 @@ public static Texture2D GetIcon(this PreferredFeedMode response) switch (response) { case PreferredFeedMode.None: - return BloodFeedModeUtility.NoneIcon; + return NoneIcon; case PreferredFeedMode.AnimalNonLethal: - return BloodFeedModeUtility.AnimalNonLethalIcon; + return AnimalNonLethalIcon; case PreferredFeedMode.AnimalLethal: - return BloodFeedModeUtility.AnimalLethalIcon; + return AnimalLethalIcon; case PreferredFeedMode.HumanoidNonLethal: - return BloodFeedModeUtility.HumanoidNonLethalIcon; + return HumanoidNonLethalIcon; case PreferredFeedMode.HumanoidLethal: - return BloodFeedModeUtility.HumanoidLethalIcon; + return HumanoidLethalIcon; default: return BaseContent.BadTex; } diff --git a/Source/Vampires/Utilities/BloodItemUtility.cs b/Source/Vampires/Utilities/BloodItemUtility.cs index 30d7e5d..cb78f8a 100644 --- a/Source/Vampires/Utilities/BloodItemUtility.cs +++ b/Source/Vampires/Utilities/BloodItemUtility.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Utilities/BloodPreferabilty.cs b/Source/Vampires/Utilities/BloodPreferabilty.cs index 314a428..501e1b2 100644 --- a/Source/Vampires/Utilities/BloodPreferabilty.cs +++ b/Source/Vampires/Utilities/BloodPreferabilty.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public enum BloodPreferabilty : int { diff --git a/Source/Vampires/Utilities/BloodTypeUtility.cs b/Source/Vampires/Utilities/BloodTypeUtility.cs index 8926cbf..0d7c48e 100644 --- a/Source/Vampires/Utilities/BloodTypeUtility.cs +++ b/Source/Vampires/Utilities/BloodTypeUtility.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; using RimWorld; namespace Vampire @@ -19,10 +15,10 @@ public static BloodType BloodType(Pawn pawn) } if (pawn?.RaceProps?.Humanlike ?? false) { - bool lowBlood = (BloodTypeUtility.IsLowblood(pawn)); - bool highBlood = (BloodTypeUtility.IsHighblood(pawn)); + bool lowBlood = IsLowblood(pawn); + bool highBlood = IsHighblood(pawn); - if (BloodTypeUtility.IsHighblood(pawn) && BloodTypeUtility.IsLowblood(pawn)) + if (IsHighblood(pawn) && IsLowblood(pawn)) return Vampire.BloodType.AverageBlood; if (highBlood) return Vampire.BloodType.HighBlood; diff --git a/Source/Vampires/Utilities/BloodUtility.cs b/Source/Vampires/Utilities/BloodUtility.cs index 0d091a9..bdb5de7 100644 --- a/Source/Vampires/Utilities/BloodUtility.cs +++ b/Source/Vampires/Utilities/BloodUtility.cs @@ -1,8 +1,6 @@ using RimWorld; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using Verse; using Verse.AI; @@ -20,7 +18,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (canUseInventory) { if (flag) - thing = BloodUtility.BestBloodInInventory(getter, null, 0); + thing = BestBloodInInventory(getter, null, 0); if (thing != null) { if (getter.Faction != Faction.OfPlayer) @@ -38,12 +36,12 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe } } } - Thing thing2 = BloodUtility.BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); + Thing thing2 = BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); if (thing == null && thing2 == null) { if (canUseInventory && flag) { - thing = BloodUtility.BestBloodInInventory(getter, null, 0); + thing = BestBloodInInventory(getter, null, 0); if (thing != null) { bloodSource = thing; @@ -54,7 +52,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (thing2 == null && getter == eater) { - Pawn pawn = BloodUtility.BestPawnToHuntForVampire(getter); + Pawn pawn = BestPawnToHuntForVampire(getter); if (pawn != null) { bloodSource = pawn; @@ -149,7 +147,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate { return false; } - if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t, 1, -1, null, false)) + if (t.IsBurning() || !desperate && t.IsNotFresh() || !getter.CanReserve(t)) { return false; } @@ -159,7 +157,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate }; Thing thing; Predicate validator = foodValidator; - thing = BloodUtility.SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator); + thing = SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter), 9999f, validator); return thing; } @@ -224,16 +222,16 @@ private static Pawn BestPawnToHuntForVampire(Pawn predator, bool desperate = fal //{ if (predator != pawn2) { - if (BloodUtility.IsAcceptableVictimFor(predator, pawn2, desperate)) + if (IsAcceptableVictimFor(predator, pawn2, desperate)) { - if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) + if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) { //if (!pawn2.IsForbidden(predator)) //{ if (!tutorialMode || pawn2.Faction != Faction.OfPlayer) { //Log.Message("Potential Prey: " + pawn2.Label); - float preyScoreFor = BloodUtility.GetPreyScoreFor(predator, pawn2); + float preyScoreFor = GetPreyScoreFor(predator, pawn2); //Log.Message("Potential Prey Score: " + preyScoreFor); if (preyScoreFor > num || pawn == null) @@ -381,7 +379,7 @@ public static bool IsAcceptableVictimFor(Pawn vampire, Pawn victim, bool despera } if ((victim.IsPrisoner || victim.IsPrisonerOfColony) && - (eaterBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly)) + eaterBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly) return true; @@ -423,7 +421,7 @@ public static Need_Blood BloodNeed(this Pawn pawn) // RimWorld.FoodUtility public static int WillConsumeStackCountOf(Pawn ingester, ThingDef def) { - int num = Mathf.Min(10, BloodUtility.StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); + int num = Mathf.Min(10, StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); if (num < 1) { num = 1; diff --git a/Source/Vampires/Utilities/ExplosionUtility.cs b/Source/Vampires/Utilities/ExplosionUtility.cs new file mode 100644 index 0000000..838a6d1 --- /dev/null +++ b/Source/Vampires/Utilities/ExplosionUtility.cs @@ -0,0 +1,37 @@ +using RimWorld; +using Verse; + +namespace Vampire +{ + public class ExplosionUtility + { + //Overhaul of the standard GenExplosion.DoExplosion THAT ALLOWS NEGATIVE DAMAGE. + public static void DoExplosion(IntVec3 center, Map map, float radius, DamageDef damType, Thing instigator, int damAmount = -1, SoundDef explosionSound = null, ThingDef weapon = null, ThingDef projectile = null, ThingDef postExplosionSpawnThingDef = null, float postExplosionSpawnChance = 0.0f, int postExplosionSpawnThingCount = 1, bool applyDamageToExplosionCellsNeighbors = false, ThingDef preExplosionSpawnThingDef = null, float preExplosionSpawnChance = 0.0f, int preExplosionSpawnThingCount = 1, float chanceToStartFire = 0.0f, bool dealMoreDamageAtCenter = false) + { + if (map == null) + { + Log.Warning("Tried to do explosion in a null map."); + } + else + { + Explosion explosion = (Explosion) GenSpawn.Spawn(ThingDefOf.Explosion, center, map); + explosion.radius = radius; + explosion.damType = damType; + explosion.instigator = instigator; + explosion.damAmount = damAmount; //This is the only line that is changed. + explosion.weapon = weapon; + explosion.projectile = projectile; + explosion.preExplosionSpawnThingDef = preExplosionSpawnThingDef; + explosion.preExplosionSpawnChance = preExplosionSpawnChance; + explosion.preExplosionSpawnThingCount = preExplosionSpawnThingCount; + explosion.postExplosionSpawnThingDef = postExplosionSpawnThingDef; + explosion.postExplosionSpawnChance = postExplosionSpawnChance; + explosion.postExplosionSpawnThingCount = postExplosionSpawnThingCount; + explosion.applyDamageToExplosionCellsNeighbors = applyDamageToExplosionCellsNeighbors; + explosion.chanceToStartFire = chanceToStartFire; + explosion.dealMoreDamageAtCenter = dealMoreDamageAtCenter; + explosion.StartExplosion(explosionSound); + } + } + } +} \ No newline at end of file diff --git a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs index 72da32f..8664c24 100644 --- a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs +++ b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs @@ -2,11 +2,7 @@ // These are basic usings. Always let them be here. // ---------------------------------------------------------------------- using System; -using System.Collections.Generic; -using System.Diagnostics; using System.Reflection; -using System.Linq; -using System.Text; // ---------------------------------------------------------------------- // These are RimWorld-specific usings. Activate/Deactivate what you need: @@ -15,11 +11,11 @@ //using VerseBase; // Material/Graphics handling functions are found here using Verse; // RimWorld universal objects are here (like 'Building') using Verse.AI; // Needed when you do something with the AI -using Verse.AI.Group; -using Verse.Sound; // Needed when you do something with Sound -using Verse.Noise; // Needed when you do something with Noises +// Needed when you do something with Sound +// Needed when you do something with Noises using RimWorld; // RimWorld specific functions are found here (like 'Building_Battery') -using RimWorld.Planet; // RimWorld specific functions for world creation + +// RimWorld specific functions for world creation //using RimWorld.SquadAI; // RimWorld specific functions for squad brains namespace Vampire @@ -31,7 +27,7 @@ public static Pawn DoGeneratePawnFromSource(Pawn sourcePawn, bool isBerserk = tr { PawnKindDef pawnKindDef = sourcePawn.kindDef; Faction factionDirect = isBerserk ? Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile) : Faction.OfPlayer; - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); try { pawn.kindDef = pawnKindDef; @@ -187,7 +183,7 @@ public static Pawn GenerateClonePawnFromSource(Pawn sourcePawn) { PawnKindDef pawnKindDef = PawnKindDef.Named("ReanimatedCorpse"); Faction factionDirect = Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile); - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); pawn.kindDef = pawnKindDef; pawn.SetFactionDirect(factionDirect); pawn.pather = new Pawn_PathFollower(pawn); @@ -342,10 +338,10 @@ public static void GenerateApparelFromSource(Pawn newPawn, Pawn sourcePawn) } else { - apparel = (Apparel)ThingMaker.MakeThing(current.def, null); + apparel = (Apparel)ThingMaker.MakeThing(current.def); } apparel.DrawColor = new Color(current.DrawColor.r, current.DrawColor.g, current.DrawColor.b, current.DrawColor.a); - newPawn.apparel.Wear(apparel, true); + newPawn.apparel.Wear(apparel); } } diff --git a/Source/Vampires/Utilities/VampSunlightPathUtility.cs b/Source/Vampires/Utilities/VampSunlightPathUtility.cs index cb99224..418e961 100644 --- a/Source/Vampires/Utilities/VampSunlightPathUtility.cs +++ b/Source/Vampires/Utilities/VampSunlightPathUtility.cs @@ -1,9 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEngine; using Verse; using Verse.AI; @@ -46,7 +41,7 @@ public static Job GetSunlightPathJob(Pawn pawn) return null; if (pawn.pather != null && pawn.pather.Destination != null && pawn.pather.Destination.IsSunlightSafeFor(pawn)) return null; - if (pawn.GetRoom(RegionType.Set_Passable) is Room room && room.PsychologicallyOutdoors) + if (pawn.GetRoom() is Room room && room.PsychologicallyOutdoors) { Job surviveJob; if (TryGoingToHomePoint(pawn, out surviveJob)) @@ -118,7 +113,7 @@ public static IntVec3 FindSafeZoneFor(Pawn pawn) { IntVec3 result = IntVec3.Invalid; Region region; - CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); + CellFinder.TryFindClosestRegionWith(pawn.GetRegion(), TraverseParms.For(pawn), x => !x.Room.PsychologicallyOutdoors, 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); if (region != null) { region.TryFindRandomCellInRegion(x => x.IsValid && x.x > 0 && x.z > 0 && x.InBounds(pawn.MapHeld) && x.GetDoor(pawn.MapHeld) == null, out result); @@ -164,7 +159,7 @@ public static bool TryDiggingHideyHole(Pawn pawn, out Job gotoJob) /// public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 center, Map map) { - if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map, false, null).Accepted) + if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map).Accepted) { return center; } @@ -172,8 +167,8 @@ public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 cent cellRect.ClipInsideMap(map); IntVec3 randomCell = cellRect.RandomCell; if (!CellFinder.TryFindRandomCellNear(center, map, 8, (IntVec3 c) => c.Standable(map) && - (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map, false, null).Accepted) && - (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors, Danger.Deadly, false)) ?? false), out randomCell)) + GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map).Accepted && + (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors)) ?? false), out randomCell)) { //Log.Error("Found no place to build hideyhole for burning vampire."); randomCell = IntVec3.Invalid; @@ -244,7 +239,7 @@ public static bool IsSunlightSafeFor(this IntVec3 targ, Pawn pawn) /// public static bool CanSurviveTimeInSunlight(IntVec3 dest, Pawn pawn) { - PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn, PathEndMode.OnCell); + PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn); IntVec3 curVec; int cellsInSunlight = 0; while (path.NodesLeftCount > 1) @@ -260,9 +255,9 @@ public static bool CanSurviveTimeInSunlight(IntVec3 dest, Pawn pawn) int sunExpTicks = 0; if (pawn?.health?.hediffSet?.GetFirstHediffOfDef(VampDefOf.ROMV_SunExposure) is HediffWithComps_SunlightExposure sunExp) { - sunExpTicks = (int)((TicksOfSurvivingSunlight * 0.75f) * sunExp.CurStageIndex); + sunExpTicks = (int)(TicksOfSurvivingSunlight * 0.75f * sunExp.CurStageIndex); } - int ticksToArrive = (cellsInSunlight * pawn.TicksPerMoveDiagonal) + sunExpTicks; + int ticksToArrive = cellsInSunlight * pawn.TicksPerMoveDiagonal + sunExpTicks; if (ticksToArrive > TicksOfSurvivingSunlight) { return false; @@ -286,7 +281,7 @@ public static bool CanArriveBeforeSunlight(this IntVec3 targ, Pawn pawn, float l int ticksUntilArrival = distanceToPoint * ticksPerMove; int ticksLeeway = (int)(ticksUntilArrival * leewayFactor); - if ((ticksUntilArrival + ticksLeeway) <= ticksUntilDaylight) + if (ticksUntilArrival + ticksLeeway <= ticksUntilDaylight) { return true; } @@ -324,7 +319,7 @@ public static int DetermineTicksUntilDaylight(Map map) public static IntVec3 FindCellSafeFromSunlight(Pawn pawn) { return CellFinderLoose.RandomCellWith(x => !IsZero(x) && x.IsValid && x.InBounds(pawn.MapHeld) && x.Roofed(pawn.MapHeld) && x.Walkable(pawn.MapHeld) - && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld, 1000); + && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld); } /// diff --git a/Source/Vampires/Utilities/VampireBiteUtility.cs b/Source/Vampires/Utilities/VampireBiteUtility.cs index 3b03e91..ce23770 100644 --- a/Source/Vampires/Utilities/VampireBiteUtility.cs +++ b/Source/Vampires/Utilities/VampireBiteUtility.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire @@ -29,7 +27,7 @@ public static void MakeNew(Pawn actor, Pawn victim) actor.Drawer.Notify_MeleeAttackOn(victim); victim.TakeDamage(new DamageInfo(dmgDef, (int)(dmgAmount * BITEFACTOR), -1, actor, neckPart)); BattleLogEntry_MeleeCombat battleLogEntry_MeleeCombat = new BattleLogEntry_MeleeCombat(RulePackDefOf.Combat_Hit, dmgRules, - actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel, null, null); + actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel); Find.BattleLog.Add(battleLogEntry_MeleeCombat); } } diff --git a/Source/Vampires/Utilities/VampireGen.cs b/Source/Vampires/Utilities/VampireGen.cs index 9f78e25..678cc04 100644 --- a/Source/Vampires/Utilities/VampireGen.cs +++ b/Source/Vampires/Utilities/VampireGen.cs @@ -1,8 +1,6 @@ using RimWorld; using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; @@ -15,7 +13,7 @@ public static bool TryGiveVampirismHediff(Pawn pawn, int generation, BloodlineDe { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire?.VampComp() ?? null; vampHediff.generation = generation; @@ -31,7 +29,7 @@ public static bool TryGiveVampirismHediffFromSire(Pawn pawn, Pawn sire, bool fir { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire.VampComp(); vampHediff.generation = sire.VampComp().Generation + 1; @@ -49,7 +47,7 @@ public static void AddFangsHediff(Pawn pawn) if (bpR != null && pawn?.VampComp()?.Bloodline?.fangsHediff != null) { - pawn.health.RestorePart(bpR, null, true); + pawn.health.RestorePart(bpR); pawn.health.AddHediff(pawn.VampComp().Bloodline.fangsHediff, bpR, null); } } @@ -80,16 +78,16 @@ public static bool TryGiveVampireAdditionalHediffs(Pawn pawn) public static Pawn GenerateVampire(int generation, BloodlineDef bloodline, Pawn sire, Faction vampFaction = null, bool firstVampire = false) { //Lower generation vampires are impossibly old. - float? math = (sire != null) ? sire.ageTracker.AgeChronologicalYearsFloat + new FloatRange(100, 300).RandomInRange : - (generation > 4) ? Mathf.Clamp(2000 - (generation * Rand.Range(20, 200)), 16, 2000) : - 100000 - (generation * Rand.Range(10000, 50000)); + float? math = sire != null ? sire.ageTracker.AgeChronologicalYearsFloat + new FloatRange(100, 300).RandomInRange : + generation > 4 ? Mathf.Clamp(2000 - generation * Rand.Range(20, 200), 16, 2000) : + 100000 - generation * Rand.Range(10000, 50000); - Faction faction = (vampFaction != null) ? vampFaction : - (generation < 7) ? Find.FactionManager.FirstFactionOfDef(VampDefOf.ROMV_LegendaryVampires) : VampireUtility.RandVampFaction; + Faction faction = vampFaction != null ? vampFaction : + generation < 7 ? Find.FactionManager.FirstFactionOfDef(VampDefOf.ROMV_LegendaryVampires) : VampireUtility.RandVampFaction; PawnGenerationRequest request = new PawnGenerationRequest( PawnKindDefOf.SpaceRefugee, Faction.OfSpacer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 20f, false, true, - true, false, false, false, false, null, null, null, null, null, null, null); + true, false, false, false, false, null, null, null, null, null, null); Pawn pawn = PawnGenerator.GeneratePawn(request); if (firstVampire) { diff --git a/Source/Vampires/Utilities/VampireGraphicUtility.cs b/Source/Vampires/Utilities/VampireGraphicUtility.cs index ac00326..30c19fe 100644 --- a/Source/Vampires/Utilities/VampireGraphicUtility.cs +++ b/Source/Vampires/Utilities/VampireGraphicUtility.cs @@ -1,9 +1,6 @@ using Harmony; using RimWorld; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; using Verse; diff --git a/Source/Vampires/Utilities/VampireRelationUtility.cs b/Source/Vampires/Utilities/VampireRelationUtility.cs index cc2c887..58d5f00 100644 --- a/Source/Vampires/Utilities/VampireRelationUtility.cs +++ b/Source/Vampires/Utilities/VampireRelationUtility.cs @@ -1,8 +1,5 @@ using RimWorld; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/Utilities/VampireSkinColors.cs b/Source/Vampires/Utilities/VampireSkinColors.cs index 8045742..3ef5368 100644 --- a/Source/Vampires/Utilities/VampireSkinColors.cs +++ b/Source/Vampires/Utilities/VampireSkinColors.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using Verse; -using RimWorld; using UnityEngine; namespace Vampire @@ -41,9 +37,9 @@ public SkinColorData(float melanin, float selector, Color color) private static int GetSkinDataIndexOfMelanin(float melanin) { int result = 0; - for (int i = 0; i < VampireSkinColors.MelaninTable.Length; i++) + for (int i = 0; i < MelaninTable.Length; i++) { - if (melanin < VampireSkinColors.MelaninTable[i].melanin) + if (melanin < MelaninTable[i].melanin) { break; } @@ -63,15 +59,15 @@ public static Color GetVampireSkinColor(Pawn pawn, float melanin) { return colors[skinDataIndexOfMelanin]; } - float tt = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + float tt = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); return Color.Lerp(colors[skinDataIndexOfMelanin], colors[skinDataIndexOfMelanin + 1], tt); } - if (skinDataIndexOfMelanin == VampireSkinColors.MelaninTable.Length - 1) + if (skinDataIndexOfMelanin == MelaninTable.Length - 1) { - return VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color; + return MelaninTable[skinDataIndexOfMelanin].color; } - float t = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); - return Color.Lerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].color, t); + float t = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + return Color.Lerp(MelaninTable[skinDataIndexOfMelanin].color, MelaninTable[skinDataIndexOfMelanin + 1].color, t); } } } diff --git a/Source/Vampires/Utilities/VampireThoughtUtility.cs b/Source/Vampires/Utilities/VampireThoughtUtility.cs index 69f8224..e7c679a 100644 --- a/Source/Vampires/Utilities/VampireThoughtUtility.cs +++ b/Source/Vampires/Utilities/VampireThoughtUtility.cs @@ -1,8 +1,5 @@ using RimWorld; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire @@ -15,7 +12,7 @@ public static void GiveThoughtsForDiablerie(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0), null); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0)); } public static void GiveThoughtsForDrinkingBlood(Pawn drainer) @@ -24,7 +21,7 @@ public static void GiveThoughtsForDrinkingBlood(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0), null); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0)); } @@ -53,7 +50,7 @@ public static void GiveThoughtsForPawnDiedOfBloodLoss(Pawn victim, Pawn drainer where x.IsColonist || x.IsPrisonerOfColony select x) { - current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex), null); + current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex)); } } @@ -74,11 +71,11 @@ where x.IsColonist || x.IsPrisonerOfColony { if (current == victim) { - current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested, null); + current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested); } else if (thoughtDef != null) { - current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef, null); + current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef); } } } diff --git a/Source/Vampires/Utilities/VampireUtility.cs b/Source/Vampires/Utilities/VampireUtility.cs index 35b47eb..07b3df9 100644 --- a/Source/Vampires/Utilities/VampireUtility.cs +++ b/Source/Vampires/Utilities/VampireUtility.cs @@ -1,12 +1,8 @@ -using AbilityUser; -using RimWorld; -using System; +using RimWorld; using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; -using Verse.AI; namespace Vampire { @@ -39,8 +35,7 @@ public static bool IsDaylight(Pawn p) public static void SummonEffect(IntVec3 loc, Map map, Thing summoner, float size) { - GenExplosion.DoExplosion(loc, map, size, DamageDefOf.EMP, summoner, -1, DamageDefOf.Stun.soundExplosion); - + ExplosionUtility.DoExplosion(loc, map, size, DamageDefOf.EMP, summoner, -1, DamageDefOf.Stun.soundExplosion); } //=> (GenLocalDate.HourInteger(p) >= 6 && GenLocalDate.HourInteger(p) <= 17) && !Find.World.GameConditionManager.ConditionIsActive(GameConditionDefOf.Eclipse); @@ -72,7 +67,7 @@ public static void GiveVampXP(this Pawn vampire, int amount=15) { if (vampire?.VampComp() is CompVampire v && v.IsVampire && vampire.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount, -1f); + MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount); v.XP += amount; } } diff --git a/Source/Vampires/Utilities/VampireWitnessUtility.cs b/Source/Vampires/Utilities/VampireWitnessUtility.cs index 055cc0e..53459e3 100644 --- a/Source/Vampires/Utilities/VampireWitnessUtility.cs +++ b/Source/Vampires/Utilities/VampireWitnessUtility.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; using Verse.AI; @@ -32,9 +30,9 @@ public struct Crime public Crime(JobDef newCrimeDef, ThoughtDef newColonistThought, ThoughtDef newVisitorThought) { - this.CrimeDef = newCrimeDef; - this.ColonistThought = newColonistThought; - this.VisitorThought = newVisitorThought; + CrimeDef = newCrimeDef; + ColonistThought = newColonistThought; + VisitorThought = newVisitorThought; } } @@ -75,7 +73,7 @@ public static List WitnessesOf(Pawn criminal, Pawn victim, JobDef crime) IntVec3 intVec = criminal.Position + GenRadial.RadialPattern[num]; if (intVec.InBounds(map)) { - if (GenSight.LineOfSight(intVec, criminal.Position, map, true, null, 0, 0)) + if (GenSight.LineOfSight(intVec, criminal.Position, map, true)) { List thingList = intVec.GetThingList(map); for (int i = 0; i < thingList.Count; i++) @@ -157,7 +155,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) } //Log.Message("1"); - List witnesses = VampireWitnessUtility.WitnessesOf(criminal, victim, crime); + List witnesses = WitnessesOf(criminal, victim, crime); //Log.Message("2"); if (!witnesses.NullOrEmpty()) @@ -192,8 +190,8 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) .MakeThought(curCrime.VisitorThought); if (CanTakeWitnessJob(witness)) { - IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }, 23f); - witness.jobs.StartJob(new Verse.AI.Job(JobDefOf.FleeAndCower, fleeLoc)); + IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }); + witness.jobs.StartJob(new Job(JobDefOf.FleeAndCower, fleeLoc)); if (witness.Faction != null && !witness.Faction.HostileTo(criminal.Faction)) { witness.Faction.SetHostileTo(criminal.Faction, true); @@ -222,7 +220,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) thought_MemoryObservation.Target = criminal; //Log.Message("Loop 1 Step 8"); - witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation, null); + witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation); //Log.Message("Loop 1 Step 9"); } diff --git a/Source/Vampires/VampAbility.cs b/Source/Vampires/VampAbility.cs index 9074ce5..ff29e0b 100644 --- a/Source/Vampires/VampAbility.cs +++ b/Source/Vampires/VampAbility.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Text; using Verse; using AbilityUser; using UnityEngine; @@ -11,7 +7,7 @@ namespace Vampire { public class VampAbility : PawnAbility { - public CompVampire Vamp => this.Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); + public CompVampire Vamp => Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); public VitaeAbilityDef AbilityDef => Def as VitaeAbilityDef; public VampAbility() : base() { } @@ -66,7 +62,7 @@ public override bool CanCastPowerCheck(AbilityContext context, out string reason if (base.CanCastPowerCheck(context, out reason)) { reason = ""; - if (this.Def != null && this.Def is VitaeAbilityDef vampDef) + if (Def != null && Def is VitaeAbilityDef vampDef) { if (Pawn.BloodNeed().CurBloodPoints < vampDef.bloodCost) { diff --git a/Source/Vampires/Vampire.csproj b/Source/Vampires/Vampire.csproj index f28035c..945bd26 100644 --- a/Source/Vampires/Vampire.csproj +++ b/Source/Vampires/Vampire.csproj @@ -32,14 +32,14 @@ - ..\..\..\..\Harmony1091\0Harmony.dll + ..\Dependencies\0Harmony.dll - ..\..\..\JecsTools\Assemblies\0JecsTools.dll + ..\Dependencies\0JecsTools.dll False - ..\..\..\JecsTools\Assemblies\AbilityUser.dll + ..\Dependencies\AbilityUser.dll False @@ -47,11 +47,11 @@ False - C:\Users\mattw\Downloads\Dubs Bad Hygiene v1.2.2\Dubs Bad Hygiene\Assemblies\BadHygiene.dll + ..\Dependencies\BadHygiene.dll False - ..\..\..\JecsTools\Assemblies\CompAnimated.dll + ..\Dependencies\CompAnimated.dll False @@ -140,6 +140,7 @@ + @@ -159,6 +160,7 @@ + diff --git a/Source/Vampires/VampireCorpse.cs b/Source/Vampires/VampireCorpse.cs index dced462..bc3e4d8 100644 --- a/Source/Vampires/VampireCorpse.cs +++ b/Source/Vampires/VampireCorpse.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; using RimWorld; @@ -14,33 +13,27 @@ public class VampireCorpse : Corpse public VampireCorpse() : base() { - this.operationsBillStack = new BillStack(this); - this.innerContainer = new ThingOwner(this, true, LookMode.Reference); + operationsBillStack = new BillStack(this); + innerContainer = new ThingOwner(this, true, LookMode.Reference); } - private bool ShouldVanish - { - get - { - return this.InnerPawn.RaceProps.Animal && this.vanishAfterTimestamp > 0 && this.Age >= this.vanishAfterTimestamp && base.Spawned && this.GetRoom(RegionType.Set_Passable) != null && this.GetRoom(RegionType.Set_Passable).TouchesMapEdge && !base.Map.roofGrid.Roofed(base.Position); - } - } + private bool ShouldVanish => InnerPawn.RaceProps.Animal && vanishAfterTimestamp > 0 && Age >= vanishAfterTimestamp && Spawned && this.GetRoom() != null && this.GetRoom().TouchesMapEdge && !Map.roofGrid.Roofed(Position); private BodyPartRecord GetBestBodyPartToEat(Pawn ingester, float nutritionWanted) { - IEnumerable source = from x in this.InnerPawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined) - where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) > 0.001f + IEnumerable source = from x in InnerPawn.health.hediffSet.GetNotMissingParts() + where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(InnerPawn, x) > 0.001f select x; - if (!source.Any()) + if (!source.Any()) { return null; } - return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) - nutritionWanted)); + return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(InnerPawn, x) - nutritionWanted)); } private void NotifyColonistBar() { - if (this.InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) + if (InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) { Find.ColonistBar.MarkColonistsDirty(); } @@ -78,7 +71,7 @@ private void NotifyColonistBar() continue; } HediffDef hediffDefFromDamage = HealthUtility.GetHediffDefFromDamage(DamageDefOf.Burn, p, rec); - Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p, null); + Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p); hediff_Injury.Part = rec; hediff_Injury.source = null; hediff_Injury.sourceBodyPartGroup = null; @@ -118,7 +111,7 @@ public override string Label { if (Diableried) return "ROMV_SoullessHuskOf".Translate(base.Label); - return (burnedToAshes) ? "ROMV_AshesOf".Translate(base.Label) : base.Label; + return burnedToAshes ? "ROMV_AshesOf".Translate(base.Label) : base.Label; } } @@ -134,13 +127,13 @@ public override string GetInspectString() } else { - if (this.InnerPawn.Faction != null) + if (InnerPawn.Faction != null) { - s.AppendLine("Faction".Translate() + ": " + this.InnerPawn.Faction.Name); + s.AppendLine("Faction".Translate() + ": " + InnerPawn.Faction.Name); } s.AppendLine("DeadTime".Translate(new object[] { - this.Age.ToStringTicksToPeriod(false, false, true) + Age.ToStringTicksToPeriod(false) })); } return s.ToString().TrimEndNewlines(); @@ -155,20 +148,20 @@ public override void DrawAt(Vector3 drawLoc, bool flip = false) return; } if (!burnedToAshes) - this.InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); + InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); else - Ashes.Draw(drawLoc, Rot4.North, this, 0); + Ashes.Draw(drawLoc, Rot4.North, this); } - public bool CanResurrect => this.InnerPawn != null && !BurnedToAshes && this.InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; + public bool CanResurrect => InnerPawn != null && !BurnedToAshes && InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; public override IEnumerable GetGizmos() { foreach (Gizmo g in base.GetGizmos()) yield return g; - Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (CanResurrect) { yield return new Command_Action() @@ -178,14 +171,14 @@ public override IEnumerable GetGizmos() icon = bloodResurrection.uiIcon, action = delegate { - Pawn AbilityUser = this.InnerPawn; + Pawn AbilityUser = InnerPawn; AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); }, disabled = false }; @@ -197,18 +190,18 @@ public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.bloodPoints, "bloodPoints", -1); - Scribe_Values.Look(ref this.burnedToAshes, "burnedToAshes", false); - Scribe_Values.Look(ref this.diableried, "diableried", false); + Scribe_Values.Look(ref bloodPoints, "bloodPoints", -1); + Scribe_Values.Look(ref burnedToAshes, "burnedToAshes"); + Scribe_Values.Look(ref diableried, "diableried"); - Scribe_Values.Look(ref this.timeOfDeath, "timeOfDeath", 0, false); - Scribe_Values.Look(ref this.vanishAfterTimestamp, "vanishAfterTimestamp", 0, false); - Scribe_Values.Look(ref this.everBuriedInSarcophagus, "everBuriedInSarcophagus", false, false); - Scribe_Deep.Look(ref this.operationsBillStack, "operationsBillStack", new object[] + Scribe_Values.Look(ref timeOfDeath, "timeOfDeath"); + Scribe_Values.Look(ref vanishAfterTimestamp, "vanishAfterTimestamp"); + Scribe_Values.Look(ref everBuriedInSarcophagus, "everBuriedInSarcophagus"); + Scribe_Deep.Look(ref operationsBillStack, "operationsBillStack", new object[] { this }); - Scribe_Deep.Look>(ref this.innerContainer, "innerContainer", new object[] + Scribe_Deep.Look(ref innerContainer, "innerContainer", new object[] { this }); diff --git a/Source/Vampires/Workers/EmbraceWorker.cs b/Source/Vampires/Workers/EmbraceWorker.cs index 85d805e..e048839 100644 --- a/Source/Vampires/Workers/EmbraceWorker.cs +++ b/Source/Vampires/Workers/EmbraceWorker.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; @@ -32,7 +30,7 @@ public void RemoveColonistDiedThoughts(Pawn vampToBe, bool wasColonist) { MemoryThoughtHandler memories = thoughtHaver.needs.mood.thoughts.memories; //Log.Message("Memory Cleaner"); - if (memories.Memories.FindAll(x => x.otherPawn == vampToBe && (x.def.defName.Contains("Died")) || x.def.defName.Contains("Death")) is List mems && mems.NullOrEmpty()) + if (memories.Memories.FindAll(x => x.otherPawn == vampToBe && x.def.defName.Contains("Died") || x.def.defName.Contains("Death")) is List mems && !mems.NullOrEmpty()) { foreach (Thought_Memory mem in mems) { diff --git a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs index 19106a3..72d3c23 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; using RimWorld; namespace Vampire @@ -11,7 +10,7 @@ public override bool InRelation(Pawn me, Pawn other) if (me.IsVampire() && other.IsVampire()) { CompVampire compVamp = other.GetComp(); - return me != other && (other.GetSire() == me); + return me != other && other.GetSire() == me; } return false; } diff --git a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs index 4ae20b7..6aaeecd 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; using RimWorld; namespace Vampire diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs index 34c6b37..8711b36 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using Verse; using RimWorld; @@ -34,14 +33,14 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) { return !pawn.Dead && !(from x in pawn.health.hediffSet.hediffs where x.Part == part - select x).Any(); + select x).Any(); } public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { //if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part)) @@ -55,7 +54,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, }); BloodItemUtility.SpawnBloodFromExtraction(pawn, true); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); int badGoodwillAmt = -3; if (flag) { @@ -78,7 +77,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs index 68f2a40..edb8bd5 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using Verse; using RimWorld; @@ -34,16 +33,16 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) { return !pawn.Dead && !(from x in pawn.health.hediffSet.hediffs where x.Part == part - select x).Any(); + select x).Any(); } public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { - if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) + if (CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) { return; } @@ -52,9 +51,9 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, billDoer, pawn }); - BloodItemUtility.SpawnBloodFromExtraction(pawn, false); + BloodItemUtility.SpawnBloodFromExtraction(pawn); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); int badGoodwillAmt = -3; if (flag) { @@ -76,7 +75,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/WorldComponent_VampireTracker.cs b/Source/Vampires/WorldComponent_VampireTracker.cs index 6962182..0a412b7 100644 --- a/Source/Vampires/WorldComponent_VampireTracker.cs +++ b/Source/Vampires/WorldComponent_VampireTracker.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using RimWorld; using Verse; using RimWorld.Planet; @@ -27,7 +24,7 @@ public Pawn GetLaterGenerationVampire(Pawn childe, BloodlineDef bloodline, int i { if (idealGenerationOfChilde == -1) { - idealGenerationOfChilde = (childe?.VampComp()?.Generation == -1)? Rand.Range(10,13) : childe?.VampComp()?.Generation ?? Rand.Range(10, 13); + idealGenerationOfChilde = childe?.VampComp()?.Generation == -1? Rand.Range(10,13) : childe?.VampComp()?.Generation ?? Rand.Range(10, 13); } if (!ActiveVampires.NullOrEmpty() && ActiveVampires?.FindAll(x => x.VampComp() is CompVampire v && @@ -53,7 +50,7 @@ public List TryGeneratingBloodline(Pawn childe, BloodlineDef bloodline) } for (int curGen = 4; curGen < 14; curGen++) { - Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire, null, false); + Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire); futureGenerations.Add(newVamp); curSire = newVamp; } @@ -115,7 +112,7 @@ public List DormantVampires //Second Generation for (int i = 0; i < 3; i++) { - Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine, null, false); + Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine); generationTwo.Add(secondGenVamp); //Find.WorldPawns.PassToWorld(secondGenVamp, PawnDiscardDecideMode.KeepForever); } @@ -124,7 +121,7 @@ public List DormantVampires foreach (BloodlineDef clan in DefDatabase.AllDefs.Where(x => x != VampDefOf.ROMV_Caine && x != VampDefOf.ROMV_TheThree)) { Pawn randSecondGenVamp = generationTwo.RandomElement(); - Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp, null, false); + Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp); generationThree.Add(clanFounderVamp); //Find.WorldPawns.PassToWorld(clanFounderVamp, PawnDiscardDecideMode.KeepForever); } @@ -205,9 +202,9 @@ public void PrintVampires() public override void ExposeData() { base.ExposeData(); - Scribe_References.Look(ref this.firstVampire, "firstVampire"); - Scribe_Collections.Look(ref this.dormantVampires, "dormantVampires", LookMode.Deep); - Scribe_Collections.Look(ref this.activeVampires, "activeVampires", LookMode.Deep); + Scribe_References.Look(ref firstVampire, "firstVampire"); + Scribe_Collections.Look(ref dormantVampires, "dormantVampires", LookMode.Deep); + Scribe_Collections.Look(ref activeVampires, "activeVampires", LookMode.Deep); } } } From 724fafaff570e818f3a75f58dfdc1ec7409fbb7c Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 15:12:15 +0000 Subject: [PATCH 16/18] Add missing Monstrosity Patch --- Defs/PawnKindDefs_Races/Monstrosity.xml | 345 ++++++++++++------------ Patches/ROMV_pCombatEx.xml | 83 +++++- 2 files changed, 258 insertions(+), 170 deletions(-) diff --git a/Defs/PawnKindDefs_Races/Monstrosity.xml b/Defs/PawnKindDefs_Races/Monstrosity.xml index d0ed306..36f57ce 100644 --- a/Defs/PawnKindDefs_Races/Monstrosity.xml +++ b/Defs/PawnKindDefs_Races/Monstrosity.xml @@ -1,182 +1,189 @@  - - ROMV_MonstrosityRace - - A monstrosity of perverted flesh and bone. - - 3.0 - GrizzlyBear - GrizzlyBear - - + + ROMV_MonstrosityRace + + A monstrosity of perverted flesh and bone. + + 3.0 + GrizzlyBear + GrizzlyBear + + - - 175 - false - false - 0.0 - + + 175 + false + false + 0.0 + - - ROMV_MonstrosityA - - monstrosities - ROMV_MonstrosityRace - -
  • - - Things/Pawn/Animal/MonstrosityA/MonstrosityA - 1.05 - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1 - -
  • -
  • - - Things/Pawn/Animal/MonstrosityA/MonstrosityA - 1.5 - - (0.25, 0.3, 0.25) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.5 - -
  • -
  • - - Things/Pawn/Animal/MonstrosityA/MonstrosityA - 1.95 - - (0.3, 0.4, 0.3) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.95 - -
  • -
    -
    + + ROMV_MonstrosityA + + monstrosities + ROMV_MonstrosityRace + +
  • + + Things/Pawn/Animal/MonstrosityA/MonstrosityA + 1.05 + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1 + +
  • +
  • + + Things/Pawn/Animal/MonstrosityA/MonstrosityA + 1.5 + + (0.25, 0.3, 0.25) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.5 + +
  • +
  • + + Things/Pawn/Animal/MonstrosityA/MonstrosityA + 1.95 + + (0.3, 0.4, 0.3) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.95 + +
  • +
    +
    - + - - - 5.25 - -50 - 0 - - -
  • - Verb_MeleeAttack - 1.0 - 7 - Scratch - FrontLeftPaw - - -
  • - Stun - 20 -
  • - - - -
  • - Verb_MeleeAttack - 1.0 - 7 - Scratch - FrontRightPaw - - -
  • - Stun - 20 -
  • - - - -
  • - Verb_MeleeAttack - 1.3 - 7 - Bite - Teeth - - -
  • - Stun - 20 -
  • - - - -
  • - Verb_MeleeAttack - 1.1 - 3 - Blunt - 0.01 - HeadAttackTool -
  • -
    - - QuadrupedAnimalWithPawsAndTail - true - 0 - 0.85 - 0.18 - 0.99 - CarnivoreAnimal - 1.0 - 22.5 - 1 - Advanced - 1.0 - 120 - 1 - 0.018 - - -
  • (0.5, 0)
  • -
  • (1, 1)
  • -
  • (2, 1.7)
  • -
  • (3, 0.7)
  • -
  • (3.5, 0)
  • -
    -
    - 12 - -
  • - AnimalBaby - 0 -
  • -
  • - AnimalJuvenile - 0.2 -
  • -
  • - AnimalAdult - 0.45 -
  • -
    - Pawn_Melee_SmallScratch_HitPawn - Pawn_Melee_SmallScratch_HitBuilding - Pawn_Melee_SmallScratch_Miss -
    -
    + + + 5.25 + -50 + 0 + + +
  • + + 1.0 + 7 + +
  • Scratch
  • + + FrontLeftPaw + + +
  • + Stun + 20 +
  • +
    +
    + +
  • + + 1.0 + 7 + +
  • Scratch
  • + + FrontRightPaw + + +
  • + Stun + 20 +
  • +
    +
    + +
  • + 1.3 + 7 + +
  • Bite
  • + + Teeth + + +
  • + Stun + 20 +
  • +
    +
    + +
  • + + 1.1 + 3 + +
  • Blunt
  • + + HeadAttackTool + 0.01 + +
    + + QuadrupedAnimalWithPawsAndTail + true + 0 + 0.85 + 0.18 + 0.99 + CarnivoreAnimal + 1.0 + 22.5 + 1 + Advanced + 1.0 + 120 + 1 + 0.018 + + +
  • (0.5, 0)
  • +
  • (1, 1)
  • +
  • (2, 1.7)
  • +
  • (3, 0.7)
  • +
  • (3.5, 0)
  • +
    +
    + 12 + +
  • + AnimalBaby + 0 +
  • +
  • + AnimalJuvenile + 0.2 +
  • +
  • + AnimalAdult + 0.45 +
  • +
    + Pawn_Melee_SmallScratch_HitPawn + Pawn_Melee_SmallScratch_HitBuilding + Pawn_Melee_SmallScratch_Miss +
    +
    diff --git a/Patches/ROMV_pCombatEx.xml b/Patches/ROMV_pCombatEx.xml index 5d5f5c0..462a554 100644 --- a/Patches/ROMV_pCombatEx.xml +++ b/Patches/ROMV_pCombatEx.xml @@ -123,11 +123,92 @@ Help: XPath Syntax: https://www.w3schools.com/xml/xpath_syntax.asp - 0.5 + 0.5 + + + + + Always + + +
  • + Combat Extended +
  • +
  • + */ThingDef[@Name="ROMV_ThingBaseMonstrosity"]/tools + +
  • + + 1.0 + 7 + +
  • Scratch
  • + + FrontLeftPaw + + +
  • + Stun + 20 +
  • +
    +
    + 0.15 + +
  • + + 1.0 + 7 + +
  • Scratch
  • + + FrontRightPaw + + +
  • + Stun + 20 +
  • +
    +
    + 0.15 + +
  • + 1.3 + 7 + +
  • Bite
  • + + Teeth + + +
  • + Stun + 20 +
  • +
    +
    + 0.15 + +
  • + + 1.1 + 3 + +
  • Blunt
  • + + HeadAttackTool + 0.01 + 0.05 + + + +
    +
    From a99ddee54f0df20c79be7df85a2e0f82ea9acc15 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 15:16:52 +0000 Subject: [PATCH 17/18] Totally did not miss this --- Patches/ROMV_pCombatEx.xml | 130 +++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 64 deletions(-) diff --git a/Patches/ROMV_pCombatEx.xml b/Patches/ROMV_pCombatEx.xml index 462a554..2122af0 100644 --- a/Patches/ROMV_pCombatEx.xml +++ b/Patches/ROMV_pCombatEx.xml @@ -143,70 +143,72 @@ Help: XPath Syntax: https://www.w3schools.com/xml/xpath_syntax.asp
  • */ThingDef[@Name="ROMV_ThingBaseMonstrosity"]/tools -
  • - - 1.0 - 7 - -
  • Scratch
  • - - FrontLeftPaw - - -
  • - Stun - 20 -
  • -
    -
    - 0.15 - -
  • - - 1.0 - 7 - -
  • Scratch
  • - - FrontRightPaw - - -
  • - Stun - 20 -
  • -
    -
    - 0.15 - -
  • - 1.3 - 7 - -
  • Bite
  • - - Teeth - - -
  • - Stun - 20 -
  • -
    -
    - 0.15 - -
  • - - 1.1 - 3 - -
  • Blunt
  • - - HeadAttackTool - 0.01 - 0.05 - + +
  • + + 1.0 + 7 + +
  • Scratch
  • + + FrontLeftPaw + + +
  • + Stun + 20 +
  • +
    +
    + 0.15 + +
  • + + 1.0 + 7 + +
  • Scratch
  • + + FrontRightPaw + + +
  • + Stun + 20 +
  • +
    +
    + 0.15 + +
  • + 1.3 + 7 + +
  • Bite
  • + + Teeth + + +
  • + Stun + 20 +
  • +
    +
    + 0.15 + +
  • + + 1.1 + 3 + +
  • Blunt
  • + + HeadAttackTool + 0.01 + 0.05 + +
    From cd0ba4224d1e85b73bd433f7722817654b4f3edf Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 15:22:06 +0000 Subject: [PATCH 18/18] Apparantly RimWorld does not like that these share a label --- Patches/ROMV_pCombatEx.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Patches/ROMV_pCombatEx.xml b/Patches/ROMV_pCombatEx.xml index 2122af0..6bdbeb7 100644 --- a/Patches/ROMV_pCombatEx.xml +++ b/Patches/ROMV_pCombatEx.xml @@ -145,7 +145,6 @@ Help: XPath Syntax: https://www.w3schools.com/xml/xpath_syntax.asp
  • - 1.0 7 @@ -163,7 +162,6 @@ Help: XPath Syntax: https://www.w3schools.com/xml/xpath_syntax.asp 0.15
  • - 1.0 7
  • diff --git a/Source/Vampires/Utilities/VampireBiteUtility.cs b/Source/Vampires/Utilities/VampireBiteUtility.cs index f4689f9..93afe80 100644 --- a/Source/Vampires/Utilities/VampireBiteUtility.cs +++ b/Source/Vampires/Utilities/VampireBiteUtility.cs @@ -1,9 +1,9 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Linq; -using RimWorld; using Verse; -namespace Vampire.Utilities +namespace Vampire { public static class VampireBiteUtility { @@ -27,7 +27,7 @@ public static void MakeNew(Pawn actor, Pawn victim) actor.Drawer.Notify_MeleeAttackOn(victim); victim.TakeDamage(new DamageInfo(dmgDef, (int)(dmgAmount * BITEFACTOR), -1, actor, neckPart)); BattleLogEntry_MeleeCombat battleLogEntry_MeleeCombat = new BattleLogEntry_MeleeCombat(RulePackDefOf.Combat_Hit, dmgRules, - actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel); + actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel, null, null); Find.BattleLog.Add(battleLogEntry_MeleeCombat); } } diff --git a/Source/Vampires/Utilities/VampireGen.cs b/Source/Vampires/Utilities/VampireGen.cs index f0a659f..71780dd 100644 --- a/Source/Vampires/Utilities/VampireGen.cs +++ b/Source/Vampires/Utilities/VampireGen.cs @@ -1,12 +1,10 @@ -using System; +using RimWorld; +using System; using System.Linq; -using RimWorld; using UnityEngine; -using Vampire.Defs; -using Vampire.Hediffs; using Verse; -namespace Vampire.Utilities +namespace Vampire { public static class VampireGen { @@ -15,7 +13,7 @@ public static bool TryGiveVampirismHediff(Pawn pawn, int generation, BloodlineDe { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire?.VampComp() ?? null; vampHediff.generation = generation; @@ -31,7 +29,7 @@ public static bool TryGiveVampirismHediffFromSire(Pawn pawn, Pawn sire, bool fir { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire.VampComp(); vampHediff.generation = sire.VampComp().Generation + 1; @@ -49,7 +47,7 @@ public static void AddFangsHediff(Pawn pawn) if (bpR != null && pawn?.VampComp()?.Bloodline?.fangsHediff != null) { - pawn.health.RestorePart(bpR); + pawn.health.RestorePart(bpR, null, true); pawn.health.AddHediff(pawn.VampComp().Bloodline.fangsHediff, bpR, null); } } @@ -89,7 +87,7 @@ public static Pawn GenerateVampire(int generation, BloodlineDef bloodline, Pawn PawnGenerationRequest request = new PawnGenerationRequest( PawnKindDefOf.SpaceRefugee, Faction.OfSpacer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 20f, false, true, - true, false, false, false, false, null, null, null, null, null, null); + true, false, false, false, false, null, null, null, null, null, null, null); Pawn pawn = PawnGenerator.GeneratePawn(request); if (firstVampire) { diff --git a/Source/Vampires/Utilities/VampireGraphicUtility.cs b/Source/Vampires/Utilities/VampireGraphicUtility.cs index aee3cc9..30c19fe 100644 --- a/Source/Vampires/Utilities/VampireGraphicUtility.cs +++ b/Source/Vampires/Utilities/VampireGraphicUtility.cs @@ -1,11 +1,10 @@ -using System.Collections.Generic; -using Harmony; +using Harmony; using RimWorld; +using System.Collections.Generic; using UnityEngine; -using Vampire.Components; using Verse; -namespace Vampire.Utilities +namespace Vampire { public static class VampireGraphicUtility { diff --git a/Source/Vampires/Utilities/VampireRelationUtility.cs b/Source/Vampires/Utilities/VampireRelationUtility.cs index 49883ab..58d5f00 100644 --- a/Source/Vampires/Utilities/VampireRelationUtility.cs +++ b/Source/Vampires/Utilities/VampireRelationUtility.cs @@ -1,10 +1,8 @@ -using System.Collections.Generic; -using RimWorld; -using Vampire.Components; -using Vampire.Defs; +using RimWorld; +using System.Collections.Generic; using Verse; -namespace Vampire.Utilities +namespace Vampire { public static class VampireRelationUtility { diff --git a/Source/Vampires/Utilities/VampireSkinColors.cs b/Source/Vampires/Utilities/VampireSkinColors.cs index 244d0f6..9232d84 100644 --- a/Source/Vampires/Utilities/VampireSkinColors.cs +++ b/Source/Vampires/Utilities/VampireSkinColors.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -using UnityEngine; using Verse; +using UnityEngine; -namespace Vampire.Utilities +namespace Vampire { public static class VampireSkinColors { @@ -37,9 +37,9 @@ public SkinColorData(float melanin, float selector, Color color) private static int GetSkinDataIndexOfMelanin(float melanin) { int result = 0; - for (int i = 0; i < MelaninTable.Length; i++) + for (int i = 0; i < VampireSkinColors.MelaninTable.Length; i++) { - if (melanin < MelaninTable[i].melanin) + if (melanin < VampireSkinColors.MelaninTable[i].melanin) { break; } @@ -59,15 +59,15 @@ public static Color GetVampireSkinColor(Pawn pawn, float melanin) { return colors[skinDataIndexOfMelanin]; } - float tt = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + float tt = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); return Color.Lerp(colors[skinDataIndexOfMelanin], colors[skinDataIndexOfMelanin + 1], tt); } - if (skinDataIndexOfMelanin == MelaninTable.Length - 1) + if (skinDataIndexOfMelanin == VampireSkinColors.MelaninTable.Length - 1) { - return MelaninTable[skinDataIndexOfMelanin].color; + return VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color; } - float t = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); - return Color.Lerp(MelaninTable[skinDataIndexOfMelanin].color, MelaninTable[skinDataIndexOfMelanin + 1].color, t); + float t = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + return Color.Lerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].color, t); } } } diff --git a/Source/Vampires/Utilities/VampireThoughtUtility.cs b/Source/Vampires/Utilities/VampireThoughtUtility.cs index c9811c3..58e8e1f 100644 --- a/Source/Vampires/Utilities/VampireThoughtUtility.cs +++ b/Source/Vampires/Utilities/VampireThoughtUtility.cs @@ -1,9 +1,8 @@ -using System.Linq; -using RimWorld; -using Vampire.Defs; +using RimWorld; +using System.Linq; using Verse; -namespace Vampire.Utilities +namespace Vampire { public static class VampireThoughtUtility { @@ -13,7 +12,7 @@ public static void GiveThoughtsForDiablerie(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0)); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0), null); } public static void GiveThoughtsForDrinkingBlood(Pawn drainer) @@ -22,7 +21,7 @@ public static void GiveThoughtsForDrinkingBlood(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0)); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0), null); } @@ -51,7 +50,7 @@ public static void GiveThoughtsForPawnDiedOfBloodLoss(Pawn victim, Pawn drainer where x.IsColonist || x.IsPrisonerOfColony select x) { - current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex)); + current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex), null); } } @@ -72,11 +71,11 @@ where x.IsColonist || x.IsPrisonerOfColony { if (current == victim) { - current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested); + current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested, null); } else if (thoughtDef != null) { - current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef); + current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef, null); } } } diff --git a/Source/Vampires/Utilities/VampireUtility.cs b/Source/Vampires/Utilities/VampireUtility.cs index 2ab70ce..5a0c170 100644 --- a/Source/Vampires/Utilities/VampireUtility.cs +++ b/Source/Vampires/Utilities/VampireUtility.cs @@ -1,13 +1,10 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Linq; -using RimWorld; using UnityEngine; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Hediffs; using Verse; -namespace Vampire.Utilities +namespace Vampire { public static class VampireUtility { @@ -71,7 +68,7 @@ public static void GiveVampXP(this Pawn vampire, int amount=15) { if (vampire?.VampComp() is CompVampire v && v.IsVampire && vampire.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount); + MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount, -1f); v.XP += amount; } } diff --git a/Source/Vampires/Utilities/VampireWitnessUtility.cs b/Source/Vampires/Utilities/VampireWitnessUtility.cs index 99a08d6..6d0a447 100644 --- a/Source/Vampires/Utilities/VampireWitnessUtility.cs +++ b/Source/Vampires/Utilities/VampireWitnessUtility.cs @@ -1,11 +1,10 @@ -using System.Collections.Generic; +using RimWorld; +using System.Collections.Generic; using System.Linq; -using RimWorld; -using Vampire.Defs; using Verse; using Verse.AI; -namespace Vampire.Utilities +namespace Vampire { /// /// When crimes are committed, like feeding on visitors, @@ -31,9 +30,9 @@ public struct Crime public Crime(JobDef newCrimeDef, ThoughtDef newColonistThought, ThoughtDef newVisitorThought) { - CrimeDef = newCrimeDef; - ColonistThought = newColonistThought; - VisitorThought = newVisitorThought; + this.CrimeDef = newCrimeDef; + this.ColonistThought = newColonistThought; + this.VisitorThought = newVisitorThought; } } @@ -74,7 +73,7 @@ public static List WitnessesOf(Pawn criminal, Pawn victim, JobDef crime) IntVec3 intVec = criminal.Position + GenRadial.RadialPattern[num]; if (intVec.InBounds(map)) { - if (GenSight.LineOfSight(intVec, criminal.Position, map, true)) + if (GenSight.LineOfSight(intVec, criminal.Position, map, true, null, 0, 0)) { List thingList = intVec.GetThingList(map); for (int i = 0; i < thingList.Count; i++) @@ -156,7 +155,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) } //Log.Message("1"); - List witnesses = WitnessesOf(criminal, victim, crime); + List witnesses = VampireWitnessUtility.WitnessesOf(criminal, victim, crime); //Log.Message("2"); if (!witnesses.NullOrEmpty()) @@ -191,8 +190,8 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) .MakeThought(curCrime.VisitorThought); if (CanTakeWitnessJob(witness)) { - IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }); - witness.jobs.StartJob(new Job(JobDefOf.FleeAndCower, fleeLoc)); + IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }, 23f); + witness.jobs.StartJob(new Verse.AI.Job(JobDefOf.FleeAndCower, fleeLoc)); if (witness.Faction != null && !witness.Faction.HostileTo(criminal.Faction)) { witness.Faction.SetHostileTo(criminal.Faction, true); @@ -221,7 +220,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) thought_MemoryObservation.Target = criminal; //Log.Message("Loop 1 Step 8"); - witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation); + witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation, null); //Log.Message("Loop 1 Step 9"); } diff --git a/Source/Vampires/VampAbility.cs b/Source/Vampires/VampAbility.cs index 04f2860..11b7a03 100644 --- a/Source/Vampires/VampAbility.cs +++ b/Source/Vampires/VampAbility.cs @@ -2,15 +2,12 @@ using Verse; using AbilityUser; using UnityEngine; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; namespace Vampire { public class VampAbility : PawnAbility { - public CompVampire Vamp => Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); + public CompVampire Vamp => this.Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); public VitaeAbilityDef AbilityDef => Def as VitaeAbilityDef; public VampAbility() : base() { } @@ -65,7 +62,7 @@ public override bool CanCastPowerCheck(AbilityContext context, out string reason if (base.CanCastPowerCheck(context, out reason)) { reason = ""; - if (Def != null && Def is VitaeAbilityDef vampDef) + if (this.Def != null && this.Def is VitaeAbilityDef vampDef) { if (Pawn.BloodNeed().CurBloodPoints < vampDef.bloodCost) { diff --git a/Source/Vampires/VampireCorpse.cs b/Source/Vampires/VampireCorpse.cs index e8f28e4..a3edbf3 100644 --- a/Source/Vampires/VampireCorpse.cs +++ b/Source/Vampires/VampireCorpse.cs @@ -5,8 +5,6 @@ using Verse; using UnityEngine; using AbilityUser; -using Vampire.Defs; -using Vampire.Utilities; namespace Vampire { @@ -15,33 +13,33 @@ public class VampireCorpse : Corpse public VampireCorpse() : base() { - operationsBillStack = new BillStack(this); - innerContainer = new ThingOwner(this, true, LookMode.Reference); + this.operationsBillStack = new BillStack(this); + this.innerContainer = new ThingOwner(this, true, LookMode.Reference); } private bool ShouldVanish { get { - return InnerPawn.RaceProps.Animal && vanishAfterTimestamp > 0 && Age >= vanishAfterTimestamp && Spawned && this.GetRoom() != null && this.GetRoom().TouchesMapEdge && !Map.roofGrid.Roofed(Position); + return this.InnerPawn.RaceProps.Animal && this.vanishAfterTimestamp > 0 && this.Age >= this.vanishAfterTimestamp && base.Spawned && this.GetRoom(RegionType.Set_Passable) != null && this.GetRoom(RegionType.Set_Passable).TouchesMapEdge && !base.Map.roofGrid.Roofed(base.Position); } } private BodyPartRecord GetBestBodyPartToEat(Pawn ingester, float nutritionWanted) { - IEnumerable source = from x in InnerPawn.health.hediffSet.GetNotMissingParts() - where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(InnerPawn, x) > 0.001f + IEnumerable source = from x in this.InnerPawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined) + where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) > 0.001f select x; if (!source.Any()) { return null; } - return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(InnerPawn, x) - nutritionWanted)); + return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) - nutritionWanted)); } private void NotifyColonistBar() { - if (InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) + if (this.InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) { Find.ColonistBar.MarkColonistsDirty(); } @@ -79,7 +77,7 @@ private void NotifyColonistBar() continue; } HediffDef hediffDefFromDamage = HealthUtility.GetHediffDefFromDamage(DamageDefOf.Burn, p, rec); - Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p); + Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p, null); hediff_Injury.Part = rec; hediff_Injury.source = null; hediff_Injury.sourceBodyPartGroup = null; @@ -135,13 +133,13 @@ public override string GetInspectString() } else { - if (InnerPawn.Faction != null) + if (this.InnerPawn.Faction != null) { - s.AppendLine("Faction".Translate() + ": " + InnerPawn.Faction.Name); + s.AppendLine("Faction".Translate() + ": " + this.InnerPawn.Faction.Name); } s.AppendLine("DeadTime".Translate(new object[] { - Age.ToStringTicksToPeriod(false) + this.Age.ToStringTicksToPeriod(false, false, true) })); } return s.ToString().TrimEndNewlines(); @@ -156,20 +154,20 @@ public override void DrawAt(Vector3 drawLoc, bool flip = false) return; } if (!burnedToAshes) - InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); + this.InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); else - Ashes.Draw(drawLoc, Rot4.North, this); + Ashes.Draw(drawLoc, Rot4.North, this, 0); } - public bool CanResurrect => InnerPawn != null && !BurnedToAshes && InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; + public bool CanResurrect => this.InnerPawn != null && !BurnedToAshes && this.InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; public override IEnumerable GetGizmos() { foreach (Gizmo g in base.GetGizmos()) yield return g; - VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (CanResurrect) { yield return new Command_Action() @@ -179,14 +177,14 @@ public override IEnumerable GetGizmos() icon = bloodResurrection.uiIcon, action = delegate { - Pawn AbilityUser = InnerPawn; + Pawn AbilityUser = this.InnerPawn; AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); }, disabled = false }; @@ -198,18 +196,18 @@ public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref bloodPoints, "bloodPoints", -1); - Scribe_Values.Look(ref burnedToAshes, "burnedToAshes"); - Scribe_Values.Look(ref diableried, "diableried"); + Scribe_Values.Look(ref this.bloodPoints, "bloodPoints", -1); + Scribe_Values.Look(ref this.burnedToAshes, "burnedToAshes", false); + Scribe_Values.Look(ref this.diableried, "diableried", false); - Scribe_Values.Look(ref timeOfDeath, "timeOfDeath"); - Scribe_Values.Look(ref vanishAfterTimestamp, "vanishAfterTimestamp"); - Scribe_Values.Look(ref everBuriedInSarcophagus, "everBuriedInSarcophagus"); - Scribe_Deep.Look(ref operationsBillStack, "operationsBillStack", new object[] + Scribe_Values.Look(ref this.timeOfDeath, "timeOfDeath", 0, false); + Scribe_Values.Look(ref this.vanishAfterTimestamp, "vanishAfterTimestamp", 0, false); + Scribe_Values.Look(ref this.everBuriedInSarcophagus, "everBuriedInSarcophagus", false, false); + Scribe_Deep.Look(ref this.operationsBillStack, "operationsBillStack", new object[] { this }); - Scribe_Deep.Look>(ref innerContainer, "innerContainer", new object[] + Scribe_Deep.Look>(ref this.innerContainer, "innerContainer", new object[] { this }); diff --git a/Source/Vampires/Workers/EmbraceWorker.cs b/Source/Vampires/Workers/EmbraceWorker.cs index 6a6997a..63b35de 100644 --- a/Source/Vampires/Workers/EmbraceWorker.cs +++ b/Source/Vampires/Workers/EmbraceWorker.cs @@ -1,12 +1,9 @@ using System.Collections.Generic; using System.Linq; using RimWorld; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; using Verse; -namespace Vampire.Workers +namespace Vampire { public class EmbraceWorker { diff --git a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs index 4744057..b0cd7bf 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs @@ -1,9 +1,7 @@ -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; -using Verse; +using Verse; +using RimWorld; -namespace Vampire.Workers +namespace Vampire { public class PawnRelationWorker_Childe : PawnRelationWorker { diff --git a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs index ffb3dda..6aaeecd 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Sire.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Sire.cs @@ -1,9 +1,7 @@ -using RimWorld; -using Vampire.Components; -using Vampire.Utilities; -using Verse; +using Verse; +using RimWorld; -namespace Vampire.Workers +namespace Vampire { public class PawnRelationWorker_Sire : PawnRelationWorker { diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs index 7ef67b5..07eff0f 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs @@ -1,11 +1,10 @@ using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using RimWorld; -using Vampire.Utilities; using Verse; +using RimWorld; +using System.Linq; -namespace Vampire.Workers +namespace Vampire { public class Recipe_ExtractBloodPack : Recipe_Surgery { @@ -41,7 +40,7 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { //if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part)) @@ -55,7 +54,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, }); BloodItemUtility.SpawnBloodFromExtraction(pawn, true); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); int badGoodwillAmt = -3; if (flag) { @@ -78,7 +77,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs index 88c093f..c33acdf 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs @@ -1,11 +1,10 @@ using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using RimWorld; -using Vampire.Utilities; using Verse; +using RimWorld; +using System.Linq; -namespace Vampire.Workers +namespace Vampire { public class Recipe_ExtractBloodVial : Recipe_Surgery { @@ -40,10 +39,10 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { - if (CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) + if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) { return; } @@ -52,9 +51,9 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, billDoer, pawn }); - BloodItemUtility.SpawnBloodFromExtraction(pawn); + BloodItemUtility.SpawnBloodFromExtraction(pawn, false); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); int badGoodwillAmt = -3; if (flag) { @@ -76,7 +75,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/WorldComponent_VampireTracker.cs b/Source/Vampires/WorldComponent_VampireTracker.cs index 0ba86de..a9cf7fb 100644 --- a/Source/Vampires/WorldComponent_VampireTracker.cs +++ b/Source/Vampires/WorldComponent_VampireTracker.cs @@ -2,9 +2,6 @@ using System.Linq; using Verse; using RimWorld.Planet; -using Vampire.Components; -using Vampire.Defs; -using Vampire.Utilities; namespace Vampire { @@ -53,7 +50,7 @@ public List TryGeneratingBloodline(Pawn childe, BloodlineDef bloodline) } for (int curGen = 4; curGen < 14; curGen++) { - Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire); + Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire, null, false); futureGenerations.Add(newVamp); curSire = newVamp; } @@ -115,7 +112,7 @@ public List DormantVampires //Second Generation for (int i = 0; i < 3; i++) { - Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine); + Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine, null, false); generationTwo.Add(secondGenVamp); //Find.WorldPawns.PassToWorld(secondGenVamp, PawnDiscardDecideMode.KeepForever); } @@ -124,7 +121,7 @@ public List DormantVampires foreach (BloodlineDef clan in DefDatabase.AllDefs.Where(x => x != VampDefOf.ROMV_Caine && x != VampDefOf.ROMV_TheThree)) { Pawn randSecondGenVamp = generationTwo.RandomElement(); - Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp); + Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp, null, false); generationThree.Add(clanFounderVamp); //Find.WorldPawns.PassToWorld(clanFounderVamp, PawnDiscardDecideMode.KeepForever); } @@ -205,9 +202,9 @@ public void PrintVampires() public override void ExposeData() { base.ExposeData(); - Scribe_References.Look(ref firstVampire, "firstVampire"); - Scribe_Collections.Look(ref dormantVampires, "dormantVampires", LookMode.Deep); - Scribe_Collections.Look(ref activeVampires, "activeVampires", LookMode.Deep); + Scribe_References.Look(ref this.firstVampire, "firstVampire"); + Scribe_Collections.Look(ref this.dormantVampires, "dormantVampires", LookMode.Deep); + Scribe_Collections.Look(ref this.activeVampires, "activeVampires", LookMode.Deep); } } } From 8847cac26ff3b330ed51692198707a310deb4044 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 17 Dec 2017 16:30:18 +0000 Subject: [PATCH 04/18] Cleanup without screwing over everything this time. --- .../Vampires/AI_Jobs/JobDriver_BloodVomit.cs | 8 +- .../AI_Jobs/JobDriver_ConsumeBlood.cs | 100 ++++++------- .../Vampires/AI_Jobs/JobDriver_Diablerie.cs | 18 +-- .../Vampires/AI_Jobs/JobDriver_DigAndHide.cs | 22 +-- Source/Vampires/AI_Jobs/JobDriver_Embrace.cs | 18 +-- .../Vampires/AI_Jobs/JobDriver_EnterTorpor.cs | 4 +- Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 22 +-- .../AI_Jobs/JobDriver_FeedAndDestroy.cs | 18 +-- .../AI_Jobs/JobDriver_FeedAndReturn.cs | 16 +- Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs | 14 +- .../AI_Jobs/JobDriver_MakeBloodBond.cs | 12 +- .../JobGiver_SeekShelterFromSunlight.cs | 2 +- .../Vampires/AI_Jobs/JobGiver_VampireBeast.cs | 16 +- .../AI_Jobs/MentalState_Rotschreck.cs | 6 +- .../AI_Jobs/MentalState_VampireBeast.cs | 8 +- Source/Vampires/Buildings/Building_Coffin.cs | 2 +- .../Vampires/Buildings/Building_HideyHole.cs | 2 +- Source/Vampires/Components/CompBloodItem.cs | 2 +- .../Components/CompProperties_BloodItem.cs | 2 +- .../Components/CompProperties_VampBed.cs | 2 +- Source/Vampires/Components/CompVampBed.cs | 26 ++-- Source/Vampires/Components/CompVampire.cs | 138 +++++++++--------- Source/Vampires/Defs/BloodlineDef.cs | 8 +- .../Vampires/Defs/ScenPart_GameStartNight.cs | 10 +- Source/Vampires/Discipline.cs | 14 +- .../Animalism/DisciplineEffect_Beckoning.cs | 2 +- .../Animalism/DisciplineEffect_Communion.cs | 8 +- .../DisciplineEffect_NightwispRavens.cs | 2 +- .../DisciplineEffect_SpectralWolf.cs | 6 +- .../HediffCompProperties_TickGraphic.cs | 2 +- .../Animalism/HediffComp_TickGraphic.cs | 12 +- .../Disciplines/Animalism/PawnTemporary.cs | 44 +++--- .../Auspex/DisciplineEffect_ReadMind.cs | 6 +- .../DisciplineEffect_RevealIllusions.cs | 10 +- .../Blood/DisciplineEffect_Hunger.cs | 8 +- .../Blood/DisciplineEffect_UnstoppableTide.cs | 4 +- .../Dominate/DisciplineEffect_Mesmerise.cs | 2 +- .../Dominate/DisciplineEffect_Possession.cs | 2 +- .../Flight/DisciplineEffect_LongFlight.cs | 6 +- .../Flight/DisciplineEffect_ShortFlight.cs | 4 +- .../Flight/DisciplineEffect_SkyFall.cs | 4 +- .../Flight/DisciplineEffect_WingBuffet.cs | 2 +- .../DisciplineEffect_ArmOfTheAbyss.cs | 4 +- .../DisciplineEffect_EnterTheAbyss.cs | 14 +- .../Protean/DisciplineEffect_BatForm.cs | 2 +- .../Protean/DisciplineEffect_MistForm.cs | 2 +- .../Protean/DisciplineEffect_WarForm.cs | 2 +- .../Thaumaturgy/Projectile_BloodBoil.cs | 2 +- .../Thaumaturgy/Projectile_BloodStealer.cs | 2 +- .../Disciplines/Verb_UseAbilityPawnEffect.cs | 6 +- .../DisciplineEffect_CorruptForm.cs | 2 +- .../DisciplineEffect_PerfectForm.cs | 2 +- .../DisciplineEffect_ShapeMonstrosity.cs | 4 +- .../Vicissitude/DisciplineEffect_ZuloForm.cs | 2 +- Source/Vampires/FlyingObject.cs | 94 ++++++------ .../Vampires/HarmonyPatches/HarmonyPatches.cs | 12 +- .../HarmonyPatches_DebugTools.cs | 16 +- .../Hediffs/Gizmo_HediffShieldStatus.cs | 10 +- .../HediffCompProperties_AnimalForm.cs | 2 +- .../HediffCompProperties_Possession.cs | 2 +- .../HediffCompProperties_SkillOffset.cs | 2 +- .../Vampires/Hediffs/HediffComp_AnimalForm.cs | 14 +- .../Vampires/Hediffs/HediffComp_Possession.cs | 16 +- Source/Vampires/Hediffs/HediffComp_Shield.cs | 90 ++++++------ .../Hediffs/HediffComp_SkillOffset.cs | 4 +- Source/Vampires/Hediffs/HediffVampirism.cs | 32 ++-- .../Hediffs/HediffVampirism_VampGiver.cs | 14 +- .../Hediffs/HediffWithComps_BeastHunger.cs | 10 +- .../HediffWithComps_SunlightExposure.cs | 30 ++-- .../Hediffs/Hediff_AddedPart_Fangs.cs | 6 +- Source/Vampires/ITab_Pawn_NeedsCorpse.cs | 16 +- Source/Vampires/Need_Blood.cs | 134 ++++++++--------- Source/Vampires/ScenPart_LongerNights.cs | 8 +- Source/Vampires/ScenPart_StartingVampires.cs | 40 ++--- Source/Vampires/SkillSheet.cs | 4 +- Source/Vampires/UI/Alert_VampireInSunlight.cs | 8 +- Source/Vampires/UI/Alert_VampireStarving.cs | 8 +- .../Utilities/BloodFeedModeUtility.cs | 12 +- Source/Vampires/Utilities/BloodTypeUtility.cs | 6 +- Source/Vampires/Utilities/BloodUtility.cs | 16 +- .../Vampires/Utilities/VampireSkinColors.cs | 14 +- .../Utilities/VampireWitnessUtility.cs | 10 +- Source/Vampires/VampAbility.cs | 4 +- Source/Vampires/VampireCorpse.cs | 46 +++--- .../Workers/Recipe_ExtractBloodPack.cs | 6 +- .../Workers/Recipe_ExtractBloodVial.cs | 8 +- .../Vampires/WorldComponent_VampireTracker.cs | 6 +- 87 files changed, 679 insertions(+), 679 deletions(-) diff --git a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs index 066845a..f4dc41b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs @@ -16,21 +16,21 @@ public override PawnPosture Posture { get { - return this.lastPosture; + return lastPosture; } } public override void Notify_LastPosture(PawnPosture posture, LayingDownState layingDown) { - this.lastPosture = posture; + lastPosture = posture; this.layingDown = layingDown; } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0, false); - Scribe_Values.Look(ref this.lastPosture, "lastPosture", PawnPosture.Standing, false); + Scribe_Values.Look(ref ticksLeft, "ticksLeft", 0, false); + Scribe_Values.Look(ref lastPosture, "lastPosture", PawnPosture.Standing, false); } [DebuggerHidden] diff --git a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs index 1c65c12..2f00c8b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs @@ -26,7 +26,7 @@ private Thing IngestibleSource { get { - return base.job.GetTarget(TargetIndex.A).Thing; + return job.GetTarget(TargetIndex.A).Thing; } } @@ -34,32 +34,32 @@ private float ChewDurationMultiplier { get { - Thing ingestibleSource = this.IngestibleSource; + Thing ingestibleSource = IngestibleSource; if (ingestibleSource.def.ingestible != null && !ingestibleSource.def.ingestible.useEatingSpeedStat) { return 1f; } - return 1f / this.pawn.GetStatValue(StatDefOf.EatingSpeed, true); + return 1f / pawn.GetStatValue(StatDefOf.EatingSpeed, true); } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.usingNutrientPasteDispenser, "usingNutrientPasteDispenser", false, false); - Scribe_Values.Look(ref this.eatingFromInventory, "eatingFromInventory", false, false); + Scribe_Values.Look(ref usingNutrientPasteDispenser, "usingNutrientPasteDispenser", false, false); + Scribe_Values.Look(ref eatingFromInventory, "eatingFromInventory", false, false); } public override string GetReport() { - if (this.usingNutrientPasteDispenser) + if (usingNutrientPasteDispenser) { - return base.job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); + return job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); } - Thing thing = this.pawn.CurJob.targetA.Thing; + Thing thing = pawn.CurJob.targetA.Thing; if (thing != null && thing.def.ingestible != null && !thing.def.ingestible.ingestReportString.NullOrEmpty()) { - return string.Format(thing.def.ingestible.ingestReportString, this.pawn.CurJob.targetA.Thing.LabelShort); + return string.Format(thing.def.ingestible.ingestReportString, pawn.CurJob.targetA.Thing.LabelShort); } return base.GetReport(); } @@ -67,84 +67,84 @@ public override string GetReport() public override void Notify_Starting() { base.Notify_Starting(); - this.usingNutrientPasteDispenser = (this.IngestibleSource is Building_NutrientPasteDispenser); - this.eatingFromInventory = (this.pawn.inventory != null && this.pawn.inventory.Contains(this.IngestibleSource)); + usingNutrientPasteDispenser = (IngestibleSource is Building_NutrientPasteDispenser); + eatingFromInventory = (pawn.inventory != null && pawn.inventory.Contains(IngestibleSource)); } [DebuggerHidden] protected override IEnumerable MakeNewToils() { - if (!this.usingNutrientPasteDispenser) + if (!usingNutrientPasteDispenser) { - this.FailOn(() => !this.IngestibleSource.Destroyed && !this.IngestibleSource.IngestibleNow); + this.FailOn(() => !IngestibleSource.Destroyed && !IngestibleSource.IngestibleNow); } - Toil chew = Toils_Ingest.ChewIngestible(this.pawn, this.ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) - .FailOn((Toil x) => !this.IngestibleSource.Spawned - && (this.pawn.carryTracker == null || this.pawn.carryTracker.CarriedThing != this.IngestibleSource)) + Toil chew = Toils_Ingest.ChewIngestible(pawn, ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) + .FailOn((Toil x) => !IngestibleSource.Spawned + && (pawn.carryTracker == null || pawn.carryTracker.CarriedThing != IngestibleSource)) .FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); - foreach (Toil toil in this.PrepareToIngestToils(chew)) + foreach (Toil toil in PrepareToIngestToils(chew)) { yield return toil; } yield return chew; - yield return FinalizeIngest(this.pawn, TargetIndex.A); - yield return Toils_Jump.JumpIf(chew, () => this.pawn?.BloodNeed()?.CurLevelPercentage < 1f); + yield return FinalizeIngest(pawn, TargetIndex.A); + yield return Toils_Jump.JumpIf(chew, () => pawn?.BloodNeed()?.CurLevelPercentage < 1f); } private IEnumerable PrepareToIngestToils(Toil chewToil) { - if (this.usingNutrientPasteDispenser) + if (usingNutrientPasteDispenser) { - return this.PrepareToIngestToils_Dispenser(); + return PrepareToIngestToils_Dispenser(); } - if (this.pawn.RaceProps.ToolUser) + if (pawn.RaceProps.ToolUser) { - return this.PrepareToIngestToils_ToolUser(chewToil); + return PrepareToIngestToils_ToolUser(chewToil); } - return this.PrepareToIngestToils_NonToolUser(); + return PrepareToIngestToils_NonToolUser(); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_Dispenser() { yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, this.pawn); - yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); + yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, pawn); + yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) { - if (this.eatingFromInventory) + if (eatingFromInventory) { - yield return Toils_Misc.TakeItemFromInventoryToCarrier(this.pawn, TargetIndex.A); + yield return Toils_Misc.TakeItemFromInventoryToCarrier(pawn, TargetIndex.A); } else { - yield return this.ReserveFoodIfWillIngestWholeStack(); + yield return ReserveFoodIfWillIngestWholeStack(); Toil gotoToPickup = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Jump.JumpIf(gotoToPickup, () => this.pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); + yield return Toils_Jump.JumpIf(gotoToPickup, () => pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch).FailOnDespawnedNullOrForbidden(TargetIndex.A); yield return Toils_Jump.Jump(chewToil); yield return gotoToPickup; - yield return Toils_Ingest.PickupIngestible(TargetIndex.A, this.pawn); + yield return Toils_Ingest.PickupIngestible(TargetIndex.A, pawn); Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C, 1, -1, null); Toil findExtraFoodToCollect = new Toil(); findExtraFoodToCollect.initAction = delegate { - if (this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def) < this.job.takeExtraIngestibles) + if (pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def) < job.takeExtraIngestibles) { - Predicate validator = (Thing x) => this.pawn.CanReserve(x, 1, -1, null, false) - && !x.IsForbidden(this.pawn) && x.IsSociallyProper(this.pawn); - Thing thing = GenClosest.ClosestThingReachable(this.pawn.Position, this.pawn.Map, - ThingRequest.ForDef(this.IngestibleSource.def), PathEndMode.Touch, - TraverseParms.For(this.pawn, Danger.Deadly, TraverseMode.ByPawn, false), + Predicate validator = (Thing x) => pawn.CanReserve(x, 1, -1, null, false) + && !x.IsForbidden(pawn) && x.IsSociallyProper(pawn); + Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, + ThingRequest.ForDef(IngestibleSource.def), PathEndMode.Touch, + TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), 12f, validator, null, 0, -1, false, RegionType.Set_Passable, false); if (thing != null) { - this.pawn.CurJob.SetTarget(TargetIndex.C, thing); - this.JumpToToil(reserveExtraFoodToCollect); + pawn.CurJob.SetTarget(TargetIndex.C, thing); + JumpToToil(reserveExtraFoodToCollect); } } }; @@ -153,17 +153,17 @@ private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) yield return reserveExtraFoodToCollect; yield return Toils_Goto.GotoThing(TargetIndex.C, PathEndMode.Touch); yield return Toils_Haul.TakeToInventory(TargetIndex.C, - () => this.job.takeExtraIngestibles - this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def)); + () => job.takeExtraIngestibles - pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def)); yield return findExtraFoodToCollect; } - yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); + yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_NonToolUser() { - yield return this.ReserveFoodIfWillIngestWholeStack(); + yield return ReserveFoodIfWillIngestWholeStack(); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); } @@ -173,12 +173,12 @@ private Toil ReserveFoodIfWillIngestWholeStack() { initAction = delegate { - if (this.pawn.Faction == null) + if (pawn.Faction == null) { return; } - Thing thing = this.pawn.CurJob.GetTarget(TargetIndex.A).Thing; - if (this.pawn.carryTracker.CarriedThing == thing) + Thing thing = pawn.CurJob.GetTarget(TargetIndex.A).Thing; + if (pawn.carryTracker.CarriedThing == thing) { return; } @@ -187,10 +187,10 @@ private Toil ReserveFoodIfWillIngestWholeStack() { if (!thing.Spawned) { - this.pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true); + pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true); return; } - this.pawn.Reserve(thing, this.job, 1, -1, null); + pawn.Reserve(thing, job, 1, -1, null); } }, defaultCompleteMode = ToilCompleteMode.Instant @@ -202,8 +202,8 @@ private Toil ReserveFoodIfWillIngestWholeStack() public override bool ModifyCarriedThingDrawPos(ref Vector3 drawPos, ref bool behind, ref bool flip) { - IntVec3 cell = base.job.GetTarget(TargetIndex.B).Cell; - return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, this.pawn); + IntVec3 cell = job.GetTarget(TargetIndex.B).Cell; + return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, pawn); } public static bool ModifyCarriedThingDrawPosWorker(ref Vector3 drawPos, ref bool behind, ref bool flip, IntVec3 placeCell, Pawn pawn) @@ -278,7 +278,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) public override bool TryMakePreToilReservations() { - return this.pawn.Reserve(TargetA, this.job, 1, -1, null); + return pawn.Reserve(TargetA, job, 1, -1, null); } } } diff --git a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs index 5a47bd3..576623f 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs @@ -16,13 +16,13 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -33,7 +33,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder, false); + BloodVictim.TransferBloodTo(1, BloodFeeder, false); } public override string GetReport() @@ -47,10 +47,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } @@ -60,8 +60,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - this.job.SetTarget(TargetIndex.A, p.Corpse); - this.pawn.Reserve(TargetA, this.job); + job.SetTarget(TargetIndex.A, p.Corpse); + pawn.Reserve(TargetA, job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -73,7 +73,7 @@ protected override IEnumerable MakeNewToils() VampireCorpse vampCorpse = ((VampireCorpse)TargetA.Thing); vampCorpse.Diableried = true; Pawn p = vampCorpse.InnerPawn; - this.pawn.VampComp().Notify_Diablerie(p.VampComp()); + pawn.VampComp().Notify_Diablerie(p.VampComp()); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs index 7106b99..01dc220 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs @@ -20,35 +20,35 @@ protected override IEnumerable MakeNewToils() Toil doWork = new Toil(); doWork.initAction = delegate { - this.workLeft = BaseWorkAmount; - this.job.SetTarget(TargetIndex.B, this.pawn); + workLeft = BaseWorkAmount; + job.SetTarget(TargetIndex.B, pawn); }; doWork.tickAction = delegate { if (GetActor().Downed || GetActor().Dead || GetActor().pather.MovingNow) { - this.EndJobWith(JobCondition.Incompletable); + EndJobWith(JobCondition.Incompletable); return; } - this.workLeft -= this.pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); - if (this.workLeft <= 0f) + workLeft -= pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); + if (workLeft <= 0f) { Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole, null); - thing.SetFaction(this.pawn.Faction, null); - GenSpawn.Spawn(thing, this.TargetLocA, this.Map); + thing.SetFaction(pawn.Faction, null); + GenSpawn.Spawn(thing, TargetLocA, Map); - Pawn actor = this.pawn; + Pawn actor = pawn; Building_Casket pod = (Building_Casket)thing; actor.DeSpawn(); pod.GetDirectlyHeldThings().TryAdd(actor); - this.ReadyForNextToil(); + ReadyForNextToil(); return; } //JoyUtility.JoyTickCheckEnd(this.pawn, JoyTickFullJoyAction.EndJob, 1f); }; - doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)this.workLeft / (float)BaseWorkAmount); + doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)workLeft / (float)BaseWorkAmount); doWork.defaultCompleteMode = ToilCompleteMode.Never; //doWork.FailOn(() => !JoyUtility.EnjoyableOutsideNow(this.pawn, null)); //doWork.FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); @@ -58,7 +58,7 @@ protected override IEnumerable MakeNewToils() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.workLeft, "workLeft", 0f, false); + Scribe_Values.Look(ref workLeft, "workLeft", 0f, false); } public override bool TryMakePreToilReservations() diff --git a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs index dfe4c1b..29dfe70 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs @@ -16,13 +16,13 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -33,7 +33,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); + BloodVictim.TransferBloodTo(1, BloodFeeder); } public override string GetReport() @@ -47,10 +47,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, this.GetActor()?.Faction != this.TargetA.Thing?.Faction, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, GetActor()?.Faction != TargetA.Thing?.Faction, false)) { yield return t; } @@ -60,8 +60,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - this.job.SetTarget(TargetIndex.A, p.Corpse); - this.pawn.Reserve(TargetA, this.job); + job.SetTarget(TargetIndex.A, p.Corpse); + pawn.Reserve(TargetA, job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -70,7 +70,7 @@ protected override IEnumerable MakeNewToils() { initAction = delegate () { - this.pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(this.pawn, Victim); + pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(pawn, Victim); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs index c3de600..fcacd68 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs @@ -10,7 +10,7 @@ public class JobDriver_EnterTorpor : JobDriver { public override bool TryMakePreToilReservations() { - return pawn.Reserve(TargetA, this.job); + return pawn.Reserve(TargetA, job); } [DebuggerHidden] @@ -27,7 +27,7 @@ protected override IEnumerable MakeNewToils() { initAction = delegate { - Pawn actor = this.pawn; + Pawn actor = pawn; Building_Casket pod = (Building_Casket)actor.CurJob.targetA.Thing; actor.DeSpawn(); diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index d8a6bd4..868ed1b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -13,11 +13,11 @@ public class JobDriver_Feed : JobDriver public static float BaseFeedTime = 320f; public static float BaseCoolantThrowupChance = 0.25f; - protected Pawn Victim => base.job.targetA.Thing as Pawn; + protected Pawn Victim => job.targetA.Thing as Pawn; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); + protected Need_Blood BloodFeeder => GetActor().BloodNeed(); public override void Notify_Starting() { @@ -26,13 +26,13 @@ public override void Notify_Starting() public virtual void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); - if (Victim.IsAndroid() && !this.pawn.IsAndroid()) + BloodVictim.TransferBloodTo(1, BloodFeeder); + if (Victim.IsAndroid() && !pawn.IsAndroid()) { if (Rand.Value <= BaseCoolantThrowupChance) { - this.EndJobWith(JobCondition.Incompletable); - this.pawn.jobs.StartJob(new Job(JobDefOf.Vomit, this.pawn.PositionHeld)); + EndJobWith(JobCondition.Incompletable); + pawn.jobs.StartJob(new Job(JobDefOf.Vomit, pawn.PositionHeld)); } } @@ -43,9 +43,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); - this.AddEndCondition(delegate + AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -53,7 +53,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(this.job.def, this, this.pawn, this.TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(job.def, this, pawn, TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } @@ -71,7 +71,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { MoteMaker.MakeColonistActionOverlay(actor, ThingDefOf.Mote_ColonistAttacking); - workLeft = JobDriver_Feed.BaseFeedTime; + workLeft = BaseFeedTime; Pawn victim = TargetA.Thing as Pawn; if (victim != null) { diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index 385f2a2..340a9de 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -18,8 +18,8 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } @@ -27,13 +27,13 @@ protected Pawn Master { get { - if (base.job.targetB.Thing is Pawn p) return p; - if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; + if (job.targetB.Thing is Pawn p) return p; + if (job.targetB.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -44,14 +44,14 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + BloodVictim.TransferBloodTo(1, Master.BloodNeed()); if (Victim.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside) is List parts) { for (int i = 0; i < 3; i++) { if (!Victim.Dead) { - Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, this.GetActor(), parts.RandomElement())); + Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, GetActor(), parts.RandomElement())); } } } @@ -68,10 +68,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs index 3891979..2768a04 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs @@ -17,8 +17,8 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } @@ -26,13 +26,13 @@ protected Pawn Master { get { - if (base.job.targetB.Thing is Pawn p) return p; - if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; + if (job.targetB.Thing is Pawn p) return p; + if (job.targetB.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -43,7 +43,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + BloodVictim.TransferBloodTo(1, Master.BloodNeed()); } public override string GetReport() @@ -57,10 +57,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs index 22b4faf..4da0aae 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs @@ -13,11 +13,11 @@ public class JobDriver_FeedSip : JobDriver private float workLeft = -1f; public static float BaseFeedTime = 320f; - protected Pawn Victim => (Pawn)base.job.targetA.Thing; + protected Pawn Victim => (Pawn)job.targetA.Thing; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); + protected Need_Blood BloodFeeder => GetActor().BloodNeed(); public override void Notify_Starting() { @@ -26,7 +26,7 @@ public override void Notify_Starting() public virtual void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); + BloodVictim.TransferBloodTo(1, BloodFeeder); } [DebuggerHidden] @@ -35,9 +35,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); - this.AddEndCondition(delegate + AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -45,7 +45,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(this, this.pawn, this.TargetA, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(this, pawn, TargetA, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs index 2b89f06..5dbb8e1 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs @@ -15,19 +15,19 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompThrall => Victim.GetComp(); - protected CompVampire CompMaster => this.GetActor().GetComp(); + protected CompVampire CompMaster => GetActor().GetComp(); protected Need_Blood BloodThrall => CompThrall.BloodPool; protected Need_Blood BloodMaster => CompMaster.BloodPool; private void DoEffect() { - this.BloodMaster.TransferBloodTo(1, BloodThrall); + BloodMaster.TransferBloodTo(1, BloodThrall); } [DebuggerHidden] @@ -36,14 +36,14 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOn(delegate { return BloodMaster.CurBloodPoints == 0; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, (Pawn)TargetA, this.GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, (Pawn)TargetA, GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs index 5047b64..f85f5e1 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs @@ -19,7 +19,7 @@ public class JobGiver_SeekShelterFromSunlight : ThinkNode_JobGiver protected virtual IntVec3 GetExactWanderDest(Pawn pawn) { IntVec3 wanderRoot = pawn.PositionHeld; - return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, this.wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, this.maxDanger)); + return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, maxDanger)); } public override float GetPriority(Pawn pawn) diff --git a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs index cd107ad..c948baf 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs @@ -29,19 +29,19 @@ protected override Job TryGiveJob(Pawn pawn) return null; } - Pawn pawn2 = this.FindPawnTarget(pawn); + Pawn pawn2 = FindPawnTarget(pawn); if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) { if (pawn2.InAggroMentalState) - return this.MeleeAttackJob(pawn2); + return MeleeAttackJob(pawn2); else - return this.FeedJob(pawn2); + return FeedJob(pawn2); } - Building building = this.FindTurretTarget(pawn); + Building building = FindTurretTarget(pawn); if (building != null) { - return this.MeleeAttackJob(building); + return MeleeAttackJob(building); } if (pawn2 != null) { @@ -58,7 +58,7 @@ protected override Job TryGiveJob(Pawn pawn) //Job job = DigUtility.PassBlockerJob(pawn, thing, cellBeforeBlocker, true); //if (job != null) //{ - return this.MeleeAttackJob(thing); + return MeleeAttackJob(thing); //} } IntVec3 loc = pawnPath.LastCellBeforeBlockerOrFinalCell(pawn.MapHeld); @@ -70,10 +70,10 @@ protected override Job TryGiveJob(Pawn pawn) return new Job(JobDefOf.Goto, randomCell); } } - Building buildingDoor = this.FindDoorTarget(pawn); + Building buildingDoor = FindDoorTarget(pawn); if (buildingDoor != null) { - return this.MeleeAttackJob(buildingDoor); + return MeleeAttackJob(buildingDoor); } return null; diff --git a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs index 8ccc2f0..c83b4cb 100644 --- a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs +++ b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs @@ -6,8 +6,8 @@ namespace Vampire { public class MentalState_Rotschreck : MentalState { - CompVampire vampComp => this.pawn.GetComp(); - Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); + CompVampire vampComp => pawn.GetComp(); + Need_Blood vampBlood => pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -19,7 +19,7 @@ public override void MentalStateTick() { base.MentalStateTick(); if (pawn.PositionHeld.Roofed(pawn.MapHeld)) - this.RecoverFromState(); + RecoverFromState(); //Room room = pawn.GetRoom(RegionType.Set_All); //if (room != null) //{ diff --git a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs index c9c02db..288b1c6 100644 --- a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs @@ -6,8 +6,8 @@ namespace Vampire { public class MentalState_VampireBeast : MentalState { - CompVampire vampComp => this.pawn.GetComp(); - Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); + CompVampire vampComp => pawn.GetComp(); + Need_Blood vampBlood => pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -20,9 +20,9 @@ public override void MentalStateTick() if (vampComp != null) { if (!vampComp.IsVampire) - this.RecoverFromState(); + RecoverFromState(); if (vampBlood.IsFull) - this.RecoverFromState(); + RecoverFromState(); } } diff --git a/Source/Vampires/Buildings/Building_Coffin.cs b/Source/Vampires/Buildings/Building_Coffin.cs index ea46fbf..b449cbe 100644 --- a/Source/Vampires/Buildings/Building_Coffin.cs +++ b/Source/Vampires/Buildings/Building_Coffin.cs @@ -23,7 +23,7 @@ public override IEnumerable GetGizmos() foreach (Gizmo g in base.GetGizmos()) yield return g; - Pawn p = (Pawn)this.ContainedThing; + Pawn p = (Pawn)ContainedThing; if (p == null) { p = this?.Corpse?.InnerPawn ?? null; diff --git a/Source/Vampires/Buildings/Building_HideyHole.cs b/Source/Vampires/Buildings/Building_HideyHole.cs index 9b0cc0c..84cc955 100644 --- a/Source/Vampires/Buildings/Building_HideyHole.cs +++ b/Source/Vampires/Buildings/Building_HideyHole.cs @@ -8,7 +8,7 @@ public class Building_HideyHole : Building_Grave public override void Open() { base.Open(); - this.Destroy(DestroyMode.Vanish); + Destroy(DestroyMode.Vanish); } } } diff --git a/Source/Vampires/Components/CompBloodItem.cs b/Source/Vampires/Components/CompBloodItem.cs index 52da951..cb4b88e 100644 --- a/Source/Vampires/Components/CompBloodItem.cs +++ b/Source/Vampires/Components/CompBloodItem.cs @@ -4,6 +4,6 @@ namespace Vampire { public class CompBloodItem : ThingComp { - public CompProperties_BloodItem Props => this.props as CompProperties_BloodItem; + public CompProperties_BloodItem Props => props as CompProperties_BloodItem; } } diff --git a/Source/Vampires/Components/CompProperties_BloodItem.cs b/Source/Vampires/Components/CompProperties_BloodItem.cs index 48ee56b..cc4e1ef 100644 --- a/Source/Vampires/Components/CompProperties_BloodItem.cs +++ b/Source/Vampires/Components/CompProperties_BloodItem.cs @@ -7,6 +7,6 @@ public class CompProperties_BloodItem : CompProperties { public BloodType bloodType = BloodType.LowBlood; public int bloodPoints = 1; - public CompProperties_BloodItem() => this.compClass = typeof(CompBloodItem); + public CompProperties_BloodItem() => compClass = typeof(CompBloodItem); } } diff --git a/Source/Vampires/Components/CompProperties_VampBed.cs b/Source/Vampires/Components/CompProperties_VampBed.cs index 4a0f72e..9d59c60 100644 --- a/Source/Vampires/Components/CompProperties_VampBed.cs +++ b/Source/Vampires/Components/CompProperties_VampBed.cs @@ -9,7 +9,7 @@ public class CompProperties_VampBed : CompProperties public CompProperties_VampBed() { - this.compClass = typeof(CompVampBed); + compClass = typeof(CompVampBed); } } } diff --git a/Source/Vampires/Components/CompVampBed.cs b/Source/Vampires/Components/CompVampBed.cs index eb355d4..7f09ced 100644 --- a/Source/Vampires/Components/CompVampBed.cs +++ b/Source/Vampires/Components/CompVampBed.cs @@ -12,22 +12,22 @@ public class CompVampBed : ThingComp { private Building_Bed bed; public Building_Bed Bed { get => bed; set => bed = value; } - public CompProperties_VampBed Props => this.props as CompProperties_VampBed; + public CompProperties_VampBed Props => props as CompProperties_VampBed; public override void PostSpawnSetup(bool respawningAfterLoad) { base.PostSpawnSetup(respawningAfterLoad); - if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (this.parent is Building b) + if (parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); - bed.SetFaction(this.parent.Faction); + GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); + bed.SetFaction(parent.Faction); } } @@ -36,14 +36,14 @@ public override IEnumerable CompFloatMenuOptions(Pawn selPawn) { //return base.CompFloatMenuOptions(selPawn); - if ((selPawn?.IsVampire() ?? false) && this.parent is Building_Grave g && !g.HasCorpse) + if ((selPawn?.IsVampire() ?? false) && parent is Building_Grave g && !g.HasCorpse) { yield return new FloatMenuOption("ROMV_EnterTorpor".Translate(new object[] { selPawn.Label }), delegate { - selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, this.parent)); + selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, parent)); }, MenuOptionPriority.Default, null, null, 0f, null, null); } } @@ -51,7 +51,7 @@ public override IEnumerable CompFloatMenuOptions(Pawn selPawn) public override void CompTickRare() { base.CompTickRare(); - if (this.parent is Building_Grave g) + if (parent is Building_Grave g) { if (g.HasAnyContents) { @@ -68,16 +68,16 @@ public override void CompTickRare() return; } - if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (this.parent is Building b) + if (parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); - bed.SetFaction(this.parent.Faction); + GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); + bed.SetFaction(parent.Faction); } if (bed != null && bed.Spawned && g.assignedPawn != null && ((bed?.AssignedPawns?.Contains(g.assignedPawn) ?? false) == false)) { @@ -102,7 +102,7 @@ public override void PostDeSpawn(Map map) public override void PostExposeData() { base.PostExposeData(); - Scribe_References.Look(ref this.bed, "bed"); + Scribe_References.Look(ref bed, "bed"); } } } diff --git a/Source/Vampires/Components/CompVampire.cs b/Source/Vampires/Components/CompVampire.cs index 95b4268..b4ec65e 100644 --- a/Source/Vampires/Components/CompVampire.cs +++ b/Source/Vampires/Components/CompVampire.cs @@ -59,7 +59,7 @@ public IntVec3 VampLastHomePoint if (vampLastHomePoint == null || vampLastHomeCheck < Find.TickManager.TicksGame) { vampLastHomeCheck = Find.TickManager.TicksGame + 500; - vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(this.Pawn); + vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(Pawn); } return vampLastHomePoint.Value; } @@ -124,7 +124,7 @@ public SkillSheet Sheet { if (sheet == null) { - sheet = new SkillSheet(this.Pawn); + sheet = new SkillSheet(Pawn); } return sheet; } @@ -138,7 +138,7 @@ public List Childer if (childer == null) { childer = new List(); - if (this.AbilityUser?.relations?.DirectRelations is List rels) + if (AbilityUser?.relations?.DirectRelations is List rels) { foreach (DirectPawnRelation rel in rels) { @@ -192,16 +192,16 @@ public BloodlineDef Bloodline { return bloodline; } set => bloodline = value; } public int Generation { get => generation; set => generation = value; } - public bool Thinblooded => this.generation > 13; - public Need_Blood BloodPool => this.AbilityUser?.needs?.TryGetNeed() ?? null; + public bool Thinblooded => generation > 13; + public Need_Blood BloodPool => AbilityUser?.needs?.TryGetNeed() ?? null; public float TrueCombatPower { get { float result = 0; - result += this.AbilityUser.kindDef.combatPower; + result += AbilityUser.kindDef.combatPower; result += 4000; - for (int i = 1; i <= this.generation; i++) + for (int i = 1; i <= generation; i++) { if (i == 2) { result -= 3000; continue; } if (i < 7) { result -= 100; continue; } @@ -215,13 +215,13 @@ public bool InSunlight { get { - if (this.AbilityUser.Spawned) + if (AbilityUser.Spawned) { - Map curMap = this.AbilityUser.Map; + Map curMap = AbilityUser.Map; if (curMap != null) { - if (VampireUtility.IsDaylight(this.AbilityUser) - && !this.AbilityUser.PositionHeld.Roofed(curMap)) + if (VampireUtility.IsDaylight(AbilityUser) + && !AbilityUser.PositionHeld.Roofed(curMap)) { return true; } @@ -242,8 +242,8 @@ public void Notify_LevelUp(bool sendNotification) { if (XP <= 0) XP = 1; Level++; - if (sendNotification && this.IsVampire && this.AbilityUser != null && this.AbilityUser.Spawned && this.AbilityUser.Faction == Faction.OfPlayerSilentFail) - Messages.Message("ROMV_LevelUp".Translate(this.AbilityUser), new RimWorld.Planet.GlobalTargetInfo(this.AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); + if (sendNotification && IsVampire && AbilityUser != null && AbilityUser.Spawned && AbilityUser.Faction == Faction.OfPlayerSilentFail) + Messages.Message("ROMV_LevelUp".Translate(AbilityUser), new RimWorld.Planet.GlobalTargetInfo(AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); } public void Notify_ResetAbilities() { @@ -252,7 +252,7 @@ public void Notify_ResetAbilities() public void Notify_UpdateAbilities() { - if (this.AbilityUser.IsVampire() && this is CompVampire) + if (AbilityUser.IsVampire() && this is CompVampire) { //Disciplines Skill Sheet if (Sheet?.Disciplines is List dd && !dd.NullOrEmpty()) @@ -263,9 +263,9 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef vd in vdd) { - if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) + if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) { - this.AddPawnAbility(vd); + AddPawnAbility(vd); } } @@ -277,22 +277,22 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef bloodVAD in bloodVADs) { - if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) + if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) { - this.AddPawnAbility(bloodVAD); + AddPawnAbility(bloodVAD); } } } //Regenerate Limb if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_RegenerateLimb) == null) { - this.AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); + AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); } //Vampiric Healing if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_VampiricHealing) == null) { - this.AddPawnAbility(VampDefOf.ROMV_VampiricHealing); + AddPawnAbility(VampDefOf.ROMV_VampiricHealing); } } } @@ -300,47 +300,47 @@ public void Notify_UpdateAbilities() public void GiveFeedJob(Pawn victim) { Job feedJob = new Job(VampDefOf.ROMV_Feed, victim); - this.AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); + AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); } public void GiveEmbraceJob(Pawn newChilde) { Job embraceJob = new Job(VampDefOf.ROMV_Embrace, newChilde); - this.AbilityUser.jobs.TryTakeOrderedJob(embraceJob, JobTag.Misc); + AbilityUser.jobs.TryTakeOrderedJob(embraceJob, JobTag.Misc); } public void InitializeVampirism(Pawn newSire, BloodlineDef newBloodline = null, int newGeneration = -1, bool firstVampire = false) { //Log.Message("Init"); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); - VampireGen.TryGiveVampirismHediff(this.AbilityUser, newGeneration, newBloodline, newSire, firstVampire); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); + VampireGen.TryGiveVampirismHediff(AbilityUser, newGeneration, newBloodline, newSire, firstVampire); if (!firstVampire) { - this.bloodline = newBloodline;// sireComp.Bloodline; - this.generation = newGeneration;// + 1; - this.sire = newSire; - VampireRelationUtility.SetSireChildeRelations(this.AbilityUser, newSire?.VampComp() ?? null, newGeneration); + bloodline = newBloodline;// sireComp.Bloodline; + generation = newGeneration;// + 1; + sire = newSire; + VampireRelationUtility.SetSireChildeRelations(AbilityUser, newSire?.VampComp() ?? null, newGeneration); } else { - this.generation = 1; - this.bloodline = VampDefOf.ROMV_Caine; - this.sire = null; + generation = 1; + bloodline = VampDefOf.ROMV_Caine; + sire = null; } - VampireGen.TryGiveVampireAdditionalHediffs(this.AbilityUser); - if (VampireUtility.IsDaylight(this.AbilityUser)) VampireUtility.MakeSleepy(this.AbilityUser); - VampireUtility.AdjustTimeTables(this.AbilityUser); - - this.sheet = new SkillSheet(this.AbilityUser); - this.sheet.InitializeDisciplines(); - this.Notify_LevelUp(false); - this.AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" + VampireGen.TryGiveVampireAdditionalHediffs(AbilityUser); + if (VampireUtility.IsDaylight(AbilityUser)) VampireUtility.MakeSleepy(AbilityUser); + VampireUtility.AdjustTimeTables(AbilityUser); + + sheet = new SkillSheet(AbilityUser); + sheet.InitializeDisciplines(); + Notify_LevelUp(false); + AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" if (!bloodline.allowsHair) AbilityUser.story.hairDef = DefDatabase.GetNamed("Shaved"); if (this?.AbilityUser?.playerSettings != null) - this.AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; + AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; } public override void CompTick() @@ -363,7 +363,7 @@ public void SunlightWatcherTick() try { //Log.Message("SunlightWatcher"); - Pawn p = this.Pawn; + Pawn p = Pawn; Map m = p.MapHeld; IntVec3 i = p.PositionHeld; if (p.ParentHolder.IsEnclosingContainer()) @@ -403,7 +403,7 @@ public void Notify_Embraced(CompVampire sireComp) InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1, false); Messages.Message("ROMV_EmbracedSuccessfully".Translate(new object[] { - this.AbilityUser.LabelShort, + AbilityUser.LabelShort, sireComp.AbilityUser.LabelShort, sireComp.Bloodline.LabelCap }), MessageTypeDefOf.PositiveEvent); @@ -413,12 +413,12 @@ public void Notify_Diablerie(CompVampire victim) { Messages.Message("ROMV_DiablerieSuccessfully".Translate(new object[] { - this.AbilityUser.LabelShort, + AbilityUser.LabelShort, victim.AbilityUser.LabelShort }), MessageTypeDefOf.PositiveEvent); - this.Generation = Math.Min(this.Generation, victim.Generation); - this.Souls.Add(victim.AbilityUser); - VampireThoughtUtility.GiveThoughtsForDiablerie(this.AbilityUser); + Generation = Math.Min(Generation, victim.Generation); + Souls.Add(victim.AbilityUser); + VampireThoughtUtility.GiveThoughtsForDiablerie(AbilityUser); } #endregion Methods @@ -443,7 +443,7 @@ public override bool AllowStackWith(Thing other) } - public override float GrappleModifier => (IsVampire) ? 20 - this.generation : 0; + public override float GrappleModifier => (IsVampire) ? 20 - generation : 0; @@ -451,13 +451,13 @@ public override IEnumerable CompGetGizmosExtra() { if (Find.Selector.NumSelected == 1) { - for (int i = 0; i < this.AbilityData.AllPowers.Count; i++) + for (int i = 0; i < AbilityData.AllPowers.Count; i++) { - if (this.AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); + if (AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); } if (AbilityUser.Downed && AbilityUser.IsVampire()) { - Vampire.VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); + VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); yield return new Command_Action() { defaultLabel = bloodHeal.label, @@ -467,10 +467,10 @@ public override IEnumerable CompGetGizmosExtra() { AbilityUser.Drawer.Notify_DebugAffected(); MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess, -1f); - this.BloodPool.AdjustBlood(-bloodHeal.bloodCost); - VampireUtility.Heal(this.AbilityUser); + BloodPool.AdjustBlood(-bloodHeal.bloodCost); + VampireUtility.Heal(AbilityUser); }, - disabled = this.BloodPool.CurBloodPoints <= 0 + disabled = BloodPool.CurBloodPoints <= 0 }; } } @@ -479,22 +479,22 @@ public override IEnumerable CompGetGizmosExtra() public override void PostExposeData() { - Scribe_Defs.Look(ref this.bloodline, "bloodline"); - Scribe_Values.Look(ref this.generation, "generation"); - Scribe_Values.Look(ref this.level, "level", 0); - Scribe_Values.Look(ref this.xp, "xp", 0); - Scribe_Values.Look(ref this.abilityPoints, "abilityPoints", 0); - Scribe_Values.Look(ref this.curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); - Scribe_References.Look(ref this.sire, "sire"); - Scribe_Collections.Look(ref this.souls, "souls", LookMode.Reference); - Scribe_Deep.Look(ref this.sheet, "sheet", new object[] { this.AbilityUser }); + Scribe_Defs.Look(ref bloodline, "bloodline"); + Scribe_Values.Look(ref generation, "generation"); + Scribe_Values.Look(ref level, "level", 0); + Scribe_Values.Look(ref xp, "xp", 0); + Scribe_Values.Look(ref abilityPoints, "abilityPoints", 0); + Scribe_Values.Look(ref curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); + Scribe_References.Look(ref sire, "sire"); + Scribe_Collections.Look(ref souls, "souls", LookMode.Reference); + Scribe_Deep.Look(ref sheet, "sheet", new object[] { AbilityUser }); base.PostExposeData(); if (Scribe.mode == LoadSaveMode.PostLoadInit) { - this.AbilityData.Powers.Clear(); - if (this.AbilityUser.IsVampire() && (base.AbilityData.Powers == null || base.AbilityData.Powers.NullOrEmpty())) + AbilityData.Powers.Clear(); + if (AbilityUser.IsVampire() && (AbilityData.Powers == null || AbilityData.Powers.NullOrEmpty())) { - if (this.Sheet.Disciplines is List dd && !dd.NullOrEmpty()) + if (Sheet.Disciplines is List dd && !dd.NullOrEmpty()) { foreach (Discipline d in dd) { @@ -502,12 +502,12 @@ public override void PostExposeData() { foreach (VitaeAbilityDef vd in vds) { - this.AddPawnAbility(vd); + AddPawnAbility(vd); } } } } - this.Notify_UpdateAbilities(); + Notify_UpdateAbilities(); } } } diff --git a/Source/Vampires/Defs/BloodlineDef.cs b/Source/Vampires/Defs/BloodlineDef.cs index 0572f54..10d1530 100644 --- a/Source/Vampires/Defs/BloodlineDef.cs +++ b/Source/Vampires/Defs/BloodlineDef.cs @@ -27,12 +27,12 @@ public EmbraceWorker EmbraceWorker { get { - if (this.embraceWorkerInt == null) + if (embraceWorkerInt == null) { - this.embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(this.embraceWorker); - this.embraceWorkerInt.def = this; + embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(embraceWorker); + embraceWorkerInt.def = this; } - return this.embraceWorkerInt; + return embraceWorkerInt; } } diff --git a/Source/Vampires/Defs/ScenPart_GameStartNight.cs b/Source/Vampires/Defs/ScenPart_GameStartNight.cs index a0863e9..2d0918f 100644 --- a/Source/Vampires/Defs/ScenPart_GameStartNight.cs +++ b/Source/Vampires/Defs/ScenPart_GameStartNight.cs @@ -14,16 +14,16 @@ public class ScenPart_GameStartNight : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f); - this.text = Widgets.TextArea(scenPartRect, this.text, false); + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f); + text = Widgets.TextArea(scenPartRect, text, false); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.text, "text", null, false); - Scribe_Values.Look(ref this.textKey, "textKey", null, false); - Scribe_Defs.Look(ref this.closeSound, "closeSound"); + Scribe_Values.Look(ref text, "text", null, false); + Scribe_Values.Look(ref textKey, "textKey", null, false); + Scribe_Defs.Look(ref closeSound, "closeSound"); } public override void PostGameStart() diff --git a/Source/Vampires/Discipline.cs b/Source/Vampires/Discipline.cs index 2efb326..4d470b9 100644 --- a/Source/Vampires/Discipline.cs +++ b/Source/Vampires/Discipline.cs @@ -42,9 +42,9 @@ public void UpdateAbilities() public void Notify_Reset(Pawn p) { - p.VampComp().AbilityPoints += this.points; - this.points = 0; - this.level = 0; + p.VampComp().AbilityPoints += points; + points = 0; + level = 0; UpdateAbilities(); } @@ -78,10 +78,10 @@ public Discipline(DisciplineDef def) public void ExposeData() { - Scribe_Values.Look(ref this.level, "level"); - Scribe_Values.Look(ref this.points, "points"); - Scribe_Values.Look(ref this.prevPoints, "prevPoints"); - Scribe_Defs.Look(ref this.def, "def"); + Scribe_Values.Look(ref level, "level"); + Scribe_Values.Look(ref points, "points"); + Scribe_Values.Look(ref prevPoints, "prevPoints"); + Scribe_Defs.Look(ref def, "def"); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs index 696072c..ccd0774 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs @@ -13,7 +13,7 @@ public override void Effect(Pawn target) IntVec3 loc; if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal, null)) { - VampireUtility.SummonEffect(loc, this.CasterPawn.Map, this.CasterPawn, 10f); + VampireUtility.SummonEffect(loc, CasterPawn.Map, CasterPawn, 10f); for (int i = 0; i < count; i++) target.Map.wildSpawner.SpawnRandomWildAnimalAt(loc); diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs index abde72c..6621b8c 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs @@ -8,15 +8,15 @@ public class DisciplineEffect_Communion : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { for (int i = 1; i <= 3; i++) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BatSpectralKind, Faction.OfPlayer); - p.Master = this.CasterPawn; - VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 3f); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + p.Master = CasterPawn; + VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 3f); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs index 0b805d7..9d4de8e 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_NightwispRavens : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - VampireUtility.SummonEffect(target.PositionHeld, this.CasterPawn.Map, this.CasterPawn, 2f); + VampireUtility.SummonEffect(target.PositionHeld, CasterPawn.Map, CasterPawn, 2f); HealthUtility.AdjustSeverity(target, VampDefOf.ROMV_NightwispRavens, 1.0f); } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs index 0ddefb5..cb4ea97 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs @@ -8,12 +8,12 @@ public class DisciplineEffect_SpectralWolf : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_WolfSpectral, Faction.OfPlayer); - VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 2f); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 2f); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs index b907d7b..edf9626 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs @@ -10,7 +10,7 @@ public class HediffCompProperties_TickGraphic : HediffCompProperties public HediffCompProperties_TickGraphic() { - this.compClass = typeof(HediffComp_TickGraphic); + compClass = typeof(HediffComp_TickGraphic); } } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs index bd7d27f..4f46df4 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs @@ -17,7 +17,7 @@ public HediffCompProperties_TickGraphic Props { get { - return (HediffCompProperties_TickGraphic)this.props; + return (HediffCompProperties_TickGraphic)props; } } @@ -35,13 +35,13 @@ public override void CompPostTick(ref float severityAdjustment) curGraphicIndex = 0; } } - CurGraphic = this.Props.cycleGraphics[curGraphicIndex].Graphic; + CurGraphic = Props.cycleGraphics[curGraphicIndex].Graphic; if (CurGraphic != null) { - Material material = this.CurGraphic.MatSingle; + Material material = CurGraphic.MatSingle; Vector3 s = new Vector3(CurGraphic.drawSize.x, 1f, CurGraphic.drawSize.y); Matrix4x4 matrix = default(Matrix4x4); - matrix.SetTRS(this.Pawn.DrawPos, Quaternion.identity, s); + matrix.SetTRS(Pawn.DrawPos, Quaternion.identity, s); Graphics.DrawMesh(MeshPool.plane10, matrix, material, 0); } } @@ -49,8 +49,8 @@ public override void CompPostTick(ref float severityAdjustment) public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.curGraphicIndex, "curGraphicIndex", 0); - Scribe_Values.Look(ref this.activated, "activated", false); + Scribe_Values.Look(ref curGraphicIndex, "curGraphicIndex", 0); + Scribe_Values.Look(ref activated, "activated", false); } } } diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index fdc99e9..8629247 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -29,11 +29,11 @@ public override void Tick() { setup = true; - if (this.def == VampDefOf.ROMV_BatSpectralRace) + if (def == VampDefOf.ROMV_BatSpectralRace) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -41,21 +41,21 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } - if (this.def == VampDefOf.ROMV_BloodMistRace) + if (def == VampDefOf.ROMV_BloodMistRace) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -63,13 +63,13 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } @@ -79,11 +79,11 @@ public override void Tick() if (ticksUntilNextTryGiveJob < 0) { ticksUntilNextTryGiveJob = new IntRange(500, 700).RandomInRange; - if (this.def == VampDefOf.ROMV_BatSpectralRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndReturn) + if (def == VampDefOf.ROMV_BatSpectralRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndReturn) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -91,22 +91,22 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } - if (this.def == VampDefOf.ROMV_BloodMistRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndDestroy) + if (def == VampDefOf.ROMV_BloodMistRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndDestroy) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -114,20 +114,20 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob, JobTag.Misc); } } } } ticksLeft--; - if (ticksLeft <= 0) this.Destroy(); + if (ticksLeft <= 0) Destroy(); if (Spawned) { @@ -139,14 +139,14 @@ public override void Tick() else { LocalTargetInfo target = this; - if (this.Spawned) + if (Spawned) { effecter.EffectTick(this, TargetInfo.Invalid); } MoteProgressBar mote = ((SubEffecter_ProgressBar)effecter.children[0]).mote; if (mote != null) { - float result = 1f - (float)(PawnTemporary.ticksToDestroy - this.ticksLeft) / (float)PawnTemporary.ticksToDestroy; + float result = 1f - (float)(ticksToDestroy - ticksLeft) / (float)ticksToDestroy; mote.progress = Mathf.Clamp01(result); mote.offsetZ = -0.5f; @@ -160,15 +160,15 @@ public override void Tick() public override void DeSpawn() { if (effecter != null) effecter.Cleanup(); - VampireUtility.SummonEffect(this.PositionHeld, this.MapHeld, this, 2f); + VampireUtility.SummonEffect(PositionHeld, MapHeld, this, 2f); base.DeSpawn(); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0); - Scribe_References.Look(ref this.master, "master"); + Scribe_Values.Look(ref ticksLeft, "ticksLeft", 0); + Scribe_References.Look(ref master, "master"); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs index fa77c6e..953eab7 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs @@ -8,14 +8,14 @@ public class DisciplineEffect_ReadMind : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, this.CasterPawn, null); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, CasterPawn, null); if (hediff.TryGetComp() is HediffComp_ReadMind rm) { rm.MindBeingRead = target; } hediff.Severity = 1.0f; - this.CasterPawn.health.AddHediff(hediff, null, null); + CasterPawn.health.AddHediff(hediff, null, null); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs index e01c2b8..29b2c12 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs @@ -24,7 +24,7 @@ public virtual void Effect() { if (defsToCheck.Contains(h.def)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap), -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap), -1f); p.health.hediffSet.hediffs.Remove(h); } } @@ -33,15 +33,15 @@ public virtual void Effect() if (t.Cell != default(IntVec3) && t.Cell is IntVec3 c) { // Verse.FogGrid - if (this.CasterPawn.Map.fogGrid.IsFogged(c)) + if (CasterPawn.Map.fogGrid.IsFogged(c)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - this.CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); return; } else { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs index b52781c..5a70ff9 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs @@ -9,19 +9,19 @@ public class DisciplineEffect_Hunger : AbilityUser.Verb_UseAbility public virtual void Effect() { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - IntVec3 curCell = this.CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; - if (curCell.GetThingList(this.CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) + IntVec3 curCell = CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; + if (curCell.GetThingList(CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) { List temp = new List(things); foreach (Thing t in temp) { if (t.def.defName == "FilthBlood") { - this.CasterPawn.BloodNeed().AdjustBlood(1); + CasterPawn.BloodNeed().AdjustBlood(1); t.Destroy(DestroyMode.Vanish); } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs index b735897..3f1e163 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs @@ -8,11 +8,11 @@ public class DisciplineEffect_UnstoppableTide : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BloodMistKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs index 7691d91..2adaaa7 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_Mesmerise : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - if (target.Faction == this.CasterPawn.Faction) //To avoid throwing red errors + if (target.Faction == CasterPawn.Faction) //To avoid throwing red errors target.ClearMind(); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs index 087d732..a88644f 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs @@ -10,7 +10,7 @@ public override void Effect(Pawn target) Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target, null); hediff.Severity = 1.0f; target.health.AddHediff(hediff, null, null); - hediff.TryGetComp().ActivateEffect(this.CasterPawn); + hediff.TryGetComp().ActivateEffect(CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs index 15612ca..54fcaab 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs @@ -11,9 +11,9 @@ public virtual void Effect() if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); - flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); + flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs index 54150e1..ce56489 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs @@ -12,8 +12,8 @@ public virtual void Effect() Pawn caster = CasterPawn; LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); - flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); + flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); }, "LaunchingFlyer", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs index d04499d..668f7f5 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs @@ -11,11 +11,11 @@ public virtual void Effect() { LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); flyingObject.damageLaunched = false; flyingObject.timesToDamage = 3; flyingObject.explosion = true; - flyingObject.Launch(this.CasterPawn, target, this.CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, this.CasterPawn)); + flyingObject.Launch(CasterPawn, target, CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, CasterPawn)); }, "LaunchingFlyerSkyFall", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs index b21e735..30a40a8 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs @@ -8,7 +8,7 @@ public class DisciplineEffect_WingBuffet : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, this.CasterPawn); + GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs index 8a88a03..be924fd 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs @@ -9,11 +9,11 @@ public class DisciplineEffect_ArmOfTheAbyss : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_AbyssalArmKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs index 3ad8b19..6845224 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs @@ -8,16 +8,16 @@ public class DisciplineEffect_EnterTheAbyss : AbilityUser.Verb_UseAbility { public void Effect() { - this.CasterPawn.Drawer.Notify_DebugAffected(); + CasterPawn.Drawer.Notify_DebugAffected(); if (TargetsAoE.FirstOrDefault(x => x is LocalTargetInfo y && y.Cell != default(IntVec3)) is LocalTargetInfo t) { - if (t.Cell.Standable(this.CasterPawn.MapHeld)) + if (t.Cell.Standable(CasterPawn.MapHeld)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - this.CasterPawn.Position = t.Cell; + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + CasterPawn.Position = t.Cell; return; } - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); } } @@ -29,14 +29,14 @@ public override bool CanHitTargetFrom(IntVec3 root, LocalTargetInfo targ) protected override bool TryCastShot() { - this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); return base.TryCastShot(); } public override void PostCastShot(bool inResult, out bool outResult) { - this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); outResult = true; } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs index 67de022..0afcf4c 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_BatForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs index 890ea69..ea5924f 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_MistForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs index 7654191..4230994 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_WarForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs index ffc0a46..59aad0e 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs @@ -24,7 +24,7 @@ public override void Impact_Override(Thing hitThing) for (int j = 0; j < 4; j++) { if (!p.Dead) - p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, this.Caster, parts.RandomElement())); + p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, Caster, parts.RandomElement())); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs index 887cbe5..288670d 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs @@ -18,7 +18,7 @@ public override void Impact_Override(Thing hitThing) { Projectile_BloodReturner projectile = (Projectile_BloodReturner)GenSpawn.Spawn(ThingDef.Named("ROMV_BloodProjectile_Returner"), hitThing.PositionHeld, hitThing.MapHeld); - projectile.Launch(hitThing, this.origin.ToIntVec3(), null); + projectile.Launch(hitThing, origin.ToIntVec3(), null); } } } diff --git a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs index 98ff56b..a1904ec 100644 --- a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs +++ b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs @@ -7,9 +7,9 @@ public class Verb_UseAbilityPawnEffect : AbilityUser.Verb_UseAbility { public virtual void Effect(Pawn target) { - if (this.Ability.Def.MainVerb.isViolent && target.Faction != this.CasterPawn.Faction) + if (Ability.Def.MainVerb.isViolent && target.Faction != CasterPawn.Faction) { - target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, this.CasterPawn)); + target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, CasterPawn)); } target.Drawer.Notify_DebugAffected(); MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); @@ -18,7 +18,7 @@ public virtual void Effect(Pawn target) public override void PostCastShot(bool inResult, out bool outResult) { if (inResult && - this.TargetsAoE[0].Thing is Pawn p) + TargetsAoE[0].Thing is Pawn p) { Effect(p); outResult = true; diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs index 185e010..1a9b406 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs @@ -8,7 +8,7 @@ public class DisciplineEffect_CorruptForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { - if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) { base.Effect(target); int boolSel = Rand.Range(0, 2); diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs index 6f22ebf..6718b02 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_PerfectForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs index f3ca0b2..151b990 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs @@ -7,13 +7,13 @@ public class DisciplineEffect_ShapeMonstrosity : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) { IntVec3 curLoc = target.PositionHeld; Map curMap = target.MapHeld; Name tempName = target.Name; target.DeSpawn(); - Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, this.CasterPawn.Faction); + Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, CasterPawn.Faction); GenSpawn.Spawn(p, curLoc, curMap); p.Name = tempName; } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs index 67958db..4b25713 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_ZuloForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); } } } diff --git a/Source/Vampires/FlyingObject.cs b/Source/Vampires/FlyingObject.cs index 42f5124..f9a4143 100644 --- a/Source/Vampires/FlyingObject.cs +++ b/Source/Vampires/FlyingObject.cs @@ -24,7 +24,7 @@ protected int StartingTicksToImpact { get { - int num = Mathf.RoundToInt((this.origin - this.destination).magnitude / (this.speed / 100f)); + int num = Mathf.RoundToInt((origin - destination).magnitude / (speed / 100f)); if (num < 1) { num = 1; @@ -38,7 +38,7 @@ protected IntVec3 DestinationCell { get { - return new IntVec3(this.destination); + return new IntVec3(destination); } } @@ -46,8 +46,8 @@ public virtual Vector3 ExactPosition { get { - Vector3 b = (this.destination - this.origin) * (1f - (float)this.ticksToImpact / (float)this.StartingTicksToImpact); - return this.origin + b + Vector3.up * this.def.Altitude; + Vector3 b = (destination - origin) * (1f - (float)ticksToImpact / (float)StartingTicksToImpact); + return origin + b + Vector3.up * def.Altitude; } } @@ -55,7 +55,7 @@ public virtual Quaternion ExactRotation { get { - return Quaternion.LookRotation(this.destination - this.origin); + return Quaternion.LookRotation(destination - origin); } } @@ -63,32 +63,32 @@ public override Vector3 DrawPos { get { - return this.ExactPosition; + return ExactPosition; } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.origin, "origin", default(Vector3), false); - Scribe_Values.Look(ref this.destination, "destination", default(Vector3), false); - Scribe_Values.Look(ref this.ticksToImpact, "ticksToImpact", 0, false); - Scribe_Values.Look(ref this.timesToDamage, "timesToDamage", 0, false); - Scribe_Values.Look(ref this.damageLaunched, "damageLaunched", true); - Scribe_Values.Look(ref this.explosion, "explosion", false); - Scribe_References.Look(ref this.assignedTarget, "assignedTarget", false); - Scribe_References.Look(ref this.launcher, "launcher", false); - Scribe_References.Look(ref this.flyingThing, "flyingThing"); + Scribe_Values.Look(ref origin, "origin", default(Vector3), false); + Scribe_Values.Look(ref destination, "destination", default(Vector3), false); + Scribe_Values.Look(ref ticksToImpact, "ticksToImpact", 0, false); + Scribe_Values.Look(ref timesToDamage, "timesToDamage", 0, false); + Scribe_Values.Look(ref damageLaunched, "damageLaunched", true); + Scribe_Values.Look(ref explosion, "explosion", false); + Scribe_References.Look(ref assignedTarget, "assignedTarget", false); + Scribe_References.Look(ref launcher, "launcher", false); + Scribe_References.Look(ref flyingThing, "flyingThing"); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing, DamageInfo? impactDamage) { - this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing, impactDamage); + Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing, impactDamage); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing) { - this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing); + Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing); } public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing flyingThing, DamageInfo? newDamageInfo = null) @@ -98,37 +98,37 @@ public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing f this.launcher = launcher; this.origin = origin; - this.impactDamage = newDamageInfo; + impactDamage = newDamageInfo; this.flyingThing = flyingThing; if (targ.Thing != null) { - this.assignedTarget = targ.Thing; + assignedTarget = targ.Thing; } - this.destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); - this.ticksToImpact = this.StartingTicksToImpact; + destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); + ticksToImpact = StartingTicksToImpact; } public override void Tick() { base.Tick(); - Vector3 exactPosition = this.ExactPosition; - this.ticksToImpact--; - if (!this.ExactPosition.InBounds(base.Map)) + Vector3 exactPosition = ExactPosition; + ticksToImpact--; + if (!ExactPosition.InBounds(Map)) { - this.ticksToImpact++; - base.Position = this.ExactPosition.ToIntVec3(); - this.Destroy(DestroyMode.Vanish); + ticksToImpact++; + Position = ExactPosition.ToIntVec3(); + Destroy(DestroyMode.Vanish); return; } - base.Position = this.ExactPosition.ToIntVec3(); - if (this.ticksToImpact <= 0) + Position = ExactPosition.ToIntVec3(); + if (ticksToImpact <= 0) { - if (this.DestinationCell.InBounds(base.Map)) + if (DestinationCell.InBounds(Map)) { - base.Position = this.DestinationCell; + Position = DestinationCell; } - this.ImpactSomething(); + ImpactSomething(); return; } @@ -140,36 +140,36 @@ public override void Draw() { if (flyingThing is Pawn) { - if (this.DrawPos == null) return; - if (!this.DrawPos.ToIntVec3().IsValid) return; + if (DrawPos == null) return; + if (!DrawPos.ToIntVec3().IsValid) return; Pawn pawn = flyingThing as Pawn; - pawn.Drawer.DrawAt(this.DrawPos); + pawn.Drawer.DrawAt(DrawPos); //Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.graphic.MatFront, 0); } else { - Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.DrawMatSingle, 0); + Graphics.DrawMesh(MeshPool.plane10, DrawPos, ExactRotation, flyingThing.def.DrawMatSingle, 0); } - base.Comps_PostDraw(); + Comps_PostDraw(); } } private void ImpactSomething() { - if (this.assignedTarget != null) + if (assignedTarget != null) { - Pawn pawn = this.assignedTarget as Pawn; - if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (this.origin - this.destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) + Pawn pawn = assignedTarget as Pawn; + if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (origin - destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) { - this.Impact(null); + Impact(null); return; } - this.Impact(this.assignedTarget); + Impact(assignedTarget); return; } else { - this.Impact(null); + Impact(null); return; } } @@ -183,7 +183,7 @@ protected virtual void Impact(Thing hitThing) if (hitThing == null) { - if (this.Position.GetThingList(this.Map).FirstOrDefault(x => x == this.assignedTarget) is Pawn p) + if (Position.GetThingList(Map).FirstOrDefault(x => x == assignedTarget) is Pawn p) { hitThing = p; @@ -200,11 +200,11 @@ protected virtual void Impact(Thing hitThing) else hitThing.TakeDamage(impactDamage.Value); if (explosion) - GenExplosion.DoExplosion(this.Position, this.Map, 0.9f, DamageDefOf.Stun, this); + GenExplosion.DoExplosion(Position, Map, 0.9f, DamageDefOf.Stun, this); } - GenSpawn.Spawn(flyingThing, this.Position, this.Map); - this.Destroy(DestroyMode.Vanish); + GenSpawn.Spawn(flyingThing, Position, Map); + Destroy(DestroyMode.Vanish); } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index 1238692..14d2b8d 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -400,7 +400,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra dReason = "ROMV_NoBloodRemaining".Translate(); } - Vampire.VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); + VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); if (!AbilityUser?.Dead ?? false) { @@ -419,7 +419,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra }; } - Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (AbilityUser?.Corpse?.GetRotStage() < RotStage.Dessicated) { yield return new Command_Action() @@ -654,13 +654,13 @@ public static bool Vamp_LovinFoodFix(Pawn pawn, Pawn partner, ref float __result __result = -1f; return false; } - float num = HarmonyPatches.LovinMtbSinglePawnFactor(pawn); + float num = LovinMtbSinglePawnFactor(pawn); if (num <= 0f) { __result = -1f; return false; } - float num2 = HarmonyPatches.LovinMtbSinglePawnFactor(partner); + float num2 = LovinMtbSinglePawnFactor(partner); if (num2 <= 0f) { __result = -1f; @@ -992,7 +992,7 @@ public static void GetGizmos_PostFix(Pawn __instance, ref IEnumerable __r HediffComp_Shield shield = shieldHediff.TryGetComp(); if (shield != null) { - __result = __result.Concat(gizmoGetter(shield)); + __result = __result.Concat(gizmoGetter(shield)); } } } @@ -1008,7 +1008,7 @@ public static bool Vamp_CanVisit(ref bool __result, Pawn pawn, Pawn sick, JoyCat { __result = sick.IsColonist && !sick.Dead && pawn != sick && sick.InBed() && sick.Awake() && !sick.IsForbidden(pawn) && sick.needs.joy != null && sick.needs.joy.CurCategory <= maxPatientJoy && InteractionUtility.CanReceiveInteraction(sick) && - pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None, 1, -1, null, false) && !HarmonyPatches.AboutToRecover(sick); + pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None, 1, -1, null, false) && !AboutToRecover(sick); return false; } return true; diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs index 2b33f9a..f97147e 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs @@ -27,7 +27,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (Default)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (!pawn.IsVampire()) @@ -44,11 +44,11 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (w/Settings)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { //pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); - Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Bloodlines(pawn))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Bloodlines(pawn))); //DebugTools.curTool = null; } })}); @@ -58,7 +58,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Remove Vampirism", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (pawn.IsVampire()) @@ -85,7 +85,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(1); @@ -97,7 +97,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Drain Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(-1); @@ -110,7 +110,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add XP (100)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.VampComp() is CompVampire v) { v.XP += 100; @@ -132,7 +132,7 @@ private static List Options_Bloodlines(Pawn p) { list.Add(new DebugMenuOption(current.LabelCap, DebugMenuOptionMode.Action, delegate { - Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Generation(p, current))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Generation(p, current))); })); } diff --git a/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs b/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs index 5889068..4204e14 100644 --- a/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs +++ b/Source/Vampires/Hediffs/Gizmo_HediffShieldStatus.cs @@ -22,21 +22,21 @@ public override float Width public override GizmoResult GizmoOnGUI(Vector2 topLeft) { - Rect overRect = new Rect(topLeft.x, topLeft.y, this.Width, 75f); + Rect overRect = new Rect(topLeft.x, topLeft.y, Width, 75f); Find.WindowStack.ImmediateWindow(984688, overRect, WindowLayer.GameUI, delegate { Rect rect = overRect.AtZero().ContractedBy(6f); Rect rect2 = rect; rect2.height = overRect.height / 2f; Text.Font = GameFont.Tiny; - Widgets.Label(rect2, this.shield.labelCap); + Widgets.Label(rect2, shield.labelCap); Rect rect3 = rect; rect3.yMin = overRect.height / 2f; - float fillPercent = this.shield.Energy / Mathf.Max(1f, this.shield.EnergyMax); - Widgets.FillableBar(rect3, fillPercent, Gizmo_HediffShieldStatus.FullShieldBarTex, Gizmo_HediffShieldStatus.EmptyShieldBarTex, false); + float fillPercent = shield.Energy / Mathf.Max(1f, shield.EnergyMax); + Widgets.FillableBar(rect3, fillPercent, FullShieldBarTex, EmptyShieldBarTex, false); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.MiddleCenter; - Widgets.Label(rect3, (this.shield.Energy * 100f).ToString("F0") + " / " + (this.shield.EnergyMax * 100f).ToString("F0")); + Widgets.Label(rect3, (shield.Energy * 100f).ToString("F0") + " / " + (shield.EnergyMax * 100f).ToString("F0")); Text.Anchor = TextAnchor.UpperLeft; }, true, false, 1f); return new GizmoResult(GizmoState.Clear); diff --git a/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs b/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs index b2de81b..a76993c 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs @@ -9,7 +9,7 @@ public class HediffCompProperties_AnimalForm : HediffCompProperties_Disappears public bool canGiveDamage = true; public HediffCompProperties_AnimalForm() { - this.compClass = typeof(HediffComp_AnimalForm); + compClass = typeof(HediffComp_AnimalForm); } } } diff --git a/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs b/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs index 8a3274e..ae0e3ca 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs @@ -6,7 +6,7 @@ public class HediffCompProperties_Possession : HediffCompProperties_Disappears { public HediffCompProperties_Possession() { - this.compClass = typeof(HediffComp_Possession); + compClass = typeof(HediffComp_Possession); } } } diff --git a/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs b/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs index 3d6d041..fa98680 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs @@ -9,7 +9,7 @@ public class HediffCompProperties_SkillOffset : HediffCompProperties public int offset; public HediffCompProperties_SkillOffset() { - this.compClass = typeof(HediffComp_SkillOffset); + compClass = typeof(HediffComp_SkillOffset); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs index 8e4503f..45f818e 100644 --- a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs +++ b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs @@ -18,7 +18,7 @@ public Graphic BodyGraphic { { get { - return (HediffCompProperties_AnimalForm)this.props; + return (HediffCompProperties_AnimalForm)props; } } @@ -39,25 +39,25 @@ public override void CompPostTick(ref float severityAdjustment) if (!activated) { activated = true; - if (this.Pawn.health.hediffSet.hediffs.FirstOrDefault(x => x != this.parent && x.TryGetComp() != null) is HediffWithComps h) + if (Pawn.health.hediffSet.hediffs.FirstOrDefault(x => x != parent && x.TryGetComp() != null) is HediffWithComps h) { - this.Pawn.health.hediffSet.hediffs.Remove(h); + Pawn.health.hediffSet.hediffs.Remove(h); } - this.Pawn.VampComp().CurrentForm = this.Props.animalToChangeInto; - this.Pawn.VampComp().CurFormGraphic = null; + Pawn.VampComp().CurrentForm = Props.animalToChangeInto; + Pawn.VampComp().CurFormGraphic = null; //Log.Message("CurrentForm set to " + this.Props.animalToChangeInto.label); } if (CompShouldRemove) { - this.Pawn.VampComp().CurrentForm = null; + Pawn.VampComp().CurrentForm = null; } } public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.activated, "activated", false); + Scribe_Values.Look(ref activated, "activated", false); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_Possession.cs b/Source/Vampires/Hediffs/HediffComp_Possession.cs index ffceb12..0c3892e 100644 --- a/Source/Vampires/Hediffs/HediffComp_Possession.cs +++ b/Source/Vampires/Hediffs/HediffComp_Possession.cs @@ -9,21 +9,21 @@ public class HediffComp_Possession : HediffComp_Disappears { get { - return (HediffCompProperties_Possession)this.props; + return (HediffCompProperties_Possession)props; } } public void ActivateEffect(Pawn activator) { - string text = this.Pawn.LabelIndefinite(); - if (this.Pawn.guest != null) + string text = Pawn.LabelIndefinite(); + if (Pawn.guest != null) { - this.Pawn.guest.SetGuestStatus(null, false); + Pawn.guest.SetGuestStatus(null, false); } - bool flag = this.Pawn.Name != null; - if (this.Pawn.Faction != activator.Faction) + bool flag = Pawn.Name != null; + if (Pawn.Faction != activator.Faction) { - this.Pawn.SetFaction(activator.Faction, this.Pawn); + Pawn.SetFaction(activator.Faction, Pawn); } } @@ -32,7 +32,7 @@ public override void CompPostTick(ref float severityAdjustment) base.CompPostTick(ref severityAdjustment); if (CompShouldRemove) { - HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("HeartAttack"), 1.0f); + HealthUtility.AdjustSeverity(Pawn, HediffDef.Named("HeartAttack"), 1.0f); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_Shield.cs b/Source/Vampires/Hediffs/HediffComp_Shield.cs index 5b43966..429d2ab 100644 --- a/Source/Vampires/Hediffs/HediffComp_Shield.cs +++ b/Source/Vampires/Hediffs/HediffComp_Shield.cs @@ -50,14 +50,14 @@ public string labelCap { get { - return this.Def.LabelCap; + return Def.LabelCap; } } public string label { get { - return this.Def.label; + return Def.label; } } @@ -73,7 +73,7 @@ public float Energy { get { - return this.energy; + return energy; } } @@ -81,7 +81,7 @@ public ShieldState ShieldState { get { - if (this.ticksToReset > 0) + if (ticksToReset > 0) { return ShieldState.Resetting; } @@ -93,23 +93,23 @@ private bool ShouldDisplay { get { - return !this.Pawn.Dead && !this.Pawn.Downed && (!this.Pawn.IsPrisonerOfColony || (this.Pawn.MentalStateDef != null && this.Pawn.MentalStateDef.IsAggro)) || (this.Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < this.lastKeepDisplayTick + this.KeepDisplayingTicks); + return !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || (Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro)) || (Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks); } } public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.energy, "energy", 0f, false); - Scribe_Values.Look(ref this.setup, "setup", false); - Scribe_Values.Look(ref this.ticksToReset, "ticksToReset", -1, false); - Scribe_Values.Look(ref this.lastKeepDisplayTick, "lastKeepDisplayTick", 0, false); + Scribe_Values.Look(ref energy, "energy", 0f, false); + Scribe_Values.Look(ref setup, "setup", false); + Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1, false); + Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick", 0, false); } [DebuggerHidden] public IEnumerable GetWornGizmos() { - if (Find.Selector.SingleSelectedThing == this.Pawn) + if (Find.Selector.SingleSelectedThing == Pawn) { yield return new Gizmo_HediffShieldStatus { @@ -127,9 +127,9 @@ public IEnumerable GetWornGizmos() public override void CompPostTick(ref float severityAdjustment) { base.CompPostTick(ref severityAdjustment); - if (this.Pawn == null) + if (Pawn == null) { - this.energy = 0f; + energy = 0f; return; } @@ -144,7 +144,7 @@ public override void CompPostTick(ref float severityAdjustment) if (!setup) { setup = true; - this.energy = this.EnergyMax; + energy = EnergyMax; KeepDisplaying(); } //{ @@ -158,28 +158,28 @@ public override void CompPostTick(ref float severityAdjustment) public bool CheckPreAbsorbDamage(DamageInfo dinfo) { - if (this.ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(this.Pawn.Position)) || dinfo.Def.isExplosive)) + if (ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(Pawn.Position)) || dinfo.Def.isExplosive)) { if (dinfo.Instigator != null) { AttachableThing attachableThing = dinfo.Instigator as AttachableThing; - if (attachableThing != null && attachableThing.parent == this.Pawn) + if (attachableThing != null && attachableThing.parent == Pawn) { return false; } } - this.energy -= (float)dinfo.Amount * this.EnergyLossPerDamage; + energy -= (float)dinfo.Amount * EnergyLossPerDamage; //if (dinfo.Def == DamageDefOf.EMP) //{ // this.energy = -1f; //} - if (this.energy < 0f) + if (energy < 0f) { - this.Break(); + Break(); } else { - this.AbsorbedDamage(dinfo); + AbsorbedDamage(dinfo); } return true; } @@ -188,73 +188,73 @@ public bool CheckPreAbsorbDamage(DamageInfo dinfo) public void KeepDisplaying() { - this.lastKeepDisplayTick = Find.TickManager.TicksGame; + lastKeepDisplayTick = Find.TickManager.TicksGame; } private void AbsorbedDamage(DamageInfo dinfo) { - SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - this.impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); - Vector3 loc = this.Pawn.TrueCenter() + this.impactAngleVect.RotatedBy(180f) * 0.5f; + SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map, false)); + impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); + Vector3 loc = Pawn.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; float num = Mathf.Min(10f, 2f + (float)dinfo.Amount / 10f); - MoteMaker.MakeStaticMote(loc, this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); + MoteMaker.MakeStaticMote(loc, Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); int num2 = (int)num; for (int i = 0; i < num2; i++) { - MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); + MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); } - this.lastAbsorbDamageTick = Find.TickManager.TicksGame; - this.KeepDisplaying(); + lastAbsorbDamageTick = Find.TickManager.TicksGame; + KeepDisplaying(); } public void NotifyRefilled() { - this.energy = this.EnergyMax; + energy = EnergyMax; } private void Break() { - SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - MoteMaker.MakeStaticMote(this.Pawn.TrueCenter(), this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); + SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map, false)); + MoteMaker.MakeStaticMote(Pawn.TrueCenter(), Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); for (int i = 0; i < 6; i++) { - Vector3 loc = this.Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); - MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); + Vector3 loc = Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); + MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); } - this.energy = 0f; - this.ticksToReset = this.StartingTicksToReset; + energy = 0f; + ticksToReset = StartingTicksToReset; } private void Reset() { - if (this.Pawn.Spawned) + if (Pawn.Spawned) { - SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - MoteMaker.ThrowLightningGlow(this.Pawn.TrueCenter(), this.Pawn.Map, 3f); + SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map, false)); + MoteMaker.ThrowLightningGlow(Pawn.TrueCenter(), Pawn.Map, 3f); } - this.ticksToReset = -1; - this.energy = this.EnergyOnReset; + ticksToReset = -1; + energy = EnergyOnReset; } public void DrawWornExtras() { - if (this.ShieldState == ShieldState.Active && this.ShouldDisplay) + if (ShieldState == ShieldState.Active && ShouldDisplay) { - float num = Mathf.Lerp(1.2f, 1.55f, this.energy); - Vector3 vector = this.Pawn.Drawer.DrawPos; + float num = Mathf.Lerp(1.2f, 1.55f, energy); + Vector3 vector = Pawn.Drawer.DrawPos; vector.y = Altitudes.AltitudeFor(AltitudeLayer.MoteOverhead); - int num2 = Find.TickManager.TicksGame - this.lastAbsorbDamageTick; + int num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick; if (num2 < 8) { float num3 = (float)(8 - num2) / 8f * 0.05f; - vector += this.impactAngleVect * num3; + vector += impactAngleVect * num3; num -= num3; } float angle = (float)Rand.Range(0, 360); Vector3 s = new Vector3(num, 1f, num); Matrix4x4 matrix = default(Matrix4x4); matrix.SetTRS(vector, Quaternion.AngleAxis(angle, Vector3.up), s); - Graphics.DrawMesh(MeshPool.plane10, matrix, HediffComp_Shield.BubbleMat, 0); + Graphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs index 2eaf436..25b7298 100644 --- a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs @@ -8,7 +8,7 @@ public HediffCompProperties_SkillOffset Props { get { - return (HediffCompProperties_SkillOffset)this.props; + return (HediffCompProperties_SkillOffset)props; } } @@ -16,7 +16,7 @@ public override string CompTipStringExtra { get { - return this.Props.skillDef.LabelCap + ": " + ((this.Props.offset >= 0) ? "+" : "") + this.Props.offset.ToString(); + return Props.skillDef.LabelCap + ": " + ((Props.offset >= 0) ? "+" : "") + Props.offset.ToString(); } } diff --git a/Source/Vampires/Hediffs/HediffVampirism.cs b/Source/Vampires/Hediffs/HediffVampirism.cs index 7b7dccd..75df292 100644 --- a/Source/Vampires/Hediffs/HediffVampirism.cs +++ b/Source/Vampires/Hediffs/HediffVampirism.cs @@ -21,7 +21,7 @@ public class HediffVampirism : HediffWithComps public override void PostTick() { base.PostTick(); - if (this.pawn.VampComp() is CompVampire v) + if (pawn.VampComp() is CompVampire v) { if (!initialized) @@ -32,7 +32,7 @@ public override void PostTick() { if (sire == null) - sire = VampireRelationUtility.FindSireFor(this.pawn, this.bloodline, this.generation).VampComp(); + sire = VampireRelationUtility.FindSireFor(pawn, bloodline, generation).VampComp(); if (generation < 0) generation = sire.Generation + 1; if (bloodline == null) @@ -44,7 +44,7 @@ public override void PostTick() { v.InitializeVampirism(sire?.AbilityUser ?? null, bloodline, generation, firstVampire); } - this.pawn.Drawer.renderer.graphics.ResolveAllGraphics(); + pawn.Drawer.renderer.graphics.ResolveAllGraphics(); } if (Find.TickManager.TicksGame % 60 == 0) @@ -53,7 +53,7 @@ public override void PostTick() HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_SunExposure, 0.001f); if (v.BloodPool?.CurLevelPercentage < 0.3f) HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_TheBeast, 0.001f); - if (this.pawn.health.hediffSet is HediffSet hdSet) + if (pawn.health.hediffSet is HediffSet hdSet) { if (hdSet.GetFirstHediffOfDef(HediffDefOf.Hypothermia) is Hediff hypoThermia) hdSet.hediffs.Remove(hypoThermia); @@ -69,13 +69,13 @@ public override string LabelBase { get { - if (this.pawn.VampComp().Generation != -1) + if (pawn.VampComp().Generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.pawn.VampComp().Generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(pawn.VampComp().Generation)); } - if (this.generation != -1) + if (generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(generation)); } return "Vampire"; } @@ -87,23 +87,23 @@ public override string TipStringExtra { StringBuilder s = new StringBuilder(); s.AppendLine("ROMV_HI_Bloodline".Translate(this?.pawn?.VampComp()?.Bloodline?.LabelCap ?? this?.bloodline?.label ?? "Unknown")); - s.AppendLine("ROMV_HI_Sire".Translate(this.pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(this.pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); - if (this.pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) + s.AppendLine("ROMV_HI_Sire".Translate(pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); + if (pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) { s.AppendLine("ROMV_HI_Childer".Translate("ROMV_HI_None".Translate())); } else { - string[] childerNames = new string[this.pawn.VampComp().Childer.Count]; + string[] childerNames = new string[pawn.VampComp().Childer.Count]; for (int i = 0; i < childerNames.Length; i++) - childerNames[i] = this.pawn.VampComp().Childer.ElementAt(i).LabelShort; + childerNames[i] = pawn.VampComp().Childer.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Childer".Translate(string.Join(", ", childerNames))); } - if (!this.pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) + if (!pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) { - string[] soulNames = new string[this.pawn.VampComp().Souls.Count]; + string[] soulNames = new string[pawn.VampComp().Souls.Count]; for (int i = 0; i < soulNames.Length; i++) - soulNames[i] = this.pawn.VampComp().Souls.ElementAt(i).LabelShort; + soulNames[i] = pawn.VampComp().Souls.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Souls".Translate(string.Join(", ", soulNames))); } if (this?.pawn?.VampComp()?.Thinblooded ?? false) @@ -142,7 +142,7 @@ public static string AddOrdinal(int num) public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.initialized, "initialized", false); + Scribe_Values.Look(ref initialized, "initialized", false); //Scribe_Collections.Look(ref this.carriedBloodInfectors, "carriedBloodInfectors", LookMode.Deep, LookMode.Value); //Scribe_Collections.Look(ref this.carriedBloodDrugEffects, "carriedBloodDrugEffects", LookMode.Deep, LookMode.Value); } diff --git a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs index d1dd15a..e4a8f28 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs @@ -15,7 +15,7 @@ public virtual int Generation { if (generation == -1) { - switch (this.CurStageIndex) + switch (CurStageIndex) { case 0: generation = 14; break; case 1: generation = Rand.Range(10, 13); break; @@ -39,7 +39,7 @@ public override string TipStringExtra { get { - int gen = this.generation; + int gen = generation; int math = (gen > 7) ? 10 + (Math.Abs(gen - 13)) : 10 * (Math.Abs(gen - 9)); StringBuilder s = new StringBuilder(); @@ -67,11 +67,11 @@ public override void PostTick() if (!setup) { bool setup = true; - if (this.pawn.VampComp() is CompVampire v) + if (pawn.VampComp() is CompVampire v) { - int generatonToSpawn = this.Generation; + int generatonToSpawn = Generation; //Pawn sire = VampireRelationUtility.FindSireFor(this.pawn, this.Bloodline, generatonToSpawn); - v.InitializeVampirism(null, this.Bloodline, generatonToSpawn); + v.InitializeVampirism(null, Bloodline, generatonToSpawn); } } base.PostTick(); @@ -80,8 +80,8 @@ public override void PostTick() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.setup, "setup", false); - Scribe_Values.Look(ref this.generation, "generation", -1); + Scribe_Values.Look(ref setup, "setup", false); + Scribe_Values.Look(ref generation, "generation", -1); } } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs index 568c4f5..a08a380 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs @@ -15,20 +15,20 @@ public override void Tick() if (Find.TickManager.TicksGame % checkRate == 0) { - if (this.pawn?.BloodNeed() is Need_Blood pB) + if (pawn?.BloodNeed() is Need_Blood pB) { - if (this.CurStageIndex == 3 && this.pawn.MentalStateDef != MentalState_VampireBeast) + if (CurStageIndex == 3 && pawn.MentalStateDef != MentalState_VampireBeast) { - this.pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); } if (pB.CurLevelPercentage < 0.3f) { - this.Severity += 0.005f; + Severity += 0.005f; } else { - this.Severity -= 0.2f; + Severity -= 0.2f; } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs index 6543fce..b4ec4b2 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs @@ -17,36 +17,36 @@ public override void Tick() { base.Tick(); - if (this.pawn == null && this.pawn?.Corpse?.InnerPawn == null) + if (pawn == null && pawn?.Corpse?.InnerPawn == null) { return; } - if (this.sustainer != null && !this.sustainer.Ended) + if (sustainer != null && !sustainer.Ended) { - this.sustainer.Maintain(); + sustainer.Maintain(); } else { //LongEventHandler.ExecuteWhenFinished(delegate //{ SoundDef def = SoundDef.Named("FireBurning"); - SoundInfo info = SoundInfo.InMap(new TargetInfo(this.pawn.Position, this.pawn.Map, false), MaintenanceType.PerTick); + SoundInfo info = SoundInfo.InMap(new TargetInfo(pawn.Position, pawn.Map, false), MaintenanceType.PerTick); info.volumeFactor *= 2; //this.sustainer = def.TrySpawnSustainer(info); //SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); - this.sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); + sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); //}); } if (sunBurningEffect != null) { - sunBurningEffect.EffectTick(this.pawn, this.pawn); + sunBurningEffect.EffectTick(pawn, pawn); if (Find.TickManager.TicksGame % 20 == 0) { - if (this.CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(this.pawn.DrawPos, this.pawn.Map, 1f); - if (this.CurStageIndex > 1 && Rand.Value < (this.CurStageIndex * 0.31f)) - MoteMaker.ThrowFireGlow(this.pawn.PositionHeld, this.pawn.Map, 1f); + if (CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(pawn.DrawPos, pawn.Map, 1f); + if (CurStageIndex > 1 && Rand.Value < (CurStageIndex * 0.31f)) + MoteMaker.ThrowFireGlow(pawn.PositionHeld, pawn.Map, 1f); } } if (Find.TickManager.TicksGame % checkRate == 0) @@ -63,16 +63,16 @@ public override void Tick() } } - if (this.CurStageIndex > 1) + if (CurStageIndex > 1) { Burn(); } - this.Severity += 0.017f; + Severity += 0.017f; } else { curSunDamage = 5; - this.Severity -= 0.2f; + Severity -= 0.2f; if (sunBurningEffect != null) sunBurningEffect = null; if (pawn?.MentalStateDef == VampDefOf.ROMV_Rotschreck) { pawn.MentalState.RecoverFromState(); } if (pawn?.CurJob?.def == VampDefOf.ROMV_DigAndHide) pawn.jobs.StopAll(); @@ -89,7 +89,7 @@ public void Burn() int dmgRange = curSunDamage; DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage), -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown); dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside); - if (this.CurStageIndex > 2) + if (CurStageIndex > 2) curSunDamage += Rand.Range(1, 2); ApplyBurnDamage(dinfo); @@ -115,7 +115,7 @@ public void ApplyBurnDamage(DamageInfo dinfo) { h.CurState.RecoverFromState(); } - if (this.CurStageIndex > 1 && Rand.Value < this.Severity && !pawn.InMentalState) + if (CurStageIndex > 1 && Rand.Value < Severity && !pawn.InMentalState) { h.TryStartMentalState(VampDefOf.ROMV_Rotschreck); } @@ -133,7 +133,7 @@ public void RotCorpseAway() public float CurrentSize() { - switch (this.CurStageIndex) + switch (CurStageIndex) { case 1: return 8; diff --git a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs index a03d929..ecdc57c 100644 --- a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs +++ b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs @@ -13,7 +13,7 @@ public override bool ShouldRemove { get { - if (this.pawn.IsVampire()) + if (pawn.IsVampire()) return false; return true; } @@ -25,8 +25,8 @@ public override bool ShouldRemove /// public override void PostRemoved() { - if (!this.pawn.IsVampire()) - this.pawn.health.RestorePart(base.Part, this, false); + if (!pawn.IsVampire()) + pawn.health.RestorePart(Part, this, false); base.PostRemoved(); } diff --git a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs index f052dd4..c263aa9 100644 --- a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs +++ b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs @@ -12,11 +12,11 @@ private Pawn PawnForNeeds { get { - if (base.SelPawn != null) + if (SelPawn != null) { - return base.SelPawn; + return SelPawn; } - Corpse corpse = base.SelThing as Corpse; + Corpse corpse = SelThing as Corpse; if (corpse != null) { return corpse.InnerPawn; @@ -35,23 +35,23 @@ public override bool IsVisible public ITab_Pawn_NeedsCorpse() { - this.labelKey = "TabNeeds"; - this.tutorTag = "Needs"; + labelKey = "TabNeeds"; + tutorTag = "Needs"; } public override void OnOpen() { - this.thoughtScrollPosition = default(Vector2); + thoughtScrollPosition = default(Vector2); } protected override void FillTab() { - NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, this.size.x, this.size.y), PawnForNeeds, ref this.thoughtScrollPosition); + NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, size.x, size.y), PawnForNeeds, ref thoughtScrollPosition); } protected override void UpdateSize() { - this.size = NeedsCardUtility.GetSize(PawnForNeeds); + size = NeedsCardUtility.GetSize(PawnForNeeds); } } } diff --git a/Source/Vampires/Need_Blood.cs b/Source/Vampires/Need_Blood.cs index 5e63188..6db88c9 100644 --- a/Source/Vampires/Need_Blood.cs +++ b/Source/Vampires/Need_Blood.cs @@ -39,13 +39,13 @@ public class Need_Blood : Need #endregion Variables #region Properties - public CompVampire CompVampire => this.pawn?.TryGetComp(); - public bool IsAnimal => this.pawn?.RaceProps?.Animal ?? false; - public bool IsFull => this.CurBloodPoints == this.MaxBloodPoints; - public bool Starving => CompVampire != null && CompVampire.IsVampire && this.CurCategory == HungerCategory.Starving; + public CompVampire CompVampire => pawn?.TryGetComp(); + public bool IsAnimal => pawn?.RaceProps?.Animal ?? false; + public bool IsFull => CurBloodPoints == MaxBloodPoints; + public bool Starving => CompVampire != null && CompVampire.IsVampire && CurCategory == HungerCategory.Starving; public bool ShouldDie => CurBloodPoints == 0; public float PercPerPoint => 1f / MaxBloodPoints; - public bool DrainingIsDeadly => this.CurBloodPoints <= 2 || (this.pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); + public bool DrainingIsDeadly => CurBloodPoints <= 2 || (pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); //public PreferredFeedMode PreferredFeedMode { get => preferredFeedMode; set => preferredFeedMode = value; } @@ -87,7 +87,7 @@ public int MaxBloodPoints int result = 7; if (IsAnimal) { - result = MaxBloodPointsForAnimal(this.pawn); + result = MaxBloodPointsForAnimal(pawn); } if (CompVampire != null && CompVampire.IsVampire) { @@ -118,13 +118,13 @@ public HungerCategory CurCategory { if (CompVampire != null && CompVampire.IsVampire) { - if (base.CurLevelPercentage <= 0f) + if (CurLevelPercentage <= 0f) return HungerCategory.Starving; - if (base.CurLevelPercentage < PercPerPoint * 2) + if (CurLevelPercentage < PercPerPoint * 2) return HungerCategory.UrgentlyHungry; - if (base.CurLevelPercentage < MaxLevel) + if (CurLevelPercentage < MaxLevel) return HungerCategory.Hungry; } return HungerCategory.Fed; @@ -146,9 +146,9 @@ public override float CurLevel public override float MaxLevel => MaxBloodPoints; public float BloodWanted - => this.MaxBloodPoints - this.CurBloodPoints; + => MaxBloodPoints - CurBloodPoints; - public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - this.lastNonStarvingTick); + public int TicksStarving => Mathf.Max(0, Find.TickManager.TicksGame - lastNonStarvingTick); public Need_Blood(Pawn pawn) : base(pawn) { } @@ -157,12 +157,12 @@ public override void ExposeData() //private int curBloodPoints = Int32.MinValue; //private int nextBloodChangeTick = Int32.MaxValue; base.ExposeData(); - Scribe_Values.Look(ref this.lastNonStarvingTick, "lastNonStarvingTick", -1, false); - Scribe_Values.Look(ref this.nextBloodChangeTick, "nextBloodChangeTick", -1, false); - Scribe_Values.Look(ref this.curBloodPoints, "curBloodPoints", -1, false); - Scribe_Values.Look(ref this.bloodFixer, "bloodFixer", false); - Scribe_Values.Look(ref this.preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); - Scribe_Values.Look(ref this.preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); + Scribe_Values.Look(ref lastNonStarvingTick, "lastNonStarvingTick", -1, false); + Scribe_Values.Look(ref nextBloodChangeTick, "nextBloodChangeTick", -1, false); + Scribe_Values.Look(ref curBloodPoints, "curBloodPoints", -1, false); + Scribe_Values.Look(ref bloodFixer, "bloodFixer", false); + Scribe_Values.Look(ref preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); + Scribe_Values.Look(ref preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); } public int AdjustBlood(int amt, bool alert = true) @@ -172,10 +172,10 @@ public int AdjustBlood(int amt, bool alert = true) CurBloodPoints = Mathf.Clamp(CurBloodPoints + amt, 0, MaxBloodPoints); CurLevelPercentage = CurBloodPoints * PercPerPoint; - if (!this.pawn.IsVampire() && CurBloodPoints < prevBloodPoints) + if (!pawn.IsVampire() && CurBloodPoints < prevBloodPoints) { int diff = prevBloodPoints - CurBloodPoints; - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, diff * PercPerPoint); } if (CurBloodPoints == 0) @@ -186,22 +186,22 @@ public int AdjustBlood(int amt, bool alert = true) public void Notify_NoBloodLeft(bool alert = true) { - if (this.pawn.Faction == Faction.OfPlayer) + if (pawn.Faction == Faction.OfPlayer) { if (alert) { - if (this.pawn.IsVampire()) - Messages.Message("ROMV_BloodDepletedVamp".Translate(this.pawn.LabelCap), MessageTypeDefOf.NeutralEvent); + if (pawn.IsVampire()) + Messages.Message("ROMV_BloodDepletedVamp".Translate(pawn.LabelCap), MessageTypeDefOf.NeutralEvent); else - Messages.Message("ROMV_BloodDepleted".Translate(this.pawn.LabelCap), MessageTypeDefOf.NegativeEvent); + Messages.Message("ROMV_BloodDepleted".Translate(pawn.LabelCap), MessageTypeDefOf.NegativeEvent); } } - if (!this.pawn.IsVampire()) + if (!pawn.IsVampire()) { - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 999f); - if (!this.pawn.Dead) this.pawn.Kill(null); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 999f); + if (!pawn.Dead) pawn.Kill(null); } } @@ -219,7 +219,7 @@ public override void NeedInterval() if (!bloodFixer) { bloodFixer = true; - this.nextBloodChangeTick = -1; + nextBloodChangeTick = -1; } //if ((pawn?.IsVampire() ?? false) && pawn.RaceProps != null && pawn.RaceProps.Humanlike && pawn.Faction != null && pawn.Faction == Faction.OfPlayer && @@ -245,23 +245,23 @@ public override void NeedInterval() //if (Find.TickManager.TicksGame % 250 == 0) //Log.Message("Ticks => " + Find.TickManager.TicksGame); - if (Find.TickManager.TicksGame > this.nextBloodChangeTick) + if (Find.TickManager.TicksGame > nextBloodChangeTick) { int math = Find.TickManager.TicksGame + GenDate.TicksPerDay; //Log.Message("BLOOD TICKS SET TO => " + math); - this.nextBloodChangeTick = math; + nextBloodChangeTick = math; AdjustBlood(BloodChangePerDay); } - if (!this.Starving) + if (!Starving) { - this.lastNonStarvingTick = Find.TickManager.TicksGame; + lastNonStarvingTick = Find.TickManager.TicksGame; } - if (!base.IsFrozen) + if (!IsFrozen) { - if (this.Starving) + if (Starving) { if (CompVampire != null && CompVampire.IsVampire) @@ -269,11 +269,11 @@ public override void NeedInterval() CompVampire.Notify_Starving(lastNonStarvingTick); } - else if (!this.pawn.Dead) + else if (!pawn.Dead) { - HealthUtility.AdjustSeverity(this.pawn, HediffDefOf.BloodLoss, 1f); - this.pawn.Kill(null); + HealthUtility.AdjustSeverity(pawn, HediffDefOf.BloodLoss, 1f); + pawn.Kill(null); } } } @@ -282,10 +282,10 @@ public override void NeedInterval() public override void SetInitialLevel() { //base.CurLevelPercentage = 1.0f; - this.CurLevel = this.CurBloodPoints = this.MaxBloodPoints; + CurLevel = CurBloodPoints = MaxBloodPoints; if (Current.ProgramState == ProgramState.Playing) { - this.lastNonStarvingTick = Find.TickManager.TicksGame; + lastNonStarvingTick = Find.TickManager.TicksGame; } } @@ -293,23 +293,23 @@ public override string GetTipString() { return string.Concat(new string[] { - this.GetLabel(), + GetLabel(), ": ", - base.CurLevelPercentage.ToStringPercent(), + CurLevelPercentage.ToStringPercent(), " (", - this.CurLevel.ToString("0.##"), + CurLevel.ToString("0.##"), " / ", - this.MaxLevel.ToString("0.##"), + MaxLevel.ToString("0.##"), ")\n", - this.GetDescription() + GetDescription() }); } public string GetLabel() { - bool isVampire = this.pawn.IsVampire(); + bool isVampire = pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (this.pawn.IsAndroid()) + if (pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitae".Translate(); @@ -318,14 +318,14 @@ public string GetLabel() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_Vitae".Translate(); - return this.LabelCap; + return LabelCap; } public string GetDescription() { - bool isVampire = this.pawn.IsVampire(); + bool isVampire = pawn.IsVampire(); /// CHJEES ANDROIDS /////////////////////////////////////////////////////// - if (this.pawn.IsAndroid()) + if (pawn.IsAndroid()) { if (isVampire) return "ROMV_AndroidCoolantVitaeDesc".Translate(); @@ -334,13 +334,13 @@ public string GetDescription() /////////////////////////////////////////////////////////////////////////// if (isVampire) return "ROMV_VitaeDesc".Translate(); - return this.def.description; + return def.description; } public Color GetColorToUse() { - bool isVampire = this.pawn.IsVampire(); - if (this.pawn.IsAndroid()) + bool isVampire = pawn.IsVampire(); + if (pawn.IsAndroid()) { if (isVampire) return VampireUtility.ColorAndroidCoolantVitae; @@ -355,14 +355,14 @@ public Color GetColorToUse() public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, float customMargin = -1f, bool drawArrows = true, bool doTooltip = true) { - if (this.threshPercents == null) + if (threshPercents == null) { - this.threshPercents = new List(); + threshPercents = new List(); } - this.threshPercents.Clear(); + threshPercents.Clear(); for (int i = 1; i < MaxBloodPoints; i++) { - this.threshPercents.Add(PercPerPoint * i); + threshPercents.Add(PercPerPoint * i); } if (rect.height > 70f) { @@ -376,7 +376,7 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, } if (doTooltip) { - TooltipHandler.TipRegion(rect, new TipSignal(() => this.GetTipString(), rect.GetHashCode())); + TooltipHandler.TipRegion(rect, new TipSignal(() => GetTipString(), rect.GetHashCode())); } if (pawn != null && pawn.Faction == Faction.OfPlayerSilentFail && pawn.VampComp() is CompVampire v && v.IsVampire) @@ -394,32 +394,32 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, Text.Font = ((rect.height <= 55f) ? GameFont.Tiny : GameFont.Small); Text.Anchor = TextAnchor.LowerLeft; Rect rect2 = new Rect(rect.x + num3 + rect.width * 0.1f, rect.y, rect.width - num3 - rect.width * 0.1f, rect.height / 2f); - Widgets.Label(rect2, this.GetLabel()); + Widgets.Label(rect2, GetLabel()); Text.Anchor = TextAnchor.UpperLeft; Rect rect3 = new Rect(rect.x, rect.y + rect.height / 2f, rect.width, rect.height / 2f); rect3 = new Rect(rect3.x + num3, rect3.y, rect3.width - num3 * 2f, rect3.height - num2); Color colorToUse = GetColorToUse(); //(this.pawn?.IsVampire() ?? false) ? new Color(0.65f, 0.008f, 0.008f) : new Color(0.73f, 0.02f, 0.02f); - Widgets.FillableBar(rect3, this.CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); + Widgets.FillableBar(rect3, CurLevelPercentage, SolidColorMaterials.NewSolidColorTexture(colorToUse)); //Widgets.FillableBar(rect3, this.CurLevelPercentage); if (drawArrows) { - Widgets.FillableBarChangeArrows(rect3, this.GUIChangeArrow); + Widgets.FillableBarChangeArrows(rect3, GUIChangeArrow); } - if (this.threshPercents != null) + if (threshPercents != null) { - for (int i = 0; i < Mathf.Min(this.threshPercents.Count, maxThresholdMarkers); i++) + for (int i = 0; i < Mathf.Min(threshPercents.Count, maxThresholdMarkers); i++) { - this.DrawBarThreshold(rect3, this.threshPercents[i]); + DrawBarThreshold(rect3, threshPercents[i]); } } - float curInstantLevelPercentage = this.CurInstantLevelPercentage; + float curInstantLevelPercentage = CurInstantLevelPercentage; if (curInstantLevelPercentage >= 0f) { - this.DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); + DrawBarInstantMarkerAt(rect3, curInstantLevelPercentage); } - if (!this.def.tutorHighlightTag.NullOrEmpty()) + if (!def.tutorHighlightTag.NullOrEmpty()) { - UIHighlighter.HighlightOpportunity(rect, this.def.tutorHighlightTag); + UIHighlighter.HighlightOpportunity(rect, def.tutorHighlightTag); } Text.Font = GameFont.Small; } @@ -430,7 +430,7 @@ private void DrawBarThreshold(Rect barRect, float threshPct) float num = (float)((barRect.width <= 60f) ? 1 : 2); Rect position = new Rect(barRect.x + barRect.width * threshPct - (num - 1f), barRect.y + barRect.height / 2f, num, barRect.height / 2f); Texture2D image; - if (threshPct < this.CurLevelPercentage) + if (threshPct < CurLevelPercentage) { image = BaseContent.BlackTex; GUI.color = new Color(1f, 1f, 1f, 0.9f); diff --git a/Source/Vampires/ScenPart_LongerNights.cs b/Source/Vampires/ScenPart_LongerNights.cs index 5fa802c..6d0d80f 100644 --- a/Source/Vampires/ScenPart_LongerNights.cs +++ b/Source/Vampires/ScenPart_LongerNights.cs @@ -10,7 +10,7 @@ public class ScenPart_LongerNights : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 2 + 31f); + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 2 + 31f); DoVampModifierEditInterface(new Rect(scenPartRect.x, scenPartRect.y, scenPartRect.width, 31f)); } @@ -25,14 +25,14 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_NightLength".Translate().CapitalizeFirst()); Text.Anchor = TextAnchor.UpperLeft; - this.nightsLength = Widgets.HorizontalSlider(rect4, this.nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); + nightsLength = Widgets.HorizontalSlider(rect4, nightsLength, 0f, 1f, false, nightsLength.ToStringPercent(), "", "", 0.1f); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.nightsLength, "nightsLength", 0.1f); + Scribe_Values.Look(ref nightsLength, "nightsLength", 0.1f); } public override string Summary(Scenario scen) @@ -48,7 +48,7 @@ public string GetLongerNightsSummary() public override void Randomize() { base.Randomize(); - this.nightsLength = Rand.Range(0.1f, 1.0f); + nightsLength = Rand.Range(0.1f, 1.0f); } } } diff --git a/Source/Vampires/ScenPart_StartingVampires.cs b/Source/Vampires/ScenPart_StartingVampires.cs index d9bb334..53183a3 100644 --- a/Source/Vampires/ScenPart_StartingVampires.cs +++ b/Source/Vampires/ScenPart_StartingVampires.cs @@ -22,12 +22,12 @@ public class ScenPart_StartingVampires : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f + 31f); - if (Widgets.ButtonText(scenPartRect.TopPartPixels(ScenPart.RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate(), true, false, true)) + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f + 31f); + if (Widgets.ButtonText(scenPartRect.TopPartPixels(RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate(), true, false, true)) { - FloatMenuUtility.MakeMenu(this.PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate + FloatMenuUtility.MakeMenu(PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate { - this.bloodline = bl; + bloodline = bl; }); } //Widgets.IntRange(new Rect(scenPartRect.x, scenPartRect.y + ScenPart.RowHeight, scenPartRect.width, 31f), listing.CurHeight.GetHashCode(), ref this.generationRange, 4, this.maxGeneration, "ROMV_VampireGeneration"); @@ -37,7 +37,7 @@ public override void DoEditInterface(Listing_ScenEdit listing) // RimWorld.ScenPart_PawnModifier protected void DoVampModifierEditInterface(Rect rect) { - Rect rect2 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 2, rect.width, 31); + Rect rect2 = new Rect(rect.x, rect.y + RowHeight * 2, rect.width, 31); Rect rect3 = rect2.LeftPart(0.333f).Rounded(); Rect rect4 = rect2.RightPart(0.666f).Rounded(); @@ -45,9 +45,9 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect3, "ROMV_Chance".Translate()); Text.Anchor = TextAnchor.UpperLeft; - this.vampChance = Widgets.HorizontalSlider(rect4, this.vampChance, 0f, 1f, false, "", "", ""); + vampChance = Widgets.HorizontalSlider(rect4, vampChance, 0f, 1f, false, "", "", ""); //Widgets.TextFieldNumeric(rect4, ref this, ref this.numOfVampsBuffer, 1, 50); - Rect rect5 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 3, rect.width, 31); + Rect rect5 = new Rect(rect.x, rect.y + RowHeight * 3, rect.width, 31); Rect rect6 = rect5.LeftPart(0.333f).Rounded(); Rect rect7 = rect5.RightPart(0.666f).Rounded(); @@ -55,15 +55,15 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect6, "ROMV_StartInCoffins".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.CheckboxLabeled(rect7, "", ref this.spawnInCoffins, false); - Rect rect8 = new Rect(rect.x, rect.y + ScenPart.RowHeight * 4, rect.width, 31); + Widgets.CheckboxLabeled(rect7, "", ref spawnInCoffins, false); + Rect rect8 = new Rect(rect.x, rect.y + RowHeight * 4, rect.width, 31); Rect rect9 = rect8.LeftPart(0.666f).Rounded(); Rect rect10 = rect8.RightPart(0.333f).Rounded(); Text.Anchor = TextAnchor.MiddleRight; Widgets.Label(rect9, "ROMV_MaxVampires".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.TextFieldNumeric(rect10, ref this.maxVampires, ref this.maxVampiresBuf, 1, 100); + Widgets.TextFieldNumeric(rect10, ref maxVampires, ref maxVampiresBuf, 1, 100); } @@ -83,11 +83,11 @@ public override void ExposeData() //private IntRange generationRange = new IntRange(10, 13); //private int maxGeneration = 15; //private bool spawnInCoffins = false; - Scribe_Defs.Look(ref this.bloodline, "bloodline"); - Scribe_Values.Look(ref this.generationRange, "generationRange", default(IntRange), false); - Scribe_Values.Look(ref this.vampChance, "vampChance", 0.5f); - Scribe_Values.Look(ref this.maxVampires, "maxVampires", 1); - Scribe_Values.Look(ref this.spawnInCoffins, "spawnInCoffins", false); + Scribe_Defs.Look(ref bloodline, "bloodline"); + Scribe_Values.Look(ref generationRange, "generationRange", default(IntRange), false); + Scribe_Values.Look(ref vampChance, "vampChance", 0.5f); + Scribe_Values.Look(ref maxVampires, "maxVampires", 1); + Scribe_Values.Look(ref spawnInCoffins, "spawnInCoffins", false); } public override string Summary(Scenario scen) @@ -119,11 +119,11 @@ public string GenRangeToString() public override void Randomize() { base.Randomize(); - this.vampChance = Rand.Range(0.2f, 0.8f); - this.bloodline = this.PossibleBloodlines().RandomElement(); - this.generationRange.max = Rand.Range(10, 15); - this.generationRange.min = Rand.Range(8, this.generationRange.max); - this.spawnInCoffins = (Rand.Value > 0.3) ? true : false; + vampChance = Rand.Range(0.2f, 0.8f); + bloodline = PossibleBloodlines().RandomElement(); + generationRange.max = Rand.Range(10, 15); + generationRange.min = Rand.Range(8, generationRange.max); + spawnInCoffins = (Rand.Value > 0.3) ? true : false; } public override void PostMapGenerate(Map map) diff --git a/Source/Vampires/SkillSheet.cs b/Source/Vampires/SkillSheet.cs index 1818727..09d4538 100644 --- a/Source/Vampires/SkillSheet.cs +++ b/Source/Vampires/SkillSheet.cs @@ -45,8 +45,8 @@ public SkillSheet(Pawn pawn) public void ExposeData() { - Scribe_References.Look(ref this.pawn, "pawn"); - Scribe_Collections.Look(ref this.disciplines, true, "disciplines", LookMode.Deep, new object[0]); + Scribe_References.Look(ref pawn, "pawn"); + Scribe_Collections.Look(ref disciplines, true, "disciplines", LookMode.Deep, new object[0]); } } } diff --git a/Source/Vampires/UI/Alert_VampireInSunlight.cs b/Source/Vampires/UI/Alert_VampireInSunlight.cs index 4445c3d..15288ab 100644 --- a/Source/Vampires/UI/Alert_VampireInSunlight.cs +++ b/Source/Vampires/UI/Alert_VampireInSunlight.cs @@ -32,14 +32,14 @@ private IEnumerable VampiresInTheSun public Alert_VampireInSunlight() { - this.defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); - this.defaultPriority = AlertPriority.Critical; + defaultLabel = "ROMV_Alert_VampireInTheSun".Translate(); + defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in this.VampiresInTheSun) + foreach (Pawn current in VampiresInTheSun) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -52,7 +52,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = this.VampiresInTheSun.FirstOrDefault(); + Pawn pawn = VampiresInTheSun.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/UI/Alert_VampireStarving.cs b/Source/Vampires/UI/Alert_VampireStarving.cs index 5e47285..59636aa 100644 --- a/Source/Vampires/UI/Alert_VampireStarving.cs +++ b/Source/Vampires/UI/Alert_VampireStarving.cs @@ -32,14 +32,14 @@ private IEnumerable VampiresStarving public Alert_VampireStarving() { - this.defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); - this.defaultPriority = AlertPriority.Critical; + defaultLabel = "ROMV_Alert_StarvingVampire".Translate(); + defaultPriority = AlertPriority.Critical; } public override string GetExplanation() { StringBuilder stringBuilder = new StringBuilder(); - foreach (Pawn current in this.VampiresStarving) + foreach (Pawn current in VampiresStarving) { stringBuilder.AppendLine(" " + current.NameStringShort); } @@ -52,7 +52,7 @@ public override AlertReport GetReport() { return false; } - Pawn pawn = this.VampiresStarving.FirstOrDefault(); + Pawn pawn = VampiresStarving.FirstOrDefault(); if (pawn == null) { return false; diff --git a/Source/Vampires/Utilities/BloodFeedModeUtility.cs b/Source/Vampires/Utilities/BloodFeedModeUtility.cs index f7322e5..3c05870 100644 --- a/Source/Vampires/Utilities/BloodFeedModeUtility.cs +++ b/Source/Vampires/Utilities/BloodFeedModeUtility.cs @@ -26,7 +26,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) if (Widgets.ButtonImage(rect, icon)) { - vampBlood.preferredFeedMode = BloodFeedModeUtility.GetNextResponse(pawn); + vampBlood.preferredFeedMode = GetNextResponse(pawn); SoundDefOf.TickHigh.PlayOneShotOnCamera(null); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.HostilityResponse, KnowledgeAmount.SpecificInteraction); } @@ -117,15 +117,15 @@ public static Texture2D GetIcon(this PreferredFeedMode response) switch (response) { case PreferredFeedMode.None: - return BloodFeedModeUtility.NoneIcon; + return NoneIcon; case PreferredFeedMode.AnimalNonLethal: - return BloodFeedModeUtility.AnimalNonLethalIcon; + return AnimalNonLethalIcon; case PreferredFeedMode.AnimalLethal: - return BloodFeedModeUtility.AnimalLethalIcon; + return AnimalLethalIcon; case PreferredFeedMode.HumanoidNonLethal: - return BloodFeedModeUtility.HumanoidNonLethalIcon; + return HumanoidNonLethalIcon; case PreferredFeedMode.HumanoidLethal: - return BloodFeedModeUtility.HumanoidLethalIcon; + return HumanoidLethalIcon; default: return BaseContent.BadTex; } diff --git a/Source/Vampires/Utilities/BloodTypeUtility.cs b/Source/Vampires/Utilities/BloodTypeUtility.cs index 3306ec6..ac02967 100644 --- a/Source/Vampires/Utilities/BloodTypeUtility.cs +++ b/Source/Vampires/Utilities/BloodTypeUtility.cs @@ -15,10 +15,10 @@ public static BloodType BloodType(Pawn pawn) } if (pawn?.RaceProps?.Humanlike ?? false) { - bool lowBlood = (BloodTypeUtility.IsLowblood(pawn)); - bool highBlood = (BloodTypeUtility.IsHighblood(pawn)); + bool lowBlood = (IsLowblood(pawn)); + bool highBlood = (IsHighblood(pawn)); - if (BloodTypeUtility.IsHighblood(pawn) && BloodTypeUtility.IsLowblood(pawn)) + if (IsHighblood(pawn) && IsLowblood(pawn)) return Vampire.BloodType.AverageBlood; if (highBlood) return Vampire.BloodType.HighBlood; diff --git a/Source/Vampires/Utilities/BloodUtility.cs b/Source/Vampires/Utilities/BloodUtility.cs index dab820b..cf14f3b 100644 --- a/Source/Vampires/Utilities/BloodUtility.cs +++ b/Source/Vampires/Utilities/BloodUtility.cs @@ -18,7 +18,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (canUseInventory) { if (flag) - thing = BloodUtility.BestBloodInInventory(getter, null, 0); + thing = BestBloodInInventory(getter, null, 0); if (thing != null) { if (getter.Faction != Faction.OfPlayer) @@ -36,12 +36,12 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe } } } - Thing thing2 = BloodUtility.BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); + Thing thing2 = BestBloodSourceOnMap(getter, eater, desperate, BloodPreferabilty.Highblood, allowForbidden); if (thing == null && thing2 == null) { if (canUseInventory && flag) { - thing = BloodUtility.BestBloodInInventory(getter, null, 0); + thing = BestBloodInInventory(getter, null, 0); if (thing != null) { bloodSource = thing; @@ -52,7 +52,7 @@ public static bool TryFindBestBloodSourceFor(Pawn getter, Pawn eater, bool despe if (thing2 == null && getter == eater) { - Pawn pawn = BloodUtility.BestPawnToHuntForVampire(getter); + Pawn pawn = BestPawnToHuntForVampire(getter); if (pawn != null) { bloodSource = pawn; @@ -157,7 +157,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate }; Thing thing; Predicate validator = foodValidator; - thing = BloodUtility.SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator); + thing = SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator); return thing; } @@ -222,7 +222,7 @@ private static Pawn BestPawnToHuntForVampire(Pawn predator, bool desperate = fal //{ if (predator != pawn2) { - if (BloodUtility.IsAcceptableVictimFor(predator, pawn2, desperate)) + if (IsAcceptableVictimFor(predator, pawn2, desperate)) { if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) { @@ -231,7 +231,7 @@ private static Pawn BestPawnToHuntForVampire(Pawn predator, bool desperate = fal if (!tutorialMode || pawn2.Faction != Faction.OfPlayer) { //Log.Message("Potential Prey: " + pawn2.Label); - float preyScoreFor = BloodUtility.GetPreyScoreFor(predator, pawn2); + float preyScoreFor = GetPreyScoreFor(predator, pawn2); //Log.Message("Potential Prey Score: " + preyScoreFor); if (preyScoreFor > num || pawn == null) @@ -421,7 +421,7 @@ public static Need_Blood BloodNeed(this Pawn pawn) // RimWorld.FoodUtility public static int WillConsumeStackCountOf(Pawn ingester, ThingDef def) { - int num = Mathf.Min(10, BloodUtility.StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); + int num = Mathf.Min(10, StackCountForBlood(def, ingester.VampComp().BloodPool.BloodWanted)); if (num < 1) { num = 1; diff --git a/Source/Vampires/Utilities/VampireSkinColors.cs b/Source/Vampires/Utilities/VampireSkinColors.cs index 9232d84..3ef5368 100644 --- a/Source/Vampires/Utilities/VampireSkinColors.cs +++ b/Source/Vampires/Utilities/VampireSkinColors.cs @@ -37,9 +37,9 @@ public SkinColorData(float melanin, float selector, Color color) private static int GetSkinDataIndexOfMelanin(float melanin) { int result = 0; - for (int i = 0; i < VampireSkinColors.MelaninTable.Length; i++) + for (int i = 0; i < MelaninTable.Length; i++) { - if (melanin < VampireSkinColors.MelaninTable[i].melanin) + if (melanin < MelaninTable[i].melanin) { break; } @@ -59,15 +59,15 @@ public static Color GetVampireSkinColor(Pawn pawn, float melanin) { return colors[skinDataIndexOfMelanin]; } - float tt = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + float tt = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); return Color.Lerp(colors[skinDataIndexOfMelanin], colors[skinDataIndexOfMelanin + 1], tt); } - if (skinDataIndexOfMelanin == VampireSkinColors.MelaninTable.Length - 1) + if (skinDataIndexOfMelanin == MelaninTable.Length - 1) { - return VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color; + return MelaninTable[skinDataIndexOfMelanin].color; } - float t = Mathf.InverseLerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].melanin, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); - return Color.Lerp(VampireSkinColors.MelaninTable[skinDataIndexOfMelanin].color, VampireSkinColors.MelaninTable[skinDataIndexOfMelanin + 1].color, t); + float t = Mathf.InverseLerp(MelaninTable[skinDataIndexOfMelanin].melanin, MelaninTable[skinDataIndexOfMelanin + 1].melanin, melanin); + return Color.Lerp(MelaninTable[skinDataIndexOfMelanin].color, MelaninTable[skinDataIndexOfMelanin + 1].color, t); } } } diff --git a/Source/Vampires/Utilities/VampireWitnessUtility.cs b/Source/Vampires/Utilities/VampireWitnessUtility.cs index 6d0a447..6303410 100644 --- a/Source/Vampires/Utilities/VampireWitnessUtility.cs +++ b/Source/Vampires/Utilities/VampireWitnessUtility.cs @@ -30,9 +30,9 @@ public struct Crime public Crime(JobDef newCrimeDef, ThoughtDef newColonistThought, ThoughtDef newVisitorThought) { - this.CrimeDef = newCrimeDef; - this.ColonistThought = newColonistThought; - this.VisitorThought = newVisitorThought; + CrimeDef = newCrimeDef; + ColonistThought = newColonistThought; + VisitorThought = newVisitorThought; } } @@ -155,7 +155,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) } //Log.Message("1"); - List witnesses = VampireWitnessUtility.WitnessesOf(criminal, victim, crime); + List witnesses = WitnessesOf(criminal, victim, crime); //Log.Message("2"); if (!witnesses.NullOrEmpty()) @@ -191,7 +191,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) if (CanTakeWitnessJob(witness)) { IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }, 23f); - witness.jobs.StartJob(new Verse.AI.Job(JobDefOf.FleeAndCower, fleeLoc)); + witness.jobs.StartJob(new Job(JobDefOf.FleeAndCower, fleeLoc)); if (witness.Faction != null && !witness.Faction.HostileTo(criminal.Faction)) { witness.Faction.SetHostileTo(criminal.Faction, true); diff --git a/Source/Vampires/VampAbility.cs b/Source/Vampires/VampAbility.cs index 11b7a03..ff29e0b 100644 --- a/Source/Vampires/VampAbility.cs +++ b/Source/Vampires/VampAbility.cs @@ -7,7 +7,7 @@ namespace Vampire { public class VampAbility : PawnAbility { - public CompVampire Vamp => this.Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); + public CompVampire Vamp => Pawn.VampComp(); //VampUtility.GetVamp(this.Pawn); public VitaeAbilityDef AbilityDef => Def as VitaeAbilityDef; public VampAbility() : base() { } @@ -62,7 +62,7 @@ public override bool CanCastPowerCheck(AbilityContext context, out string reason if (base.CanCastPowerCheck(context, out reason)) { reason = ""; - if (this.Def != null && this.Def is VitaeAbilityDef vampDef) + if (Def != null && Def is VitaeAbilityDef vampDef) { if (Pawn.BloodNeed().CurBloodPoints < vampDef.bloodCost) { diff --git a/Source/Vampires/VampireCorpse.cs b/Source/Vampires/VampireCorpse.cs index a3edbf3..a99d6be 100644 --- a/Source/Vampires/VampireCorpse.cs +++ b/Source/Vampires/VampireCorpse.cs @@ -13,33 +13,33 @@ public class VampireCorpse : Corpse public VampireCorpse() : base() { - this.operationsBillStack = new BillStack(this); - this.innerContainer = new ThingOwner(this, true, LookMode.Reference); + operationsBillStack = new BillStack(this); + innerContainer = new ThingOwner(this, true, LookMode.Reference); } private bool ShouldVanish { get { - return this.InnerPawn.RaceProps.Animal && this.vanishAfterTimestamp > 0 && this.Age >= this.vanishAfterTimestamp && base.Spawned && this.GetRoom(RegionType.Set_Passable) != null && this.GetRoom(RegionType.Set_Passable).TouchesMapEdge && !base.Map.roofGrid.Roofed(base.Position); + return InnerPawn.RaceProps.Animal && vanishAfterTimestamp > 0 && Age >= vanishAfterTimestamp && Spawned && this.GetRoom(RegionType.Set_Passable) != null && this.GetRoom(RegionType.Set_Passable).TouchesMapEdge && !Map.roofGrid.Roofed(Position); } } private BodyPartRecord GetBestBodyPartToEat(Pawn ingester, float nutritionWanted) { - IEnumerable source = from x in this.InnerPawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined) - where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) > 0.001f + IEnumerable source = from x in InnerPawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined) + where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(InnerPawn, x) > 0.001f select x; - if (!source.Any()) + if (!source.Any()) { return null; } - return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(this.InnerPawn, x) - nutritionWanted)); + return source.MinBy((BodyPartRecord x) => Mathf.Abs(FoodUtility.GetBodyPartNutrition(InnerPawn, x) - nutritionWanted)); } private void NotifyColonistBar() { - if (this.InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) + if (InnerPawn.Faction == Faction.OfPlayer && Current.ProgramState == ProgramState.Playing) { Find.ColonistBar.MarkColonistsDirty(); } @@ -133,13 +133,13 @@ public override string GetInspectString() } else { - if (this.InnerPawn.Faction != null) + if (InnerPawn.Faction != null) { - s.AppendLine("Faction".Translate() + ": " + this.InnerPawn.Faction.Name); + s.AppendLine("Faction".Translate() + ": " + InnerPawn.Faction.Name); } s.AppendLine("DeadTime".Translate(new object[] { - this.Age.ToStringTicksToPeriod(false, false, true) + Age.ToStringTicksToPeriod(false, false, true) })); } return s.ToString().TrimEndNewlines(); @@ -154,20 +154,20 @@ public override void DrawAt(Vector3 drawLoc, bool flip = false) return; } if (!burnedToAshes) - this.InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); + InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); else Ashes.Draw(drawLoc, Rot4.North, this, 0); } - public bool CanResurrect => this.InnerPawn != null && !BurnedToAshes && this.InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; + public bool CanResurrect => InnerPawn != null && !BurnedToAshes && InnerPawn.Faction == Faction.OfPlayerSilentFail && !Diableried && this.GetRotStage() < RotStage.Dessicated; public override IEnumerable GetGizmos() { foreach (Gizmo g in base.GetGizmos()) yield return g; - Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (CanResurrect) { yield return new Command_Action() @@ -177,7 +177,7 @@ public override IEnumerable GetGizmos() icon = bloodResurrection.uiIcon, action = delegate { - Pawn AbilityUser = this.InnerPawn; + Pawn AbilityUser = InnerPawn; AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); @@ -196,18 +196,18 @@ public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.bloodPoints, "bloodPoints", -1); - Scribe_Values.Look(ref this.burnedToAshes, "burnedToAshes", false); - Scribe_Values.Look(ref this.diableried, "diableried", false); + Scribe_Values.Look(ref bloodPoints, "bloodPoints", -1); + Scribe_Values.Look(ref burnedToAshes, "burnedToAshes", false); + Scribe_Values.Look(ref diableried, "diableried", false); - Scribe_Values.Look(ref this.timeOfDeath, "timeOfDeath", 0, false); - Scribe_Values.Look(ref this.vanishAfterTimestamp, "vanishAfterTimestamp", 0, false); - Scribe_Values.Look(ref this.everBuriedInSarcophagus, "everBuriedInSarcophagus", false, false); - Scribe_Deep.Look(ref this.operationsBillStack, "operationsBillStack", new object[] + Scribe_Values.Look(ref timeOfDeath, "timeOfDeath", 0, false); + Scribe_Values.Look(ref vanishAfterTimestamp, "vanishAfterTimestamp", 0, false); + Scribe_Values.Look(ref everBuriedInSarcophagus, "everBuriedInSarcophagus", false, false); + Scribe_Deep.Look(ref operationsBillStack, "operationsBillStack", new object[] { this }); - Scribe_Deep.Look>(ref this.innerContainer, "innerContainer", new object[] + Scribe_Deep.Look(ref innerContainer, "innerContainer", new object[] { this }); diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs index 07eff0f..576f47b 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs @@ -33,14 +33,14 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) { return !pawn.Dead && !(from x in pawn.health.hediffSet.hediffs where x.Part == part - select x).Any(); + select x).Any(); } public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { //if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part)) @@ -77,7 +77,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs index c33acdf..ab9aa42 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs @@ -33,16 +33,16 @@ public static bool IsClean(Pawn pawn, BodyPartRecord part) { return !pawn.Dead && !(from x in pawn.health.hediffSet.hediffs where x.Part == part - select x).Any(); + select x).Any(); } public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List ingredients, Bill bill) { bool flag = IsClean(pawn, part); - bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); + bool flag2 = IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { - if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) + if (CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) { return; } @@ -75,7 +75,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, public override string GetLabelWhenUsedOn(Pawn pawn, BodyPartRecord part) { - return this.recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; + return recipe.LabelCap + " (" + BloodTypeUtility.BloodType(pawn).GetLabel() + ")"; } } } diff --git a/Source/Vampires/WorldComponent_VampireTracker.cs b/Source/Vampires/WorldComponent_VampireTracker.cs index a9cf7fb..6386044 100644 --- a/Source/Vampires/WorldComponent_VampireTracker.cs +++ b/Source/Vampires/WorldComponent_VampireTracker.cs @@ -202,9 +202,9 @@ public void PrintVampires() public override void ExposeData() { base.ExposeData(); - Scribe_References.Look(ref this.firstVampire, "firstVampire"); - Scribe_Collections.Look(ref this.dormantVampires, "dormantVampires", LookMode.Deep); - Scribe_Collections.Look(ref this.activeVampires, "activeVampires", LookMode.Deep); + Scribe_References.Look(ref firstVampire, "firstVampire"); + Scribe_Collections.Look(ref dormantVampires, "dormantVampires", LookMode.Deep); + Scribe_Collections.Look(ref activeVampires, "activeVampires", LookMode.Deep); } } } From 0a121dbf075601ece2142a113d9d5955ced7e9bd Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 17 Dec 2017 16:32:23 +0000 Subject: [PATCH 05/18] Wee bit more cleanup --- Assemblies/Vampire.dll | Bin 243712 -> 243712 bytes .../Vampires/AI_Jobs/JobDriver_BloodVomit.cs | 14 +-- .../AI_Jobs/JobDriver_ConsumeBlood.cs | 36 +++--- .../Vampires/AI_Jobs/JobDriver_DigAndHide.cs | 8 +- .../Vampires/AI_Jobs/JobDriver_EnterTorpor.cs | 4 +- Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 12 +- Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs | 8 +- .../JobGiver_SeekShelterFromSunlight.cs | 2 +- .../Vampires/AI_Jobs/JobGiver_VampireBeast.cs | 14 +-- .../Vampires/Buildings/Building_HideyHole.cs | 2 +- Source/Vampires/Buttons.cs | 12 +- Source/Vampires/Components/CompVampBed.cs | 6 +- Source/Vampires/Components/CompVampire.cs | 39 +++---- .../Vampires/Defs/ScenPart_GameStartNight.cs | 6 +- .../Animalism/DisciplineEffect_Beckoning.cs | 4 +- .../Animalism/DisciplineEffect_Communion.cs | 2 +- .../DisciplineEffect_SpectralWolf.cs | 2 +- .../Animalism/HediffComp_TickGraphic.cs | 12 +- .../Disciplines/Animalism/PawnTemporary.cs | 18 +-- .../Auspex/DisciplineEffect_ReadMind.cs | 4 +- .../DisciplineEffect_RevealIllusions.cs | 6 +- .../Blood/DisciplineEffect_Hunger.cs | 4 +- .../Blood/DisciplineEffect_UnstoppableTide.cs | 2 +- .../Dominate/DisciplineEffect_Possession.cs | 2 +- .../Flight/DisciplineEffect_LongFlight.cs | 2 +- .../DisciplineEffect_ArmOfTheAbyss.cs | 2 +- .../DisciplineEffect_EnterTheAbyss.cs | 4 +- .../Thaumaturgy/Projectile_BloodBoil.cs | 2 +- .../Thaumaturgy/Projectile_BloodReturner.cs | 2 +- .../Thaumaturgy/Projectile_BloodStealer.cs | 4 +- .../Disciplines/Verb_UseAbilityPawnEffect.cs | 2 +- Source/Vampires/FlyingObject.cs | 42 ++----- .../Vampires/HarmonyPatches/HarmonyPatches.cs | 108 +++++++++--------- .../HarmonyPatches_DebugTools.cs | 14 +-- .../HarmonyPatches/VampHumanlikeOrders.cs | 12 +- .../Hediffs/Gizmo_HediffShieldStatus.cs | 10 +- .../Vampires/Hediffs/HediffComp_AnimalForm.cs | 10 +- .../Vampires/Hediffs/HediffComp_Possession.cs | 12 +- Source/Vampires/Hediffs/HediffComp_Shield.cs | 62 +++------- .../Hediffs/HediffComp_SkillOffset.cs | 17 +-- Source/Vampires/Hediffs/HediffVampirism.cs | 2 +- .../Hediffs/HediffVampirism_VampGiver.cs | 10 +- .../Hediffs/HediffWithComps_BeastHunger.cs | 2 +- .../HediffWithComps_SunlightExposure.cs | 4 +- Source/Vampires/ITab_Pawn_NeedsCorpse.cs | 8 +- Source/Vampires/Need_Blood.cs | 8 +- Source/Vampires/ScenPart_StartingVampires.cs | 10 +- Source/Vampires/SkillSheet.cs | 4 +- Source/Vampires/UI/VampireCardUtility.cs | 4 +- .../Utilities/BloodFeedModeUtility.cs | 4 +- Source/Vampires/Utilities/BloodUtility.cs | 6 +- .../Utilities/ResurrectedPawnUtility.cs | 8 +- .../Utilities/VampSunlightPathUtility.cs | 14 +-- .../Vampires/Utilities/VampireBiteUtility.cs | 2 +- Source/Vampires/Utilities/VampireGen.cs | 8 +- .../Utilities/VampireThoughtUtility.cs | 10 +- Source/Vampires/Utilities/VampireUtility.cs | 2 +- .../Utilities/VampireWitnessUtility.cs | 6 +- Source/Vampires/VampireCorpse.cs | 30 ++--- .../Workers/Recipe_ExtractBloodPack.cs | 2 +- .../Workers/Recipe_ExtractBloodVial.cs | 4 +- .../Vampires/WorldComponent_VampireTracker.cs | 6 +- 62 files changed, 273 insertions(+), 405 deletions(-) diff --git a/Assemblies/Vampire.dll b/Assemblies/Vampire.dll index 0ba61fba83e1c5d5e09535b7d3ace20075878a46..98316a38adf86760bf8ca9b700abae8e5fa96519 100644 GIT binary patch delta 66 zcmV-I0KNZ!@D70R4v>ffshhEi-?t8L^#TA2Z}tKJ3M>)=Z-aNZhj+LEw|BS#0ksfG YyTf09ub57`#FGw`X!^ysh;0LSO2z0MWdHyG delta 66 zcmZqpz}N7BZ$byt(uo_p?r-PQ_{zk lastPosture; public override void Notify_LastPosture(PawnPosture posture, LayingDownState layingDown) { @@ -29,8 +23,8 @@ public override void Notify_LastPosture(PawnPosture posture, LayingDownState lay public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref ticksLeft, "ticksLeft", 0, false); - Scribe_Values.Look(ref lastPosture, "lastPosture", PawnPosture.Standing, false); + Scribe_Values.Look(ref ticksLeft, "ticksLeft"); + Scribe_Values.Look(ref lastPosture, "lastPosture"); } [DebuggerHidden] @@ -67,7 +61,7 @@ protected override IEnumerable MakeNewToils() int curTicks = ticksLeft; if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite(), 1); + FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite()); if (pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); diff --git a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs index 2f00c8b..ced0618 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs @@ -22,13 +22,7 @@ public class JobDriver_ConsumeBlood : JobDriver private bool eatingFromInventory; - private Thing IngestibleSource - { - get - { - return job.GetTarget(TargetIndex.A).Thing; - } - } + private Thing IngestibleSource => job.GetTarget(TargetIndex.A).Thing; private float ChewDurationMultiplier { @@ -39,15 +33,15 @@ private float ChewDurationMultiplier { return 1f; } - return 1f / pawn.GetStatValue(StatDefOf.EatingSpeed, true); + return 1f / pawn.GetStatValue(StatDefOf.EatingSpeed); } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref usingNutrientPasteDispenser, "usingNutrientPasteDispenser", false, false); - Scribe_Values.Look(ref eatingFromInventory, "eatingFromInventory", false, false); + Scribe_Values.Look(ref usingNutrientPasteDispenser, "usingNutrientPasteDispenser"); + Scribe_Values.Look(ref eatingFromInventory, "eatingFromInventory"); } public override string GetReport() @@ -129,18 +123,18 @@ private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) yield return Toils_Jump.Jump(chewToil); yield return gotoToPickup; yield return Toils_Ingest.PickupIngestible(TargetIndex.A, pawn); - Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C, 1, -1, null); + Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C); Toil findExtraFoodToCollect = new Toil(); findExtraFoodToCollect.initAction = delegate { if (pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def) < job.takeExtraIngestibles) { - Predicate validator = (Thing x) => pawn.CanReserve(x, 1, -1, null, false) + Predicate validator = (Thing x) => pawn.CanReserve(x) && !x.IsForbidden(pawn) && x.IsSociallyProper(pawn); Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForDef(IngestibleSource.def), PathEndMode.Touch, - TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), - 12f, validator, null, 0, -1, false, RegionType.Set_Passable, false); + TraverseParms.For(pawn), + 12f, validator); if (thing != null) { pawn.CurJob.SetTarget(TargetIndex.C, thing); @@ -187,10 +181,10 @@ private Toil ReserveFoodIfWillIngestWholeStack() { if (!thing.Spawned) { - pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true); + pawn.jobs.EndCurrentJob(JobCondition.Incompletable); return; } - pawn.Reserve(thing, job, 1, -1, null); + pawn.Reserve(thing, job); } }, defaultCompleteMode = ToilCompleteMode.Instant @@ -249,15 +243,15 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { if (!(ingester.Position + ingester.Rotation.FacingCell).HasEatSurface(actor.Map) && ingester.GetPosture() == PawnPosture.Standing) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable, null); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable); } - Room room = ingester.GetRoom(RegionType.Set_Passable); + Room room = ingester.GetRoom(); if (room != null) { int scoreStageIndex = RoomStatDefOf.Impressiveness.GetScoreStageIndex(room.GetStat(RoomStatDefOf.Impressiveness)); if (ThoughtDefOf.AteInImpressiveDiningRoom.stages[scoreStageIndex] != null) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex), null); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex)); } } } @@ -270,7 +264,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { thing = thing.SplitOff(1); } - if (!thing.Destroyed) thing.Destroy(DestroyMode.Vanish); + if (!thing.Destroyed) thing.Destroy(); }; toil.defaultCompleteMode = ToilCompleteMode.Instant; return toil; @@ -278,7 +272,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) public override bool TryMakePreToilReservations() { - return pawn.Reserve(TargetA, job, 1, -1, null); + return pawn.Reserve(TargetA, job); } } } diff --git a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs index 01dc220..18df63f 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs @@ -15,7 +15,7 @@ public class JobDriver_DigAndHide : JobDriver [DebuggerHidden] protected override IEnumerable MakeNewToils() { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); if (TargetLocA != pawn.PositionHeld) yield return Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.Touch); Toil doWork = new Toil(); doWork.initAction = delegate @@ -33,8 +33,8 @@ protected override IEnumerable MakeNewToils() workLeft -= pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); if (workLeft <= 0f) { - Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole, null); - thing.SetFaction(pawn.Faction, null); + Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole); + thing.SetFaction(pawn.Faction); GenSpawn.Spawn(thing, TargetLocA, Map); Pawn actor = pawn; @@ -58,7 +58,7 @@ protected override IEnumerable MakeNewToils() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref workLeft, "workLeft", 0f, false); + Scribe_Values.Look(ref workLeft, "workLeft"); } public override bool TryMakePreToilReservations() diff --git a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs index fcacd68..0dd1979 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs @@ -17,11 +17,11 @@ public override bool TryMakePreToilReservations() protected override IEnumerable MakeNewToils() { this.FailOnDespawnedOrNull(TargetIndex.A); - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell); Toil prepare = Toils_General.Wait(500); prepare.FailOnCannotTouch(TargetIndex.A, PathEndMode.InteractionCell); - prepare.WithProgressBarToilDelay(TargetIndex.A, false, -0.5f); + prepare.WithProgressBarToilDelay(TargetIndex.A); yield return prepare; yield return new Toil { diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index 868ed1b..e283673 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -62,7 +62,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, ThoughtDef victimThoughtDef, ThoughtDef actorThoughtDef, float workLeft, Action effect, Func stopCondition, bool needsGrapple = true, bool cleansWound = true, bool neverGiveUp = false) { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); Toil gotoToil = (actor?.Faction == TargetA.Thing?.Faction) ? Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch) : Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() @@ -91,7 +91,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, } if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); + actor.jobs.EndCurrentJob(JobCondition.Incompletable); } if (actor.IsVampire()) VampireBiteUtility.MakeNew(actor, victim); @@ -116,7 +116,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (victimThoughtDef != null) victimThought = (Thought_Memory)ThoughtMaker.MakeThought(victimThoughtDef); if (victimThought != null) { - victim.needs.mood.thoughts.memories.TryGainMemory(victimThought, null); + victim.needs.mood.thoughts.memories.TryGainMemory(victimThought); } } if (actor?.needs?.mood?.thoughts?.memories != null) @@ -125,7 +125,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (actorThoughtDef != null) actorThought = (Thought_Memory)ThoughtMaker.MakeThought(actorThoughtDef); if (actorThought != null) { - actor.needs.mood.thoughts.memories.TryGainMemory(actorThought, null); + actor.needs.mood.thoughts.memories.TryGainMemory(actorThought); } } @@ -134,7 +134,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); v.XP += 15; } workLeft = BaseFeedTime; @@ -176,7 +176,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs index 4da0aae..b54a91b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs @@ -53,7 +53,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, float workLeft, Action effect, Func stopCondition) { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); Toil gotoToil = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() @@ -77,7 +77,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, GenClamor.DoClamor(actor, 10f, ClamorType.Harm); if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); + actor.jobs.EndCurrentJob(JobCondition.Incompletable); } if (actor?.VampComp()?.Bloodline?.bloodlineHediff?.CompProps()?.verbs is List verbProps) { @@ -107,7 +107,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); v.XP += 15; } workLeft = BaseFeedTime; @@ -136,7 +136,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs index f85f5e1..176a550 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs @@ -42,7 +42,7 @@ protected override Job TryGiveJob(Pawn pawn) return null; if (pawn.Drafted) return null; - Room room = pawn.GetRoom(RegionType.Set_Passable); + Room room = pawn.GetRoom(); if (room != null) { if (room.PsychologicallyOutdoors) diff --git a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs index c948baf..32fc83b 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs @@ -24,13 +24,13 @@ protected override Job TryGiveJob(Pawn pawn) { return null; } - if (pawn?.TryGetAttackVerb(false) == null) + if (pawn?.TryGetAttackVerb() == null) { return null; } Pawn pawn2 = FindPawnTarget(pawn); - if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) + if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) { if (pawn2.InAggroMentalState) return MeleeAttackJob(pawn2); @@ -45,7 +45,7 @@ protected override Job TryGiveJob(Pawn pawn) } if (pawn2 != null) { - using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings, false), PathEndMode.OnCell)) + using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings))) { if (!pawnPath.Found) { @@ -62,10 +62,10 @@ protected override Job TryGiveJob(Pawn pawn) //} } IntVec3 loc = pawnPath.LastCellBeforeBlockerOrFinalCell(pawn.MapHeld); - IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map, RegionType.Set_Passable), 9, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), null, null, RegionType.Set_Passable).RandomCell; + IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map), 9, TraverseParms.For(pawn)).RandomCell; if (randomCell == pawn.PositionHeld) { - return new Job(JobDefOf.Wait, 30, false); + return new Job(JobDefOf.Wait, 30); } return new Job(JobDefOf.Goto, randomCell); } @@ -103,13 +103,13 @@ private Pawn FindPawnTarget(Pawn pawn) private Building FindTurretTarget(Pawn pawn) { - return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); + return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f); } private Building_Door FindDoorTarget(Pawn pawn) { - return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); + return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f); } } diff --git a/Source/Vampires/Buildings/Building_HideyHole.cs b/Source/Vampires/Buildings/Building_HideyHole.cs index 84cc955..90caf7a 100644 --- a/Source/Vampires/Buildings/Building_HideyHole.cs +++ b/Source/Vampires/Buildings/Building_HideyHole.cs @@ -8,7 +8,7 @@ public class Building_HideyHole : Building_Grave public override void Open() { base.Open(); - Destroy(DestroyMode.Vanish); + Destroy(); } } } diff --git a/Source/Vampires/Buttons.cs b/Source/Vampires/Buttons.cs index 47677ea..06deff7 100644 --- a/Source/Vampires/Buttons.cs +++ b/Source/Vampires/Buttons.cs @@ -7,12 +7,12 @@ namespace Vampire public static class TexButton { //VampireIcon - public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon", true); - public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon", true); - public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty", true); - public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull", true); - public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted", true); - public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed", true); + public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon"); + public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon"); + public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty"); + public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull"); + public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted"); + public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed"); //public static readonly Texture2D ROMV_Ashes = ContentFinder.Get("Things/Item/Resource/VampireAshes", true); } } \ No newline at end of file diff --git a/Source/Vampires/Components/CompVampBed.cs b/Source/Vampires/Components/CompVampBed.cs index 7f09ced..0b8a594 100644 --- a/Source/Vampires/Components/CompVampBed.cs +++ b/Source/Vampires/Components/CompVampBed.cs @@ -44,7 +44,7 @@ public override IEnumerable CompFloatMenuOptions(Pawn selPawn) }), delegate { selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, parent)); - }, MenuOptionPriority.Default, null, null, 0f, null, null); + }); } } @@ -57,7 +57,7 @@ public override void CompTickRare() { if (bed != null && bed.Spawned) { - bed.Destroy(DestroyMode.Vanish); + bed.Destroy(); bed = null; } if (g.TryGetInnerInteractableThingOwner().FirstOrDefault(x => x is MinifiedThing) is MinifiedThing t) @@ -94,7 +94,7 @@ public override void PostDeSpawn(Map map) base.PostDeSpawn(map); if (bed != null && bed.Spawned) { - bed.Destroy(DestroyMode.Vanish); + bed.Destroy(); bed = null; } } diff --git a/Source/Vampires/Components/CompVampire.cs b/Source/Vampires/Components/CompVampire.cs index b4ec65e..26a29dc 100644 --- a/Source/Vampires/Components/CompVampire.cs +++ b/Source/Vampires/Components/CompVampire.cs @@ -97,24 +97,13 @@ public float XPLastLevel return result; } } - public float XPTillNextLevelPercent - { - get - { - return ((float)(xp - XPLastLevel) / (float)(XPTillNextLevel - XPLastLevel)); - } - } - public int XPTillNextLevel - { - get - { - return (level + 1) * 600; - } - } + public float XPTillNextLevelPercent => ((float)(xp - XPLastLevel) / (float)(XPTillNextLevel - XPLastLevel)); + public int XPTillNextLevel => (level + 1) * 600; public int AbilityPoints { get => abilityPoints; set => abilityPoints = value; } public bool Transformed => currentForm != null; - public PawnKindDef CurrentForm { get => currentForm; set { currentForm = value; }} + public PawnKindDef CurrentForm { get => currentForm; set => currentForm = value; + } private Graphic curFormGraphic = null; public Graphic CurFormGraphic { get => curFormGraphic; set => curFormGraphic = value; } @@ -187,10 +176,8 @@ public List Souls } } public BloodlineDef Bloodline { - get - { - return bloodline; - } set => bloodline = value; } + get => bloodline; + set => bloodline = value; } public int Generation { get => generation; set => generation = value; } public bool Thinblooded => generation > 13; public Need_Blood BloodPool => AbilityUser?.needs?.TryGetNeed() ?? null; @@ -306,7 +293,7 @@ public void GiveFeedJob(Pawn victim) public void GiveEmbraceJob(Pawn newChilde) { Job embraceJob = new Job(VampDefOf.ROMV_Embrace, newChilde); - AbilityUser.jobs.TryTakeOrderedJob(embraceJob, JobTag.Misc); + AbilityUser.jobs.TryTakeOrderedJob(embraceJob); } public void InitializeVampirism(Pawn newSire, BloodlineDef newBloodline = null, int newGeneration = -1, bool firstVampire = false) @@ -377,7 +364,7 @@ public void SunlightWatcherTick() ThinkResult thinkResult = thinkNode_JobGiver.TryIssueJobPackage(p, default(JobIssueParams)); if (thinkResult.Job is Job j && j.IsSunlightSafeFor(p)) { - p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null, false); + p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null); } else { @@ -400,7 +387,7 @@ public void Notify_Starving(int lastNonStarvingTick) public void Notify_Embraced(CompVampire sireComp) { - InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1, false); + InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1); Messages.Message("ROMV_EmbracedSuccessfully".Translate(new object[] { AbilityUser.LabelShort, @@ -466,7 +453,7 @@ public override IEnumerable CompGetGizmosExtra() action = delegate { AbilityUser.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess); BloodPool.AdjustBlood(-bloodHeal.bloodCost); VampireUtility.Heal(AbilityUser); }, @@ -481,9 +468,9 @@ public override void PostExposeData() { Scribe_Defs.Look(ref bloodline, "bloodline"); Scribe_Values.Look(ref generation, "generation"); - Scribe_Values.Look(ref level, "level", 0); - Scribe_Values.Look(ref xp, "xp", 0); - Scribe_Values.Look(ref abilityPoints, "abilityPoints", 0); + Scribe_Values.Look(ref level, "level"); + Scribe_Values.Look(ref xp, "xp"); + Scribe_Values.Look(ref abilityPoints, "abilityPoints"); Scribe_Values.Look(ref curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); Scribe_References.Look(ref sire, "sire"); Scribe_Collections.Look(ref souls, "souls", LookMode.Reference); diff --git a/Source/Vampires/Defs/ScenPart_GameStartNight.cs b/Source/Vampires/Defs/ScenPart_GameStartNight.cs index 2d0918f..7c8c55e 100644 --- a/Source/Vampires/Defs/ScenPart_GameStartNight.cs +++ b/Source/Vampires/Defs/ScenPart_GameStartNight.cs @@ -15,14 +15,14 @@ public class ScenPart_GameStartNight : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f); - text = Widgets.TextArea(scenPartRect, text, false); + text = Widgets.TextArea(scenPartRect, text); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref text, "text", null, false); - Scribe_Values.Look(ref textKey, "textKey", null, false); + Scribe_Values.Look(ref text, "text"); + Scribe_Values.Look(ref textKey, "textKey"); Scribe_Defs.Look(ref closeSound, "closeSound"); } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs index ccd0774..4396ce6 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs @@ -11,7 +11,7 @@ public override void Effect(Pawn target) int count = new IntRange(15, 25).RandomInRange; IntVec3 loc; - if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal, null)) + if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal)) { VampireUtility.SummonEffect(loc, CasterPawn.Map, CasterPawn, 10f); @@ -19,7 +19,7 @@ public override void Effect(Pawn target) target.Map.wildSpawner.SpawnRandomWildAnimalAt(loc); } - Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map), null); + Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map)); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs index 6621b8c..b32b02e 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs @@ -8,7 +8,7 @@ public class DisciplineEffect_Communion : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { for (int i = 1; i <= 3; i++) diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs index cb4ea97..de6430e 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs @@ -8,7 +8,7 @@ public class DisciplineEffect_SpectralWolf : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_WolfSpectral, Faction.OfPlayer); diff --git a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs index 4f46df4..8275c17 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs @@ -13,13 +13,7 @@ public class HediffComp_TickGraphic : HediffComp private Graphic curGraphic = null; public Graphic CurGraphic { get => curGraphic; set => curGraphic = value; } - public HediffCompProperties_TickGraphic Props - { - get - { - return (HediffCompProperties_TickGraphic)props; - } - } + public HediffCompProperties_TickGraphic Props => (HediffCompProperties_TickGraphic)props; public override void CompPostTick(ref float severityAdjustment) { @@ -49,8 +43,8 @@ public override void CompPostTick(ref float severityAdjustment) public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref curGraphicIndex, "curGraphicIndex", 0); - Scribe_Values.Look(ref activated, "activated", false); + Scribe_Values.Look(ref curGraphicIndex, "curGraphicIndex"); + Scribe_Values.Look(ref activated, "activated"); } } } diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index 8629247..0ac70ce 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -41,13 +41,13 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } @@ -63,13 +63,13 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } @@ -91,14 +91,14 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } @@ -114,13 +114,13 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } } @@ -167,7 +167,7 @@ public override void DeSpawn() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref ticksLeft, "ticksLeft", 0); + Scribe_Values.Look(ref ticksLeft, "ticksLeft"); Scribe_References.Look(ref master, "master"); } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs index 953eab7..9fb9867 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs @@ -8,8 +8,8 @@ public class DisciplineEffect_ReadMind : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, CasterPawn, null); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, CasterPawn); if (hediff.TryGetComp() is HediffComp_ReadMind rm) { rm.MindBeingRead = target; diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs index 29b2c12..7b09a2e 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs @@ -24,7 +24,7 @@ public virtual void Effect() { if (defsToCheck.Contains(h.def)) { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap), -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap)); p.health.hediffSet.hediffs.Remove(h); } } @@ -35,13 +35,13 @@ public virtual void Effect() // Verse.FogGrid if (CasterPawn.Map.fogGrid.IsFogged(c)) { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); return; } else { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs index 5a70ff9..0589490 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs @@ -9,7 +9,7 @@ public class DisciplineEffect_Hunger : AbilityUser.Verb_UseAbility public virtual void Effect() { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { @@ -22,7 +22,7 @@ public virtual void Effect() if (t.def.defName == "FilthBlood") { CasterPawn.BloodNeed().AdjustBlood(1); - t.Destroy(DestroyMode.Vanish); + t.Destroy(); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs index 3f1e163..dbbfa10 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs @@ -8,7 +8,7 @@ public class DisciplineEffect_UnstoppableTide : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BloodMistKind, Faction.OfPlayer); diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs index a88644f..3bf4c4b 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs @@ -7,7 +7,7 @@ public class DisciplineEffect_Possession : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target, null); + Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target); hediff.Severity = 1.0f; target.health.AddHediff(hediff, null, null); hediff.TryGetComp().ActivateEffect(CasterPawn); diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs index 54fcaab..248f1e1 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs @@ -11,7 +11,7 @@ public virtual void Effect() if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs index be924fd..fc7343b 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs @@ -9,7 +9,7 @@ public class DisciplineEffect_ArmOfTheAbyss : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_AbyssalArmKind, Faction.OfPlayer); diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs index 6845224..5186b25 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs @@ -13,11 +13,11 @@ public void Effect() { if (t.Cell.Standable(CasterPawn.MapHeld)) { - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); CasterPawn.Position = t.Cell; return; } - MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs index 59aad0e..6c318a5 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs @@ -18,7 +18,7 @@ public override void Impact_Override(Thing hitThing) int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite(), 1); + FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite()); } List parts = p.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside); for (int j = 0; j < 4; j++) diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs index 7f0a220..fbfa5af 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs @@ -11,7 +11,7 @@ public override void Impact_Override(Thing hitThing) base.Impact_Override(hitThing); if (hitThing is Pawn p && p.BloodNeed() is Need_Blood bn) { - MoteMaker.ThrowText(p.DrawPos, p.Map, "+2", -1f); + MoteMaker.ThrowText(p.DrawPos, p.Map, "+2"); bn.AdjustBlood(2); } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs index 288670d..01feec2 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs @@ -12,13 +12,13 @@ public override void Impact_Override(Thing hitThing) if (hitThing is Pawn p && p?.BloodNeed() is Need_Blood bn && p.MapHeld != null) { - MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2", -1f); + MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2"); bn.AdjustBlood(-2); if (p.MapHeld != null && p.PositionHeld.IsValid) { Projectile_BloodReturner projectile = (Projectile_BloodReturner)GenSpawn.Spawn(ThingDef.Named("ROMV_BloodProjectile_Returner"), hitThing.PositionHeld, hitThing.MapHeld); - projectile.Launch(hitThing, origin.ToIntVec3(), null); + projectile.Launch(hitThing, origin.ToIntVec3()); } } } diff --git a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs index a1904ec..f7cf3ef 100644 --- a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs +++ b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs @@ -12,7 +12,7 @@ public virtual void Effect(Pawn target) target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, CasterPawn)); } target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); } public override void PostCastShot(bool inResult, out bool outResult) diff --git a/Source/Vampires/FlyingObject.cs b/Source/Vampires/FlyingObject.cs index f9a4143..82c68bc 100644 --- a/Source/Vampires/FlyingObject.cs +++ b/Source/Vampires/FlyingObject.cs @@ -34,13 +34,7 @@ protected int StartingTicksToImpact } - protected IntVec3 DestinationCell - { - get - { - return new IntVec3(destination); - } - } + protected IntVec3 DestinationCell => new IntVec3(destination); public virtual Vector3 ExactPosition { @@ -51,33 +45,21 @@ public virtual Vector3 ExactPosition } } - public virtual Quaternion ExactRotation - { - get - { - return Quaternion.LookRotation(destination - origin); - } - } + public virtual Quaternion ExactRotation => Quaternion.LookRotation(destination - origin); - public override Vector3 DrawPos - { - get - { - return ExactPosition; - } - } + public override Vector3 DrawPos => ExactPosition; public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref origin, "origin", default(Vector3), false); - Scribe_Values.Look(ref destination, "destination", default(Vector3), false); - Scribe_Values.Look(ref ticksToImpact, "ticksToImpact", 0, false); - Scribe_Values.Look(ref timesToDamage, "timesToDamage", 0, false); + Scribe_Values.Look(ref origin, "origin"); + Scribe_Values.Look(ref destination, "destination"); + Scribe_Values.Look(ref ticksToImpact, "ticksToImpact"); + Scribe_Values.Look(ref timesToDamage, "timesToDamage"); Scribe_Values.Look(ref damageLaunched, "damageLaunched", true); - Scribe_Values.Look(ref explosion, "explosion", false); - Scribe_References.Look(ref assignedTarget, "assignedTarget", false); - Scribe_References.Look(ref launcher, "launcher", false); + Scribe_Values.Look(ref explosion, "explosion"); + Scribe_References.Look(ref assignedTarget, "assignedTarget"); + Scribe_References.Look(ref launcher, "launcher"); Scribe_References.Look(ref flyingThing, "flyingThing"); } @@ -117,7 +99,7 @@ public override void Tick() { ticksToImpact++; Position = ExactPosition.ToIntVec3(); - Destroy(DestroyMode.Vanish); + Destroy(); return; } @@ -204,7 +186,7 @@ protected virtual void Impact(Thing hitThing) } GenSpawn.Spawn(flyingThing, Position, Map); - Destroy(DestroyMode.Vanish); + Destroy(); } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index 14d2b8d..df4933d 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -22,21 +22,21 @@ static HarmonyPatches() //Fixes issues with having no food need. harmony.Patch(AccessTools.Method(typeof(Pawn_NeedsTracker), "ShouldHaveNeed"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp)))); harmony.Patch(AccessTools.Method(typeof(ThinkNode_ConditionalNeedPercentageAbove), "Satisfied"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(Satisfied_Vamp))), null); //The wander handler now makes vampires wander indoors (for their safety). harmony.Patch(AccessTools.Method(typeof(PawnUtility), "KnownDangerAt"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp)))); harmony.Patch(AccessTools.Method(typeof(JoyUtility), "EnjoyableOutsideNow", new Type[] { typeof(Pawn), typeof(StringBuilder) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire)))); harmony.Patch(AccessTools.Method(typeof(JobGiver_GetRest), "FindGroundSleepSpotFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire)))); harmony.Patch(AccessTools.Method(typeof(JobGiver_TakeCombatEnhancingDrug), "TryGiveJob"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(TryGiveJob_DrugGiver_Vampire))), null); harmony.Patch(AccessTools.Method(typeof(ReachabilityUtility), "CanReach", new Type[] { typeof(Pawn), typeof(LocalTargetInfo), typeof(PathEndMode), typeof(Danger), typeof(bool), typeof(TraverseMode) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire)))); //The Doctor alert will no longer check a vampire to see if it's fed. harmony.Patch(AccessTools.Method(typeof(Alert_NeedDoctor), "get_Patients"), @@ -48,7 +48,7 @@ static HarmonyPatches() //Adds vampire right click float menus. harmony.Patch(AccessTools.Method(typeof(FloatMenuMakerMap), "AddHumanlikeOrders"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp)))); //Gives different skin color for Vampires harmony.Patch(AccessTools.Method(typeof(Pawn_StoryTracker), "get_SkinColor"), @@ -56,11 +56,11 @@ static HarmonyPatches() //Adds debug/dev tools for making vampires. harmony.Patch(AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DoListingItems_MapTools"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp)))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(ThingDef), "get_AllRecipes"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable)))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(Bill_Medical), "Notify_DoBillStarted"), @@ -74,15 +74,15 @@ static HarmonyPatches() harmony.Patch(AccessTools.Method(typeof(Building_Grave), "get_Graphic"), new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Graphic_VampBed))), null); harmony.Patch(AccessTools.Method(typeof(Building_Casket), "GetFloatMenuOptions"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed)))); harmony.Patch(AccessTools.Method(typeof(WorkGiver_BuryCorpses), "FindBestGrave"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed)))); //Caravan patches harmony.Patch(AccessTools.Method(typeof(Dialog_FormCaravan), "CheckForErrors"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires)))); harmony.Patch(AccessTools.Method(typeof(Caravan), "get_Resting"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires))), null); + new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires)))); //Lord_AI patches harmony.Patch(AccessTools.Method(typeof(Trigger_UrgentlyHungry), "ActivateOn"), @@ -94,11 +94,11 @@ static HarmonyPatches() //Changes vampire appearances and statistics based on their current forms harmony.Patch(AccessTools.Method(typeof(Pawn), "get_BodySize"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireBodySize)), null); + nameof(VampireBodySize))); harmony.Patch(AccessTools.Method(typeof(Pawn), "get_HealthScale"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireHealthScale)), null); + nameof(VampireHealthScale))); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveAllGraphics"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(Vamp_ResolveAllGraphics)), null); + nameof(Vamp_ResolveAllGraphics))); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveApparelGraphics"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_ResolveApparelGraphics)), null); harmony.Patch(AccessTools.Method(typeof(PawnRenderer), "RenderPawnInternal", new Type[] { typeof(Vector3), typeof(Quaternion), typeof(bool), typeof(Rot4), typeof(Rot4), typeof(RotDrawMode), typeof(bool), typeof(bool) }), new HarmonyMethod(typeof(VampireGraphicUtility), @@ -106,7 +106,7 @@ static HarmonyPatches() //Allows skill adjustments harmony.Patch(AccessTools.Method(typeof(SkillRecord), "get_Level"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel))); //Vampires do not age like others. harmony.Patch(AccessTools.Method(typeof(Pawn_AgeTracker), "BirthdayBiological"), @@ -118,7 +118,7 @@ static HarmonyPatches() //Adds vampire skill sheet button to CharacterCard harmony.Patch(AccessTools.Method(typeof(CharacterCardUtility), "DrawCharacterCard", new Type[] { typeof(Rect), typeof(Pawn), typeof(Action), typeof(Rect) }), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard))); //Fills the character card with a vampire skill sheet harmony.Patch(AccessTools.Method(typeof(ITab_Pawn_Character), "FillTab"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_FillTab)), null); @@ -157,32 +157,32 @@ static HarmonyPatches() //Patch to add comfort to vampire beds. harmony.Patch(AccessTools.Method(typeof(PawnUtility), "GainComfortFromCellIfPossible"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort))); //Patch to remove vampire's ability to bleed. harmony.Patch(AccessTools.Method(typeof(Hediff_Injury), "get_BleedRate"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate))); //Patch to hide vampire capacities. //harmony.Patch(AccessTools.Method(typeof(PawnCapacitiesHandler), "GetLevel"), null, // new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_HidePawnCapacities)), null); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetPawnCapacityTip"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip))); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetEfficiencyLabel"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel))); //Vampires do not worry about hot and cold harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Hot), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Cold), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); //Vampires are not affected by Hypothermia nor Heatstroke harmony.Patch(AccessTools.Method(typeof(HediffGiver_Heat), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); harmony.Patch(AccessTools.Method(typeof(HediffGiver_Hypothermia), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); harmony.Patch(AccessTools.Method(typeof(Pawn_HealthTracker), "AddHediff", new Type[] { typeof(Hediff), typeof(BodyPartRecord), typeof(DamageInfo?) }), new HarmonyMethod(typeof(HarmonyPatches), nameof(AddHediff)), null); @@ -216,7 +216,7 @@ static HarmonyPatches() //Vampires should not dislike the darkness. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Dark), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness))); //Fixes random red errors relating to food need checks in this method (WillIngestStackCountOf). @@ -226,16 +226,16 @@ static HarmonyPatches() //Vampires should tire very much during the daylight hours. harmony.Patch(AccessTools.Method(typeof(Need_Rest), "NeedInterval"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight))); // harmony.Patch(AccessTools.Method(typeof(GenCelestial), "CelestialSunGlowPercent"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent))); //Patches out binging behavior harmony.Patch(AccessTools.Method(typeof(JobGiver_Binge), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge))); //Patches corpse generation for vampires. harmony.Patch(AccessTools.Method(typeof(Pawn), "MakeCorpse"), @@ -243,33 +243,33 @@ static HarmonyPatches() //Vampire corpses can resurrect safely inside graves, sarcophogi, and caskets. harmony.Patch(AccessTools.Method(typeof(Building_Grave), "GetGizmos"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie))); //Caskets and coffins do not autoassign to colonists. harmony.Patch(AccessTools.Method(typeof(Pawn_Ownership), "ClaimBedIfNonMedical"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedsForTheUndead)), null); harmony.Patch(AccessTools.Method(typeof(RestUtility), "IsValidBedFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor))); //Vampires should never skygaze during sunrise... harmony.Patch(AccessTools.Method(typeof(JobDriver_Skygaze), "GetReport"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez))); //Vampire player should know about the rest curse. harmony.Patch(AccessTools.Method(typeof(Need), "GetTipString"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip))); //Vampires should not try to do drugs when idle. harmony.Patch(AccessTools.Method(typeof(JobGiver_IdleJoy), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs))); //Vampires should not be given food by wardens. harmony.Patch(AccessTools.Method(typeof(Pawn_GuestTracker), "get_CanBeBroughtFood"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood))); //Vampires should not be given food by wardens. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_CabinFever), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever))); #region DubsBadHygiene { @@ -431,11 +431,11 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra { AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); }, disabled = (AbilityUser?.BloodNeed()?.CurBloodPoints ?? 0) < 0 }; @@ -453,7 +453,7 @@ public static bool Vamp_MakeCorpse(Pawn __instance, Building_Grave assignedGrave __result = null; return false; } - VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse"), null); + VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse")); corpse.InnerPawn = __instance; corpse.BloodPoints = __instance.BloodNeed().CurBloodPoints; if (__instance.health.hediffSet.GetHediffs()?.Where(x => x.def == HediffDefOf.Burn && !x.IsTended())?.Count() > 3) @@ -608,7 +608,7 @@ public static bool Vamp_GuestFix(Pawn p, ref bool __result) if (p.IsVampire()) { __result = !p.Downed && p.health.hediffSet.BleedRateTotal <= 0f && p?.needs?.rest?.CurCategory < RestCategory.Exhausted && - !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff(false) && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; + !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff() && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; return false; } return true; @@ -836,7 +836,7 @@ public static void Vamp_BedComfort(Pawn p) { if (edifice.TryGetComp() is CompVampBed vBed && vBed.Bed != null) { - float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort, true); + float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort); if (statValue >= 0f && p.needs != null && p.needs.comfort != null) { p.needs.comfort.ComfortUsed(statValue); @@ -1008,7 +1008,7 @@ public static bool Vamp_CanVisit(ref bool __result, Pawn pawn, Pawn sick, JoyCat { __result = sick.IsColonist && !sick.Dead && pawn != sick && sick.InBed() && sick.Awake() && !sick.IsForbidden(pawn) && sick.needs.joy != null && sick.needs.joy.CurCategory <= maxPatientJoy && InteractionUtility.CanReceiveInteraction(sick) && - pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None, 1, -1, null, false) && !AboutToRecover(sick); + pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None) && !AboutToRecover(sick); return false; } return true; @@ -1167,7 +1167,7 @@ public static bool VampireBirthdayBiological(Pawn_AgeTracker __instance) Find.LetterStack.ReceiveLetter("LetterLabelBirthday".Translate(), "ROMV_VampireBirthday".Translate(new object[]{ p.Label, p.ageTracker.AgeBiologicalYears - }), LetterDefOf.PositiveEvent, p, null); + }), LetterDefOf.PositiveEvent, p); return false; } return true; @@ -1305,11 +1305,11 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra { if (__result != null && __result is Building_Grave g && g?.def.GetCompProperties() is CompProperties_VampBed b) { - Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m, 1, -1, null, false) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); + Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); if (corpse?.InnerPawn?.ownership != null && corpse?.InnerPawn?.ownership?.AssignedGrave != null) { Building_Grave assignedGrave = corpse?.InnerPawn?.ownership?.AssignedGrave; - if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false)) ?? false)) + if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p)) ?? false)) { __result = assignedGrave; return; @@ -1317,7 +1317,7 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra } Func priorityGetter = (Thing t) => (float)((IStoreSettingsParent)t).GetStoreSettings().Priority; Predicate validator = predicate; - __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator, priorityGetter); + __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p), 9999f, validator, priorityGetter); return; } } @@ -1385,7 +1385,7 @@ public static void GetFloatMenuOptions_VampBed(Building_Casket __instance, Pawn }), delegate { selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, __instance)); - }, MenuOptionPriority.Default, null, null, 0f, null, null)}); + })}); } } } @@ -1485,22 +1485,22 @@ private static void AddHumanlikeOrders_Vamp(Vector3 clickPos, Pawn pawn, ref Lis FloatMenuOption item5; if (bloodItem.def.IsPleasureDrug && pawn.IsTeetotaler()) { - item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); + item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null); } - else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly, false, TraverseMode.ByPawn)) + else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly)) { - item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); + item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null); } else { MenuOptionPriority priority = (!(bloodItem is Corpse)) ? MenuOptionPriority.Default : MenuOptionPriority.Low; item5 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, delegate { - bloodItem.SetForbidden(false, true); + bloodItem.SetForbidden(false); Job job = new Job(VampDefOf.ROMV_ConsumeBlood, bloodItem); job.count = BloodUtility.WillConsumeStackCountOf(pawn, bloodItem.def); - pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); - }, priority, null, null, 0f, null, null), pawn, bloodItem, "ReservedBy"); + pawn.jobs.TryTakeOrderedJob(job); + }, priority), pawn, bloodItem); } opts.Add(item5); } @@ -1544,7 +1544,7 @@ public static bool MakeNewToils_VampVomit(JobDriver_Vomit __instance, ref IEnume int curTicks = Traverse.Create(__instance).Field("ticksLeft").GetValue(); if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite(), 1); + FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite()); if (__instance.pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs index f97147e..5d09f97 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs @@ -17,7 +17,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan "Spawn Vampire (Random)", new Action(()=> { Pawn randomVampire = - VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null, null, false); + VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null); GenSpawn.Spawn(randomVampire, UI.MouseCell(), Find.VisibleMap); }) @@ -34,7 +34,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan { pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire"); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -74,7 +74,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan pawn.health.RestorePart(rec); } pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire"); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -90,7 +90,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan { b.AdjustBlood(1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood"); } })}); @@ -102,7 +102,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan { b.AdjustBlood(-1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood"); } })}); @@ -115,7 +115,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan { v.XP += 100; pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP"); } })}); } @@ -150,7 +150,7 @@ private static List Options_Generation(Pawn p, BloodlineDef blo p.VampComp().InitializeVampirism(null, bloodline, curGen, curGen == 1); //Log.Message("0" + p.LabelShort + " " + i.ToString()); p.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire", -1f); + MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire"); })); } return list; diff --git a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs index 4c30d8b..33232da 100644 --- a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs +++ b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs @@ -36,7 +36,7 @@ public override IEnumerable 1) { @@ -49,7 +49,7 @@ public override IEnumerable 140f; public override GizmoResult GizmoOnGUI(Vector2 topLeft) { @@ -38,7 +32,7 @@ public override GizmoResult GizmoOnGUI(Vector2 topLeft) Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(rect3, (shield.Energy * 100f).ToString("F0") + " / " + (shield.EnergyMax * 100f).ToString("F0")); Text.Anchor = TextAnchor.UpperLeft; - }, true, false, 1f); + }); return new GizmoResult(GizmoState.Clear); } } diff --git a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs index 45f818e..3dd0b92 100644 --- a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs +++ b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs @@ -14,13 +14,7 @@ public Graphic BodyGraphic { get => bodyGraphic; set => bodyGraphic = value; } - public new HediffCompProperties_AnimalForm Props - { - get - { - return (HediffCompProperties_AnimalForm)props; - } - } + public new HediffCompProperties_AnimalForm Props => (HediffCompProperties_AnimalForm)props; public override string CompTipStringExtra { @@ -57,7 +51,7 @@ public override void CompPostTick(ref float severityAdjustment) public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref activated, "activated", false); + Scribe_Values.Look(ref activated, "activated"); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_Possession.cs b/Source/Vampires/Hediffs/HediffComp_Possession.cs index 0c3892e..dc69295 100644 --- a/Source/Vampires/Hediffs/HediffComp_Possession.cs +++ b/Source/Vampires/Hediffs/HediffComp_Possession.cs @@ -5,20 +5,14 @@ namespace Vampire public class HediffComp_Possession : HediffComp_Disappears { - public new HediffCompProperties_Possession Props - { - get - { - return (HediffCompProperties_Possession)props; - } - } - + public new HediffCompProperties_Possession Props => (HediffCompProperties_Possession)props; + public void ActivateEffect(Pawn activator) { string text = Pawn.LabelIndefinite(); if (Pawn.guest != null) { - Pawn.guest.SetGuestStatus(null, false); + Pawn.guest.SetGuestStatus(null); } bool flag = Pawn.Name != null; if (Pawn.Faction != activator.Faction) diff --git a/Source/Vampires/Hediffs/HediffComp_Shield.cs b/Source/Vampires/Hediffs/HediffComp_Shield.cs index 429d2ab..4de3547 100644 --- a/Source/Vampires/Hediffs/HediffComp_Shield.cs +++ b/Source/Vampires/Hediffs/HediffComp_Shield.cs @@ -38,44 +38,14 @@ public class HediffComp_Shield : HediffComp private static readonly Material BubbleMat = MaterialPool.MatFrom("Other/BloodShield", ShaderDatabase.Transparent); - public float EnergyMax - { - get - { - return 1.1f; - } - } + public float EnergyMax => 1.1f; - public string labelCap - { - get - { - return Def.LabelCap; - } - } - public string label - { - get - { - return Def.label; - } - } + public string labelCap => Def.LabelCap; + public string label => Def.label; - private float EnergyGainPerTick - { - get - { - return 0.13f / 60f; - } - } + private float EnergyGainPerTick => 0.13f / 60f; - public float Energy - { - get - { - return energy; - } - } + public float Energy => energy; public ShieldState ShieldState { @@ -89,21 +59,15 @@ public ShieldState ShieldState } } - private bool ShouldDisplay - { - get - { - return !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || (Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro)) || (Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks); - } - } + private bool ShouldDisplay => !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || (Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro)) || (Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks); public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref energy, "energy", 0f, false); - Scribe_Values.Look(ref setup, "setup", false); - Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1, false); - Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick", 0, false); + Scribe_Values.Look(ref energy, "energy"); + Scribe_Values.Look(ref setup, "setup"); + Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1); + Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick"); } [DebuggerHidden] @@ -193,7 +157,7 @@ public void KeepDisplaying() private void AbsorbedDamage(DamageInfo dinfo) { - SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map, false)); + SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); Vector3 loc = Pawn.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; float num = Mathf.Min(10f, 2f + (float)dinfo.Amount / 10f); @@ -214,7 +178,7 @@ public void NotifyRefilled() private void Break() { - SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map, false)); + SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); MoteMaker.MakeStaticMote(Pawn.TrueCenter(), Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); for (int i = 0; i < 6; i++) { @@ -229,7 +193,7 @@ private void Reset() { if (Pawn.Spawned) { - SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map, false)); + SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); MoteMaker.ThrowLightningGlow(Pawn.TrueCenter(), Pawn.Map, 3f); } ticksToReset = -1; diff --git a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs index 25b7298..7a7e300 100644 --- a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs @@ -4,21 +4,8 @@ namespace Vampire { public class HediffComp_SkillOffset : HediffComp { - public HediffCompProperties_SkillOffset Props - { - get - { - return (HediffCompProperties_SkillOffset)props; - } - - } - public override string CompTipStringExtra - { - get - { - return Props.skillDef.LabelCap + ": " + ((Props.offset >= 0) ? "+" : "") + Props.offset.ToString(); - } - } + public HediffCompProperties_SkillOffset Props => (HediffCompProperties_SkillOffset)props; + public override string CompTipStringExtra => Props.skillDef.LabelCap + ": " + ((Props.offset >= 0) ? "+" : "") + Props.offset.ToString(); } } diff --git a/Source/Vampires/Hediffs/HediffVampirism.cs b/Source/Vampires/Hediffs/HediffVampirism.cs index 75df292..aae9acd 100644 --- a/Source/Vampires/Hediffs/HediffVampirism.cs +++ b/Source/Vampires/Hediffs/HediffVampirism.cs @@ -142,7 +142,7 @@ public static string AddOrdinal(int num) public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref initialized, "initialized", false); + Scribe_Values.Look(ref initialized, "initialized"); //Scribe_Collections.Look(ref this.carriedBloodInfectors, "carriedBloodInfectors", LookMode.Deep, LookMode.Value); //Scribe_Collections.Look(ref this.carriedBloodDrugEffects, "carriedBloodDrugEffects", LookMode.Deep, LookMode.Value); } diff --git a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs index e4a8f28..84d22ff 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs @@ -27,13 +27,7 @@ public virtual int Generation } } - public override string LabelInBrackets - { - get - { - return "ROMV_HI_Generation".Translate(HediffVampirism.AddOrdinal(Generation)); - } - } + public override string LabelInBrackets => "ROMV_HI_Generation".Translate(HediffVampirism.AddOrdinal(Generation)); public override string TipStringExtra { @@ -80,7 +74,7 @@ public override void PostTick() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref setup, "setup", false); + Scribe_Values.Look(ref setup, "setup"); Scribe_Values.Look(ref generation, "generation", -1); } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs index a08a380..288b4e1 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs @@ -19,7 +19,7 @@ public override void Tick() { if (CurStageIndex == 3 && pawn.MentalStateDef != MentalState_VampireBeast) { - pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); } if (pB.CurLevelPercentage < 0.3f) diff --git a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs index b4ec4b2..8c3d439 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs @@ -32,7 +32,7 @@ public override void Tick() //LongEventHandler.ExecuteWhenFinished(delegate //{ SoundDef def = SoundDef.Named("FireBurning"); - SoundInfo info = SoundInfo.InMap(new TargetInfo(pawn.Position, pawn.Map, false), MaintenanceType.PerTick); + SoundInfo info = SoundInfo.InMap(new TargetInfo(pawn.Position, pawn.Map), MaintenanceType.PerTick); info.volumeFactor *= 2; //this.sustainer = def.TrySpawnSustainer(info); //SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); @@ -87,7 +87,7 @@ public void Burn() if (!pawn.Dead) { int dmgRange = curSunDamage; - DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage), -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown); + DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage)); dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside); if (CurStageIndex > 2) curSunDamage += Rand.Range(1, 2); diff --git a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs index c263aa9..f5f4762 100644 --- a/Source/Vampires/ITab_Pawn_NeedsCorpse.cs +++ b/Source/Vampires/ITab_Pawn_NeedsCorpse.cs @@ -25,13 +25,7 @@ private Pawn PawnForNeeds } } - public override bool IsVisible - { - get - { - return PawnForNeeds.needs != null && PawnForNeeds.needs.AllNeeds.Count > 0; - } - } + public override bool IsVisible => PawnForNeeds.needs != null && PawnForNeeds.needs.AllNeeds.Count > 0; public ITab_Pawn_NeedsCorpse() { diff --git a/Source/Vampires/Need_Blood.cs b/Source/Vampires/Need_Blood.cs index 6db88c9..8211984 100644 --- a/Source/Vampires/Need_Blood.cs +++ b/Source/Vampires/Need_Blood.cs @@ -157,10 +157,10 @@ public override void ExposeData() //private int curBloodPoints = Int32.MinValue; //private int nextBloodChangeTick = Int32.MaxValue; base.ExposeData(); - Scribe_Values.Look(ref lastNonStarvingTick, "lastNonStarvingTick", -1, false); - Scribe_Values.Look(ref nextBloodChangeTick, "nextBloodChangeTick", -1, false); - Scribe_Values.Look(ref curBloodPoints, "curBloodPoints", -1, false); - Scribe_Values.Look(ref bloodFixer, "bloodFixer", false); + Scribe_Values.Look(ref lastNonStarvingTick, "lastNonStarvingTick", -1); + Scribe_Values.Look(ref nextBloodChangeTick, "nextBloodChangeTick", -1); + Scribe_Values.Look(ref curBloodPoints, "curBloodPoints", -1); + Scribe_Values.Look(ref bloodFixer, "bloodFixer"); Scribe_Values.Look(ref preferredFeedMode, "preferredFeedMode", PreferredFeedMode.HumanoidNonLethal); Scribe_Values.Look(ref preferredHumanoidFeedType, "preferredHumanoidFeedType", PreferredHumanoidFeedType.PrisonersOnly); } diff --git a/Source/Vampires/ScenPart_StartingVampires.cs b/Source/Vampires/ScenPart_StartingVampires.cs index 53183a3..5b6a00f 100644 --- a/Source/Vampires/ScenPart_StartingVampires.cs +++ b/Source/Vampires/ScenPart_StartingVampires.cs @@ -23,7 +23,7 @@ public class ScenPart_StartingVampires : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f + 31f); - if (Widgets.ButtonText(scenPartRect.TopPartPixels(RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate(), true, false, true)) + if (Widgets.ButtonText(scenPartRect.TopPartPixels(RowHeight), this?.bloodline?.LabelCap ?? "ROMV_UnknownBloodline".Translate())) { FloatMenuUtility.MakeMenu(PossibleBloodlines(), (BloodlineDef bl) => bl.LabelCap, (BloodlineDef bl) => delegate { @@ -55,7 +55,7 @@ protected void DoVampModifierEditInterface(Rect rect) Widgets.Label(rect6, "ROMV_StartInCoffins".Translate()); Text.Anchor = TextAnchor.UpperLeft; - Widgets.CheckboxLabeled(rect7, "", ref spawnInCoffins, false); + Widgets.CheckboxLabeled(rect7, "", ref spawnInCoffins); Rect rect8 = new Rect(rect.x, rect.y + RowHeight * 4, rect.width, 31); Rect rect9 = rect8.LeftPart(0.666f).Rounded(); Rect rect10 = rect8.RightPart(0.333f).Rounded(); @@ -84,10 +84,10 @@ public override void ExposeData() //private int maxGeneration = 15; //private bool spawnInCoffins = false; Scribe_Defs.Look(ref bloodline, "bloodline"); - Scribe_Values.Look(ref generationRange, "generationRange", default(IntRange), false); + Scribe_Values.Look(ref generationRange, "generationRange"); Scribe_Values.Look(ref vampChance, "vampChance", 0.5f); Scribe_Values.Look(ref maxVampires, "maxVampires", 1); - Scribe_Values.Look(ref spawnInCoffins, "spawnInCoffins", false); + Scribe_Values.Look(ref spawnInCoffins, "spawnInCoffins"); } public override string Summary(Scenario scen) @@ -153,7 +153,7 @@ public override void PostMapGenerate(Map map) bool instaDrop = Find.GameInitData.QuickStarted; if (usingDropPods) { - DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true, true); + DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, map, list, 110, instaDrop, true); } } } diff --git a/Source/Vampires/SkillSheet.cs b/Source/Vampires/SkillSheet.cs index 09d4538..86a6d42 100644 --- a/Source/Vampires/SkillSheet.cs +++ b/Source/Vampires/SkillSheet.cs @@ -9,7 +9,9 @@ public class SkillSheet : IExposable private Pawn pawn; private List disciplines; - public Pawn Pawn { get { return pawn; } set { pawn = value; } } + public Pawn Pawn { get => pawn; + set => pawn = value; + } public List Disciplines => disciplines; public void InitializeDisciplines() diff --git a/Source/Vampires/UI/VampireCardUtility.cs b/Source/Vampires/UI/VampireCardUtility.cs index cfb06b8..a0681de 100644 --- a/Source/Vampires/UI/VampireCardUtility.cs +++ b/Source/Vampires/UI/VampireCardUtility.cs @@ -178,14 +178,14 @@ public static void LevelPane(Rect inRect, CompVampire compVampire) if (DebugSettings.godMode) { Rect rectDebugPlus = new Rect(rectLevel.xMax, inRect.y, inRect.width * 0.3f, TextSize); - if (Widgets.ButtonText(rectDebugPlus, "+", true, false, true)) + if (Widgets.ButtonText(rectDebugPlus, "+")) { compVampire.Notify_LevelUp(false); } if (compVampire.Level > 0) { Rect rectDebugReset = new Rect(rectDebugPlus.x, rectDebugPlus.yMax + 1, rectDebugPlus.width, TextSize); - if (Widgets.ButtonText(rectDebugReset, "~", true, false, true)) + if (Widgets.ButtonText(rectDebugReset, "~")) { compVampire.Notify_ResetAbilities(); } diff --git a/Source/Vampires/Utilities/BloodFeedModeUtility.cs b/Source/Vampires/Utilities/BloodFeedModeUtility.cs index 3c05870..e36f6fb 100644 --- a/Source/Vampires/Utilities/BloodFeedModeUtility.cs +++ b/Source/Vampires/Utilities/BloodFeedModeUtility.cs @@ -27,7 +27,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) if (Widgets.ButtonImage(rect, icon)) { vampBlood.preferredFeedMode = GetNextResponse(pawn); - SoundDefOf.TickHigh.PlayOneShotOnCamera(null); + SoundDefOf.TickHigh.PlayOneShotOnCamera(); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.HostilityResponse, KnowledgeAmount.SpecificInteraction); } UIHighlighter.HighlightOpportunity(rect, "ROMV_FeedMode"); @@ -50,7 +50,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.PrisonersOnly; else if (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly) vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.All; - SoundDefOf.TickHigh.PlayOneShotOnCamera(null); + SoundDefOf.TickHigh.PlayOneShotOnCamera(); } UIHighlighter.HighlightOpportunity(rectSub, "ROMV_FeedModeHumanoidType"); TooltipHandler.TipRegion(rectSub, string.Concat(new string[] diff --git a/Source/Vampires/Utilities/BloodUtility.cs b/Source/Vampires/Utilities/BloodUtility.cs index cf14f3b..a9a1871 100644 --- a/Source/Vampires/Utilities/BloodUtility.cs +++ b/Source/Vampires/Utilities/BloodUtility.cs @@ -147,7 +147,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate { return false; } - if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t, 1, -1, null, false)) + if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t)) { return false; } @@ -157,7 +157,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate }; Thing thing; Predicate validator = foodValidator; - thing = SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator); + thing = SpawnedBloodItemScan(eater, getter.Position, getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(getter), 9999f, validator); return thing; } @@ -224,7 +224,7 @@ private static Pawn BestPawnToHuntForVampire(Pawn predator, bool desperate = fal { if (IsAcceptableVictimFor(predator, pawn2, desperate)) { - if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) + if (predator.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) { //if (!pawn2.IsForbidden(predator)) //{ diff --git a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs index 2d383d6..8664c24 100644 --- a/Source/Vampires/Utilities/ResurrectedPawnUtility.cs +++ b/Source/Vampires/Utilities/ResurrectedPawnUtility.cs @@ -27,7 +27,7 @@ public static Pawn DoGeneratePawnFromSource(Pawn sourcePawn, bool isBerserk = tr { PawnKindDef pawnKindDef = sourcePawn.kindDef; Faction factionDirect = isBerserk ? Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile) : Faction.OfPlayer; - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); try { pawn.kindDef = pawnKindDef; @@ -183,7 +183,7 @@ public static Pawn GenerateClonePawnFromSource(Pawn sourcePawn) { PawnKindDef pawnKindDef = PawnKindDef.Named("ReanimatedCorpse"); Faction factionDirect = Find.FactionManager.FirstFactionOfDef(FactionDefOf.SpacerHostile); - Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race, null); + Pawn pawn = (Pawn)ThingMaker.MakeThing(pawnKindDef.race); pawn.kindDef = pawnKindDef; pawn.SetFactionDirect(factionDirect); pawn.pather = new Pawn_PathFollower(pawn); @@ -338,10 +338,10 @@ public static void GenerateApparelFromSource(Pawn newPawn, Pawn sourcePawn) } else { - apparel = (Apparel)ThingMaker.MakeThing(current.def, null); + apparel = (Apparel)ThingMaker.MakeThing(current.def); } apparel.DrawColor = new Color(current.DrawColor.r, current.DrawColor.g, current.DrawColor.b, current.DrawColor.a); - newPawn.apparel.Wear(apparel, true); + newPawn.apparel.Wear(apparel); } } diff --git a/Source/Vampires/Utilities/VampSunlightPathUtility.cs b/Source/Vampires/Utilities/VampSunlightPathUtility.cs index c4307da..db7649f 100644 --- a/Source/Vampires/Utilities/VampSunlightPathUtility.cs +++ b/Source/Vampires/Utilities/VampSunlightPathUtility.cs @@ -41,7 +41,7 @@ public static Job GetSunlightPathJob(Pawn pawn) return null; if (pawn.pather != null && pawn.pather.Destination != null && pawn.pather.Destination.IsSunlightSafeFor(pawn)) return null; - if (pawn.GetRoom(RegionType.Set_Passable) is Room room && room.PsychologicallyOutdoors) + if (pawn.GetRoom() is Room room && room.PsychologicallyOutdoors) { Job surviveJob; if (TryGoingToHomePoint(pawn, out surviveJob)) @@ -113,7 +113,7 @@ public static IntVec3 FindSafeZoneFor(Pawn pawn) { IntVec3 result = IntVec3.Invalid; Region region; - CellFinder.TryFindClosestRegionWith(pawn.GetRegion(RegionType.Set_Passable), TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); + CellFinder.TryFindClosestRegionWith(pawn.GetRegion(), TraverseParms.For(pawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); if (region != null) { region.TryFindRandomCellInRegion(x => x.IsValid && x.x > 0 && x.z > 0 && x.InBounds(pawn.MapHeld) && x.GetDoor(pawn.MapHeld) == null, out result); @@ -159,7 +159,7 @@ public static bool TryDiggingHideyHole(Pawn pawn, out Job gotoJob) /// public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 center, Map map) { - if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map, false, null).Accepted) + if (GenConstruct.CanPlaceBlueprintAt(holeDef, center, rot, map).Accepted) { return center; } @@ -167,8 +167,8 @@ public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 cent cellRect.ClipInsideMap(map); IntVec3 randomCell = cellRect.RandomCell; if (!CellFinder.TryFindRandomCellNear(center, map, 8, (IntVec3 c) => c.Standable(map) && - (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map, false, null).Accepted) && - (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors, Danger.Deadly, false)) ?? false), out randomCell)) + (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map).Accepted) && + (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors)) ?? false), out randomCell)) { //Log.Error("Found no place to build hideyhole for burning vampire."); randomCell = IntVec3.Invalid; @@ -239,7 +239,7 @@ public static bool IsSunlightSafeFor(this IntVec3 targ, Pawn pawn) /// public static bool CanSurviveTimeInSunlight(IntVec3 dest, Pawn pawn) { - PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn, PathEndMode.OnCell); + PawnPath path = pawn.MapHeld.pathFinder.FindPath(pawn.PositionHeld, dest, pawn); IntVec3 curVec; int cellsInSunlight = 0; while (path.NodesLeftCount > 1) @@ -319,7 +319,7 @@ public static int DetermineTicksUntilDaylight(Map map) public static IntVec3 FindCellSafeFromSunlight(Pawn pawn) { return CellFinderLoose.RandomCellWith(x => !IsZero(x) && x.IsValid && x.InBounds(pawn.MapHeld) && x.Roofed(pawn.MapHeld) && x.Walkable(pawn.MapHeld) - && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld, 1000); + && pawn.CanReach(x, PathEndMode.OnCell, Danger.Deadly), pawn.MapHeld); } /// diff --git a/Source/Vampires/Utilities/VampireBiteUtility.cs b/Source/Vampires/Utilities/VampireBiteUtility.cs index 93afe80..ce23770 100644 --- a/Source/Vampires/Utilities/VampireBiteUtility.cs +++ b/Source/Vampires/Utilities/VampireBiteUtility.cs @@ -27,7 +27,7 @@ public static void MakeNew(Pawn actor, Pawn victim) actor.Drawer.Notify_MeleeAttackOn(victim); victim.TakeDamage(new DamageInfo(dmgDef, (int)(dmgAmount * BITEFACTOR), -1, actor, neckPart)); BattleLogEntry_MeleeCombat battleLogEntry_MeleeCombat = new BattleLogEntry_MeleeCombat(RulePackDefOf.Combat_Hit, dmgRules, - actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel, null, null); + actor, victim, ImplementOwnerTypeDefOf.Bodypart, dmgLabel); Find.BattleLog.Add(battleLogEntry_MeleeCombat); } } diff --git a/Source/Vampires/Utilities/VampireGen.cs b/Source/Vampires/Utilities/VampireGen.cs index 71780dd..d271eb9 100644 --- a/Source/Vampires/Utilities/VampireGen.cs +++ b/Source/Vampires/Utilities/VampireGen.cs @@ -13,7 +13,7 @@ public static bool TryGiveVampirismHediff(Pawn pawn, int generation, BloodlineDe { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire?.VampComp() ?? null; vampHediff.generation = generation; @@ -29,7 +29,7 @@ public static bool TryGiveVampirismHediffFromSire(Pawn pawn, Pawn sire, bool fir { try { - HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn, null); + HediffVampirism vampHediff = (HediffVampirism)HediffMaker.MakeHediff(VampDefOf.ROM_Vampirism, pawn); vampHediff.firstVampire = firstVampire; vampHediff.sire = sire.VampComp(); vampHediff.generation = sire.VampComp().Generation + 1; @@ -47,7 +47,7 @@ public static void AddFangsHediff(Pawn pawn) if (bpR != null && pawn?.VampComp()?.Bloodline?.fangsHediff != null) { - pawn.health.RestorePart(bpR, null, true); + pawn.health.RestorePart(bpR); pawn.health.AddHediff(pawn.VampComp().Bloodline.fangsHediff, bpR, null); } } @@ -87,7 +87,7 @@ public static Pawn GenerateVampire(int generation, BloodlineDef bloodline, Pawn PawnGenerationRequest request = new PawnGenerationRequest( PawnKindDefOf.SpaceRefugee, Faction.OfSpacer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 20f, false, true, - true, false, false, false, false, null, null, null, null, null, null, null); + true, false, false, false, false, null, null, null, null, null, null); Pawn pawn = PawnGenerator.GeneratePawn(request); if (firstVampire) { diff --git a/Source/Vampires/Utilities/VampireThoughtUtility.cs b/Source/Vampires/Utilities/VampireThoughtUtility.cs index 58e8e1f..e7c679a 100644 --- a/Source/Vampires/Utilities/VampireThoughtUtility.cs +++ b/Source/Vampires/Utilities/VampireThoughtUtility.cs @@ -12,7 +12,7 @@ public static void GiveThoughtsForDiablerie(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0), null); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IConsumedASoul, 0)); } public static void GiveThoughtsForDrinkingBlood(Pawn drainer) @@ -21,7 +21,7 @@ public static void GiveThoughtsForDrinkingBlood(Pawn drainer) { return; } - drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0), null); + drainer.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(VampDefOf.ROMV_IGaveTheKiss, 0)); } @@ -50,7 +50,7 @@ public static void GiveThoughtsForPawnDiedOfBloodLoss(Pawn victim, Pawn drainer where x.IsColonist || x.IsPrisonerOfColony select x) { - current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex), null); + current.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(def, thoughtIndex)); } } @@ -71,11 +71,11 @@ where x.IsColonist || x.IsPrisonerOfColony { if (current == victim) { - current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested, null); + current.needs.mood.thoughts.memories.TryGainMemory(VampDefOf.ROMV_MyBloodHarvested); } else if (thoughtDef != null) { - current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef, null); + current.needs.mood.thoughts.memories.TryGainMemory(thoughtDef); } } } diff --git a/Source/Vampires/Utilities/VampireUtility.cs b/Source/Vampires/Utilities/VampireUtility.cs index 5a0c170..0a0645d 100644 --- a/Source/Vampires/Utilities/VampireUtility.cs +++ b/Source/Vampires/Utilities/VampireUtility.cs @@ -68,7 +68,7 @@ public static void GiveVampXP(this Pawn vampire, int amount=15) { if (vampire?.VampComp() is CompVampire v && v.IsVampire && vampire.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount, -1f); + MoteMaker.ThrowText(vampire.DrawPos + new Vector3(0, 0, 0.1f), vampire.Map, "XP +" + amount); v.XP += amount; } } diff --git a/Source/Vampires/Utilities/VampireWitnessUtility.cs b/Source/Vampires/Utilities/VampireWitnessUtility.cs index 6303410..53459e3 100644 --- a/Source/Vampires/Utilities/VampireWitnessUtility.cs +++ b/Source/Vampires/Utilities/VampireWitnessUtility.cs @@ -73,7 +73,7 @@ public static List WitnessesOf(Pawn criminal, Pawn victim, JobDef crime) IntVec3 intVec = criminal.Position + GenRadial.RadialPattern[num]; if (intVec.InBounds(map)) { - if (GenSight.LineOfSight(intVec, criminal.Position, map, true, null, 0, 0)) + if (GenSight.LineOfSight(intVec, criminal.Position, map, true)) { List thingList = intVec.GetThingList(map); for (int i = 0; i < thingList.Count; i++) @@ -190,7 +190,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) .MakeThought(curCrime.VisitorThought); if (CanTakeWitnessJob(witness)) { - IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }, 23f); + IntVec3 fleeLoc = CellFinderLoose.GetFleeDest(witness, new List() { criminal }); witness.jobs.StartJob(new Job(JobDefOf.FleeAndCower, fleeLoc)); if (witness.Faction != null && !witness.Faction.HostileTo(criminal.Faction)) { @@ -220,7 +220,7 @@ public static void HandleWitnessesOf(JobDef crime, Pawn criminal, Pawn victim) thought_MemoryObservation.Target = criminal; //Log.Message("Loop 1 Step 8"); - witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation, null); + witness.needs.mood.thoughts.memories.TryGainMemory(thought_MemoryObservation); //Log.Message("Loop 1 Step 9"); } diff --git a/Source/Vampires/VampireCorpse.cs b/Source/Vampires/VampireCorpse.cs index a99d6be..b7f338f 100644 --- a/Source/Vampires/VampireCorpse.cs +++ b/Source/Vampires/VampireCorpse.cs @@ -17,17 +17,11 @@ public VampireCorpse() : base() innerContainer = new ThingOwner(this, true, LookMode.Reference); } - private bool ShouldVanish - { - get - { - return InnerPawn.RaceProps.Animal && vanishAfterTimestamp > 0 && Age >= vanishAfterTimestamp && Spawned && this.GetRoom(RegionType.Set_Passable) != null && this.GetRoom(RegionType.Set_Passable).TouchesMapEdge && !Map.roofGrid.Roofed(Position); - } - } + private bool ShouldVanish => InnerPawn.RaceProps.Animal && vanishAfterTimestamp > 0 && Age >= vanishAfterTimestamp && Spawned && this.GetRoom() != null && this.GetRoom().TouchesMapEdge && !Map.roofGrid.Roofed(Position); private BodyPartRecord GetBestBodyPartToEat(Pawn ingester, float nutritionWanted) { - IEnumerable source = from x in InnerPawn.health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Undefined) + IEnumerable source = from x in InnerPawn.health.hediffSet.GetNotMissingParts() where x.depth == BodyPartDepth.Outside && FoodUtility.GetBodyPartNutrition(InnerPawn, x) > 0.001f select x; if (!source.Any()) @@ -77,7 +71,7 @@ private void NotifyColonistBar() continue; } HediffDef hediffDefFromDamage = HealthUtility.GetHediffDefFromDamage(DamageDefOf.Burn, p, rec); - Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p, null); + Hediff_Injury hediff_Injury = (Hediff_Injury)HediffMaker.MakeHediff(hediffDefFromDamage, p); hediff_Injury.Part = rec; hediff_Injury.source = null; hediff_Injury.sourceBodyPartGroup = null; @@ -139,7 +133,7 @@ public override string GetInspectString() } s.AppendLine("DeadTime".Translate(new object[] { - Age.ToStringTicksToPeriod(false, false, true) + Age.ToStringTicksToPeriod(false) })); } return s.ToString().TrimEndNewlines(); @@ -156,7 +150,7 @@ public override void DrawAt(Vector3 drawLoc, bool flip = false) if (!burnedToAshes) InnerPawn.Drawer.renderer.RenderPawnAt(drawLoc); else - Ashes.Draw(drawLoc, Rot4.North, this, 0); + Ashes.Draw(drawLoc, Rot4.North, this); } @@ -180,11 +174,11 @@ public override IEnumerable GetGizmos() Pawn AbilityUser = InnerPawn; AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); }, disabled = false }; @@ -197,12 +191,12 @@ public override void ExposeData() base.ExposeData(); Scribe_Values.Look(ref bloodPoints, "bloodPoints", -1); - Scribe_Values.Look(ref burnedToAshes, "burnedToAshes", false); - Scribe_Values.Look(ref diableried, "diableried", false); + Scribe_Values.Look(ref burnedToAshes, "burnedToAshes"); + Scribe_Values.Look(ref diableried, "diableried"); - Scribe_Values.Look(ref timeOfDeath, "timeOfDeath", 0, false); - Scribe_Values.Look(ref vanishAfterTimestamp, "vanishAfterTimestamp", 0, false); - Scribe_Values.Look(ref everBuriedInSarcophagus, "everBuriedInSarcophagus", false, false); + Scribe_Values.Look(ref timeOfDeath, "timeOfDeath"); + Scribe_Values.Look(ref vanishAfterTimestamp, "vanishAfterTimestamp"); + Scribe_Values.Look(ref everBuriedInSarcophagus, "everBuriedInSarcophagus"); Scribe_Deep.Look(ref operationsBillStack, "operationsBillStack", new object[] { this diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs index 576f47b..8711b36 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodPack.cs @@ -54,7 +54,7 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, }); BloodItemUtility.SpawnBloodFromExtraction(pawn, true); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); int badGoodwillAmt = -3; if (flag) { diff --git a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs index ab9aa42..edb8bd5 100644 --- a/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs +++ b/Source/Vampires/Workers/Recipe_ExtractBloodVial.cs @@ -51,9 +51,9 @@ public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, billDoer, pawn }); - BloodItemUtility.SpawnBloodFromExtraction(pawn, false); + BloodItemUtility.SpawnBloodFromExtraction(pawn); } - pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown)); + pawn.TakeDamage(new DamageInfo(DamageDefOf.Cut, 1, -1f, null, part)); int badGoodwillAmt = -3; if (flag) { diff --git a/Source/Vampires/WorldComponent_VampireTracker.cs b/Source/Vampires/WorldComponent_VampireTracker.cs index 6386044..47d510b 100644 --- a/Source/Vampires/WorldComponent_VampireTracker.cs +++ b/Source/Vampires/WorldComponent_VampireTracker.cs @@ -50,7 +50,7 @@ public List TryGeneratingBloodline(Pawn childe, BloodlineDef bloodline) } for (int curGen = 4; curGen < 14; curGen++) { - Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire, null, false); + Pawn newVamp = VampireGen.GenerateVampire(curGen, bloodline, curSire); futureGenerations.Add(newVamp); curSire = newVamp; } @@ -112,7 +112,7 @@ public List DormantVampires //Second Generation for (int i = 0; i < 3; i++) { - Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine, null, false); + Pawn secondGenVamp = VampireGen.GenerateVampire(2, VampDefOf.ROMV_TheThree, Caine); generationTwo.Add(secondGenVamp); //Find.WorldPawns.PassToWorld(secondGenVamp, PawnDiscardDecideMode.KeepForever); } @@ -121,7 +121,7 @@ public List DormantVampires foreach (BloodlineDef clan in DefDatabase.AllDefs.Where(x => x != VampDefOf.ROMV_Caine && x != VampDefOf.ROMV_TheThree)) { Pawn randSecondGenVamp = generationTwo.RandomElement(); - Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp, null, false); + Pawn clanFounderVamp = VampireGen.GenerateVampire(3, clan, randSecondGenVamp); generationThree.Add(clanFounderVamp); //Find.WorldPawns.PassToWorld(clanFounderVamp, PawnDiscardDecideMode.KeepForever); } From 18e33a536b3a764792fc4da121dab2740f6a67a1 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 18 Dec 2017 20:09:16 +0000 Subject: [PATCH 06/18] Mostly completed CE patches (i think) --- Assemblies/Vampire.dll | Bin 243712 -> 244736 bytes Defs/AbilityDefs/ROMV_Protean.xml | 396 ++++++++---------- Defs/HediffDefs/ROMV_VampireParts.xml | 101 +++-- Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml | 48 +-- Patches/ROMV_pCombatEx.xml | 60 +++ .../AI_Jobs/JobDriver_ConsumeBlood.cs | 4 +- .../Vampires/AI_Jobs/JobDriver_Diablerie.cs | 2 +- Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 4 +- .../AI_Jobs/JobDriver_FeedAndDestroy.cs | 2 +- .../AI_Jobs/JobDriver_FeedAndReturn.cs | 2 +- Source/Vampires/Components/CompVampBed.cs | 2 +- Source/Vampires/Components/CompVampire.cs | 6 +- .../Protean/DisciplineEffect_FeralClaws.cs | 6 +- .../DisciplineEffect_CorruptForm.cs | 4 +- .../Vampires/HarmonyPatches/HarmonyPatches.cs | 54 +-- .../HarmonyPatches_PathFixes.cs | 4 +- .../HarmonyPatches/VampHumanlikeOrders.cs | 4 +- .../Vampires/Hediffs/HediffComp_ReadMind.cs | 2 +- Source/Vampires/Hediffs/HediffComp_Shield.cs | 4 +- .../Hediffs/HediffComp_SkillOffset.cs | 2 +- .../Hediffs/HediffVampirism_VampGiver.cs | 2 +- .../HediffWithComps_SunlightExposure.cs | 2 +- .../Hediffs/Hediff_AddedPart_Fangs.cs | 5 +- Source/Vampires/Need_Blood.cs | 14 +- Source/Vampires/PatchOperationModLoaded.cs | 16 + Source/Vampires/ScenPart_LongerNights.cs | 2 +- Source/Vampires/ScenPart_StartingVampires.cs | 12 +- Source/Vampires/UI/VampireCardUtility.cs | 14 +- .../Utilities/BloodFeedModeUtility.cs | 4 +- Source/Vampires/Utilities/BloodTypeUtility.cs | 4 +- Source/Vampires/Utilities/BloodUtility.cs | 4 +- Source/Vampires/Utilities/ExplosionUtility.cs | 37 ++ .../Utilities/VampSunlightPathUtility.cs | 10 +- Source/Vampires/Utilities/VampireGen.cs | 10 +- Source/Vampires/Utilities/VampireUtility.cs | 3 +- Source/Vampires/Vampire.csproj | 2 + Source/Vampires/VampireCorpse.cs | 2 +- Source/Vampires/Workers/EmbraceWorker.cs | 2 +- .../Workers/PawnRelationWorker_Childe.cs | 2 +- .../Vampires/WorldComponent_VampireTracker.cs | 2 +- 40 files changed, 486 insertions(+), 370 deletions(-) create mode 100644 Patches/ROMV_pCombatEx.xml create mode 100644 Source/Vampires/PatchOperationModLoaded.cs create mode 100644 Source/Vampires/Utilities/ExplosionUtility.cs diff --git a/Assemblies/Vampire.dll b/Assemblies/Vampire.dll index 98316a38adf86760bf8ca9b700abae8e5fa96519..ff2463289e7a165bf871feb4ed447c702ba30367 100644 GIT binary patch literal 244736 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 z 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�_3G2h3Kw`KzWyu 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

    Cx($mqPh=S0!$9(V+Ee5gc4W z_mX2*m9rQO)@qKbHXr#P)l@!@JqKf|9%F_{5M%Vb+BU1YH^K>Ytcn9TXb6u@14#}P zfTo}y(q{N@~-M*x-Wc3wMCCobUhN zzVjvMwIf!Ov9H0C45g~QK>P39&KzHYCUn=Uad@W6;hqerDa5t zft=~IJ;-NRcz|C?U3~=~+ZAs09!xg!{PS2+Dcm&J&GuTcdZVmvc2H?IGHq<*v=6-- zL@%4D?M>5_pNc%*+^%%I4pN%vu3l)}GG`vj5b6@iBocv4qbVQAcorYynS(V2$|6(! zdl5_Mbry}LjtNeN_rOU9o#9W1wH?Tie90W461z!Grr{NcYFN_lYN1&n(V+y;c}{-F9B#YoZNUb(;W68G>{hbr2nu!m^6#=us1bhXey8+EMTICY+(E z#77=bF3#F{OYzW{sAwiKbx4W!E7ZJ*(B66Qc!f5BNsRU&vQAorR$~VM^Wmcs*x18P zgHTV2!mz1BguEw2@W7#pQ*6-H8v@aC^%2>DPfLv&fQ3o#3I?bc+&DprBc}~2iCV=; zK7TG21JZ?k6zmf_1rAs6FLCf`0TvNz2xhqE@>An1IOs$H=K^13@Pdsp?GK(i1UB=!#EEDj} zhF`$h?W~G=Iw%L-dZm)e!;q86dx>2o;vzGq0i%+n6%*7K18_ozV?N@cB@QM?U~2xq z_TC0W?(@#`{CBBaRV`JQx=K=HMe4W}OV}Q#Wh=3hC=*YnZMCINB+GhBvb)x4THP(F z<9>5jx180vXxFqk=q)VeeQdDw!*tCyIoTX zslo94{?uf0ng1!|AH(@0H{b;i1ombTyB}{MJ>L+x!XYTm$1#j~tP2xkgZMUM8r+?u zjGm%C^o+Ktrfl;d_wBl|t$3P|#m(G|q5t zfg|4`O{0=Kn)9^d!yJLdOO}=(#607doY1#9?1xUD zJ}3}$6AdhId)a-t)Ep?B(Odp1B8hIK)#MYLNvkv3TuQ66gJWrR22vxsmkfMi!^OrW z;~*a&_05>I$IRCG+`_E+q*nJ5y;bgL7jxh&DEP&;t^g#b(OC{S)Ti3l4Ji>fV4NYS zg!_uJxZVllOn}4(gfN}T2o3>Fa~eWP!4%DDkt8|^skkgzHr0_3desakq|sE0ot)a7 z*2a$RMxmMGaOYdNE`IxRnQV6z-A zpC1`!+yC;>bK#h+wpd2+tYE_PF*12+WU{6by$37WWD3F}CM2hb!&?NC{o zgfH7u(-hZTRwP2(6SE6`ltCz^ne&c=^>-fp&Z!C7@Q5ly5+5sYMLI2>i;6mO(G{0+ zu#{CPe^18Uk<#m<|CZv(@}l6&&NO&9qh+*0?} zQQ565j$h1O56c!zBcL1?ZH*q&G>yyNo=;PP<%s#m7Qy1tvpQ@L7SA1-b_Jd(&129E z+D0>u&WZUDRD-B^DL6H0k!4J~mz+=GCM0em{q@ zgCEp1S>2z(Vw>Z9nVsad^@r>{BCJg#^S&F&bxkIerlzZ&rkE2Ir$)F}l{q+_O6<(I z?#T>Y*0!a91YMt4n3b=YqrPeC;M{q1&S~Z`Ihmz$LX35iDJZlf{%L4_nA&5LO6=W#3>9D`zw&dhvkGXI3q{FJC7GwF}N$BIABd`s9oR zoZU|)h;}oIn*yG!LtY8=pGBBJq<6BA`U_KMXVlffaVqL%1l=A;?BIrl&NG3$#<04&=Ir5mk7O;KJrzgn2PD_vT=`t`_~qy-tiwUYyb0iIbOR{G7ow z4v0BzZJe5oYO{GJh-$>Cl>N(k-c2po|SJ2&wiCH&4IIe*fD(}Y3B9i~5;b;nFrLygYsm7!`Ct^D94Fgv2uriW zIjQs11Tt+8;$n)HC{AYqH7HSS5hoxI8n((6Wqa;0LPD?|I{`cJFsIAsgfQS|eO&j# zY-9_wVEN^VQL`e5n3cvi+XnX7;a)q(gE?cD9w@Bwz->MGA(ZG4^aDw8x85x(yH636 z3-{0CQAZc%)xJ8Hmga0DFCW(yQa&zN#yx74cS|mx0)V9_%}lMb2v=JbvJ=C>MmHWT z;Q;;{gM@*gZfW0BNj&yP&;2un1ob&vkI^)A6t6LEI_75A0+PCa8I6ROublMc(25C~ zkLy*C5_NrksCXVd=Uu0=`nkw!IB) zXkgeTsB;jZQxqnMEF^HqPU-2UuTxbra*?Z6A&l_ws`dqqUXYWNO0!w;xGcAjEat*q zxfL0-R|j1}gd`1q5RK6;w1ckFkL(ph?y_=sKzl1{{GstMToEY7$_Q-0U>0=Sm~;q* zLF%lsVSjpu50|sE4IPjPp;h)4w_#Mp=~=iZLgmIOs?mJNoAd|B0AYR_C%^~oJaJup zib2^9G_iA&>_qczOMG-*LBWSFQygsQ+TFzVN8hryI&8O-IGYcIwU}CKNyfG!J={ zZN%E5jB(3{`gM0K6tSd1HvB>yc*LM(>Fg{1FVvJ!pnZETs)#Yy>iG6?Tat~qEd>n@ zES_vj({62Bf{{*JN;KDE;#{!!V%!EGGOo9!L`%9om3t49yvympvYP2{<+Y{S6F_Y# zQoP#|h>YviA)@Z$1VfVH zBfqefop;iR5fEvW+*W)@Go3o-r{NON?rILG|IbcuaLOJs9mVQHQCAL|HLmUiTMltTf`!?R}3e zOQl>2-)!|Ns#77NWIeOV9-^i?G(9ShkyHdfCN_t`PgWL9AFWF2xEH)0x8hWYlquew zQh?(D7=YSoc}P3X_CTP~Cg*ly6uB8La67==I-@pJ!dtF$I!ldi?!Or!;fT~QnjUSQG0Ch0IdV*kqv){ii1DF|bBC+RJiK2#+)8HLtZTC)c&Q850 z!w*4e9(3Kn-57dZNg>Zk-5%Qd@H<3qW6tx^P>8pW5?u0=WHc8xL1OwEUM#CIYoBMe zCCM+j(u9df4@MavJJ3_`#&PEg4ici_c^|t70E^H;CJ$@CaR=W<72h)Oi|ugTiLf}~ zHA(Kda5m{t>mVNeRgjKa&;_VZ|=gWOLNS%k}XkV2;dt;cm8!$WFM_~J43*&Z8}sjdO~ zlLgr8A&~A@>1Ula5c@W_-;h|xNlw3$kzzmZ24|`EYk0csGA72P2k<96q~Yl3$OPac zV|h98{C>1)<|V=+|9Z$h)!!O^UB!{Lv3_nPCXdKTL{`<Dq zKHkdnN^nIsJ43`21W)%Ldo-5hXY%Qwjz(ua`6+B^`v+z$A?Jg1PaB+C58VGokwAA$6%BX<^Wcm$mFvK^@@+S3v6q zI>sKfRq`0uR^riMZF}oVD`p~_5ONlz;|TYq_nK160Sva_cyV%7w)7P|=W}U3x;OYo zId{OarG?UJDPi)t6jNpJtZ|Q?U6)k+)OFfO54F{~3=rOBtLqmMlp+QQ{MsK(t0!`7 zaJbZ-FFUML+V0-2bIsG`4O1T5? z%!(gdjjnh=4Sz6I-I`28!sSd;L+p)W2E}7n;F45Ly}gx7jB+fOl=*FQiEtz#LoUUY z4!JFOCxe5qY#=uMUR zY0#b|h-SVi(MCKLlutF_1NSL&R$i2Yt`#oy*==7_(nS}G9Npqq>r>MHu3j~O4H?HwQ+3lV z5~+n{Ad98?u(gG)&BKvNMxL@H<<4PkGh})z(MPF`+%g8%PW&| z=l+?uv0qqWk;2e0O$YuD38wBh7I zwQaWrknUNV?J2ry<9XSmNu1}j!~39f`x$T0Z)R5J+hdq|lY&U@$5z*L$ygEih;6PW z7#-|9B=>!Le3T=EGX!NI)kApRQZ#5Clr^+R$w^#9?3QUQWN7-bZX;Rs+dxs#$z~>0nV^bZ zBM!%FG;!F>B&un4z$LIrq?n$75#`ry^Ed?2cT7Tf25OxL*xdHOtW_B0M?9WD6dLWx zGFAAdE@%7UB9%DEmT&qCc8ZyGQ`aL3){?YH*K9aR%mYCjedK}x^2xZ5=WqgQKJ}Ps zj~8Xj7tvHMB9q7U$rgy zkLtZ5RV{_1<+*(IC|9A+)Q(hU8|mVVx`SPpx0kb{Y~qA*o2xyFICs43wg^9dGon4L zli9gP?c=cz3Zb3lx9tsTpmFMnfRdss!mW?g{}6hzn~UM56Gx60=EooxD4l8dwRGv+Nn0e)GU zR-Sv^$Ox57<(E%2wS4N?{NEntsj5kZD8)AoAP%UP0)E-`s*(@&4oau(*k;FKu-NcUKcTc#9n@|KPos(@GZjn= zE@y2Z1YYrQ>X#5XTuWgmC=fiNAVHPSLu&9y{}V`=57EhT(N z2?aGgkZ|S%``9zH7kEXip2&TUz6^p6Pv_G|M!IYS%Es)JNM?-WKLO-IbdJzAmdj5Eco5_Q79B9X) zKz@WEiV%-rjV*F8xq1YLI&6K-J~FU>SZhO9PUOxhgO3_(l_raEGY&SPQ7^T7Tr=AS~wFiwn|<#zqb zW2&yUnu&=Fp5_dA5K?Z|;P{x=5x^;>bNImk?Mu8$%CzOR>82)xJe!ROMhcm66%sRw zrO{OEo8J+ehf*a{9vcM=sHOkZR{kS%A{v4)TwEOK@P{fs>Amsmg}4${KnT(Y1MGaB?t zcKVjAvplv}r{y+b(jh?-KLoYIJTo04@;;nlTQO24_!4rsEMU8HzVS2eVKfxp8#ya> z#3?^L%n%}g5Y^3H34#|VH(ak25d>Y$)j*E!&Z+u&xC7XBe4LjVECE9Tbnt^%S|RiP z1*aU11SC<&jZ%f`c38!7(FugL4m5oNFhpfE41=^NG~9~TNzwM>Gj<{}f1buRWkiRev^ILAe}^a&4Ize`D{@j$ zi3#)GQOeplfs3$8e{O3pBs)!fjopCg`bG`e3#cg++*BSJViPC+j6^==sMbX-(z8e> zV6-O&g!YKeSvlOriu8y^h&ewr1rYU$TT-?-VHK5}(*W}Y@SckdLh%`|6$Y&zUNmAn zH}7aEOI^PVmT-pNzeQ{oisWKHhimgNS$;G31b4PC%;Qv;=D`XNgO47t(S;*w?vH7E ztRf^uo)Mx#yyG*Ma}0Aw)4{r%vWc^C&tI0fL10ky|v$;7SODapkW(QJ$vgo zCG?xaX@>7TNI!+xbLoahc7hF9ppuv2#lB4`vrTqJkHbKvM+RnL`sMkvMDwS4s3*gYg#} z**Y;rlAQP!;1UR29|Mp?!n$;1VL7XqksTW!!rhkJW3-=fbgVSw_IS1jnM>68qx-^K zpI#QTC_1yzDkC1s)0$d^Hr3?3PIQU2nxF8fp0(3ed^i*j|7B4Z=#aPaq$4~L!je>$ zXc|ulv$Y>WXU@!d_Q({xNn0TL8LavClUhm;n0Y&4Y>q>i;g_reUohxl#A=W@D0t7F z5zP33&!90oOV6K@%4e*&q93yiOF((Kjd?72VVa}$>RibUui?fpzu z!#?pX>gL7dEsA}5FpE)sriM~bf94ief%`MJfqtXP(&afyW-W(PYD%}g8eq*3cp8G}<6On(R<#HZkp;Z&Vj znO;gkntvh`8XK7kp%Kpy(o#jZ1Hli-CfY7J%Fmu$P?()_-59fo@nImGCg>?E`N$Se zOj6dY5egEV(}xt5^v8BMQ|5qE>+HTrHMKN5H9VYdlWvEcNQ##+!c3}e1-yI zxNNmTpk_BSsB6W**t~k=>uUb{I;y93!-W={zWO1GrA6nI25Syax1r`J!RRR50CH2( z6+|Wa1$yfG1cgUKcR7KM8> z{r7nuX7!U1yC@>NZ}^;BdALaBZkgqWQ#BXU!Qc+G%pMCl3mL@PuglwM%J66c=qX!# zc$!xP8I|s_U8bIIiRcKPMsDAJ?bU+zR)U4Z;7z8P=fM~(RRXod=&1aTBtJ5_U>j)K zF2Ovp2QzFZbTE!ahsICpI5jT=Tyl`6 z1RYcS>B$(w_TW^2n><>;aHT}qJPwRA4vh9goS*`}Gyps}`39o7sv@@t+s`fIe#t?^8gxsN8Re zk4_0gFsbm{jv?hBCpndaJPaO@VPIvw+W}ALSEpN)q!BQmT#9YNdZweEhm9B8kuy1L zI0Nep$UK&c9mcmZZL6gi^E7$x>!%d0VR|DZEoWCy_@$>s`SuXL`W<^B>|pb$u`L?c z^{}D4Ll}{X9*%3i?UtOp_y^c6^y2Wkg~>6j=2@i(eIlhf3LZu0Rt{ruKOR3ExG0!K z8}l(^yu znntx$;6WOfWJ)7UISmKhC%lWn$h1%7w{HY<`3gd8bVP3&r6)>tLxOc}yY80Vrsj>S zcn8jI#>tSDx~rj1q#=Nn>QCHNKR=`g&7v-2E&-M1$lIccIvC(sxGDry_^CI;5~vs% zG;iVIX@sK3q>bgAbU`c__QbF$Y?=F59G(MFWA+P7u?$L;En`$XFNTc`#Yj+h zP%6`W?=GJL&ob5qhGfNTA26R_?F#jEm@>8xbFwRgF|I*#wJJufj%Yb1NN&Y&7+Z{* zqaa2?9zQ#m7I%GB9=%w|Q({cZ0vTV3aW#=L#9X@1KbEo)>Z)c;a0O5l7gN$_hGIe( zTs#&MlXX2rsxtg;Wfl|{&w|9#VH+VvK@l8&rhCLBDv7PHo#qERV$on`P0h9?*!8fO zlHP&PD-AL_XXawo!MTaCdKv*#ID0s17E{7>5oX$EkEsGT1QIrNV`?ZH7)eak9>2<) z<1QwO3&n71<;MiLQVizFDyE@>`70VCr_^_R)ShbL9VrsU^G*b}mC5Kd;!dnIs)9%w zy$uT=1uEzsX;z^`umSh*_h z5#hi^r5a{F#;;L;7ciAjZn$nYSr^&b)mv?*T)DV18{Oktg)?#^vj;ec;%{gv9b@i^ zsAJUGzoN+zPFm>OY8+eOZD^fiX7!;Q{X$-Sa1u^7w)pMw@gF8hvKen-GMYS*aAGkT zPtGOtNwST%Oo?L{CNuWEkZ@xzN%~GD!^yqLcgdYfW~rytVQSAL(@C=3a}Om8EBtsu7@uOJv~=s-GvcY_Y@!*Q=Rc6X-OGNL(u2g6KSJ3LbJjb&Yt;W;1WSPm}ip>Yq*aCP|NG65CDoWb@G6#%Svte+7vtYFxCm&ezfNSUN<9+J0_2zJQ>8AN^UdGLxdkJMrj_(-uUE)(z zC%hL#g>T88o9E?PxO0eF;#EjlxQk$PlzHH%Wdz~{;*FP*qppeg8!ncNBD%6AN*ZPuj*^-N!nPXCvkUvWRNz`CdvM_QqKUdIp%pjEjVU?2_I=Axm)xg8a)T535#YZtu^8mcha5T8`VGXX-ldVeplYGG3gdwj)>y6$51va z@hJG>ra|T+UOr2Y%;xs?_^R^T;%wWsqU6rC(^u8M^B{eRMg~ zH8;KD?g+K^^fg-8s&!GlsB0dj1<~f})Rnc9K51|KUOf<&>|8YdJ_YpEd$J>PDxatN zkYpBRCn*P7B_nT-wS11N^W)5JB0KlA*S}dQhl?m!E9mssj(I@$-q@CFq}=(qb@_pn ztqLxpHc8}Ft$*$2t>3a9+PN^>IixtaBnq7uV$HZ>pQ6sLLBkP^`Ul{IB;qNdejPz7(J*ZNmt3I zWFYJ3QPLLW^)lq;uB^sQN^I2HX>_uMvasa5`xDd? z_GQo+zDrCR6m6%pdL~$rxxCGSqWGP(SlNHT_>R?St9scHp)!;_$r?+p$^H_aCimPt zZ&f?nhUw9H$XQyE&Y)KE@VH5dlnc5>B+mU1(2<7cHiud@ODe@-`2l==)d#mY$k&LY zjE!pm3|2_lNQoKJPyS`j}{8$owW zIo=ukJ2x%$hX-kMf_&*iQ)mW~IGUH>!LKdQrm%CE9LE-6hU?l%%9EvaNV>PTk?CC0 zN!*?gwTfypjWW(~jWT;2n<50YTH>41g~SU^@{K*0#A?ZXGs&I8Y*D|swQO#UJ?i5;yJHZ*vcEg) zSGr%mmayY|S~uC{P(Dm4x8IM@=2@GsuuxneYbz@iX)5rVhx2yjLGahLr)YT((xyf# zy!HNtr_t*6lstFJS_tj8abc&`A!|V`pEO-da2KxQAGpIgfpl5nw^mWTja$jkTMo~> zw0N*Q1CeV;3Y?^lY-^y98-d0od6U_W-lp^mjSYI(pTW#WC#}iH?Oupz1&IgDfd{H3 ztVssGN9#_bZbQ3th&~(Po_tR8NXK*NxmiEIQ@!nv(x32Z*xJ%uFESD+CC4MP`DygR z2A}6DzICtj6<_lSYsY=b2Mr>Zpb7OLJ3%AQL+5v_*_X{X!c*FcLn_%CDM3);c|hRF zTIBfJn)x~Wj%y|8NMquSH(I9+_=j*qz8L3?;-I3eX|q6t)uRr-9RKi=QL1^{r>G&x zX8yh%l4zQdu)#foV?hQcIeveOQbB4<3l#Sd{wKp3jE=Et;;xc*^NdhFXu--?N9!pF zarK=MIA4(`>)WJ_qXi_}oi{jVcAn++^ZZ493r9sO^2kSro9hjxAal5WWu>CQ>lhGYZ0A@kqGkvpFi zHH0zWos~I3d*T2Zsj$kW3_lq_90`!y3ph@$JXe$dL^*lUL<=*tDy{Q8v*+HTx7RqP z4T^q4rs?EPrtO;n5)?|!(7NA5n~+Y`l{;^2u%Bjq!u__q`qU=C2>*qGzJNy!Btmd) zDF_hJ<=<~*rbsWZ5$U5A8_Skb)T_q#VA7G>&WVJfg-qE)U$)rp zt`&(oOj+P=Ieza;_TZc!w8i%=4~_64iJGo{^7BaLZN#1g8;ufizVBB32z9k?t_%ee z=SaR45m|ro4gPAgM=KEFG|y}zye|=wI_Ct^&rF=n@5NOkl}v2MA(PyD-r(l$K@o@u z*Tpzz=!gsUgS4hqgstQVr+r+iqh2U;=VAMnsGZBHUt-aD12f4HSbJNmO5Pz17vmDd z+l}jVD|1%{*&)X5y=yjFV|^x@gd>{0w)0>G+l2vA{N+WXTO3X*;P`x{?#U!nOHvaw&UUynlTBjEhp8>PLlL+mGIHVF0RQtf z9H%>Q3`TchEG-d>8b2U+dgMd-nxf^q+RS_)xGy@&*Xl*()z3NF6F-?xsDXpeUF$ci zamludANx)1I_ z&2_+}ZNpVtM-s1&Ny445=~x^9+5<@kBh{9*wxL~Rbf>X%Kyd@{9?Id4isd5j(F%{y z_Ml;dIE7YK{36*Zs$bP-)!h}3k|!LY?Txu`ZX}N~N;g(T>4K`^{C44)r~5&NG$%Lb zwd)#n!L>>~&TWQDX;H~}Ae3K6H|kCr&u~R2=@yqZPW@m8txsQH*k@b% zH|brfk*F_jfVPh&xk;b5u9fzQi!ZKkbWh0e8)Hm)p1d;eOjKsRa`XCf1La)}X}h_&w;Ee4wVLZ51v})3j>kGgBWumyN2Ya#pXD%dby-*C znMLmS!s=2o)uj$fbMYE3@1)((Lk>G`UAL{)En%<{+H3T>|5h+uS--94udP0ylkvQj zGq^X*7#JP--Rk`lP&@e9TWg!mvEQwom5^BjvfugrT5KEL(C^n)z~SF>j;kptuZd-A zA1N=ta(P-?tE8J-GH2TP((1B@;a+Si=IC*CnL|OIQJ@YEy)gd4r!LM!=#UDgWI$)+)ch+ z;%-0blqxex8EKr>3mT`i3B?9Xli}wd2#+Nl+qC(h(aYw^^?3XDZ1hi9TYe<4Er07# zMt|OVkQFBRgO$Oy!VF`VJHp55EhpQg_qb-))(QuAT)&jTEH2iTyFEYa*oV(YhOxFc z#fRH^qRs`R%CyZ@bJ8Y~R>55wTwWt443G|$%{MKzWA%sxIopi6TMi{@H@2pKMH9pNw`n)K{H`pTv zML!7b=Jcf@)1q|oZaH|6#zdsYK46+ zNtX^jCOg!cR$lbAi2WjLlQoSsfE6yRbZuHCT-R3_#kARybPM;4HaMQ=o*&r}@&iTh zKn5@IJgvIJM;Ms%BIIo46O6;R<;97^;oqF($nwRB1qZ>~)@^InTefb=IvwNtAI-v# zT6KP=YgkOhek@7V!g&Z6jkRRqr8@cp!$4^mXtiURT=d#v6_jKxX>|`1yTmsZa=vzkD}(ic=ApOAKWuIi)SF&m5oat6hT1pCdwbMjiYDL_ot)YqJ44Td)GLa zr8IX?tE9Xeeh_Sol}L7o=Zd?J0SV!cIJ>qnS?jh@M2yQrH;?m9BSW;L_JmIl(UN0n zTb+m7M?P$`n_^_*dX8znwXpK&{2;l)Jw}#u)1I*Y1V82QQYF3D;m}&EJgsN7EoWag zI&s8|Hu`~pB#Qe)-P2%)ML7!4M*US`i~MhLGE4R++cLUroAC~DFj>ID-Fk1?*5<2s&`>18(7oE-3cVX)?rbbU$uA!nz@mQya6!#~f9IGtgD@vIzY z^K!$i>J%%YHPjj#Hh0zfNZ4HUANnWLRTz(LZ!}YZ% z;DO;PO!2t2lpWP}n4X{w)r|fW;j3ZOor1SEnX;93NurU+j~mMMxxC6swb9qs4C=nU zY_qyUdXC1Wm_qXUx<4%Qi>xlQ(vFOEq79Yga6B82Xw)~ATv|oUUfU{KSvu*y53YX) zf0M4ewW*ccTae8*#`xVkBbt-+5f|Wr4d5flg0ne{yj2Z(v!lez)z0}GZdE(0p&6J5 zEvGZxs%Ba~w>z^&YdOE6YKXf^PtsvftzyQTlG`N-l;6IGAUro}+I8IWMH}MfzAA!V zx=$3Y5Xsln&Qr2gO}S1^Pl)&_*`J4c#Bm+*)jxq|#8io6l!<$e$9o3*ViK zX0sGEIVB`p#rajEt^aMB+ZwI)$&zu6V2#n_Ry!NDQ~%0wNkbIJ67|9Xay&6V4wIx+Ewg%Cqc>W5y|Bjk2AGpkNPd-49Pakr04|RVsWr(%*#~*s zMy-iQyS==6Wo0Ql4@cYEp6$7|!!NmA`lI{+>P7UP9}if=g{FAmcYJm3#@v3?=4@7x zqvd&%IJm|vIpas^QmKNa8Q~$>+P?3RpMSg6lh+lDtR_m*GQ`Ou(OumOG~N)D^fZ(sf_l~ z`V&!7-eIU5#&?zRu$J= zWWm`{tvh474hCu;N`2}0v}P@RC3r*kh)4Z^GI`1DoKz{|m1t@I?+3rQQhB~~_+Ov- zzaIP_`mVhoQ?;YBzoVnn#Yc6kf)#xf$SADeT3hI-o$BmQHml%H;>U=W`V(brPROV| zS+qip2l*zm@t{{)^0G@IcYny$H%%@-p?CAYMQu#tsShu00)VZOf zI<&6XQ79F=O4ZYaLZK@uluD&_>uXDNSv}pkzOQ<^loYC`^|y;rEPq6lI01`(TueHu z%Rg38zB<>}TCdpziPu`Mchhd6*7%@MAli7jE9t1zmU@ydZ-A6aN#)+A%?`f$c5WU#PN~HZrwY&NY9XoGR)EevU_tKjwO#vXkzSevVxKY#V zZ|N^~kW?x&Eb23dYU{&Ne@C_TakbG6Fe@xzWqq*|Xcl%CEBY!FwpN#)?+Bm%RVrB; zgJ18N0^8=qBc=64fV}(y<7$1vFke}p6gDT7LRS%BzrHR>%H93szg}B@wOmTpRR~tJ zqLor_N5NK@rL9eLB}wf{5929SitEA@-z?OY-;DEpbAvF}vu~jO4JAu@dJw+C>!uQ7FdJw9*{1&St5SL1Y_2p{PS?D#? zDI0W!G_@-aFmdp~#=5@~45=t}u$vC7Y@yuWMIuSnD?^oXQFuoAQtbdOC)MTm3+pQz zlTHBhK1f+9cS8`&h*CaF0`#ysDKR$cc~7m=8xnA=)>y2yPWL41w3rQWoff(iW=2j= zc|)<&`>Gu%B`o@4^@>K^T;yZq0WlfH1jXiv-$q##&0bevkizSw_Py}oYr*OP@pD+l5fE@gDWmIs!bqNjh z6DCt@bQB8Z^`H!Y05&`bU_Z%@x}(7o6KI@PXPZHXi1U^P&k#~A0SarVPm`!M)hhpJ zrtuC)sXvNWS=2N!Bw~x-XS#SDv%%E6?{9J8O-u+GVFRh*Gt#ykM(bWnIN! zo`F!nWzbi1x-3S_+KEUhU)97KRZ7K_FBKuNAFHd=kb&r>(G$L_bko>s<)H--tPp0< z=!uhRRAW+AfL3wPF;>$&d%zwDoZyw0GOU|i57xmWBYwVY`1!fw2BGH%u^;9l7ARl? z*gZ+j$)*gGB3`OZ(1iahix%6(1B3$2iHQoG)*!lb7?GW+% zw$hM?@Tad->@1O1C~ZV82=(<39#gjEUVgt+49P5$XByIzL2HKa#>L);vyg4QHTouQGKu z7MVTe0aamB5?3*hyd!<1ukgblS6G~ZLbb7vj0e=WAk!CCeE-eTZ&^u9^_B&`XwBcU zh*(1P$}e|rU2|A{|76|G$>t80r`DXUHU^9RonlB@oZ6MQdl73a>+97k@6?u`6^}6D zeOHWc`ITzpO=Dbdb|RMwMNp7$ah#5FL*%pO+<47c~BQ?UtrKI{CiLD(m^dah99qD0mjcUXplU+X*^<4Rtkq+o? zB-JDNEXgd|`>`?F)@kD&jfs+m0drY`4r|SM@T<1eE9SiXY=x;^`7OD}HY)G3vjm`_ zK%v`^NI}DFYZeh+_@m-R%~#x{));|5A~bvSiRvQ7pfMiO2oA*TY!XyXYk3!{$i|q} z)QWD*wc+Ul@Dfjt4R)egc64jqU~3-$Nx_M6Xsjgk6*qzvS4tY0IGYXE#|XW2Bex-d zB{V}{#Va3)Q+@P#DeQ1x6UK!m1g>*vfqxB%NqLi>g6NE+J%C|4DOfpooy8MyY+=j$tEU_|6 zWGt&%>@J8Gl=Ok9HAyHMFdlKWDvpJ4CX@L!e?=5_QXy1KIwdec8wNTo!C4VgBGMHX z9(WosktiTlmmy}S&F5u(F26x?tB;SXyNt9N-Nt!gXVO!y?g96Ye6HACYyK%K@h?SC zBBUR|7YnHH7T6pW=Mq{}NGm6u(rK7wi3JjE|D@Js;>^{i`)St`yX}D@RGQ1?dnTv4tcqAr_c$Fq_L~eEl{AJ zG=?E%0~0a@kp$;uS!}w?FZ2|PDE7i57TQ*NxnWRx@V4Rx>i*2A0STOG#)8(Xg5K5F z)bP%oh#VSZb@_+LL>uYGC=kAWAqm6*pV+oalSQRLec6D_2i7XAHG09(@`l2{RabA= z^4^aTgkXF(a+~E>BiX&`)bgszzFAmbVt&=ek4(-qUMaw}qQ>!Rwef0TLa!Ps|0?Ph zs@r&pDNzC-%HZk%bg-jxxlmTaZ>hvv3=PmJ+~lG|Q8=nUn~OaF;5Ggc5g7TS@~^4p zyFjFjnbhAQR7kq4MtNs(lZ2P*{Uzx9rbrDv#lN~?9d8sW)yA8Uh-ElTsv=S?C$Mh} zn}UzsRuuNX&HoF9azXlY<88;hpiA}Ha$e9_K7{(rLc02)26*-34KnQ1<_99?!HvZz zCaT6Xu*DkH4UF8-dUH~Q!3s|{6`4yItQZ%xPaA!hr!*?1vfB7?OCre*9aS4k)kecr z!L7v&GBTv8*=%8LM+_sWj+j8zA<$K8V5ZSj;}Z-Pf$1sq1DT|aDHC!}LEXWexYpy$ zuX?Sgh6YASp!ptx%f6`6+=b56l*$h{i7&tB-5^vU^4C$&3Ojf9?W`D+dY#UepCuU{ z$MlpBb-}$}uU-=yQi_><9kpxQcd{saRmAA73^DzkkW%w!Od*{i>lk%VDAO=cO8C<|B}u zK$6I+daY0Sz#UV<^yy|*AZb>=T0|xNd987y)|hnG#!O6R^6ds80aoQk+i(o0CLJ%x zH;fd?UfTsEtIeyde4|lqTrE`kI}z3a4VqUYJLnTtUE9+W411cWUc3A51blGa&x9Re zaHn}S9Y#7XxV-S)8P?TTg~mjMlPro*5$UA~>5n?v$H($J_ybsf8!qmJou*3srM1)7 zU&26U>6@sk&r*Ue;Z8z;+O-F4vioVG*;kWPY+D!OKFvNyLrUCP+)``)H56#L*!(LR zgZ=-jT4O(BsrXlcevnp$iZSM$5h(jpNv+PV4H|+Cm1@zPa!NuNUIoasq<^BY3Y@;y z{6(R5N|RlFR_lF4a%1_EN*O)t6o0WZTSMT=I6}G%lOW9_)fH?RbV2zz^^Ib$BMc%8 zyl4)9IstfFqP061J?3y)>=LV z&d}R)2rMLRVM7*%!GT$ZUY|?4qy}Q5WZC4|YDraSyf4YEF`^>oJw3wK=Avk^`8NgW z&SiWzCCQg-BfuQD0Fgp@L%AO;YW}TFyV@KA4EXLEhilEhi%C8|@(4&-XdEtS^3tQ3 zDD!O`=G$t?HB+fxn__)FuV()~ZKKxwKb>G{rwfK(D(x(y)WPDdNUgEV@Qsly6PB7& zD%m8L19%$*LIGo3#xR8w?y*a~NsZ@Xh37yEu{D%vW?PiR#3t+ZvDcd80VA6z!Ol)3 zosA?A*y_7EzEKMH>;4bc=mFRIl*(#$RIfcF&l9mqCFw?idtLGoO{9#VsWtztV}!8v zM->q?^959(l_B&JR5E2!fB7THbRuH4%_+F8)&F;1UzT^{1DQimD{SAtZIq1F0=_< zxN!)qbW3>2Mn>s_5#!9Kcw=2TA-q|0c*xdz42K5mb!$iF=|tfZI^N*1h&%pE{lr! zv%OexoMw^BjK;=~%2Zo|0?F+)?MTbn_&`-`O`uOk+gQ|)e<|9%_VyOs1|&NW%Visg zNtAcoQ;ThZ0H@(E7I#Rwu|H|R!R3htiPqIhKZ&*0Ri7r5z?cloctxlOS)zfM@-bU* z;+u_{XyZW!)_fKuq6#YT+k$Ol7r0ux`YMgsO1xi9U~5`8$BpLug}7A~<&vzd z31e=(wxJ*H^diEic_W~G^QF(DM5y%g3$<$>0;Fpn`T8_pD%_1Nl|tfHAlPl|dzjB^ z<1)OLjUfXZyF=A$pY-j-SaPRp-%bP0ZH)VRcZAT(LPA)%{+qhm7$PK3e_7Pgd^P3p z(RymS_0)Xz-r_bByT;OM%~!;<`JetX?#+_$M-C~OS7Pk;b$u&ebOb*&Z#uNx0as4z zmQ0bdj}0=GwJjp8e;u~tPULT?(u+aS>Qx_T>7rYKnHbwi;~nOMvOo!^qPJQWKVE*N zz|KzjD-6ALo0Nd7poOZ5KRX(=wh%R=3=CEKtO6|-g8cJV-6!#S?RsAzqSvw3(37?l zH&o1F+k695mtUyXeA71~%GK+81X1}9uJ5}|E8l!W|CU7M*Y~05!3uh$Q(S+*NcZ~w zt;L|LH{Zfh-d}6JRcrpzaP#_u(J9?@_Wf2Gf5(>joq(*(Uq+<%ip^ir|1#_VCeU5vLLD{t*WiYp2CKr??P4^f95SHfFje{O~BWMfU5F! zXC~>;e#K9GAoBg2)br>PGn9QKg@F>XIoPTw$%`fF_Y>0u2`c$peu_;+61v(B)EaLitJ|t>ecbDKB zwblRyiW_aITiw>Ff5=ya?O|-j_L}4cYJq2c)$0v>{hBh&sdWUWfw5DZkG0lablB=) zV4VpY*;WN9s44;}8b+&UyUd+d4|ZQnDfKFTz0sTC4QXkMM-Di=ZCfPkaxKI-;%K1_e$-`>i`=h0ortnc1Q_!EkOhVq-M^%te4Nxi?!^)3@|;t z8Oyn~mCAq?9p|s~E#N(a2hTEqjuvC7yC`)Ye`x`27)_{pS}9uPlAKkrvXA7$Y29Bv zZ7ULbCb{(aVvsI|9}M|Lt+NUJBCFUy0vU5@K1a{Z=WNB0UvF4qYkQ^GU4bLw48c8G z(&(1oU>~jxW~O0Z{}E>m3KV53$oFb%SFgJoum4yE8wwdo4mv>+r z9W6;=F@2dumfFk!b`-0|Y6QXdt!r4&ZMA2NUMY5M9HwD){rf7UqKrJ zEG%>0z|0L@@sc1fPvPh{#}xaHT^xW|e!sWS3!P(qqKr^Oe`>8^qiGZKZ%SOWhG8E@ zuHUbn>W!Wmc(FM+H*ugtwir^ctRyL{yf*~@P4bFM^%kq!QvUMmf+}!Hwc^^0~#At3U3njgU=1bow zZn0^FWwzvyo0_x~2p!5IjzQ6%jpEm3LFWVMX#Cj*4>Sx=_l=iX<&PN(o4hX6g0~h2 zd3P-e4=Yn^9ovnc49tc6@Lj8#{utlX%wdv>1HanxjY4n6Q4tHURHObrO6%atl6*pl z6^QC1L#7@>AOr@Y1bM-~QcjuxGo+2US@RRlzi6bjrR}&LufJ2f{%-a9drq9F5%B7= z07-$y+y31;B{XY|n8sBVgAo~EoWjqgv=XXddqO_=Xastr5^RO4sWd>;)Pvtx8S0<} zOAH{bG~EdKZXtAGvy2A5S7em6&r?w^WK_%!ldAA$p&uQq@f4$WwY~8s7Pc9|YCz2d z{j=<9Xc-;Yi%OXej+zqqBfVayY}61ruIe{Xd@TnpnPmmvo-*od{V5|57}N>-Si(B^ zcI&huV(YXt>RRh3P#-0%P+_Y$=2E72SotS+%N*9Z9|*A8ngAD?uLOR#P-`uyM(daf zix0(jpD|)&)t&dZPK#AP%YlatK&NAahzmJYeY%4W#vU~9){Shhn;{hb$XS;YySjMwC+3!R}}ru4wBUevTh>`PrQ^M_uMy zDrRc(7dD(EG$Z6cTWBeZ#Xzn=|?1&#Bsir0Pzf@p_3Xp_+r?Q`zVV(jksyF<^--mkat#D`U~J5DQ2v~#b>c4= ztkSzUUV}2uHwziv&!VE?;K*lmn6k=_xxmdxgXT;MJQW>*9D#GvXmM&qiljT{3fk!@ z!_h01JBo7EEJ#(Ywf>d2*f4B2^g#^_oZWYmoR{WHb*eugG^Mp_>D4!`*`Nwi3_FC|Of?ELf zIE>{5_PpUi7PQ<$yHIpcwVRKL-hD#LFNW_M=r1o}Oh{^=1R+U{`r~5Yp6Q4EOr=bB z8JD5y{~nNc;>Jdug|$>WZ}{|+m~M1fX2J29*uV**@tg+vHrqiWF;D>$o)-{c`9&$V zZ108n>hz@!1ZeUoO-Kk77fq{-ze78Kq+8ToqRsCM2DjOS|KvNx+iJ}VK0|F?YHCl# z?GGcVc9Q{q4;Y@Mpa=L0uKvb;EdNvl;D}_5lhUS8(@zJLq~h|qVtqd?2udl_*q>e^ zC$LMcqHLC3#jZjHhKf zKdnL}y%m27l%H$39qb0g|E+!gyNz*4^&Mf+5Ys4;ojo!wYjK&Qs{edR9n=01SU#O7K^mS#nO3a{A zYxOD8IKs4>?`Sbvr))7)u+?3~erlkcpbz;P$f;`TIU0Jy2G;r}Ra+gJb>pu&2L{e9 zm4%EDqjSAeg^CbVo6%A#P8E94C;};ivT_iGooa9JK%`*pRw@tS0f7_pW^MF`Ow%$F zlUV|N;GTZ^Eok!(67x0*qe!3w#w*9MZEb~BMKWR_01Zt1Q&Q;}fKg4!_RZ->G~<%~ zG3)Q-T^QV`y{LhGILA4WjIo26C{Zo&gjHl!gh1~C+cIA)YAGIzuRZ-zDCmPtgrrl6ov2Ys z=kkyKMM8~p-|E22)UmGfZ@x%klKkq4`ZK30mulQ4N*BbO>el@_)-lO+cqBKm!#& zsgJ|@c${pFxjCkf$=+E@=(^w6CC{^RW!DF&6ak*ZR0yAAhTlzvrXz^$2$akyk~S)*9k&&3~`ZB4dZlt1wg@E`?)2r@9a!ji>DM1M?Js ziG5tNlHGTzHV9kCuZ0egp($li%uKQ_zqTF?9B-Y+-lL1!H{sVTvr0AgY+*MDM4$~m zBS~-bovtdoL~ZGJ_?R%6Zhp4_W3k#8w7pag4gWbh7zzr_Sa(k{3{0nP&1U&G`fO;o z9$s19k`y~IAvGHb8^j`qw_H=ibESPpPT){*IJiBDAl8(~5mqbL_;IgoR@NHNl8TJ+ z)aQE92PoKhzPHkg0n0p%m|^GE1Z}XY?0S@VU} z8pK%MW`}>d!>I9bukNy`-!PWf!HHfCmZII&W=~j16om%vK zR;T)JZlyIJ=6)Mlb9-%xYch=NWzyvZX!cp9<}Oy`%_^0ctW{Dbs<&Ef-tCQ?+Q6_q z$R?mIp7!80z6Ypd2uYYjg*I&JJ2=sMfSwv8!vNlV5aJVVGzSf`oGgEnoq-_VNE^9YVC*gCv$fbE``}QoPX5p0b+C?#8Up16f6DjBoAx04l?N zJ84e~hiHWUVVBC%AtpEa-` zdBwv;DS~veLEMZ^4&!0ACZ95J>GYlu99Y6i1u(wCxduYGejFXCDmrg;!6~5g=4;quGhw!+^dlT65aSc_aNSuusLUB1aFmMYyW{R9=C zfAQES+t1Rs*@SL>!j5e~908I9`auD*$dU-pLu44q(-g%tHr=UYO0ohs=`IDZRi{$i znLH{e`3i`Y+XAVi*cHbJKH3PeySgPG9K89oB*gAgzf@O>nKa^%L3h8%?I}U8Uxcd! zz@h|vHkA?{OwHi3Jv435iS?eSr7YyroG9eZgx--t}bb8sDY;#8V%j3 z^#^2a>^CM#AIfntkFscUF}2Yu;E=O=ukxi!6|TlqPkZM6*t)14Mx0jOZ~4ua{Y#Z$ zioetsBxA8w4__dVZ*{i@VpU6k$eo{RQFPi0g7sQ2bl!!g#RtIR1MNzmAFR8J6T5`i z4(IcmL`y1onlxsq&&D1S%lxlcxj(nGCoTLNeKr#NJY2d9c!BKR{Ld|M);?df&q+ST z&{SnnpUvC4RmEW6RU*$ux7!NzsW6uiRCqZpwtGXY(A=`F#F^}pZWimaahOqK-`th# zv^o#k=YD;HxE)Cei!MpN(2;Z`CkvnZ-rUISqchV(mq*8E=O<>SPhOatxm53e0AXd`^WDaID77E;{*Fg$49^Z)pPsrANw*Tdl<#Oz5Bkt_rAS6T+;SO7VS>D z`ROm$B|rUN)+NVJ95~TdfQUwM;2V!09GM!gKYn6xzxc&ek6v zotc`NnST8E#MJj@<|fA;KQc2`S8QPB+`y5MvFY)8ePCc9OpRt{7Uo9BA5Y^mXMgbc zf$_5o=VQ{|*|D=L2lC%I{_p<}ng0IgKPucGW9{D`oN=YH&2R%`i-xja4MHO&(=da~1=n6wf}@^yGn zN7`R}m`V@Y=y!XwacYLSr+<3xg@ zPM7=vt>oMBRnaqF{w&!OtWW&&$2QiZp$|Rpqn_isDCSVS*_iJ$xIRXGJszY-d*|C= z-(D|CzH0DnFTWD1Yr*szR!`4>>Ip_Y7VOV%f10{+uK(S9|NT0ko+Q0r`R`^#|NlV# ID?;Eu12$O47XSbN literal 243712 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 HfWZF^3DF_T diff --git a/Defs/AbilityDefs/ROMV_Protean.xml b/Defs/AbilityDefs/ROMV_Protean.xml index 6f848e0..70e3b6b 100644 --- a/Defs/AbilityDefs/ROMV_Protean.xml +++ b/Defs/AbilityDefs/ROMV_Protean.xml @@ -2,224 +2,194 @@ - - ROMV_Protean - - -

  • ROMV_Protean_BatForm
  • -
  • ROMV_Protean_FeralClaws
  • -
  • ROMV_Protean_MistForm
  • -
  • ROMV_Protean_WarForm
  • - - + + ROMV_Protean + + +
  • ROMV_Protean_BatForm
  • +
  • ROMV_Protean_FeralClaws
  • +
  • ROMV_Protean_MistForm
  • +
  • ROMV_Protean_WarForm
  • +
    +
    - - ROMV_Protean_BatForm - - 1 - UI/Icons/Commands/Protean_BatForm - Become one of the children of the night, and gain its ability to fly with great speed. - - Vampire.DisciplineEffect_BatForm - true - ROMV_DominateProjectile - ROMV_Protean_BatForm - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_BatFormHediff - - -
  • - ROMV_BatKind - - 3000 - 3000 - -
  • -
    -
    + + ROMV_Protean_BatForm + + 1 + UI/Icons/Commands/Protean_BatForm + Become one of the children of the night, and gain its ability to fly with great speed. + + Vampire.DisciplineEffect_BatForm + true + ROMV_DominateProjectile + ROMV_Protean_BatForm + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + + + + ROMV_BatFormHediff + + +
  • + ROMV_BatKind + + 3000 + 3000 + +
  • +
    +
    - - ROMV_Protean_FeralClaws - - 1 + + ROMV_Protean_FeralClaws + + 1 - UI/Icons/Commands/Protean_FeralClaws - The vampire’s nails grow into long, fearsome talons, capable of rending bone and flesh alike. - - Vampire.DisciplineEffect_FeralClaws - true - ROMV_DominateProjectile - ROMV_Protean_FeralClaws - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_FeralClaw - - -
  • - -
  • - - -
  • Blunt
  • - - 14 - 1.65 - - - -
  • - - 7500 - 7500 - -
  • -
    - - true - false - true - 1.0 - -
    + UI/Icons/Commands/Protean_FeralClaws + The vampire’s nails grow into long, fearsome talons, capable of rending bone and flesh alike. + + Vampire.DisciplineEffect_FeralClaws + true + ROMV_DominateProjectile + ROMV_Protean_FeralClaws + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + +
    - - ROMV_Protean_MistForm - - 2 - UI/Icons/Commands/Protean_MistForm - This power enables a Kindred to transform his entire body into a fine, chilling mist, both immune to damage and unable to give it. - - Vampire.DisciplineEffect_MistForm - true - ROMV_DominateProjectile - ROMV_Protean_MistForm - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_MistFormHediff - - -
  • - ROMV_MistKind - true - false - - 3000 - 3000 - -
  • -
    -
    + + ROMV_Protean_MistForm + + 2 + UI/Icons/Commands/Protean_MistForm + This power enables a Kindred to transform his entire body into a fine, chilling mist, both immune to damage and unable to give it. + + Vampire.DisciplineEffect_MistForm + true + ROMV_DominateProjectile + ROMV_Protean_MistForm + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + + + + ROMV_MistFormHediff + + +
  • + ROMV_MistKind + true + false + + 3000 + 3000 + +
  • +
    +
    - - ROMV_Protean_WarForm - - 3 - UI/Icons/Commands/Protean_WarForm - You assume a colossal visage suitable for fighting an enemy horde. - - Vampire.DisciplineEffect_WarForm - true - ROMV_DominateProjectile - ROMV_Protean_WarForm - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_WarFormHediff - - -
  • - ROMV_WarFormKind - - 3000 - 3000 - -
  • -
    -
    + + ROMV_Protean_WarForm + + 3 + UI/Icons/Commands/Protean_WarForm + You assume a colossal visage suitable for fighting an enemy horde. + + Vampire.DisciplineEffect_WarForm + true + ROMV_DominateProjectile + ROMV_Protean_WarForm + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + + + + ROMV_WarFormHediff + + +
  • + ROMV_WarFormKind + + 3000 + 3000 + +
  • +
    +
    diff --git a/Defs/HediffDefs/ROMV_VampireParts.xml b/Defs/HediffDefs/ROMV_VampireParts.xml index 62526e3..657b3ea 100644 --- a/Defs/HediffDefs/ROMV_VampireParts.xml +++ b/Defs/HediffDefs/ROMV_VampireParts.xml @@ -1,43 +1,74 @@ - + - - Hediff_AddedPart - (0.6, 0.5, 0.9) - + + Hediff_AddedPart + (0.6, 0.5, 0.9) + - - - JecsTools.Hediff_TransformedPart - (0.6, 0.5, 0.9) - false - + + JecsTools.Hediff_TransformedPart + (0.6, 0.5, 0.9) + false + - - ROMV_Fangs - - Vampire.Hediff_AddedPart_Fangs - - true - 1.2 - - false - -
  • - -
  • - - -
  • Bite
  • - - 9 - 1.65 - - - -
    -
    + + + ROMV_Fangs + + Vampire.Hediff_AddedPart_Fangs + + true + 1.2 + + false + +
  • + +
  • + + +
  • Bite
  • + + 9 + 1.65 + + + +
    +
    + + + ROMV_FeralClaw + + +
  • + +
  • + + +
  • Blunt
  • + + 14 + 1.65 + + + +
  • + + 7500 + 7500 + +
  • +
    + + true + false + true + 1.0 + +
    diff --git a/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml b/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml index 929c680..1f95dfc 100644 --- a/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml +++ b/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml @@ -1,39 +1,39 @@ - - ROMV_TemporaryPawnAI - - -
  • - Downed -
  • + + ROMV_TemporaryPawnAI + + +
  • + Downed +
  • -
  • - LordDuty -
  • +
  • + LordDuty +
  • -
  • - Idle - -
  • - Deadly -
  • -
    - +
  • + Idle + +
  • + Deadly +
  • +
    + -
  • - - - +
  • + + + - + ROMV_TemporaryPawnAI_Constant
  • - +
  • diff --git a/Patches/ROMV_pCombatEx.xml b/Patches/ROMV_pCombatEx.xml new file mode 100644 index 0000000..83fc032 --- /dev/null +++ b/Patches/ROMV_pCombatEx.xml @@ -0,0 +1,60 @@ + + + + + + Always + + + +
  • + Combat Extended +
  • +
  • + */HediffDef[defName="ROMV_Fangs"]/comps/li[@Class="HediffCompProperties_VerbGiver"]/tools + + +
  • + +
  • Bite
  • + + 9 + Teeth + 1.65 + 0.15 + + + + +
    +
    + + + Always + + +
  • + Combat Extended +
  • +
  • + */HediffDef[defName="ROMV_FeralClaw"]/comps/li[@Class="HediffCompProperties_VerbGiver"]/tools + + +
  • + + +
  • Stab
  • + + 14 + Hands + 1.65 + 0.25 + + + + +
    +
    +
    diff --git a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs index ced0618..5659778 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs @@ -61,8 +61,8 @@ public override string GetReport() public override void Notify_Starting() { base.Notify_Starting(); - usingNutrientPasteDispenser = (IngestibleSource is Building_NutrientPasteDispenser); - eatingFromInventory = (pawn.inventory != null && pawn.inventory.Contains(IngestibleSource)); + usingNutrientPasteDispenser = IngestibleSource is Building_NutrientPasteDispenser; + eatingFromInventory = pawn.inventory != null && pawn.inventory.Contains(IngestibleSource); } [DebuggerHidden] diff --git a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs index 576623f..9c54ef2 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs @@ -70,7 +70,7 @@ protected override IEnumerable MakeNewToils() { initAction = delegate () { - VampireCorpse vampCorpse = ((VampireCorpse)TargetA.Thing); + VampireCorpse vampCorpse = (VampireCorpse)TargetA.Thing; vampCorpse.Diableried = true; Pawn p = vampCorpse.InnerPawn; pawn.VampComp().Notify_Diablerie(p.VampComp()); diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index e283673..4c8898f 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -63,7 +63,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, ThoughtDef victimThoughtDef, ThoughtDef actorThoughtDef, float workLeft, Action effect, Func stopCondition, bool needsGrapple = true, bool cleansWound = true, bool neverGiveUp = false) { yield return Toils_Reserve.Reserve(TargetIndex.A); - Toil gotoToil = (actor?.Faction == TargetA.Thing?.Faction) ? Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch) : Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); + Toil gotoToil = actor?.Faction == TargetA.Thing?.Faction ? Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch) : Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() { @@ -80,7 +80,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { if (needsGrapple) { - int grappleBonus = (actor is PawnTemporary) ? 100 : 0 ; + int grappleBonus = actor is PawnTemporary ? 100 : 0 ; if (!JecsTools.GrappleUtility.TryGrapple(actor, victim, grappleBonus)) { thisDriver.EndJobWith(JobCondition.Incompletable); diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index 340a9de..d605588 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -77,7 +77,7 @@ protected override IEnumerable MakeNewToils() } yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); yield return Toils_General.WaitWith(TargetIndex.A, 600, true); - yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => (Master == null) || (!Master.Spawned || Master.Dead)); + yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => Master == null || !Master.Spawned || Master.Dead); } public bool ShouldContinueFeeding(Pawn feeder, Pawn victim) diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs index 2768a04..45ed372 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs @@ -66,7 +66,7 @@ protected override IEnumerable MakeNewToils() } yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); yield return Toils_General.WaitWith(TargetIndex.A, 600, true); - yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => (Master == null) || (!Master.Spawned || Master.Dead)); + yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => Master == null || !Master.Spawned || Master.Dead); } public bool ShouldContinueFeeding(Pawn feeder, Pawn victim) diff --git a/Source/Vampires/Components/CompVampBed.cs b/Source/Vampires/Components/CompVampBed.cs index 0b8a594..2b1e1e2 100644 --- a/Source/Vampires/Components/CompVampBed.cs +++ b/Source/Vampires/Components/CompVampBed.cs @@ -79,7 +79,7 @@ public override void CompTickRare() GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); bed.SetFaction(parent.Faction); } - if (bed != null && bed.Spawned && g.assignedPawn != null && ((bed?.AssignedPawns?.Contains(g.assignedPawn) ?? false) == false)) + if (bed != null && bed.Spawned && g.assignedPawn != null && (bed?.AssignedPawns?.Contains(g.assignedPawn) ?? false) == false) { bed.TryAssignPawn(g.assignedPawn); } diff --git a/Source/Vampires/Components/CompVampire.cs b/Source/Vampires/Components/CompVampire.cs index 26a29dc..e037585 100644 --- a/Source/Vampires/Components/CompVampire.cs +++ b/Source/Vampires/Components/CompVampire.cs @@ -97,7 +97,7 @@ public float XPLastLevel return result; } } - public float XPTillNextLevelPercent => ((float)(xp - XPLastLevel) / (float)(XPTillNextLevel - XPLastLevel)); + public float XPTillNextLevelPercent => (float)(xp - XPLastLevel) / (float)(XPTillNextLevel - XPLastLevel); public int XPTillNextLevel => (level + 1) * 600; public int AbilityPoints { get => abilityPoints; set => abilityPoints = value; } @@ -430,7 +430,7 @@ public override bool AllowStackWith(Thing other) } - public override float GrappleModifier => (IsVampire) ? 20 - generation : 0; + public override float GrappleModifier => IsVampire ? 20 - generation : 0; @@ -440,7 +440,7 @@ public override IEnumerable CompGetGizmosExtra() { for (int i = 0; i < AbilityData.AllPowers.Count; i++) { - if (AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); + if (AbilityData.AllPowers[i] is VampAbility p && p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0) yield return p.GetGizmo(); } if (AbilityUser.Downed && AbilityUser.IsVampire()) { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs index 20f8698..faec2af 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs @@ -12,12 +12,12 @@ public override void Effect(Pawn target) base.Effect(target); IEnumerable recs = target.health.hediffSet.GetNotMissingParts(); Dictionary bodyPartRecords = new Dictionary(); - if (recs.FirstOrDefault(x => (x.def == BodyPartDefOf.LeftHand)) is BodyPartRecord leftHand) + if (recs.FirstOrDefault(x => x.def == BodyPartDefOf.LeftHand) is BodyPartRecord leftHand) bodyPartRecords.Add(leftHand, VampDefOf.ROMV_FeralClaw); - if (recs.FirstOrDefault(x => (x.def == BodyPartDefOf.RightHand)) is BodyPartRecord rightHand) + if (recs.FirstOrDefault(x => x.def == BodyPartDefOf.RightHand) is BodyPartRecord rightHand) bodyPartRecords.Add(rightHand, VampDefOf.ROMV_FeralClaw); - if ((bodyPartRecords?.Count() ?? 0) > 0) + if ((bodyPartRecords?.Count ?? 0) > 0) { foreach (KeyValuePair transformableParts in bodyPartRecords) { diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs index 1a9b406..dd41e1e 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs @@ -40,11 +40,11 @@ public override void Effect(Pawn target) } IEnumerable recs = target.health.hediffSet.GetNotMissingParts(); - if (recs.FirstOrDefault(x => (x.def.tags.Contains(tagOne))) is BodyPartRecord bp) + if (recs.FirstOrDefault(x => x.def.tags.Contains(tagOne)) is BodyPartRecord bp) { HediffGiveUtility.TryApply(target, hediffDefOne, new List { bp.def }); } - if (recs.FirstOrDefault(x => (x.def.tags.Contains(tagTwo))) is BodyPartRecord bpII) + if (recs.FirstOrDefault(x => x.def.tags.Contains(tagTwo)) is BodyPartRecord bpII) { HediffGiveUtility.TryApply(target, hediffDefTwo, new List { bpII.def }); } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index df4933d..30a5ad7 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -22,75 +22,75 @@ static HarmonyPatches() //Fixes issues with having no food need. harmony.Patch(AccessTools.Method(typeof(Pawn_NeedsTracker), "ShouldHaveNeed"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(ShouldHaveNeed_Vamp))); harmony.Patch(AccessTools.Method(typeof(ThinkNode_ConditionalNeedPercentageAbove), "Satisfied"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Satisfied_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Satisfied_Vamp)), null); //The wander handler now makes vampires wander indoors (for their safety). harmony.Patch(AccessTools.Method(typeof(PawnUtility), "KnownDangerAt"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(KnownDangerAt_Vamp))); harmony.Patch(AccessTools.Method(typeof(JoyUtility), "EnjoyableOutsideNow", new Type[] { typeof(Pawn), typeof(StringBuilder) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(EnjoyableOutsideNow_Vampire))); harmony.Patch(AccessTools.Method(typeof(JobGiver_GetRest), "FindGroundSleepSpotFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(FindGroundSleepSpotFor_Vampire))); harmony.Patch(AccessTools.Method(typeof(JobGiver_TakeCombatEnhancingDrug), "TryGiveJob"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(TryGiveJob_DrugGiver_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(TryGiveJob_DrugGiver_Vampire)), null); harmony.Patch(AccessTools.Method(typeof(ReachabilityUtility), "CanReach", new Type[] { typeof(Pawn), typeof(LocalTargetInfo), typeof(PathEndMode), typeof(Danger), typeof(bool), typeof(TraverseMode) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(CanReach_Vampire))); //The Doctor alert will no longer check a vampire to see if it's fed. harmony.Patch(AccessTools.Method(typeof(Alert_NeedDoctor), "get_Patients"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Patients_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_Patients_Vamp)), null); //Vampires vomit blood instead of their digested meals. harmony.Patch(AccessTools.Method(typeof(JobDriver_Vomit), "MakeNewToils"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(MakeNewToils_VampVomit))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(MakeNewToils_VampVomit)), null); //Adds vampire right click float menus. harmony.Patch(AccessTools.Method(typeof(FloatMenuMakerMap), "AddHumanlikeOrders"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(AddHumanlikeOrders_Vamp))); //Gives different skin color for Vampires harmony.Patch(AccessTools.Method(typeof(Pawn_StoryTracker), "get_SkinColor"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_SkinColor_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_SkinColor_Vamp)), null); //Adds debug/dev tools for making vampires. harmony.Patch(AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DoListingItems_MapTools"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(DoListingItems_MapTools_Vamp))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(ThingDef), "get_AllRecipes"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_AllRecipes_BloodFeedable))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(Bill_Medical), "Notify_DoBillStarted"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Notify_DoBillStarted_Debug))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Notify_DoBillStarted_Debug)), null); //Add overrides to methods if CompVampBed is active. harmony.Patch(AccessTools.Method(typeof(Building_Casket), "Draw"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Draw_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Draw_VampBed)), null); harmony.Patch(AccessTools.Method(typeof(Building_Casket), "Accepts"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Accepts_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Accepts_VampBed)), null); harmony.Patch(AccessTools.Method(typeof(Building_Grave), "get_Graphic"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Graphic_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_Graphic_VampBed)), null); harmony.Patch(AccessTools.Method(typeof(Building_Casket), "GetFloatMenuOptions"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(GetFloatMenuOptions_VampBed))); harmony.Patch(AccessTools.Method(typeof(WorkGiver_BuryCorpses), "FindBestGrave"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(FindBestGrave_VampBed))); //Caravan patches harmony.Patch(AccessTools.Method(typeof(Dialog_FormCaravan), "CheckForErrors"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(CheckForErrors_Vampires))); harmony.Patch(AccessTools.Method(typeof(Caravan), "get_Resting"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires)))); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_Resting_Vampires))); //Lord_AI patches harmony.Patch(AccessTools.Method(typeof(Trigger_UrgentlyHungry), "ActivateOn"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(ActivateOn_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(ActivateOn_Vampire)), null); //Allow fortitude to soak damage harmony.Patch(AccessTools.Method(typeof(Pawn_HealthTracker), "PreApplyDamage"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(VampFortitude))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(VampFortitude)), null); //Changes vampire appearances and statistics based on their current forms harmony.Patch(AccessTools.Method(typeof(Pawn), "get_BodySize"), null, new HarmonyMethod(typeof(HarmonyPatches), @@ -1326,7 +1326,7 @@ public static bool Draw_VampBed(Building_Casket __instance) { if (__instance.GetComps() is CompVampBed b) { - if (!__instance.Spawned || __instance.GetDirectlyHeldThings()?.Count() == 0) + if (!__instance.Spawned || __instance.GetDirectlyHeldThings()?.Count == 0) __instance.Draw(); return false; } @@ -1493,7 +1493,7 @@ private static void AddHumanlikeOrders_Vamp(Vector3 clickPos, Pawn pawn, ref Lis } else { - MenuOptionPriority priority = (!(bloodItem is Corpse)) ? MenuOptionPriority.Default : MenuOptionPriority.Low; + MenuOptionPriority priority = !(bloodItem is Corpse) ? MenuOptionPriority.Default : MenuOptionPriority.Low; item5 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, delegate { bloodItem.SetForbidden(false); @@ -1604,7 +1604,7 @@ public static bool get_Patients_Vamp(ref IEnumerable __result) } else { - if ((p2.Downed && (p2?.needs?.food?.CurCategory ?? HungerCategory.Fed) < HungerCategory.Fed && p2.InBed()) || HealthAIUtility.ShouldBeTendedNow(p2)) + if (p2.Downed && (p2?.needs?.food?.CurCategory ?? HungerCategory.Fed) < HungerCategory.Fed && p2.InBed() || HealthAIUtility.ShouldBeTendedNow(p2)) { Patients.Add(p2); } @@ -1638,7 +1638,7 @@ public static bool GetExactWanderDest_Vamp(JobGiver_Wander __instance, Pawn pawn if (pawn.VampComp() is CompVampire v && v.IsVampire && VampireUtility.IsDaylight(pawn)) { IntVec3 wanderRoot = pawn.Position; - Func wanderDestValidator = ((Pawn pawnB, IntVec3 loc) => WanderRoomUtility.IsValidWanderDest(pawnB, loc, pawnB.Position) && loc.Roofed(pawnB.Map)); + Func wanderDestValidator = (Pawn pawnB, IntVec3 loc) => WanderRoomUtility.IsValidWanderDest(pawnB, loc, pawnB.Position) && loc.Roofed(pawnB.Map); __result = RCellFinder.RandomWanderDestFor(pawn, wanderRoot, 7f, wanderDestValidator, PawnUtility.ResolveMaxDanger(pawn, Danger.None)); return false; } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs index 2695744..228450d 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs @@ -13,7 +13,7 @@ public static void CanReach_Vampire(ref bool __result, Pawn pawn, LocalTargetInf { if (__result && pawn.IsVampire() && (pawn.VampComp().CurrentSunlightPolicy > SunlightPolicy.Relaxed || pawn.MentalStateDef == DefDatabase.GetNamed("ROMV_VampireBeast")) && - VampireUtility.IsDaylight(pawn) && (pawn.Faction == Faction.OfPlayerSilentFail && !pawn.Drafted)) + VampireUtility.IsDaylight(pawn) && pawn.Faction == Faction.OfPlayerSilentFail && !pawn.Drafted) { if (!dest.Cell.Roofed(pawn.MapHeld)) __result = false; } @@ -27,7 +27,7 @@ public static void FindGroundSleepSpotFor_Vampire(Pawn pawn, ref IntVec3 __resul Map map = pawn.Map; for (int i = 0; i < 2; i++) { - int radius = (i != 0) ? 12 : 4; + int radius = i != 0 ? 12 : 4; IntVec3 result; if (CellFinder.TryRandomClosewalkCellNear(pawn.Position, map, radius, out result, (IntVec3 x) => !x.IsForbidden(pawn) && !x.GetTerrain(map).avoidWander && x.Roofed(pawn.MapHeld))) { diff --git a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs index 33232da..45e0652 100644 --- a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs +++ b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs @@ -36,7 +36,7 @@ public override IEnumerable 1) { @@ -98,7 +98,7 @@ public override IEnumerable !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || (Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro)) || (Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks); + private bool ShouldDisplay => !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro) || Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks; public override void CompExposeData() { @@ -122,7 +122,7 @@ public override void CompPostTick(ref float severityAdjustment) public bool CheckPreAbsorbDamage(DamageInfo dinfo) { - if (ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(Pawn.Position)) || dinfo.Def.isExplosive)) + if (ShieldState == ShieldState.Active && (dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(Pawn.Position) || dinfo.Def.isExplosive)) { if (dinfo.Instigator != null) { diff --git a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs index 7a7e300..63e9dab 100644 --- a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs @@ -6,6 +6,6 @@ public class HediffComp_SkillOffset : HediffComp { public HediffCompProperties_SkillOffset Props => (HediffCompProperties_SkillOffset)props; - public override string CompTipStringExtra => Props.skillDef.LabelCap + ": " + ((Props.offset >= 0) ? "+" : "") + Props.offset.ToString(); + public override string CompTipStringExtra => Props.skillDef.LabelCap + ": " + (Props.offset >= 0 ? "+" : "") + Props.offset.ToString(); } } diff --git a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs index 84d22ff..687beda 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs @@ -34,7 +34,7 @@ public override string TipStringExtra get { int gen = generation; - int math = (gen > 7) ? 10 + (Math.Abs(gen - 13)) : 10 * (Math.Abs(gen - 9)); + int math = gen > 7 ? 10 + Math.Abs(gen - 13) : 10 * Math.Abs(gen - 9); StringBuilder s = new StringBuilder(); s.AppendLine(Bloodline.LabelCap); diff --git a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs index 8c3d439..a598a72 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs @@ -45,7 +45,7 @@ public override void Tick() if (Find.TickManager.TicksGame % 20 == 0) { if (CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(pawn.DrawPos, pawn.Map, 1f); - if (CurStageIndex > 1 && Rand.Value < (CurStageIndex * 0.31f)) + if (CurStageIndex > 1 && Rand.Value < CurStageIndex * 0.31f) MoteMaker.ThrowFireGlow(pawn.PositionHeld, pawn.Map, 1f); } } diff --git a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs index ecdc57c..4480238 100644 --- a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs +++ b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs @@ -1,4 +1,5 @@ -using Verse; +using RimWorld; +using Verse; namespace Vampire { @@ -24,7 +25,7 @@ public override bool ShouldRemove /// so we should also give them back their jaws. ///
    public override void PostRemoved() - { + { if (!pawn.IsVampire()) pawn.health.RestorePart(Part, this, false); diff --git a/Source/Vampires/Need_Blood.cs b/Source/Vampires/Need_Blood.cs index 8211984..5600b76 100644 --- a/Source/Vampires/Need_Blood.cs +++ b/Source/Vampires/Need_Blood.cs @@ -45,7 +45,7 @@ public class Need_Blood : Need public bool Starving => CompVampire != null && CompVampire.IsVampire && CurCategory == HungerCategory.Starving; public bool ShouldDie => CurBloodPoints == 0; public float PercPerPoint => 1f / MaxBloodPoints; - public bool DrainingIsDeadly => CurBloodPoints <= 2 || (pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2); + public bool DrainingIsDeadly => CurBloodPoints <= 2 || pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def == HediffDefOf.BloodLoss) is Hediff bloodLoss && bloodLoss.CurStageIndex > 2; //public PreferredFeedMode PreferredFeedMode { get => preferredFeedMode; set => preferredFeedMode = value; } @@ -74,7 +74,7 @@ public int CurBloodPoints public int MaxBloodPointsForAnimal(Pawn p) { PawnKindDef def = p.kindDef; - int result = (def.RaceProps.baseBodySize < 1f) ? 1 : 2; + int result = def.RaceProps.baseBodySize < 1f ? 1 : 2; if (def == PawnKindDef.Named("Rat")) return 1; if (def == PawnKindDefOf.Thrumbo) return 10; return result; @@ -92,7 +92,7 @@ public int MaxBloodPoints if (CompVampire != null && CompVampire.IsVampire) { int gen = CompVampire.Generation; - result = (gen > 7) ? 10 + (Math.Abs(gen - 13)) : 10 * (Math.Abs(gen - 9)); + result = gen > 7 ? 10 + Math.Abs(gen - 13) : 10 * Math.Abs(gen - 9); } return result; } @@ -133,7 +133,7 @@ public HungerCategory CurCategory #endregion Properties public override int GUIChangeArrow - => (CompVampire != null && CompVampire.IsVampire)? -1 : (CurLevel == MaxLevel) ? 0 : 1; + => CompVampire != null && CompVampire.IsVampire? -1 : CurLevel == MaxLevel ? 0 : 1; public override float CurInstantLevel => base.CurInstantLevel; public override float CurLevel { @@ -386,12 +386,12 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, } float num2 = 14f; - float num3 = (customMargin < 0f) ? (num2 + 15f) : customMargin; + float num3 = customMargin < 0f ? num2 + 15f : customMargin; if (rect.height < 50f) { num2 *= Mathf.InverseLerp(0f, 50f, rect.height); } - Text.Font = ((rect.height <= 55f) ? GameFont.Tiny : GameFont.Small); + Text.Font = rect.height <= 55f ? GameFont.Tiny : GameFont.Small; Text.Anchor = TextAnchor.LowerLeft; Rect rect2 = new Rect(rect.x + num3 + rect.width * 0.1f, rect.y, rect.width - num3 - rect.width * 0.1f, rect.height / 2f); Widgets.Label(rect2, GetLabel()); @@ -427,7 +427,7 @@ public override void DrawOnGUI(Rect rect, int maxThresholdMarkers = 2147483647, // RimWorld.Need private void DrawBarThreshold(Rect barRect, float threshPct) { - float num = (float)((barRect.width <= 60f) ? 1 : 2); + float num = (float)(barRect.width <= 60f ? 1 : 2); Rect position = new Rect(barRect.x + barRect.width * threshPct - (num - 1f), barRect.y + barRect.height / 2f, num, barRect.height / 2f); Texture2D image; if (threshPct < CurLevelPercentage) diff --git a/Source/Vampires/PatchOperationModLoaded.cs b/Source/Vampires/PatchOperationModLoaded.cs new file mode 100644 index 0000000..44da493 --- /dev/null +++ b/Source/Vampires/PatchOperationModLoaded.cs @@ -0,0 +1,16 @@ +using System.Linq; +using System.Xml; +using Verse; + +namespace Vampire +{ + public class PatchOperationModLoaded : PatchOperation + { + private string modName; + + protected override bool ApplyWorker(XmlDocument xml) + { + return !modName.NullOrEmpty() && ModsConfig.ActiveModsInLoadOrder.Any(mod => mod.Name == modName); + } + } +} \ No newline at end of file diff --git a/Source/Vampires/ScenPart_LongerNights.cs b/Source/Vampires/ScenPart_LongerNights.cs index 6d0d80f..8f2e22e 100644 --- a/Source/Vampires/ScenPart_LongerNights.cs +++ b/Source/Vampires/ScenPart_LongerNights.cs @@ -42,7 +42,7 @@ public override string Summary(Scenario scen) public string GetLongerNightsSummary() { - return (this?.nightsLength == 1.0f) ? "ROMV_EternalDarkness".Translate() : "ROMV_NightLengthBy".Translate(nightsLength.ToStringPercent()); + return this?.nightsLength == 1.0f ? "ROMV_EternalDarkness".Translate() : "ROMV_NightLengthBy".Translate(nightsLength.ToStringPercent()); } public override void Randomize() diff --git a/Source/Vampires/ScenPart_StartingVampires.cs b/Source/Vampires/ScenPart_StartingVampires.cs index 5b6a00f..a557498 100644 --- a/Source/Vampires/ScenPart_StartingVampires.cs +++ b/Source/Vampires/ScenPart_StartingVampires.cs @@ -103,7 +103,7 @@ public override string Summary(Scenario scen) public string GetChanceOrMax() { - return (this?.vampChance == 1.0f) ? maxVampires.ToString() : "ROMV_ChanceOf".Translate(vampChance.ToStringPercent()); + return this?.vampChance == 1.0f ? maxVampires.ToString() : "ROMV_ChanceOf".Translate(vampChance.ToStringPercent()); } public string GetInCoffinsString() @@ -113,7 +113,7 @@ public string GetInCoffinsString() public string GenRangeToString() { - return (HediffVampirism.AddOrdinal(this?.generationRange.min ?? 10) + "-" + HediffVampirism.AddOrdinal(this?.generationRange.max ?? 15)) ?? ""; + return HediffVampirism.AddOrdinal(this?.generationRange.min ?? 10) + "-" + HediffVampirism.AddOrdinal(this?.generationRange.max ?? 15) ?? ""; } public override void Randomize() @@ -123,7 +123,7 @@ public override void Randomize() bloodline = PossibleBloodlines().RandomElement(); generationRange.max = Rand.Range(10, 15); generationRange.min = Rand.Range(8, generationRange.max); - spawnInCoffins = (Rand.Value > 0.3) ? true : false; + spawnInCoffins = Rand.Value > 0.3 ? true : false; } public override void PostMapGenerate(Map map) @@ -134,7 +134,7 @@ public override void PostMapGenerate(Map map) } if (spawnInCoffins) { - bool usingDropPods = Find.Scenario.AllParts.Any(x => x is ScenPart_PlayerPawnsArriveMethod s && ((PlayerPawnsArriveMethod)AccessTools.Field(typeof(ScenPart_PlayerPawnsArriveMethod), "method").GetValue(s)) == PlayerPawnsArriveMethod.DropPods); + bool usingDropPods = Find.Scenario.AllParts.Any(x => x is ScenPart_PlayerPawnsArriveMethod s && (PlayerPawnsArriveMethod)AccessTools.Field(typeof(ScenPart_PlayerPawnsArriveMethod), "method").GetValue(s) == PlayerPawnsArriveMethod.DropPods); List> list = new List>(); foreach (Pawn current in Find.GameInitData.startingPawns) { @@ -162,8 +162,8 @@ public override void Notify_PawnGenerated(Pawn pawn, PawnGenerationContext conte { if (Find.VisibleMap == null) { - curVampires = Find.GameInitData.startingPawns.FindAll(x => x?.health?.hediffSet?.hediffs.FirstOrDefault(y => y.def.defName.Contains("Vampirism")) != null)?.Count() ?? 0; - BloodlineDef def = (randomBloodline) ? PossibleBloodlines().RandomElement() : bloodline; + curVampires = Find.GameInitData.startingPawns.FindAll(x => x?.health?.hediffSet?.hediffs.FirstOrDefault(y => y.def.defName.Contains("Vampirism")) != null)?.Count ?? 0; + BloodlineDef def = randomBloodline ? PossibleBloodlines().RandomElement() : bloodline; if (pawn.RaceProps.Humanlike && context == PawnGenerationContext.PlayerStarter) { if (!pawn?.story?.WorkTagIsDisabled(WorkTags.Violent) ?? false) diff --git a/Source/Vampires/UI/VampireCardUtility.cs b/Source/Vampires/UI/VampireCardUtility.cs index a0681de..0ecd9df 100644 --- a/Source/Vampires/UI/VampireCardUtility.cs +++ b/Source/Vampires/UI/VampireCardUtility.cs @@ -137,7 +137,7 @@ public static void DrawVampCard(Rect rect, Pawn pawn) // float powersTextSize = Text.CalcSize("ROMV_Disciplines".Translate()).x; - Rect rectPowersLabel = new Rect((rect.width / 2) - (powersTextSize / 2), rectSkills.yMax + SectionOffset - 5, rect.width, HeaderSize); + Rect rectPowersLabel = new Rect(rect.width / 2 - powersTextSize / 2, rectSkills.yMax + SectionOffset - 5, rect.width, HeaderSize); Text.Font = GameFont.Medium; Widgets.Label(rectPowersLabel, "ROMV_Disciplines".Translate().CapitalizeFirst()); Text.Font = GameFont.Small; @@ -161,7 +161,7 @@ public static void DrawVampCard(Rect rect, Pawn pawn) { Rect rectDisciplines = new Rect(rect.x + ButtonSize, curY, rectPowersLabel.width, ButtonSize + Padding); PowersGUIHandler(rectDisciplines, compVampire, compVampire.Sheet.Disciplines[i]); - curY += ButtonSize + (Padding * 2) + (TextSize * 2); + curY += ButtonSize + Padding * 2 + TextSize * 2; } } GUI.EndGroup(); @@ -274,7 +274,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip Widgets.DrawTextureFitted(buttonRect, ability.uiIcon, 1.0f); } - else if (Widgets.ButtonImage(buttonRect, ability.uiIcon) && (compVampire.AbilityUser.Faction == Faction.OfPlayer)) + else if (Widgets.ButtonImage(buttonRect, ability.uiIcon) && compVampire.AbilityUser.Faction == Faction.OfPlayer) { //if (compVampire.AbilityPoints < ability.abilityCost) @@ -286,7 +286,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip // }), MessageTypeDefOf.RejectInput); // return; //} - if (compVampire.AbilityUser.story != null && (compVampire.AbilityUser.story.WorkTagIsDisabled(WorkTags.Violent) && ability.MainVerb.isViolent)) + if (compVampire.AbilityUser.story != null && compVampire.AbilityUser.story.WorkTagIsDisabled(WorkTags.Violent) && ability.MainVerb.isViolent) { Messages.Message("IsIncapableOfViolenceLower".Translate(new object[] { @@ -308,7 +308,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip case 2: modifier = 0.72f; break; case 3: modifier = 0.60f; break; } - if (count != 0) drawXOffset -= ((VampButtonPointSize * count) * modifier); + if (count != 0) drawXOffset -= VampButtonPointSize * count * modifier; else drawXOffset -= 2; for (int j = 0; j < count + 1; j++) @@ -316,7 +316,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip ++pntCount; float drawYOffset = VampButtonSize + TextSize + Padding; - Rect powerRegion = new Rect(inRect.x + drawXOffset + (VampButtonPointSize * j), inRect.y + drawYOffset, VampButtonPointSize, VampButtonPointSize); + Rect powerRegion = new Rect(inRect.x + drawXOffset + VampButtonPointSize * j, inRect.y + drawYOffset, VampButtonPointSize, VampButtonPointSize); if (discipline.Points >= pntCount) { Widgets.DrawTextureFitted(powerRegion, TexButton.ROMV_PointFull, 1.0f); @@ -329,7 +329,7 @@ public static void PowersGUIHandler(Rect inRect, CompVampire compVampire, Discip TooltipHandler.TipRegion(powerRegion, () => ability.GetDescription() + "\n" + compVampire.PostAbilityVerbCompDesc(ability.MainVerb), 398462); } ++count; - buttonXOffset += (ButtonSize * 3f) + Padding; + buttonXOffset += ButtonSize * 3f + Padding; } } } diff --git a/Source/Vampires/Utilities/BloodFeedModeUtility.cs b/Source/Vampires/Utilities/BloodFeedModeUtility.cs index e36f6fb..67806ac 100644 --- a/Source/Vampires/Utilities/BloodFeedModeUtility.cs +++ b/Source/Vampires/Utilities/BloodFeedModeUtility.cs @@ -41,7 +41,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) })); if (vampBlood.preferredFeedMode > PreferredFeedMode.AnimalLethal) { - Texture2D iconSub = (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All) ? HumanoidTypeAll : HumanoidTypePrisonersOnly; + Texture2D iconSub = vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All ? HumanoidTypeAll : HumanoidTypePrisonersOnly; Rect rectSub = new Rect(pos.x, rect.yMax + 5f, 24f, 24f); if (Widgets.ButtonImage(rectSub, iconSub)) @@ -57,7 +57,7 @@ public static void DrawFeedModeButton(Vector2 pos, Pawn pawn) { "ROMV_FeedMode_CurrentType".Translate(), ": ", - (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All) ? "ROMV_FeedMode_TypeAll".Translate() : "ROMV_FeedMode_TypePrisonersOnly".Translate() + vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All ? "ROMV_FeedMode_TypeAll".Translate() : "ROMV_FeedMode_TypePrisonersOnly".Translate() })); } } diff --git a/Source/Vampires/Utilities/BloodTypeUtility.cs b/Source/Vampires/Utilities/BloodTypeUtility.cs index ac02967..0d7c48e 100644 --- a/Source/Vampires/Utilities/BloodTypeUtility.cs +++ b/Source/Vampires/Utilities/BloodTypeUtility.cs @@ -15,8 +15,8 @@ public static BloodType BloodType(Pawn pawn) } if (pawn?.RaceProps?.Humanlike ?? false) { - bool lowBlood = (IsLowblood(pawn)); - bool highBlood = (IsHighblood(pawn)); + bool lowBlood = IsLowblood(pawn); + bool highBlood = IsHighblood(pawn); if (IsHighblood(pawn) && IsLowblood(pawn)) return Vampire.BloodType.AverageBlood; diff --git a/Source/Vampires/Utilities/BloodUtility.cs b/Source/Vampires/Utilities/BloodUtility.cs index a9a1871..bdb5de7 100644 --- a/Source/Vampires/Utilities/BloodUtility.cs +++ b/Source/Vampires/Utilities/BloodUtility.cs @@ -147,7 +147,7 @@ public static Thing BestBloodSourceOnMap(Pawn getter, Pawn eater, bool desperate { return false; } - if (t.IsBurning() || (!desperate && t.IsNotFresh()) || !getter.CanReserve(t)) + if (t.IsBurning() || !desperate && t.IsNotFresh() || !getter.CanReserve(t)) { return false; } @@ -379,7 +379,7 @@ public static bool IsAcceptableVictimFor(Pawn vampire, Pawn victim, bool despera } if ((victim.IsPrisoner || victim.IsPrisonerOfColony) && - (eaterBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly)) + eaterBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly) return true; diff --git a/Source/Vampires/Utilities/ExplosionUtility.cs b/Source/Vampires/Utilities/ExplosionUtility.cs new file mode 100644 index 0000000..838a6d1 --- /dev/null +++ b/Source/Vampires/Utilities/ExplosionUtility.cs @@ -0,0 +1,37 @@ +using RimWorld; +using Verse; + +namespace Vampire +{ + public class ExplosionUtility + { + //Overhaul of the standard GenExplosion.DoExplosion THAT ALLOWS NEGATIVE DAMAGE. + public static void DoExplosion(IntVec3 center, Map map, float radius, DamageDef damType, Thing instigator, int damAmount = -1, SoundDef explosionSound = null, ThingDef weapon = null, ThingDef projectile = null, ThingDef postExplosionSpawnThingDef = null, float postExplosionSpawnChance = 0.0f, int postExplosionSpawnThingCount = 1, bool applyDamageToExplosionCellsNeighbors = false, ThingDef preExplosionSpawnThingDef = null, float preExplosionSpawnChance = 0.0f, int preExplosionSpawnThingCount = 1, float chanceToStartFire = 0.0f, bool dealMoreDamageAtCenter = false) + { + if (map == null) + { + Log.Warning("Tried to do explosion in a null map."); + } + else + { + Explosion explosion = (Explosion) GenSpawn.Spawn(ThingDefOf.Explosion, center, map); + explosion.radius = radius; + explosion.damType = damType; + explosion.instigator = instigator; + explosion.damAmount = damAmount; //This is the only line that is changed. + explosion.weapon = weapon; + explosion.projectile = projectile; + explosion.preExplosionSpawnThingDef = preExplosionSpawnThingDef; + explosion.preExplosionSpawnChance = preExplosionSpawnChance; + explosion.preExplosionSpawnThingCount = preExplosionSpawnThingCount; + explosion.postExplosionSpawnThingDef = postExplosionSpawnThingDef; + explosion.postExplosionSpawnChance = postExplosionSpawnChance; + explosion.postExplosionSpawnThingCount = postExplosionSpawnThingCount; + explosion.applyDamageToExplosionCellsNeighbors = applyDamageToExplosionCellsNeighbors; + explosion.chanceToStartFire = chanceToStartFire; + explosion.dealMoreDamageAtCenter = dealMoreDamageAtCenter; + explosion.StartExplosion(explosionSound); + } + } + } +} \ No newline at end of file diff --git a/Source/Vampires/Utilities/VampSunlightPathUtility.cs b/Source/Vampires/Utilities/VampSunlightPathUtility.cs index db7649f..418e961 100644 --- a/Source/Vampires/Utilities/VampSunlightPathUtility.cs +++ b/Source/Vampires/Utilities/VampSunlightPathUtility.cs @@ -113,7 +113,7 @@ public static IntVec3 FindSafeZoneFor(Pawn pawn) { IntVec3 result = IntVec3.Invalid; Region region; - CellFinder.TryFindClosestRegionWith(pawn.GetRegion(), TraverseParms.For(pawn), (x => !x.Room.PsychologicallyOutdoors), 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); + CellFinder.TryFindClosestRegionWith(pawn.GetRegion(), TraverseParms.For(pawn), x => !x.Room.PsychologicallyOutdoors, 9999, out region, RegionType.Set_All); //.ClosestRegionIndoors(pawn.Position, pawn.Map, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), RegionType.Set_Passable); if (region != null) { region.TryFindRandomCellInRegion(x => x.IsValid && x.x > 0 && x.z > 0 && x.InBounds(pawn.MapHeld) && x.GetDoor(pawn.MapHeld) == null, out result); @@ -167,7 +167,7 @@ public static IntVec3 FindHideyHoleSpot(ThingDef holeDef, Rot4 rot, IntVec3 cent cellRect.ClipInsideMap(map); IntVec3 randomCell = cellRect.RandomCell; if (!CellFinder.TryFindRandomCellNear(center, map, 8, (IntVec3 c) => c.Standable(map) && - (GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map).Accepted) && + GenConstruct.CanPlaceBlueprintAt(holeDef, c, rot, map).Accepted && (map?.reachability?.CanReach(c, randomCell, PathEndMode.Touch, TraverseParms.For(TraverseMode.PassDoors)) ?? false), out randomCell)) { //Log.Error("Found no place to build hideyhole for burning vampire."); @@ -255,9 +255,9 @@ public static bool CanSurviveTimeInSunlight(IntVec3 dest, Pawn pawn) int sunExpTicks = 0; if (pawn?.health?.hediffSet?.GetFirstHediffOfDef(VampDefOf.ROMV_SunExposure) is HediffWithComps_SunlightExposure sunExp) { - sunExpTicks = (int)((TicksOfSurvivingSunlight * 0.75f) * sunExp.CurStageIndex); + sunExpTicks = (int)(TicksOfSurvivingSunlight * 0.75f * sunExp.CurStageIndex); } - int ticksToArrive = (cellsInSunlight * pawn.TicksPerMoveDiagonal) + sunExpTicks; + int ticksToArrive = cellsInSunlight * pawn.TicksPerMoveDiagonal + sunExpTicks; if (ticksToArrive > TicksOfSurvivingSunlight) { return false; @@ -281,7 +281,7 @@ public static bool CanArriveBeforeSunlight(this IntVec3 targ, Pawn pawn, float l int ticksUntilArrival = distanceToPoint * ticksPerMove; int ticksLeeway = (int)(ticksUntilArrival * leewayFactor); - if ((ticksUntilArrival + ticksLeeway) <= ticksUntilDaylight) + if (ticksUntilArrival + ticksLeeway <= ticksUntilDaylight) { return true; } diff --git a/Source/Vampires/Utilities/VampireGen.cs b/Source/Vampires/Utilities/VampireGen.cs index d271eb9..678cc04 100644 --- a/Source/Vampires/Utilities/VampireGen.cs +++ b/Source/Vampires/Utilities/VampireGen.cs @@ -78,12 +78,12 @@ public static bool TryGiveVampireAdditionalHediffs(Pawn pawn) public static Pawn GenerateVampire(int generation, BloodlineDef bloodline, Pawn sire, Faction vampFaction = null, bool firstVampire = false) { //Lower generation vampires are impossibly old. - float? math = (sire != null) ? sire.ageTracker.AgeChronologicalYearsFloat + new FloatRange(100, 300).RandomInRange : - (generation > 4) ? Mathf.Clamp(2000 - (generation * Rand.Range(20, 200)), 16, 2000) : - 100000 - (generation * Rand.Range(10000, 50000)); + float? math = sire != null ? sire.ageTracker.AgeChronologicalYearsFloat + new FloatRange(100, 300).RandomInRange : + generation > 4 ? Mathf.Clamp(2000 - generation * Rand.Range(20, 200), 16, 2000) : + 100000 - generation * Rand.Range(10000, 50000); - Faction faction = (vampFaction != null) ? vampFaction : - (generation < 7) ? Find.FactionManager.FirstFactionOfDef(VampDefOf.ROMV_LegendaryVampires) : VampireUtility.RandVampFaction; + Faction faction = vampFaction != null ? vampFaction : + generation < 7 ? Find.FactionManager.FirstFactionOfDef(VampDefOf.ROMV_LegendaryVampires) : VampireUtility.RandVampFaction; PawnGenerationRequest request = new PawnGenerationRequest( PawnKindDefOf.SpaceRefugee, Faction.OfSpacer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 20f, false, true, diff --git a/Source/Vampires/Utilities/VampireUtility.cs b/Source/Vampires/Utilities/VampireUtility.cs index 0a0645d..07b3df9 100644 --- a/Source/Vampires/Utilities/VampireUtility.cs +++ b/Source/Vampires/Utilities/VampireUtility.cs @@ -35,8 +35,7 @@ public static bool IsDaylight(Pawn p) public static void SummonEffect(IntVec3 loc, Map map, Thing summoner, float size) { - GenExplosion.DoExplosion(loc, map, size, DamageDefOf.EMP, summoner, -1, DamageDefOf.Stun.soundExplosion); - + ExplosionUtility.DoExplosion(loc, map, size, DamageDefOf.EMP, summoner, -1, DamageDefOf.Stun.soundExplosion); } //=> (GenLocalDate.HourInteger(p) >= 6 && GenLocalDate.HourInteger(p) <= 17) && !Find.World.GameConditionManager.ConditionIsActive(GameConditionDefOf.Eclipse); diff --git a/Source/Vampires/Vampire.csproj b/Source/Vampires/Vampire.csproj index 9ce6051..945bd26 100644 --- a/Source/Vampires/Vampire.csproj +++ b/Source/Vampires/Vampire.csproj @@ -140,6 +140,7 @@ + @@ -159,6 +160,7 @@ + diff --git a/Source/Vampires/VampireCorpse.cs b/Source/Vampires/VampireCorpse.cs index b7f338f..bc3e4d8 100644 --- a/Source/Vampires/VampireCorpse.cs +++ b/Source/Vampires/VampireCorpse.cs @@ -111,7 +111,7 @@ public override string Label { if (Diableried) return "ROMV_SoullessHuskOf".Translate(base.Label); - return (burnedToAshes) ? "ROMV_AshesOf".Translate(base.Label) : base.Label; + return burnedToAshes ? "ROMV_AshesOf".Translate(base.Label) : base.Label; } } diff --git a/Source/Vampires/Workers/EmbraceWorker.cs b/Source/Vampires/Workers/EmbraceWorker.cs index 63b35de..e048839 100644 --- a/Source/Vampires/Workers/EmbraceWorker.cs +++ b/Source/Vampires/Workers/EmbraceWorker.cs @@ -30,7 +30,7 @@ public void RemoveColonistDiedThoughts(Pawn vampToBe, bool wasColonist) { MemoryThoughtHandler memories = thoughtHaver.needs.mood.thoughts.memories; //Log.Message("Memory Cleaner"); - if (memories.Memories.FindAll(x => x.otherPawn == vampToBe && (x.def.defName.Contains("Died")) || x.def.defName.Contains("Death")) is List mems && mems.NullOrEmpty()) + if (memories.Memories.FindAll(x => x.otherPawn == vampToBe && x.def.defName.Contains("Died") || x.def.defName.Contains("Death")) is List mems && !mems.NullOrEmpty()) { foreach (Thought_Memory mem in mems) { diff --git a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs index b0cd7bf..72d3c23 100644 --- a/Source/Vampires/Workers/PawnRelationWorker_Childe.cs +++ b/Source/Vampires/Workers/PawnRelationWorker_Childe.cs @@ -10,7 +10,7 @@ public override bool InRelation(Pawn me, Pawn other) if (me.IsVampire() && other.IsVampire()) { CompVampire compVamp = other.GetComp(); - return me != other && (other.GetSire() == me); + return me != other && other.GetSire() == me; } return false; } diff --git a/Source/Vampires/WorldComponent_VampireTracker.cs b/Source/Vampires/WorldComponent_VampireTracker.cs index 47d510b..0a412b7 100644 --- a/Source/Vampires/WorldComponent_VampireTracker.cs +++ b/Source/Vampires/WorldComponent_VampireTracker.cs @@ -24,7 +24,7 @@ public Pawn GetLaterGenerationVampire(Pawn childe, BloodlineDef bloodline, int i { if (idealGenerationOfChilde == -1) { - idealGenerationOfChilde = (childe?.VampComp()?.Generation == -1)? Rand.Range(10,13) : childe?.VampComp()?.Generation ?? Rand.Range(10, 13); + idealGenerationOfChilde = childe?.VampComp()?.Generation == -1? Rand.Range(10,13) : childe?.VampComp()?.Generation ?? Rand.Range(10, 13); } if (!ActiveVampires.NullOrEmpty() && ActiveVampires?.FindAll(x => x.VampComp() is CompVampire v && From bc6fdd9fcfd8b445c85776213299ea2481db3423 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 09:59:07 +0000 Subject: [PATCH 07/18] Fix missing localization --- Languages/English/Keyed/EngROMV.xml | 4 +++- .../Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Languages/English/Keyed/EngROMV.xml b/Languages/English/Keyed/EngROMV.xml index 43f946d..8400f33 100644 --- a/Languages/English/Keyed/EngROMV.xml +++ b/Languages/English/Keyed/EngROMV.xml @@ -82,7 +82,7 @@ Starving vampire -There are starving. If they do not feed quickly, they may awaken their inner beast.\n\nThese are the starving vampires:\n {0}\n\nTip! Right click coffins to make a vamprie enter a torpor state, preventing them from turning into the beast. +There are starving vampires in your colony. If they do not feed quickly, they may awaken their inner beast.\n\nThese are the starving vampires:\n {0}\n\nTip! Right click coffins to make a vamprie enter a torpor state, preventing them from turning into the beast. Vampire in sunlight There are vampires in direct sunlight. Be sure to move them quickly under a roof before the sun burns them into ashes.\n\nThese are the vampires out in sunlight:\n {0} @@ -135,4 +135,6 @@ {0} will be (a) {1} generation {2} vampire(s){3}. +{0}'s {1} has been regenerated. + diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs index 031bf27..bbf7f26 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs @@ -18,7 +18,7 @@ public override void Effect(Pawn target) Hediff_MissingPart partToRestore = missingParts.RandomElement(); target.health.RestorePart(partToRestore.Part); - Messages.Message("ROM_WerewolfLimbRegen".Translate(new object[] { + Messages.Message("ROMV_LimbRegen".Translate(new object[] { target.LabelShort, partToRestore.Label }), MessageTypeDefOf.PositiveEvent); From f03522c0d6d4566042cc94d17fadc7397c3bb5b5 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 10:10:36 +0000 Subject: [PATCH 08/18] Fix Missing Master on Blood Mist --- .../Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs index dbbfa10..87d6192 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs @@ -12,6 +12,7 @@ public virtual void Effect() if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BloodMistKind, Faction.OfPlayer); + p.Master = CasterPawn; GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } From 4d63978c3c1689276498f5a90be33d3e04eed5c1 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 11:38:56 +0000 Subject: [PATCH 09/18] Fix Abyssal Arm and Blood Mist - Both for CE and without it. --- Assemblies/Vampire.dll | Bin 244736 -> 245760 bytes Defs/PawnKindDefs_Races/AbyssalArm.xml | 270 ++++++++--------- Defs/PawnKindDefs_Races/BloodMist.xml | 284 +++++++++--------- Patches/ROMV_pBite.xml | 30 ++ Patches/ROMV_pCombatEx.xml | 75 ++++- Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 7 +- .../AI_Jobs/JobDriver_FeedAndDestroy.cs | 18 +- .../Disciplines/Animalism/PawnTemporary.cs | 24 +- .../Blood/DisciplineEffect_StemTheTide.cs | 7 + .../Vampires/HarmonyPatches/HarmonyPatches.cs | 19 +- 10 files changed, 434 insertions(+), 300 deletions(-) create mode 100644 Patches/ROMV_pBite.xml diff --git a/Assemblies/Vampire.dll b/Assemblies/Vampire.dll index ff2463289e7a165bf871feb4ed447c702ba30367..1333c0a22afbe74db29fd83dc4511f868fad2948 100644 GIT binary patch literal 245760 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

    Cx($mqPh=S0!$9(V+Ee5gc4W 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 ID?;Eu12$O47XSbN diff --git a/Defs/PawnKindDefs_Races/AbyssalArm.xml b/Defs/PawnKindDefs_Races/AbyssalArm.xml index 4234221..b81ec9a 100644 --- a/Defs/PawnKindDefs_Races/AbyssalArm.xml +++ b/Defs/PawnKindDefs_Races/AbyssalArm.xml @@ -1,147 +1,149 @@  - - ROMV_AbyssalArmRace - - A massive dark tentacle reaching out from the abyss. - Vampire.PawnTemporary - - 3.0 - GrizzlyBear - GrizzlyBear - - + + ROMV_AbyssalArmRace + + A massive dark tentacle reaching out from the abyss. + Vampire.PawnTemporary + + 3.0 + GrizzlyBear + GrizzlyBear + + - - 175 - false - false - 0.0 - + + 175 + false + false + 0.0 + - - ROMV_AbyssalArmKind - - abyssal arms - ROMV_AbyssalArmRace - -

  • - - Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm - 2.0 - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1 - -
  • -
  • - - Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm - 2.5 - - (0.25, 0.3, 0.25) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.5 - -
  • -
  • - - Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm - 3.0 - - (0.3, 0.4, 0.3) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.95 - -
  • - - + + ROMV_AbyssalArmKind + + abyssal arms + ROMV_AbyssalArmRace + +
  • + + Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm + 2.0 + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1 + +
  • +
  • + + Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm + 2.5 + + (0.25, 0.3, 0.25) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.5 + +
  • +
  • + + Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm + 3.0 + + (0.3, 0.4, 0.3) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.95 + +
  • +
    +
    - + - - - 0.55 - -50 - 0 - - -
  • - Verb_MeleeAttack - 1.0 - 9 - Scratch - HeadAttackTool - - -
  • - Stun - 20 -
  • - - - -
    - - ROMV_TemporaryPawnAI - ROMV_TemporaryPawnAI_Constant - Snake - true - 0 - 2.0 - 0.0001 - 1.0 - CarnivoreAnimal - 1.0 - 22.5 - 1 - Advanced - 1.0 - 120 - 1 - 0.018 - - -
  • (0.5, 0)
  • -
  • (1, 1)
  • -
  • (2, 1.7)
  • -
  • (3, 0.7)
  • -
  • (3.5, 0)
  • -
    -
    - 12 - -
  • - AnimalBaby - 0 -
  • -
  • - AnimalJuvenile - 0.2 -
  • -
  • - AnimalAdult - 0.45 -
  • -
    - Pawn_Melee_SmallScratch_HitPawn - Pawn_Melee_SmallScratch_HitBuilding - Pawn_Melee_SmallScratch_Miss -
    -
    + + + 0.55 + -50 + 0 + + +
  • + + +
  • Blunt
  • + + 1.0 + 9 + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + +
    + + ROMV_TemporaryPawnAI + ROMV_TemporaryPawnAI_Constant + Snake + true + 0 + 2.0 + 0.0001 + 1.0 + CarnivoreAnimal + 1.0 + 22.5 + 1 + Advanced + 1.0 + 120 + 1 + 0.018 + + +
  • (0.5, 0)
  • +
  • (1, 1)
  • +
  • (2, 1.7)
  • +
  • (3, 0.7)
  • +
  • (3.5, 0)
  • +
    +
    + 12 + +
  • + AnimalBaby + 0 +
  • +
  • + AnimalJuvenile + 0.2 +
  • +
  • + AnimalAdult + 0.45 +
  • +
    + Pawn_Melee_SmallScratch_HitPawn + Pawn_Melee_SmallScratch_HitBuilding + Pawn_Melee_SmallScratch_Miss +
    +
    diff --git a/Defs/PawnKindDefs_Races/BloodMist.xml b/Defs/PawnKindDefs_Races/BloodMist.xml index d31a3e0..bb4ff67 100644 --- a/Defs/PawnKindDefs_Races/BloodMist.xml +++ b/Defs/PawnKindDefs_Races/BloodMist.xml @@ -1,154 +1,156 @@  - - ROMV_BloodMistRace - Vampire.PawnTemporary - - Throbbing blood entity that flows through the air like shadow. - - 1.0 - GrizzlyBear - GrizzlyBear - - + + ROMV_BloodMistRace + Vampire.PawnTemporary + + Throbbing blood entity that flows through the air like shadow. + + 1.0 + GrizzlyBear + GrizzlyBear + + - - 175 - false - - false - 0.0 - + + 175 + false + false + 0.0 + - - ROMV_BloodMistKind - - BloodMists - ROMV_BloodMistRace - -
  • - - Things/Pawn/Animal/BloodMist/BloodMist - 3.5 - TransparentPostLight - RGBA(1.0, 1.0, 1.0, 0.27) - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1 - -
  • -
  • - - Things/Pawn/Animal/BloodMist/BloodMist - 3.0 - TransparentPostLight - RGBA(1.0, 1.0, 1.0, 0.27) - - (0.25, 0.3, 0.25) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.5 - -
  • -
  • - - Things/Pawn/Animal/BloodMist/BloodMist - 3.0 - TransparentPostLight - RGBA(1.0, 1.0, 1.0, 0.27) - - (0.3, 0.4, 0.3) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.95 - -
  • -
    -
    + + ROMV_BloodMistKind + + BloodMists + ROMV_BloodMistRace + +
  • + + Things/Pawn/Animal/BloodMist/BloodMist + 3.5 + TransparentPostLight + RGBA(1.0, 1.0, 1.0, 0.27) + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1 + +
  • +
  • + + Things/Pawn/Animal/BloodMist/BloodMist + 3.0 + TransparentPostLight + RGBA(1.0, 1.0, 1.0, 0.27) + + (0.25, 0.3, 0.25) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.5 + +
  • +
  • + + Things/Pawn/Animal/BloodMist/BloodMist + 3.0 + TransparentPostLight + RGBA(1.0, 1.0, 1.0, 0.27) + + (0.3, 0.4, 0.3) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.95 + +
  • +
    +
    - - - - 2.55 - -50 - 0 - - -
  • - Verb_MeleeAttack - 1.0 - 9 - Scratch - HeadAttackTool - - -
  • - Stun - 20 -
  • - - - -
    - - ROMV_TemporaryPawnAI - ROMV_TemporaryPawnAI_Constant - Snake - true - 0 - 2.0 - 0.0001 - 1.0 - CarnivoreAnimal - 1.0 - 22.5 - 1 - Advanced - 1.0 - 120 - 1 - 0.018 - - -
  • (0.5, 0)
  • -
  • (1, 1)
  • -
  • (2, 1.7)
  • -
  • (3, 0.7)
  • -
  • (3.5, 0)
  • -
    -
    - 12 - -
  • - AnimalBaby - 0 -
  • -
  • - AnimalJuvenile - 0.2 -
  • -
  • - AnimalAdult - 0.45 -
  • -
    - Pawn_Melee_SmallScratch_HitPawn - Pawn_Melee_SmallScratch_HitBuilding - Pawn_Melee_SmallScratch_Miss -
    -
    + + + + + 2.55 + -50 + 0 + + +
  • + + 1.0 + 9 + +
  • Scratch
  • + + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + +
    + + ROMV_TemporaryPawnAI + ROMV_TemporaryPawnAI_Constant + Snake + true + 0 + 2.0 + 0.0001 + 1.0 + CarnivoreAnimal + 1.0 + 22.5 + 1 + Advanced + 1.0 + 120 + 1 + 0.018 + + +
  • (0.5, 0)
  • +
  • (1, 1)
  • +
  • (2, 1.7)
  • +
  • (3, 0.7)
  • +
  • (3.5, 0)
  • +
    +
    + 12 + +
  • + AnimalBaby + 0 +
  • +
  • + AnimalJuvenile + 0.2 +
  • +
  • + AnimalAdult + 0.45 +
  • +
    + Pawn_Melee_SmallScratch_HitPawn + Pawn_Melee_SmallScratch_HitBuilding + Pawn_Melee_SmallScratch_Miss +
    +
    diff --git a/Patches/ROMV_pBite.xml b/Patches/ROMV_pBite.xml new file mode 100644 index 0000000..54c1b03 --- /dev/null +++ b/Patches/ROMV_pBite.xml @@ -0,0 +1,30 @@ + + + + + + + Always + +
  • + */ThingDef[defName='Human']/tools +
  • +
  • + */ThingDef[defName='Human']/tools + Append + +
  • + +
  • Bite
  • + + 3 + 1.65 + Teeth + + + +
    +
    +
    \ No newline at end of file diff --git a/Patches/ROMV_pCombatEx.xml b/Patches/ROMV_pCombatEx.xml index 83fc032..5d5f5c0 100644 --- a/Patches/ROMV_pCombatEx.xml +++ b/Patches/ROMV_pCombatEx.xml @@ -3,7 +3,7 @@ Help: XPath Syntax: https://www.w3schools.com/xml/xpath_syntax.asp --> - + Always @@ -31,6 +31,7 @@ Help: XPath Syntax: https://www.w3schools.com/xml/xpath_syntax.asp + Always @@ -57,4 +58,76 @@ Help: XPath Syntax: https://www.w3schools.com/xml/xpath_syntax.asp + + + + Always + + +
  • + Combat Extended +
  • +
  • + */ThingDef[@Name="ROMV_ThingBaseAbyssalArm"]/tools + + +
  • + + +
  • Blunt
  • + + 1.0 + 9 + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + 0.2 + + + + +
    +
    + + + + Always + + +
  • + Combat Extended +
  • +
  • + */ThingDef[@Name="ROMV_ThingBaseBloodMist"]/tools + + +
  • + + 1.0 + 9 + +
  • Scratch
  • + + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + 0.5 + + + + +
    +
    diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index 4c8898f..264d6fa 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -18,11 +18,8 @@ public class JobDriver_Feed : JobDriver protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); protected Need_Blood BloodFeeder => GetActor().BloodNeed(); - - public override void Notify_Starting() - { - base.Notify_Starting(); - } + + public virtual void DoEffect() { diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index d605588..981861f 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -20,7 +20,7 @@ protected Pawn Victim { if (job.targetA.Thing is Pawn p) return p; if (job.targetA.Thing is Corpse c) return c.InnerPawn; - else return null; + return null; } } protected Pawn Master @@ -29,7 +29,7 @@ protected Pawn Master { if (job.targetB.Thing is Pawn p) return p; if (job.targetB.Thing is Corpse c) return c.InnerPawn; - else return null; + return null; } } protected CompVampire CompVictim => Victim.GetComp(); @@ -37,11 +37,6 @@ protected Pawn Master protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; - public override void Notify_Starting() - { - base.Notify_Starting(); - } - private void DoEffect() { BloodVictim.TransferBloodTo(1, Master.BloodNeed()); @@ -57,14 +52,12 @@ private void DoEffect() } } - public override string GetReport() - { - return base.GetReport(); - } - [DebuggerHidden] protected override IEnumerable MakeNewToils() { + Log.Message("Making FeedAndDestroy Toils!"); + Log.Message("Victim is: " + Victim); + Log.Message("Master is: " + Master); //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { @@ -73,6 +66,7 @@ protected override IEnumerable MakeNewToils() this.FailOnAggroMentalState(TargetIndex.A); foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { + Log.Message("Returning " + t); yield return t; } yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index 0ac70ce..6ac2871 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -41,12 +41,14 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); + jobs.StopAll(); jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); + jobs.StopAll(); jobs.TryTakeOrderedJob(newJob); } } @@ -59,17 +61,22 @@ public override void Tick() } if (Master != null) { + Log.Message("Attempting to start FeedAndDestroy"); if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x.Faction.HostileTo(Master.Faction) && this.CanReserve(x)) is Pawn target) { + Log.Message("Starting FeedAndDestroy on " + target + " - hostile"); Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - jobs.TryTakeOrderedJob(newJob); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { + Log.Message("Starting FeedAndDestroy on " + tTwo + " - friendly"); Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - jobs.TryTakeOrderedJob(newJob); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } } } @@ -90,19 +97,23 @@ public override void Tick() if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x.Faction.HostileTo(Master.Faction) && this.CanReserve(x)) is Pawn target) { + Log.Message("Starting FeedAndDestroy on " + target + " - hostile"); Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - jobs.TryTakeOrderedJob(newJob); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { + Log.Message("Starting FeedAndDestroy on " + tTwo + " - friendly"); Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - jobs.TryTakeOrderedJob(newJob); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } } } - if (def == VampDefOf.ROMV_BloodMistRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndDestroy) + /*if (def == VampDefOf.ROMV_BloodMistRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndDestroy) { if (Master == null) { @@ -123,7 +134,8 @@ public override void Tick() jobs.TryTakeOrderedJob(newJob); } } - } + }*/ + //The above should no longer be needed as the action cannot be interrupted. } ticksLeft--; diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs index 6408de7..839ea93 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Verse; namespace Vampire @@ -8,6 +9,12 @@ public class DisciplineEffect_StemTheTide : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { Log.Message("1"); + + foreach (var hediffInjury in target.health.hediffSet.GetInjuriesTendable()) + { + Log.Message(hediffInjury.ToString()); + } + if (target.health.hediffSet.GetInjuriesTendable() is List injuries && !injuries.NullOrEmpty()) { diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index 30a5ad7..dad7a4c 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -267,9 +267,13 @@ static HarmonyPatches() harmony.Patch(AccessTools.Method(typeof(Pawn_GuestTracker), "get_CanBeBroughtFood"), null, new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood))); - //Vampires should not be given food by wardens. + //Vampires should not get cabin fever. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_CabinFever), "CurrentStateInternal"), null, new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever))); + + //Blood Mists should not attack, but drain their target. + harmony.Patch(AccessTools.Method(typeof(JobGiver_AIFightEnemy), "TryGiveJob"), null, + new HarmonyMethod(typeof(HarmonyPatches), nameof(BloodMist_NoAttack))); #region DubsBadHygiene { @@ -287,6 +291,19 @@ static HarmonyPatches() catch (TypeLoadException ex) { /*Log.Message(ex.ToString());*/ } } #endregion + + Log.Message("Vampires :: Harmony Patches Injected"); + } + + //Rimworld.JobGiver_AIFightEnemy + public static void BloodMist_NoAttack(Pawn pawn, ref Job __result) + { + if (pawn is PawnTemporary && pawn.def == VampDefOf.ROMV_BloodMistRace && __result != null && __result.def == JobDefOf.AttackMelee) + { + Log.Message("Cancelling melee attack"); + //Cancel any melee attacks + __result = null; + } } // RimWorld.ThoughtWorker_CabinFever From 44776a5e07f0c42a2c564e57c4b168c093347248 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 11:41:54 +0000 Subject: [PATCH 10/18] Remove Debug logging --- Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs | 4 ---- Source/Vampires/Disciplines/Animalism/PawnTemporary.cs | 7 +------ Source/Vampires/HarmonyPatches/HarmonyPatches.cs | 1 - 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index 981861f..494446c 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -55,9 +55,6 @@ private void DoEffect() [DebuggerHidden] protected override IEnumerable MakeNewToils() { - Log.Message("Making FeedAndDestroy Toils!"); - Log.Message("Victim is: " + Victim); - Log.Message("Master is: " + Master); //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { @@ -66,7 +63,6 @@ protected override IEnumerable MakeNewToils() this.FailOnAggroMentalState(TargetIndex.A); foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { - Log.Message("Returning " + t); yield return t; } yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index 6ac2871..744433d 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -57,15 +57,13 @@ public override void Tick() { if (Master == null) { - Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndDestroy job."); } if (Master != null) { - Log.Message("Attempting to start FeedAndDestroy"); if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x.Faction.HostileTo(Master.Faction) && this.CanReserve(x)) is Pawn target) { - Log.Message("Starting FeedAndDestroy on " + target + " - hostile"); Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); jobs.StartJob(newJob, JobCondition.InterruptForced); //jobs.TryTakeOrderedJob(newJob); @@ -73,7 +71,6 @@ public override void Tick() else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { - Log.Message("Starting FeedAndDestroy on " + tTwo + " - friendly"); Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); jobs.StartJob(newJob, JobCondition.InterruptForced); //jobs.TryTakeOrderedJob(newJob); @@ -97,7 +94,6 @@ public override void Tick() if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x.Faction.HostileTo(Master.Faction) && this.CanReserve(x)) is Pawn target) { - Log.Message("Starting FeedAndDestroy on " + target + " - hostile"); Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); jobs.StartJob(newJob, JobCondition.InterruptForced); //jobs.TryTakeOrderedJob(newJob); @@ -106,7 +102,6 @@ public override void Tick() x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { - Log.Message("Starting FeedAndDestroy on " + tTwo + " - friendly"); Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); jobs.StartJob(newJob, JobCondition.InterruptForced); //jobs.TryTakeOrderedJob(newJob); diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index dad7a4c..5797434 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -300,7 +300,6 @@ public static void BloodMist_NoAttack(Pawn pawn, ref Job __result) { if (pawn is PawnTemporary && pawn.def == VampDefOf.ROMV_BloodMistRace && __result != null && __result.def == JobDefOf.AttackMelee) { - Log.Message("Cancelling melee attack"); //Cancel any melee attacks __result = null; } From 269b8ff2a7e8e2390488e2c60a8e00adc1a20b4b Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 13:03:08 +0000 Subject: [PATCH 11/18] Fix Stem the Tide --- Assemblies/Vampire.dll | Bin 245760 -> 244736 bytes .../Blood/DisciplineEffect_StemTheTide.cs | 8 ++------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Assemblies/Vampire.dll b/Assemblies/Vampire.dll index 1333c0a22afbe74db29fd83dc4511f868fad2948..2a10509d2e4441098cfb86aa1d8747b7662946af 100644 GIT binary patch delta 115640 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 EZwU?39RL6T delta 116503 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 DJ+;@& diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs index 839ea93..4ecd4c0 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs @@ -10,14 +10,10 @@ public override void Effect(Pawn target) { Log.Message("1"); - foreach (var hediffInjury in target.health.hediffSet.GetInjuriesTendable()) - { - Log.Message(hediffInjury.ToString()); - } + List injuries = new List(target.health.hediffSet.GetInjuriesTendable()); - if (target.health.hediffSet.GetInjuriesTendable() is List injuries && !injuries.NullOrEmpty()) + if (!injuries.NullOrEmpty()) { - Log.Message("2"); foreach (Hediff_Injury injury in injuries) From dcee7b85b50f2052868bd4b086046bc27e1dfa84 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 13:03:29 +0000 Subject: [PATCH 12/18] Remove Debug logging --- .../Disciplines/Blood/DisciplineEffect_StemTheTide.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs index 4ecd4c0..0779adb 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs @@ -8,17 +8,12 @@ public class DisciplineEffect_StemTheTide : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { - Log.Message("1"); - List injuries = new List(target.health.hediffSet.GetInjuriesTendable()); if (!injuries.NullOrEmpty()) { - Log.Message("2"); - foreach (Hediff_Injury injury in injuries) { - Log.Message("3"); if (injury.Bleeding) injury.Heal(30); } From de89b29cf59718622c7a4bacb803a21a2363a680 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 13:08:33 +0000 Subject: [PATCH 13/18] Fix missing texture errors with CE --- Defs/PawnKindDefs_Races/WarForm.xml | 2 +- Defs/PawnKindDefs_Races/Zulo.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Defs/PawnKindDefs_Races/WarForm.xml b/Defs/PawnKindDefs_Races/WarForm.xml index 60d9a93..19668ed 100644 --- a/Defs/PawnKindDefs_Races/WarForm.xml +++ b/Defs/PawnKindDefs_Races/WarForm.xml @@ -53,7 +53,7 @@

  • - Things/Pawn/Animal/WarFormA/WarForm + Things/Pawn/Animal/WarForm/WarForm 3.95 (0.3, 0.4, 0.3) diff --git a/Defs/PawnKindDefs_Races/Zulo.xml b/Defs/PawnKindDefs_Races/Zulo.xml index c4b5201..97b2c63 100644 --- a/Defs/PawnKindDefs_Races/Zulo.xml +++ b/Defs/PawnKindDefs_Races/Zulo.xml @@ -53,7 +53,7 @@
  • - Things/Pawn/Animal/ZuloA/ZuloA + Things/Pawn/Animal/Zulo/Zulo 3.95 (0.3, 0.4, 0.3) From 4c69c95446fb4488c93483251b1b40941cfacf56 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 19 Dec 2017 13:09:36 +0000 Subject: [PATCH 14/18] Update .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index d6f2f95..a1ec728 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ [Oo]bj/ PublishedFileId.txt +.idea/ +*.DotSettings \ No newline at end of file From 05ec189ce8c3a55a36a17d5efd6548f33ccb5497 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 17 Dec 2017 16:00:36 +0000 Subject: [PATCH 15/18] Cleanup and fix dependency location. Moar Cleanup Revert "Moar Cleanup" This reverts commit 354a15baaf22e9f4fa61295f5c3657108d1ae373. Cleanup without screwing over everything this time. Wee bit more cleanup Mostly completed CE patches (i think) Fix missing localization Fix Missing Master on Blood Mist Fix Abyssal Arm and Blood Mist - Both for CE and without it. Remove Debug logging Fix Stem the Tide Remove Debug logging Fix missing texture errors with CE Update .gitignore --- .gitignore | 2 + Assemblies/Vampire.dll | Bin 243712 -> 244736 bytes Defs/AbilityDefs/ROMV_Protean.xml | 396 ++++++++---------- Defs/HediffDefs/ROMV_VampireParts.xml | 101 +++-- Defs/PawnKindDefs_Races/AbyssalArm.xml | 270 ++++++------ Defs/PawnKindDefs_Races/BloodMist.xml | 284 ++++++------- Defs/PawnKindDefs_Races/WarForm.xml | 2 +- Defs/PawnKindDefs_Races/Zulo.xml | 2 +- Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml | 48 +-- Languages/English/Keyed/EngROMV.xml | 4 +- Patches/ROMV_pBite.xml | 30 ++ Patches/ROMV_pCombatEx.xml | 133 ++++++ Source/Dependencies/0Harmony.dll | Bin 0 -> 65536 bytes Source/Dependencies/0JecsTools.dll | Bin 0 -> 78336 bytes Source/Dependencies/AbilityUser.dll | Bin 0 -> 70144 bytes Source/Dependencies/BadHygiene.dll | Bin 0 -> 127488 bytes Source/Dependencies/CompAnimated.dll | Bin 0 -> 8192 bytes .../Vampires/AI_Jobs/JobDriver_BloodVomit.cs | 20 +- .../AI_Jobs/JobDriver_ConsumeBlood.cs | 118 +++--- .../Vampires/AI_Jobs/JobDriver_Diablerie.cs | 22 +- .../Vampires/AI_Jobs/JobDriver_DigAndHide.cs | 29 +- Source/Vampires/AI_Jobs/JobDriver_Embrace.cs | 20 +- .../Vampires/AI_Jobs/JobDriver_EnterTorpor.cs | 9 +- Source/Vampires/AI_Jobs/JobDriver_Feed.cs | 51 +-- .../AI_Jobs/JobDriver_FeedAndDestroy.cs | 36 +- .../AI_Jobs/JobDriver_FeedAndReturn.cs | 20 +- Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs | 27 +- .../AI_Jobs/JobDriver_MakeBloodBond.cs | 17 +- Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs | 2 - .../JobGiver_SeekShelterFromSunlight.cs | 6 +- .../Vampires/AI_Jobs/JobGiver_VampireBeast.cs | 34 +- .../AI_Jobs/MentalState_Rotschreck.cs | 10 +- .../AI_Jobs/MentalState_VampireBeast.cs | 12 +- Source/Vampires/Buildings/Building_Coffin.cs | 8 +- .../Vampires/Buildings/Building_HideyHole.cs | 8 +- Source/Vampires/Buttons.cs | 15 +- Source/Vampires/Components/CompBloodItem.cs | 8 +- .../Components/CompProperties_BloodItem.cs | 8 +- .../Components/CompProperties_VampBed.cs | 8 +- Source/Vampires/Components/CompVampBed.cs | 38 +- Source/Vampires/Components/CompVampire.cs | 170 ++++---- Source/Vampires/Defs/BloodType.cs | 7 +- Source/Vampires/Defs/BloodlineDef.cs | 11 +- Source/Vampires/Defs/DisciplineDef.cs | 7 +- .../Vampires/Defs/ScenPart_GameStartNight.cs | 13 +- Source/Vampires/Defs/VampDefOf.cs | 6 +- Source/Vampires/Defs/VitaeAbilityDef.cs | 7 +- Source/Vampires/Discipline.cs | 21 +- .../Animalism/DisciplineEffect_Beckoning.cs | 12 +- .../Animalism/DisciplineEffect_Communion.cs | 14 +- .../DisciplineEffect_NightwispRavens.cs | 9 +- .../DisciplineEffect_SpectralWolf.cs | 12 +- .../HediffCompProperties_TickGraphic.cs | 5 +- .../Animalism/HediffComp_TickGraphic.cs | 23 +- .../Disciplines/Animalism/PawnTemporary.cs | 59 +-- .../DisciplineEffect_CrocodileTongue.cs | 7 +- .../DisciplineEffect_HeightenedSenses.cs | 7 +- .../Auspex/DisciplineEffect_ReadMind.cs | 12 +- .../DisciplineEffect_RevealIllusions.cs | 15 +- .../Blood/DisciplineEffect_Hunger.cs | 15 +- .../Blood/DisciplineEffect_Purge.cs | 6 +- .../Blood/DisciplineEffect_StemTheTide.cs | 14 +- .../Blood/DisciplineEffect_UnstoppableTide.cs | 11 +- .../Dominate/DisciplineEffect_Mesmerise.cs | 9 +- .../Dominate/DisciplineEffect_Possession.cs | 12 +- .../Dominate/DisciplineEffect_Sleep.cs | 7 +- .../Dominate/DisciplineEffect_Suicide.cs | 7 +- .../Flight/DisciplineEffect_LongFlight.cs | 12 +- .../Flight/DisciplineEffect_ShortFlight.cs | 11 +- .../Flight/DisciplineEffect_SkyFall.cs | 10 +- .../Flight/DisciplineEffect_WingBuffet.cs | 8 +- .../Fortitude/PassiveEffect_DamageSoak.cs | 9 +- .../DisciplineEffect_ArmOfTheAbyss.cs | 10 +- .../DisciplineEffect_BlackMetamorphosis.cs | 7 +- .../DisciplineEffect_EnterTheAbyss.cs | 19 +- .../DisciplineEffect_TenebrousForm.cs | 7 +- .../Protean/DisciplineEffect_BatForm.cs | 9 +- .../Protean/DisciplineEffect_FeralClaws.cs | 10 +- .../Protean/DisciplineEffect_MistForm.cs | 9 +- .../Protean/DisciplineEffect_WarForm.cs | 9 +- .../Thaumaturgy/DisciplineEffect_BloodBoil.cs | 7 +- .../DisciplineEffect_BloodSalvo.cs | 7 +- .../DisciplineEffect_BloodShield.cs | 7 +- .../DisciplineEffect_BloodStrike.cs | 7 +- .../Thaumaturgy/Projectile_BloodBoil.cs | 6 +- .../Thaumaturgy/Projectile_BloodReturner.cs | 6 +- .../Thaumaturgy/Projectile_BloodStealer.cs | 8 +- .../DisciplineEffect_RegenerateLimb.cs | 6 +- .../DisciplineEffect_VampiricHealing.cs | 7 +- .../Disciplines/Verb_UseAbilityPawnEffect.cs | 14 +- .../DisciplineEffect_CorruptForm.cs | 11 +- .../DisciplineEffect_PerfectForm.cs | 9 +- .../DisciplineEffect_ShapeMonstrosity.cs | 11 +- .../Vicissitude/DisciplineEffect_ZuloForm.cs | 9 +- Source/Vampires/FlyingObject.cs | 115 +++-- .../Vampires/HarmonyPatches/HarmonyPatches.cs | 167 ++++---- .../HarmonyPatches/HarmonyPatches_Caravan.cs | 6 +- .../HarmonyPatches_DebugTools.cs | 31 +- .../HarmonyPatches_PathFixes.cs | 9 +- .../HarmonyPatches/VampHumanlikeOrders.cs | 16 +- .../Hediffs/Gizmo_HediffShieldStatus.cs | 23 +- .../HediffCompProperties_AnimalForm.cs | 5 +- .../HediffCompProperties_Possession.cs | 5 +- .../HediffCompProperties_SkillOffset.cs | 3 +- .../Vampires/Hediffs/HediffComp_AnimalForm.cs | 24 +- .../Vampires/Hediffs/HediffComp_Possession.cs | 28 +- .../Vampires/Hediffs/HediffComp_ReadMind.cs | 6 +- Source/Vampires/Hediffs/HediffComp_Shield.cs | 134 +++--- .../Hediffs/HediffComp_SkillOffset.cs | 21 +- Source/Vampires/Hediffs/HediffVampirism.cs | 36 +- .../Hediffs/HediffVampirism_Gargoyle.cs | 7 +- .../Hediffs/HediffVampirism_Lasombre.cs | 7 +- .../Hediffs/HediffVampirism_Pijavica.cs | 7 +- .../Hediffs/HediffVampirism_Tremere.cs | 7 +- .../Hediffs/HediffVampirism_Tzimisce.cs | 7 +- .../Hediffs/HediffVampirism_VampGiver.cs | 25 +- .../Hediffs/HediffWithComps_BeastHunger.cs | 17 +- .../HediffWithComps_SunlightExposure.cs | 38 +- .../Hediffs/Hediff_AddedPart_Fangs.cs | 14 +- Source/Vampires/ITab_Pawn_NeedsCorpse.cs | 25 +- Source/Vampires/Need_Blood.cs | 148 ++++--- Source/Vampires/PatchOperationModLoaded.cs | 16 + Source/Vampires/Properties/AssemblyInfo.cs | 1 - Source/Vampires/ScenPart_LongerNights.cs | 17 +- Source/Vampires/ScenPart_StartingVampires.cs | 56 ++- Source/Vampires/SkillSheet.cs | 14 +- Source/Vampires/UI/Alert_VampireInSunlight.cs | 11 +- Source/Vampires/UI/Alert_VampireStarving.cs | 11 +- Source/Vampires/UI/VampireCardUtility.cs | 23 +- .../Utilities/BloodFeedModeUtility.cs | 23 +- Source/Vampires/Utilities/BloodItemUtility.cs | 7 +- .../Vampires/Utilities/BloodPreferabilty.cs | 7 +- Source/Vampires/Utilities/BloodTypeUtility.cs | 12 +- Source/Vampires/Utilities/BloodUtility.cs | 24 +- Source/Vampires/Utilities/ExplosionUtility.cs | 37 ++ .../Utilities/ResurrectedPawnUtility.cs | 20 +- .../Utilities/VampSunlightPathUtility.cs | 25 +- .../Vampires/Utilities/VampireBiteUtility.cs | 4 +- Source/Vampires/Utilities/VampireGen.cs | 20 +- .../Utilities/VampireGraphicUtility.cs | 3 - .../Utilities/VampireRelationUtility.cs | 3 - .../Vampires/Utilities/VampireSkinColors.cs | 20 +- .../Utilities/VampireThoughtUtility.cs | 13 +- Source/Vampires/Utilities/VampireUtility.cs | 11 +- .../Utilities/VampireWitnessUtility.cs | 18 +- Source/Vampires/VampAbility.cs | 10 +- Source/Vampires/Vampire.csproj | 12 +- Source/Vampires/VampireCorpse.cs | 65 ++- Source/Vampires/Workers/EmbraceWorker.cs | 6 +- .../Workers/PawnRelationWorker_Childe.cs | 5 +- .../Workers/PawnRelationWorker_Sire.cs | 3 +- .../Workers/Recipe_ExtractBloodPack.cs | 11 +- .../Workers/Recipe_ExtractBloodVial.cs | 15 +- .../Vampires/WorldComponent_VampireTracker.cs | 19 +- 154 files changed, 1839 insertions(+), 2175 deletions(-) create mode 100644 Patches/ROMV_pBite.xml create mode 100644 Patches/ROMV_pCombatEx.xml create mode 100644 Source/Dependencies/0Harmony.dll create mode 100644 Source/Dependencies/0JecsTools.dll create mode 100644 Source/Dependencies/AbilityUser.dll create mode 100644 Source/Dependencies/BadHygiene.dll create mode 100644 Source/Dependencies/CompAnimated.dll create mode 100644 Source/Vampires/PatchOperationModLoaded.cs create mode 100644 Source/Vampires/Utilities/ExplosionUtility.cs diff --git a/.gitignore b/.gitignore index d6f2f95..a1ec728 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ [Oo]bj/ PublishedFileId.txt +.idea/ +*.DotSettings \ No newline at end of file diff --git a/Assemblies/Vampire.dll b/Assemblies/Vampire.dll index 615754054e0689d4803683f03b035da9671f8878..2a10509d2e4441098cfb86aa1d8747b7662946af 100644 GIT binary patch literal 244736 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�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 diff --git a/Defs/AbilityDefs/ROMV_Protean.xml b/Defs/AbilityDefs/ROMV_Protean.xml index 6f848e0..70e3b6b 100644 --- a/Defs/AbilityDefs/ROMV_Protean.xml +++ b/Defs/AbilityDefs/ROMV_Protean.xml @@ -2,224 +2,194 @@ - - ROMV_Protean - - -
  • ROMV_Protean_BatForm
  • -
  • ROMV_Protean_FeralClaws
  • -
  • ROMV_Protean_MistForm
  • -
  • ROMV_Protean_WarForm
  • - - + + ROMV_Protean + + +
  • ROMV_Protean_BatForm
  • +
  • ROMV_Protean_FeralClaws
  • +
  • ROMV_Protean_MistForm
  • +
  • ROMV_Protean_WarForm
  • +
    +
    - - ROMV_Protean_BatForm - - 1 - UI/Icons/Commands/Protean_BatForm - Become one of the children of the night, and gain its ability to fly with great speed. - - Vampire.DisciplineEffect_BatForm - true - ROMV_DominateProjectile - ROMV_Protean_BatForm - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_BatFormHediff - - -
  • - ROMV_BatKind - - 3000 - 3000 - -
  • -
    -
    + + ROMV_Protean_BatForm + + 1 + UI/Icons/Commands/Protean_BatForm + Become one of the children of the night, and gain its ability to fly with great speed. + + Vampire.DisciplineEffect_BatForm + true + ROMV_DominateProjectile + ROMV_Protean_BatForm + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + + + + ROMV_BatFormHediff + + +
  • + ROMV_BatKind + + 3000 + 3000 + +
  • +
    +
    - - ROMV_Protean_FeralClaws - - 1 + + ROMV_Protean_FeralClaws + + 1 - UI/Icons/Commands/Protean_FeralClaws - The vampire’s nails grow into long, fearsome talons, capable of rending bone and flesh alike. - - Vampire.DisciplineEffect_FeralClaws - true - ROMV_DominateProjectile - ROMV_Protean_FeralClaws - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_FeralClaw - - -
  • - -
  • - - -
  • Blunt
  • - - 14 - 1.65 - - - -
  • - - 7500 - 7500 - -
  • -
    - - true - false - true - 1.0 - -
    + UI/Icons/Commands/Protean_FeralClaws + The vampire’s nails grow into long, fearsome talons, capable of rending bone and flesh alike. + + Vampire.DisciplineEffect_FeralClaws + true + ROMV_DominateProjectile + ROMV_Protean_FeralClaws + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + +
    - - ROMV_Protean_MistForm - - 2 - UI/Icons/Commands/Protean_MistForm - This power enables a Kindred to transform his entire body into a fine, chilling mist, both immune to damage and unable to give it. - - Vampire.DisciplineEffect_MistForm - true - ROMV_DominateProjectile - ROMV_Protean_MistForm - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_MistFormHediff - - -
  • - ROMV_MistKind - true - false - - 3000 - 3000 - -
  • -
    -
    + + ROMV_Protean_MistForm + + 2 + UI/Icons/Commands/Protean_MistForm + This power enables a Kindred to transform his entire body into a fine, chilling mist, both immune to damage and unable to give it. + + Vampire.DisciplineEffect_MistForm + true + ROMV_DominateProjectile + ROMV_Protean_MistForm + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + + + + ROMV_MistFormHediff + + +
  • + ROMV_MistKind + true + false + + 3000 + 3000 + +
  • +
    +
    - - ROMV_Protean_WarForm - - 3 - UI/Icons/Commands/Protean_WarForm - You assume a colossal visage suitable for fighting an enemy horde. - - Vampire.DisciplineEffect_WarForm - true - ROMV_DominateProjectile - ROMV_Protean_WarForm - false - 1 - 200.0 - 24 - 1 - 2 - ROMV_AbilityCastSound_Protean - 20 - false - TargetSelf - - false - false - false - true - - false - false - false - false - - - - ROMV_WarFormHediff - - -
  • - ROMV_WarFormKind - - 3000 - 3000 - -
  • -
    -
    + + ROMV_Protean_WarForm + + 3 + UI/Icons/Commands/Protean_WarForm + You assume a colossal visage suitable for fighting an enemy horde. + + Vampire.DisciplineEffect_WarForm + true + ROMV_DominateProjectile + ROMV_Protean_WarForm + false + 1 + 200.0 + 24 + 1 + 2 + ROMV_AbilityCastSound_Protean + 20 + false + TargetSelf + + false + false + false + true + + false + false + false + false + + + + ROMV_WarFormHediff + + +
  • + ROMV_WarFormKind + + 3000 + 3000 + +
  • +
    +
    diff --git a/Defs/HediffDefs/ROMV_VampireParts.xml b/Defs/HediffDefs/ROMV_VampireParts.xml index 62526e3..657b3ea 100644 --- a/Defs/HediffDefs/ROMV_VampireParts.xml +++ b/Defs/HediffDefs/ROMV_VampireParts.xml @@ -1,43 +1,74 @@ - + - - Hediff_AddedPart - (0.6, 0.5, 0.9) - + + Hediff_AddedPart + (0.6, 0.5, 0.9) + - - - JecsTools.Hediff_TransformedPart - (0.6, 0.5, 0.9) - false - + + JecsTools.Hediff_TransformedPart + (0.6, 0.5, 0.9) + false + - - ROMV_Fangs - - Vampire.Hediff_AddedPart_Fangs - - true - 1.2 - - false - -
  • - -
  • - - -
  • Bite
  • - - 9 - 1.65 - - - -
    -
    + + + ROMV_Fangs + + Vampire.Hediff_AddedPart_Fangs + + true + 1.2 + + false + +
  • + +
  • + + +
  • Bite
  • + + 9 + 1.65 + + + +
    +
    + + + ROMV_FeralClaw + + +
  • + +
  • + + +
  • Blunt
  • + + 14 + 1.65 + + + +
  • + + 7500 + 7500 + +
  • +
    + + true + false + true + 1.0 + +
    diff --git a/Defs/PawnKindDefs_Races/AbyssalArm.xml b/Defs/PawnKindDefs_Races/AbyssalArm.xml index 4234221..b81ec9a 100644 --- a/Defs/PawnKindDefs_Races/AbyssalArm.xml +++ b/Defs/PawnKindDefs_Races/AbyssalArm.xml @@ -1,147 +1,149 @@  - - ROMV_AbyssalArmRace - - A massive dark tentacle reaching out from the abyss. - Vampire.PawnTemporary - - 3.0 - GrizzlyBear - GrizzlyBear - - + + ROMV_AbyssalArmRace + + A massive dark tentacle reaching out from the abyss. + Vampire.PawnTemporary + + 3.0 + GrizzlyBear + GrizzlyBear + + - - 175 - false - false - 0.0 - + + 175 + false + false + 0.0 + - - ROMV_AbyssalArmKind - - abyssal arms - ROMV_AbyssalArmRace - -
  • - - Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm - 2.0 - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1 - -
  • -
  • - - Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm - 2.5 - - (0.25, 0.3, 0.25) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.5 - -
  • -
  • - - Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm - 3.0 - - (0.3, 0.4, 0.3) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.95 - -
  • -
    -
    + + ROMV_AbyssalArmKind + + abyssal arms + ROMV_AbyssalArmRace + +
  • + + Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm + 2.0 + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1 + +
  • +
  • + + Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm + 2.5 + + (0.25, 0.3, 0.25) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.5 + +
  • +
  • + + Things/Pawn/Animal/AbyssalArm/spoonshortage_AbyssalArm + 3.0 + + (0.3, 0.4, 0.3) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.95 + +
  • +
    +
    - + - - - 0.55 - -50 - 0 - - -
  • - Verb_MeleeAttack - 1.0 - 9 - Scratch - HeadAttackTool - - -
  • - Stun - 20 -
  • - - - -
    - - ROMV_TemporaryPawnAI - ROMV_TemporaryPawnAI_Constant - Snake - true - 0 - 2.0 - 0.0001 - 1.0 - CarnivoreAnimal - 1.0 - 22.5 - 1 - Advanced - 1.0 - 120 - 1 - 0.018 - - -
  • (0.5, 0)
  • -
  • (1, 1)
  • -
  • (2, 1.7)
  • -
  • (3, 0.7)
  • -
  • (3.5, 0)
  • -
    -
    - 12 - -
  • - AnimalBaby - 0 -
  • -
  • - AnimalJuvenile - 0.2 -
  • -
  • - AnimalAdult - 0.45 -
  • -
    - Pawn_Melee_SmallScratch_HitPawn - Pawn_Melee_SmallScratch_HitBuilding - Pawn_Melee_SmallScratch_Miss -
    -
    + + + 0.55 + -50 + 0 + + +
  • + + +
  • Blunt
  • + + 1.0 + 9 + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + +
    + + ROMV_TemporaryPawnAI + ROMV_TemporaryPawnAI_Constant + Snake + true + 0 + 2.0 + 0.0001 + 1.0 + CarnivoreAnimal + 1.0 + 22.5 + 1 + Advanced + 1.0 + 120 + 1 + 0.018 + + +
  • (0.5, 0)
  • +
  • (1, 1)
  • +
  • (2, 1.7)
  • +
  • (3, 0.7)
  • +
  • (3.5, 0)
  • +
    +
    + 12 + +
  • + AnimalBaby + 0 +
  • +
  • + AnimalJuvenile + 0.2 +
  • +
  • + AnimalAdult + 0.45 +
  • +
    + Pawn_Melee_SmallScratch_HitPawn + Pawn_Melee_SmallScratch_HitBuilding + Pawn_Melee_SmallScratch_Miss +
    +
    diff --git a/Defs/PawnKindDefs_Races/BloodMist.xml b/Defs/PawnKindDefs_Races/BloodMist.xml index d31a3e0..bb4ff67 100644 --- a/Defs/PawnKindDefs_Races/BloodMist.xml +++ b/Defs/PawnKindDefs_Races/BloodMist.xml @@ -1,154 +1,156 @@  - - ROMV_BloodMistRace - Vampire.PawnTemporary - - Throbbing blood entity that flows through the air like shadow. - - 1.0 - GrizzlyBear - GrizzlyBear - - + + ROMV_BloodMistRace + Vampire.PawnTemporary + + Throbbing blood entity that flows through the air like shadow. + + 1.0 + GrizzlyBear + GrizzlyBear + + - - 175 - false - - false - 0.0 - + + 175 + false + false + 0.0 + - - ROMV_BloodMistKind - - BloodMists - ROMV_BloodMistRace - -
  • - - Things/Pawn/Animal/BloodMist/BloodMist - 3.5 - TransparentPostLight - RGBA(1.0, 1.0, 1.0, 0.27) - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1 - -
  • -
  • - - Things/Pawn/Animal/BloodMist/BloodMist - 3.0 - TransparentPostLight - RGBA(1.0, 1.0, 1.0, 0.27) - - (0.25, 0.3, 0.25) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.5 - -
  • -
  • - - Things/Pawn/Animal/BloodMist/BloodMist - 3.0 - TransparentPostLight - RGBA(1.0, 1.0, 1.0, 0.27) - - (0.3, 0.4, 0.3) - (0,0,-0.15) - - - - Things/Pawn/Animal/Dessicated/CritterDessicatedMedium - 1.95 - -
  • -
    -
    + + ROMV_BloodMistKind + + BloodMists + ROMV_BloodMistRace + +
  • + + Things/Pawn/Animal/BloodMist/BloodMist + 3.5 + TransparentPostLight + RGBA(1.0, 1.0, 1.0, 0.27) + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1 + +
  • +
  • + + Things/Pawn/Animal/BloodMist/BloodMist + 3.0 + TransparentPostLight + RGBA(1.0, 1.0, 1.0, 0.27) + + (0.25, 0.3, 0.25) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.5 + +
  • +
  • + + Things/Pawn/Animal/BloodMist/BloodMist + 3.0 + TransparentPostLight + RGBA(1.0, 1.0, 1.0, 0.27) + + (0.3, 0.4, 0.3) + (0,0,-0.15) + + + + Things/Pawn/Animal/Dessicated/CritterDessicatedMedium + 1.95 + +
  • +
    +
    - - - - 2.55 - -50 - 0 - - -
  • - Verb_MeleeAttack - 1.0 - 9 - Scratch - HeadAttackTool - - -
  • - Stun - 20 -
  • - - - -
    - - ROMV_TemporaryPawnAI - ROMV_TemporaryPawnAI_Constant - Snake - true - 0 - 2.0 - 0.0001 - 1.0 - CarnivoreAnimal - 1.0 - 22.5 - 1 - Advanced - 1.0 - 120 - 1 - 0.018 - - -
  • (0.5, 0)
  • -
  • (1, 1)
  • -
  • (2, 1.7)
  • -
  • (3, 0.7)
  • -
  • (3.5, 0)
  • -
    -
    - 12 - -
  • - AnimalBaby - 0 -
  • -
  • - AnimalJuvenile - 0.2 -
  • -
  • - AnimalAdult - 0.45 -
  • -
    - Pawn_Melee_SmallScratch_HitPawn - Pawn_Melee_SmallScratch_HitBuilding - Pawn_Melee_SmallScratch_Miss -
    -
    + + + + + 2.55 + -50 + 0 + + +
  • + + 1.0 + 9 + +
  • Scratch
  • + + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + +
    + + ROMV_TemporaryPawnAI + ROMV_TemporaryPawnAI_Constant + Snake + true + 0 + 2.0 + 0.0001 + 1.0 + CarnivoreAnimal + 1.0 + 22.5 + 1 + Advanced + 1.0 + 120 + 1 + 0.018 + + +
  • (0.5, 0)
  • +
  • (1, 1)
  • +
  • (2, 1.7)
  • +
  • (3, 0.7)
  • +
  • (3.5, 0)
  • +
    +
    + 12 + +
  • + AnimalBaby + 0 +
  • +
  • + AnimalJuvenile + 0.2 +
  • +
  • + AnimalAdult + 0.45 +
  • +
    + Pawn_Melee_SmallScratch_HitPawn + Pawn_Melee_SmallScratch_HitBuilding + Pawn_Melee_SmallScratch_Miss +
    +
    diff --git a/Defs/PawnKindDefs_Races/WarForm.xml b/Defs/PawnKindDefs_Races/WarForm.xml index 60d9a93..19668ed 100644 --- a/Defs/PawnKindDefs_Races/WarForm.xml +++ b/Defs/PawnKindDefs_Races/WarForm.xml @@ -53,7 +53,7 @@
  • - Things/Pawn/Animal/WarFormA/WarForm + Things/Pawn/Animal/WarForm/WarForm 3.95 (0.3, 0.4, 0.3) diff --git a/Defs/PawnKindDefs_Races/Zulo.xml b/Defs/PawnKindDefs_Races/Zulo.xml index c4b5201..97b2c63 100644 --- a/Defs/PawnKindDefs_Races/Zulo.xml +++ b/Defs/PawnKindDefs_Races/Zulo.xml @@ -53,7 +53,7 @@
  • - Things/Pawn/Animal/ZuloA/ZuloA + Things/Pawn/Animal/Zulo/Zulo 3.95 (0.3, 0.4, 0.3) diff --git a/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml b/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml index 929c680..1f95dfc 100644 --- a/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml +++ b/Defs/ThinkTrees/ROMV_TemporaryPawnAI.xml @@ -1,39 +1,39 @@ - - ROMV_TemporaryPawnAI - - -
  • - Downed -
  • + + ROMV_TemporaryPawnAI + + +
  • + Downed +
  • -
  • - LordDuty -
  • +
  • + LordDuty +
  • -
  • - Idle - -
  • - Deadly -
  • -
    - +
  • + Idle + +
  • + Deadly +
  • + + -
  • - - - +
  • + + + - + ROMV_TemporaryPawnAI_Constant
  • - +
  • diff --git a/Languages/English/Keyed/EngROMV.xml b/Languages/English/Keyed/EngROMV.xml index 43f946d..8400f33 100644 --- a/Languages/English/Keyed/EngROMV.xml +++ b/Languages/English/Keyed/EngROMV.xml @@ -82,7 +82,7 @@ Starving vampire -There are starving. If they do not feed quickly, they may awaken their inner beast.\n\nThese are the starving vampires:\n {0}\n\nTip! Right click coffins to make a vamprie enter a torpor state, preventing them from turning into the beast. +There are starving vampires in your colony. If they do not feed quickly, they may awaken their inner beast.\n\nThese are the starving vampires:\n {0}\n\nTip! Right click coffins to make a vamprie enter a torpor state, preventing them from turning into the beast. Vampire in sunlight There are vampires in direct sunlight. Be sure to move them quickly under a roof before the sun burns them into ashes.\n\nThese are the vampires out in sunlight:\n {0} @@ -135,4 +135,6 @@ {0} will be (a) {1} generation {2} vampire(s){3}. +{0}'s {1} has been regenerated. + diff --git a/Patches/ROMV_pBite.xml b/Patches/ROMV_pBite.xml new file mode 100644 index 0000000..54c1b03 --- /dev/null +++ b/Patches/ROMV_pBite.xml @@ -0,0 +1,30 @@ + + + + + + + Always + +
  • + */ThingDef[defName='Human']/tools +
  • +
  • + */ThingDef[defName='Human']/tools + Append + +
  • + +
  • Bite
  • + + 3 + 1.65 + Teeth + + + +
    +
    +
    \ No newline at end of file diff --git a/Patches/ROMV_pCombatEx.xml b/Patches/ROMV_pCombatEx.xml new file mode 100644 index 0000000..5d5f5c0 --- /dev/null +++ b/Patches/ROMV_pCombatEx.xml @@ -0,0 +1,133 @@ + + + + + + Always + + + +
  • + Combat Extended +
  • +
  • + */HediffDef[defName="ROMV_Fangs"]/comps/li[@Class="HediffCompProperties_VerbGiver"]/tools + + +
  • + +
  • Bite
  • + + 9 + Teeth + 1.65 + 0.15 + + + + +
    +
    + + + + Always + + +
  • + Combat Extended +
  • +
  • + */HediffDef[defName="ROMV_FeralClaw"]/comps/li[@Class="HediffCompProperties_VerbGiver"]/tools + + +
  • + + +
  • Stab
  • + + 14 + Hands + 1.65 + 0.25 + + + + +
    +
    + + + + Always + + +
  • + Combat Extended +
  • +
  • + */ThingDef[@Name="ROMV_ThingBaseAbyssalArm"]/tools + + +
  • + + +
  • Blunt
  • + + 1.0 + 9 + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + 0.2 + + + + +
    +
    + + + + Always + + +
  • + Combat Extended +
  • +
  • + */ThingDef[@Name="ROMV_ThingBaseBloodMist"]/tools + + +
  • + + 1.0 + 9 + +
  • Scratch
  • + + HeadAttackTool + + +
  • + Stun + 20 +
  • +
    +
    + 0.5 + + + + +
    +
    +
    diff --git a/Source/Dependencies/0Harmony.dll b/Source/Dependencies/0Harmony.dll new file mode 100644 index 0000000000000000000000000000000000000000..a95b6df8aa6f4472d514a983bf1b9178a7283bd6 GIT binary patch literal 65536 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 #{m2@Ill<|% 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
    Tl+y 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 U0GYv2w*MD0*FXLHYe#|q3mf->X8-^I literal 0 HcmV?d00001 diff --git a/Source/Dependencies/0JecsTools.dll b/Source/Dependencies/0JecsTools.dll new file mode 100644 index 0000000000000000000000000000000000000000..2d1033cb0b599283cf09f7fd2001dbc4a91cdad5 GIT binary patch literal 78336 zcmd4437k~b@h@I?>D%ipJw4OivoA2io#~!o*k?dR3@R!rC?X&(AfkwJp$A26dK?r{ z6ciJKqPUA|68E?-D56BgB`9J5H5wy{CTi5EiR1rUb#Bk}0OptXd7uA#Z?w-nRi{p! zI(6#QS?}fWX{*Q}A``zKeVQdnyo;x&k$geOs<#C0V%BUpabaqT^faU$Ne{O4UsR0&Ifp04&1WvlyepW4%v_wX;N2L?kpM5C$*$H zQYQl;vOz|vXcEtyzx~l%EvZw^a6l-sLT1rH>mGCmZ&NS3v}2hCzw^Vbaq@5I9{;6bK~9Y63pes?&6rlWx}_CBv=gM$rJ-C>qq%OEO;d z@T*6FA2mPz_~ZGR{N88*M@utkWn``eOK3CFYET5_fO%Lqim1B;qG*;4wy>xs$YD}( zPrBJl;86rD=Ys$L<-lDe)&GA}4ryt~5zLX}|7d%N z0G>YO?}PS0`-I5|Sh1-GA}YNMB8n*`%Jnqcaxf9s)7*~1M1h`WMFtaAM;+|)JTL50 zr`gB=H2B22wSblEkB$PfGmE>mpf{OEdPhI*7mRXKLWvPZyjzQQYkB^pmlQKS4NK-s z5i@M|W@99>@gtNV9~zO%9ECE$@IT0|Oc1i0VuX-gSwU9zrUOVfY^cRDo&Ma(P#2S4 zM~zVw_jPnPb72*FS)hngubCjHplTVls1FL=&P=USD7O*OxuAzWRP~JVn!P1TKOKuc zgFI~8Y=7wn1UC9pU?FTv4_HQK2jOgUgDIcR3nw1NrZey=evo)d&Arba{V zmzgZiNOmYDh7>mB6y;0|aVd5SI5i)o+=?O2MWIIPY3@*lghK`?cVmdtQ3O@0UmDUo zhZL$2*^qI$TT5us+;RDgtSkkZJrD&Zr@J!Ptz7(JZt)7**DXsy1C<9$=BuaS4B{N6 z$_+7=JDI|w(1aGt7R}@IjVKrWA**LmU_fX1*UF@k}by~5t8**OR`{3-LkNT?aRC$$wZ6BNd1$n6E&=J^F=joD~@HLuyPy1U~O z_`!NTa}`*?M1*!cp8Th$R)T$I0Fv}r#^y&n)2JZOG7>g}iOo&u%o!LBW6wY2-7V;mFes3Juzs zLsjBf>Z5v^4fvM&Sn6H~cuRd;x6vJ~Tk1b|AEJQc$P@s|3E9Hwqk zWoj5F*&|Sn4PgS1B2ld96c48zSm_F)8}vBU7hKr~m+VE}tdW40bq|~3`E9nou_*y7 zN0NaN1z1v2dMav${HjFGuMv!f+mG|_ht#AI?=67S!JFV^v;3uNFdkmZmDPq@wUT+d zJk!UkB3wG1;P4177$$op>gs@1LTT99fo$16uja=Xzfg{-TY7kJKio5&jrc#Mv)SgR z!-eybC(B>DjE%{QGS(y9Vhwv=pk&?&BjkGSo{!7@$$XrclMiD=-}0d0?4&=-Tj^Hn ztYpG~{-0>1{QrSQI&vQxUD^w64S8Gzi}&X4$KG2t1pA%8LQj~KWaSQ6N~--K6uQL*eq z2nKGZo>5d7);J?(m}ct3J{i&FF|1m`3kJzl5L(TYz~0RWGsGYYs#w&988H=i&(t9* zBU+MCXk$!&6v~}EK`mzLOrYQMdXg39o2c&Vk%=2O%KZc}%d!Ii{`zXZXgflZ>aX7euM$`nW_gF%=D)}SwrMJwnSIDDm%VGj$UG&`!4 zrJff=xnJpr_bX7>ooF7?Do`tU&?8UhA&vhuT67Lg&DMPa947n|*IiGu^~I)U_yGu= z(u_^X@I&bkOCk(}tkG5}pzRho0G)?x3;GCp+kXxiI%M-Kl_9Yf5Oa%m>uQaKMVQLG z<6WjrV8~-?*j0A1piY)FnBEGOMc`g#!z9Rl;B#@Xy zVSk#F!+{+0SJ}f}S!hOr;b79D9q$TX&KmX)@u{j}{uT*^L!A5smm3bmrbGhafXmc1 z@km}cuX(jwZhDd{Onx{&8OcSuT@P$_E{GKD-NdpJmekRrjsIj~7YPNH;_S8Do?77= zUS+socgq_CyW>AJ4DCR$6F>L{V!OkFHsO=DNhs}IA$7!!cQW~*;Hh_{h|wz4{JIutP&L%@NL2xRtQBCK?jj-d1GI)M!x zn_%c>z0K9sM0%A{0k6;09KNi#Z_2cIKUa;0gZj(9l|h&d@_aqq@dYH|rTo?4?$TM^ z)|bF`z{Ue^7G^OV6ozxGu#mDae^Iizt7u-M^aBnqh3Awp@IYfiUZ_uX*lA!9OqlWP zI%w~E0vOiiPw$w*3SkxM9aA~V&8l~ROCZD2V1Jxds@L4OOe5tPN<@F~TRf|Bcf;9l zv2Mb6syTQXb6C@X`^Zkek*>@7s8Z>U(+vj>CriNTKvET_qrUY}2oqUCl)fC%G}cch zOxHuPP@+6L=jkb_+syMfZ-P~0Px5q3=r|#DJNi)E-Ht2f=^I;(Fpe5##|O|L_ZhU= zWEY*qo*-CdBhU&}_sVUTfRV^i97B9^|MIIe2Chu%nPeCL*c(*j1pZ0+cwCbV+q)0SqP@iZuHa#6sjt z&&Cr5gV|t#0u0D~D(50lorXyB8#@b%G})pkcjskjT=rKwbT{M#UViczWzr%%Ygv{$ z-a-hdGDRY2rjT+Zf*ShBl$WS0GDN0`i9z3N_JRd!;t!if%$@@&rUVESBF|fp$LJ%E zt5qe_5E?kMSEgnED>9vstEc~6nOv2h4&mn>7sxjJ?lQ8Cqs>@leb(>}dvAAvou%1* zou9MB7klD;BKQLM0mFt{%VtNKL73uGf24K%gA*)0b1iHMF6cTu$STQP!(c}T5;JQ! znwGHJ`U;qixu`>iht3}K*F9(ywdNr0@YX3o}{ZTgm=^a?VSeZkSqIW{cfec`Fl9-^G zdUc@VOvXVA0-(1BG8k90y_nB4bizm_fB&1jQrMH6ul9d&#MdLMK^KF2Txt^)jz35U#%ko!^l67!goK;OIFy|IXX-;;o zd9K5CJ|8j-5SgMGEFSwPPxM?}WzUDU;LCJqIfp6cs{%O#xq$$14Vrzr4d-TImLagAh&Zg6wOPN5N1rw#_yaB;wd5W z$EM`@6;ASF7KJmm=B++3;x)BQq!+pp#cVj+Km>b{%)>c{3sVUgIDNU6LrmP23o@xQ0iA z^@{NXzFM+|uwdEUfcC8X@1$aJgSVNZAz9secyl=^@d{sVecROf+BG1IQ#~ue{e?OP zF7ec4iIM`7G8-^0|gVMxR35OzY zcM0Y#W+D&a$lKah<`71!u0LFf z%NPgxXVE3z%5nHq551?%7Gt4Q3I?-?^sIJMpR?Y0n~lrB-nu-+{1Tp2e!g^+R9v2= zMo$a33IfY~E-Q({11S?yTcIM|hDQq^_gE%UO)`h2fdE`cKsRDBr7?C(2a!?LVi}dv zFJxVX1@9muJ|u22WA3x*E--YKAb_^H0eK;9@}#K8i@E;m=cudl?^0KEGZ<}Ic86@b zNS&=~u4(LE;S2gyc+Wbhy8;k&fU0^dGXip|xZyNQI~1#CDwals>9Maz^Jdpm+^J-G zs;90+X|7EPohkPPeC%J0ByKZE)8O!sl`Ll`aG_8GazlcsUY=E_vS{9cRQ}v2ZJ$v7 zoSCSxs48on&!Jq!-M)a$T5Qxc6O0`^U^Eo;h^B@Wv;Z27XXRW0X)mT5pF=18io3PD zB`2_wiV{cb_DsmfHHXXQ)^#wM0DK5dxN$> zw@Fo3?${6@V6{I1B+LooGR}bpE$lzA=%^rf?METFR~ArxySAeL8R(;fYTVplVF_uD z;L0Mgwp!~FNtSM1G&4H4+=$238E-z8q3HgFG(YUwqih!y@g^)PMo3|AQ#s~%zeP=8 zS$u~?HCnbct<)57QaGiz3%NB1BjBNstp=o0Un{jxNEyeTE+7q$#h6+i_3%X#2T8At z+F1Tc$DN1_Ql)B2T`nxR>1^0@LJfIsU{dC`_q`&(m2L!zlz?7%n`j4~yI1x9OmFz9)p9oz^0&Sp35oE6&3S1N&9~26p%TDo)C7d5Q0D1P`Cm(`2Nn zV-mh@HVxX$FbWL$(X-2?#*CbN$L^VrQOL)SpU$V+h4=1y%43wsa*~1|1siYcd(e zgxJcvM0Fk4g1SC61KN<2ciuYzd}9y1mf_Cp5%Ts%pdNjsoBIg#6v#mDfm`ef=m!Hu z)9l=n2ifb1Iwyga-HZ6H)9@V1y6u&&zS(Rj#^$2E9fS%9i%(Q>kApsA)d!LhV?ye^ ztWeI)C|9}ba;{8oie=w|B)M5Ik(vUiMgRXbxbu{b*F=2Ufr-O`P*K>U2G%wtgFIWO#E`I+{ta;Hdl7^^F$cqn^a?&c zjZ$h0@~TNnZze*)tcj6nICLljx5sjn5sUcSUWCvcKcW)6!qPL)BYIpQnt^)Z)VSu( z{a~;X4oQmyqmjHsWjGkd4I@qp=Q$4`(ZNzET`Ubt3^+pCdG@JNFT)sksGdAkVTP-?WCmJDk zm}VQse9#-qYnu#g$73ikVAzl20e=9WjW*>**q|{Up#C6lszwGVJTN;;f9Pkl;Mc znXrh?_7iTo_IJP-8t4Q^v%Wdj&Yr{?hBj4#3EB1Cr z;Uco>VLqGooEQm*!|lts5~>NDmyko5ZBaB5f!P*?BPuBzaW)}QwxezdM_{&*Y?9=H z*%pV3VYatJ@OU4yEfTZENT?L3W?y2koxcN1`(*?$g+zbyL`uRX$vE~XEc+t#71nb! z9K{qH$(U#7C5Y{H3>-JihDu-pr{j4(o&{VB{4st$eglEKF$d3Uoqqri4}tMC88n?& zP^>aDtms}v613pp83?xBj5tnbHUkK;V|)#fJUm~=Gh!Nk`wfo3IN1%Ug;(l()Z3rq zg>V|XgXivH(=Uw;N_IN^;huV3lHYj~oElX3_dCA_z^*duqA_Z30m{W2&Rd*rIByFX z1l)?q$fK2;!U_Ct!A=+uQJT-bK)$ z^FAk!((u@Kfet4(j7ZPm9)W^*76J!;JyQClIe$Rzyu_K9XJ8oRxri=~q1l^C#%O*b z6gC&{K!R-NL_AjZwoKSe?*!U;4*_q>skK2ojP1VCR4Z~~3lKD%)ioe^oq+Q`0-4l& zfJpPDYEo05s|O|aOo)x)NC7zx294JayY8t1)8+I6Zxl`vP38^z-MmbI{>^A+{D#JhWQyn7oeob~--pVVKm@6DIv_a*A80%K1C zve|z`5W%@hIGCN&9YyE8qT2p+tf1LA^o|cfC36wo{s>WOYCt=8p`D3mDfXX$6Vwu* z8u*^_$Be;5<|Jgt{((;5LnGOS^zAND1wIo}V^j?dI9SzT8IFKhhj`55N5@~mAv2q! z?yc%Tv?&n7US)tVK=a-g%Qy!FbpT23Rb!9I{uKG(7Q_q6{5Aaoq3HIl1s^5pCuF-YZu358RUE}nEeLGJB4K|qUU$9=o zrZ1O3Pk8t3JT;d9Gdx}oeE}KwVVU!-VjBR4JWO}6Jh~jFq4w0;;EtdS`%9z-^1b3- zf|v@z&0*e`zziL;Kl>{{_SXo!_BRMahB=jG-~YHg-QQc2-Z~Uw{(~LpX;KTrGtK7O z6?wW#jzuFBd2|aK)Bj|iTw!0>w7Cf5i8%%TMKI6y7ON^g+2K^ zaf{~r?SFF?462lqVE-V2{4*KWI!Ec53@bTnpuF!e5m^3HIu=DsFne~x=#Fl% z>BQtLU}Gv2=wjX0&7M7*8)WL}x>sKrzaPLo>9~=amZ4+Jm2$cDGiPwLICCaHYz^F` zZPcBMeU&}wz@AkI_mR6_l!k2kNje*pm1dT(ck~IYcg{jitv(3lV6HTVyv;^&qR5*z zz{p)^*e1vGSbe-xQ$+qw%*F!hoPG{2;#7MbESCcuEyg7wyw%lPj(blBHsqrR;kQRa zjtLo zsEPPVxJ)%Q#Itdkg)ijB;Q6+zL2hbSm?AFMMYADHo5PBDCP&ob;%G+%R8BF122yi* zR0s3e+_Et> z+PNZ5-U&Qhw*mgUT4V8iy8w2S^ z1kFXc7`(5J^?eMTbsR>E1fbI6@(c&JegifBDSn!!tN6vR@@X^tHSbkzNKBg%G3%Tn zV;?j}GYGk#@v#Nwu|Zq_+?{vU)&tCM_I?fyCsQ>`{nty4#{ZHCxeE)Kc137UDlgi^BfwX z<|_mpW02Iv7ShD~Jsvs{e8!6181`+@F0w%-BK9FV#DyU+j^`v?m0>tew4p1tS)NaZ zZrS$$Y`|W4DV8Uuhj(`@w^e~O)g?HTh4V28a3Gfzs}9%)K#;kCo>)+Keg;f>EP{~H z8_&ZF?K&pSn5$Ui^UR$R^5>g#r{oztK3GQjK+xAmcpqHKtO%Q(2LV;WYI{cSaYY9M zN0x7j*FOcTO?Jcgq2id-jYEPi4PBk*uFk9#nCataJ(k)o^Xs_JMU2K*2d z=Er=u0SK6sHPM)W<SoJZHp2jSi7^Fzmb0#{yQ+d!PwHJort=@8|fvgkKvLuo#Yy z(Bna;uS2rwbI6Pc&TUa2)@%4Cn{2xG5=h9We0E0GD?mj17@RSYI4j$mP2 z;J+>|5#KFWmYcFmgE}G3p`wrGAQoLENi4d&3A~NWqhx(^2zOYs$bHi%?15|S+}O8; zFafYSFkeIqaSFe|pXitYm`CWDcxJDhdI6sdSh;xF%jQ0E7-Z?FlXG)q_J%nQjpurn!Tqu4b!H*J zh}#Ruwlq3hATe%lB&UF0nU{%E;d+;ZvAc6Y$1>xAgkBoxdA(TnNTFvsoMj+;HnQod z?c7ODMbs!Z)2HFtF$aNjIs&{$zOy<=DO6*=S1skyG}&7eJNcTnd~`+CRU^BR%5e^W zx_a0*$QfF+%VDLZ4g!ztN!sb4QAcLWfOSvOUN6Sbps=?wRvo0dCuzLD>!TacM~-0G zU+?9xh562fu)1>wLYYLv69qcCST!DF*XVfeT~=@ZPM-@9K#^sq81lk*Lu*)m zVn2?@Q=Zs%V&8;^NK1yu)K1i}cmIXAoUQa(C@N>~GRL(RXn47v*9&;tqK9;9)Lsab zeHH?8(@{;RNA6{Xus3&9EE3$YpTUwsxU)ex@>sQ*XLaNJxM#PPvoAs_#{VSt&m1h* z+-Z;OLVu})0Z4p6tJP&h7LQogw7NuB6=;9Q9qc*`?)vO)f zB7THL3>Vl5#utT)7?17W_8S-<6Kjh`iW6s2xQN$URvNv|3>Q0Tu#A-89LRDWf!ltiR7T*~;ea9KOl1)Y>S>$$#* zI47^Lx;@;$<>B&nj8?tr*by)z72%3@j9x^Y=YtX}P``R~;bAX9un@~nEm9e-%(7jK zY?%v~st1)})P)L_msu*2Xyzh$7H5{ZPb@}|r#N$oJfTH6(&ZA5WiEBoF3U+<;ij#W zXEbwpPTCbNZk0TXoh$L=hRRd#ELDZ8lJj~LaSp_jMjIZ_R)SHzy5R*wb-0>8(9k=1 z%93J-*_}tB-7FWo_&jESp#eJ}_o85~jQqiPU^Z%t(_Je*MfaVl6>uv1L)bEZ2Mp_G z`{&4xAwL?z;S@Uq@<&WRwx83#K!PsG5`_ivKAR_Oo)W=j_N#hRIf_)?!^cwYl!&Lu zQn|yJri+FZc^Gqd*)t1U_AfcRT3xM1R6Gsb5BBA-$FFvR*qpF(#;OAov?%1_Tgs;L z6F69s-F=VmC~pMgWjMrZK$Ea(K@(7~jz-un-y3-q8p10FSVQvl{MY#5$-IsS51d%Q zs(~}r4X=iM$g3d=H4WC&*C28h%GA-{d0xiju#feHmE#&F($n+7M16w-cguA9J~s9a z;4++`^C2eM19wRo#LHm(X!_WtTfihLOA1jj3q5@;7^km8prX!NMBR;)rlT+#UC&AO z17NK7RYW$O&zX7OFXyb{1`s;$V{B}&^u=7TY^S@J-c4|s8l=GZM$qG=ohef_WxZbj zYT6Hb$c)wPo0vqcv&W!3{?lcdm65u{GF%V6rWHd$hP5F3layH~nQ!LIq`zK*K*rR} zEx?JDiOC;@ch7yT%*~ZMU({VRTxsU19`((HS z>G4uo{bsn|U_+CAj|jSdhW&}&c^j9;enjtF$5BiLa|*8LTX6Orv!lc=#AFu6K+?P4 zY0299=-#%$Jp-@}dQ%5L%k~|JV`}cRyy{@dN{t0NJGkn0&w!aTw(il0GL6Tcm};P` zOp|hCiti>9+&Ufe-^!%hJZjZ9=QZ#~_YjP{VeGQXD7G6iVDmWBaVLU^$rl9>X*Qw> zFXDG2ju9TO>xzf5Qm1qMv03AqDZiq78d*IThgTsPt8Z1f8Zs>zGG*vf>cFivb!`ss z#P*J?E*TG$>JUoq5-Y9cywuy1Av-w2waKl9K8Hj;I2IqyNz}gf#p*Ys)D-eK_`(5U+fx-D2XNE`>UbtFntkK&Pf8i8mk^*P4|^Nbe*Znl3*ZK0II-Z$$G@A6HP^Ww2RX_9$`ioASO-Hbs@)o zj&iz|B1WmzJw@&{{q=rXhhaYoM$Tghf^8Et+>&%2M;!Olcuo~q$aHzBw|ltB**6wS zDXSt|C!BU*e#_tY!0~d=1rP(gD0Ng172j@q0-Q0g$BYg3?mWqmmr{53(Ad9&j&OSL z6jGe0IhhCU!zuMSNL+lxU*wlVbNSdtAhl0r*7QWdeONpL7RdH2vs;e<5*|gV^N`~w zm~H-PW*yIgL46-?&hx^P>k@&kM%ug#$iwD}511luy6vn_Nn6JkIW=KhSF*ooqyg^8&EakHx42iH~wdheAd*Kyx3LH0++%k`S0aXCtyX zFZRi+-hs!FQ#4`8N4^sB>hUX*rIQU+`jUHKW_GeUJ1>C+wP7wxsmEDG(yWprCn{F1 z=r=LF__G%*1y97W%)xCNGhColC0fV=C?(H+9r>E? zSJ#U$JIr1mVgWWn;*lL{xf{V~# zeWV%^bb2S!!k#+9O^{T7G-35%=RKfM8I*G!%E@c{3j~oHr0tg=)+^Kdppy^vK&GI5 z!~Y}`f3xS1pOgt_(R<27qf>2tWeO^p5>tPY5r5)mkIKQZPRM11THwV~cEZ*DuvW$n z(#ZMn0L9tq`v!KY=J>8CYd=vq>X{pk2$YNvv0t!_>09`57e#&w&iykL9~d=%*iZp=5fD^q zKSAK^LJ&;g$oemcgm9qd{1uVx5ZwIdKI5-tf69r)IB`awC}fvaPL*wHsGO{Ke1_D_ zN^}}5tN$i!K*;OugFt^GWat>ot^(`$w?KqNH`Ag+4dD*;cVytNT=D!9gFe3lD#>Z4 zB~5=Y;q^Q4N7#x$p0AOo`FV_4xWzuMchvFnP75ExW9h&e z^g7>wuz}~qs?CPcn6urxWf1tENW^XdQ>JFZ#~n7`!ZEW_c#Fog81#N8#-_aN-VbVMzH z-a(|>8p*BtFXqt2DZIQ)oP}8yd;9}@JPRA?OaGhGdCiQ=Kd?}|=A4l4geKJT71QSYhQ)x@dcs8NPMjIQYb;K0Qu&pVvganWa~XGGjIXKTro6P_$B=QhYJ;^9LoLK=DRm9x zRSHaXv*;JV9Mqcx?zNliSn^2-bel8kQRhcIVB)B@>A*+e&T|l-EbP<})n!Ml*wztW z2v!*XqK?5dzT%9DCqBQxT+$xIar+CQgH;@}>nTSLQGNJwO9`e{<$lMf(z!UF<7dEq zZ>^V;695|C5v?Ipxu#2D`S^5nAHIF%Z^E~7LZHYnU)|1Q;-*fw6QB=VDd>ElodPEN z1z>bB_*|XPWhfuI)YD8Au&RG(!RCV%Yta)S+KEN#U(tuRt9M*fpDe*WX8FXjs zM6kg=FlY25%4fwzY&zF)DeRHb+v<~7h6iriveShAN?Msc$UGoIx#E_KxN6)T4w2EhV5?F=o-uGmB`YsF_(l6Y@}kc( z5zi-f>le3i-o5mT^K#xj)YZ$B+fk9;7ZurO&V(#yDp~FTA9;mL-t6O9z&dCoi1$7< zc~cHMZSIS2db)?!r(W~pCDC1=miIn!$G!|6+1*%zZ@V3wA-D3mWi;q8H4kDN#2lT! zftLH8q@KQ$Ys9jmvB4GBFNX4Q9%2f1&O@5lu7FNE;H)f6#bkElbH)L}MphaRTu#S) z2H!Z?&~yPb%{-;6C>HWEVR5#L-|Z6Qq-9O8C!cdM>epv1x|;>+b!?em0Y)`<8;h7~ zFJqApQ=p$5i~NLtk$@cNMNe~nj745BhJzF5jIP21o%~}paXc&WOVlLl+aLk8ovtCk zVwc(mB179f9F%|^hOB;gz@dxa9U3Ia+y{<&T7~x_o?(4w5x-^xD*(B4e#g;G5oPj@ zpygCRDVh5@1w$S4O^gI7BOJKyK;{8X($oCNps(^s$5gSv4*bIpl+6U=7DAO##=6IJ zzHormM6qHo#Y@AZRdJJJJS$@lp%g-1!-+aeAs{BCr@}d1&d$lbmzYDt?{r)0oill1 zOjW$w(s_OgR~slRF0Mm4R9xIq32ReTh-a&S-H5C@DKYQAFGd|o+zpv>4ka=uu6VEI zm1fJEl~bOcdS%Z#RY6AgEJWJ0+rsAdZZ%QWvXmc6H!yC@tN&jsF!erH zDv7G7V!EwMpy9r%+(Ur!tN>`RtUmWzy>r>(c5AZS64{KqE%Se_a)n#s&JwpbaPQ!G zki{m)^Pn*>Y?!_Lorzw{i?ZP+;6s>X zFFpu+&_C^iJTw>faB5F}_dX+cJ5~(OhlBWGMjT1ZZuWrpDa6>*`6=;_}g zVz1z~tAdI$j{xM3&*_PMkj@APJ}i)V6fw@h&&)#z;4YX9?&5tEkj=$Tfl1t~5oB$C zMCYS6@fT8n`?kMX>vl5tZU2!y@LJ@m@2ufojfqj9Udh>QU79smdF5Y85qG87dAwV% z&RXQd#AgiYZb9?FSe21wblF}Qm1Y_7{96>H?5==C-`(zJK#%;(wL8wEs?ByMn(MJU zR#?{V_JO(<^t7F_J2s5n>`vH;-Q`09wmWXD3zorX%6Suq ztCs_^*EtokEnNrQ^u_g0_uB)9ZJNhep#Dhds7JuF^9DTCc{kYu5N~SfD1!)HkAt$Q z%8)l*A&MFFT(}Y-aEEl~Yi^j~4Me0V0e3#MS`@hry9bs5{5#0FS6v0(t%SnPqFj3)k znh^=HeZPccpVIfzsS4 z{I5ijKhhecPw-r*Kbh!~V2yh_09Z1B?6xmz1@z-|qG zW7}%lFMC3=1x0sj3{M7Lm(A2%`0d@&w<@@$qn!nRhXrpkWJ8Qw^njxeJwPKk0{n%z z{J|})EyG$z3?9K4k9-^UQ*`)#ojB9q7whj)h#$Q$HD}(bFh`*P_B;5PL&hTQeZaFYQ|ouY8O}^5#-EN>JGT0kpdZSl@3kTPfm<#e0}sC&MBDJg z4j%2mGln0Oz~A_i_a>nm`6l#0JO|^)`Z@|f&d)_pcH8^eMC*p!Fu#Xf!ldM0b=uT2Ms8C9JLD_*kjM9FgSHcINz#W)7464-Gro zM3_=O4M6D@e;*Tk{*uS3*AHfyBchYzS`Q6hrmdBl27{cs0(!G(IJ9KZ36-2HPja{qkV(2r@lAP=MxZpT$|>MgCD`mNOTiY87yTBOK5ZT@w-B~r(Lbau4CpqWqV=rvx*@E?Qvw`L6h3!II8iL~fO@X! z36MOWDjGT0pah45h5sbc%*|qH<-l9?*Z?l&*D~!Sv k=#lt&XeW@O>%qQ|K+9ywc*Q7BJ;J(dUEpEPpxL-J-W))lpiL zytLh-(%Q+@QF<%D@%IZSSLf5m1DLW>>bo9#&Zl!ls2?or;=5KT*+)_P3nDWX9 zLkD1VTY?GK>X8in3}?6uEvQw{1cB-XD(D!=cSAn~O{SYs?!f#jF!MSJ-;80NUzc;* zQ5c=OFwo^UF?0gvVO;uY!>&k{XeZFQLV3AJb`q@==#n~4JC#-m6e+$UIYXOEs|ETI za-O2iqpL-hvqa8$be%xs1#%$C5|r0p%5&&flJBa5E0RxX^YPU~mTW$t_1Xe@M4&(^ zLucV%@#eJG8W}p99usK1q%Fdmft>bLoVlD&PYCn?C>eTMpb?;CXuUv}pzfOhZ4l_B z1jAP(ztdLW`>71wHJG85^tM17P`@_-y(3T~TKWe-?+VmkY~pfyU!a-8 zuSk0IRrDblD6c=PXAE75`7%SlfIMTM=`RGr205T>@Qoi%`<*~*=^KG;fo`O41;Q!} zl(*5p1ez_-I{HDN_XN6~eiSGmCESUcGtVQW^t;I;&>Vptq%tE5;wWp~nhjIf$DB&*Q@*>scq-~=9lBR0(DmCV$y+Mhbe7~m_ zfxebHY@t?xRQ=wf!2&5+-lm}fDV|$tcn;5Zs7?X;lylfoc$?p%8+;tjPZS{ai3H>CkZ@#s444l>$QH^lW zpneGFw_SsI*4u@5AlI%Y&f8ed;RTf(e%8w2=MsN6$?=(S4xbj9e@R)N4Q9*`p}cbh z#~*6qazpJLFAEMpDNjk>_gmfxL7v!UNPRA!Q&;6BkUC!CmrJN9*Hkfw$pbk&KKwBx z{I=pp`2OFQa(rc=6}djD99FE+v}8NtXEl#Os5Kvn@KH#m(Y0-#VT*5OXbLcP1;>x7 z;1ZR_8iU6J|A(3x2tTc5{Bwht^GKmQ&YoR7v1>E*HnHpBIERPZ98Q6rO)1x+GrbP- zuB`7scynYCB>BFSOZlqoGK5DLa6FXs0iRdigm%=RH;smQxvXsih9OsLb%V#EFRC~^ zRpcKm^7oUlM8fw6GX1NeH0aNkx-1vXJQrpBE~)9X#x9gHCbk?jmyWm`;gF_Ul=$Q@ z*51GJIP@g02L7-_Q)Cd;wBA%a2;WJ)37EoxT9Awi~ZLftJ|*LXL0P8Q5;3H2o7pAW7BelGY}bZ#-z-x6g$ zw+D8F2GL;+t$AT`Mm$&?rmI7@`NPyU;%$_>#JbFg(%A?t>n7_nV{+H%!uN_NcQwX2 zEU)7*51~aLS9AEG^$}X_F{#BbTK){oR%xRfqJM{eE*bb8!iU4$F8zja8@2mbw(Aq$ zMl^cG(6OU)x5<|IUUi_vq9sztYb%Nnza_xd60VLSz9;7Ea;EXtmm|Edu3r!RH5S)Y zar-XFE&h=7n(Gq-K*QF{r4K;4S*a3;vs9X!`d$uA#%M+AO{< zR|3B;twva4+=OtJc@tNY>q-vb&y-3OY=h9?kyRlq($X`?q}%AKH0(}yJ!YT#IDnXjwlZ>ZON1;w8q!1I@P zdZ2$G?b{ycI~>QxYmtqXF=f=GYkHty)Jrv3^{cd4G)Q;$K($eP*QuYR(LRG3@lPYq zccHr@t} zXtb0TyU@1-Cg4EO$HOEjO?z^*oVon`-5=Oys`(uFp7 z7IAr)7jk))^^#UaO)eC(7U83b`@7J^p6yyS&2pjDo)v&DaiLuT{mO;*u{iB@fi`O2 z4Ic#PTa`x3{hiTjE)0JgJ%=YRjMmWSyg5S~rNwIKlNN@S(V=xKk#;9<)X;@=0Jh9( z>9$st_V-eTDuyU%7ItcCsa2pQv_zo(!&KU<@s-h9I!B--^oQ~?e9!5);heUF&Z@Wy z-waF%w2U-B{b;E`8?}dG8os@9wF^B_cx|*lt#zUG@WT!CtP2GN%2K|74c-QNMbbXj zHVwEf+CU$<&~K{m0`!$Y%V=};!}!$O0NEp3Mz2>r6Sd)SS+b4VgUuVGjWphc?hd^f zO%nerww(4r)jNPz3A9xDUo(9o&@$g0!&Yd`K!d~rAnhsBR-C{(48)10BWUYU1&q(tLR`dWm9Y!O)F!l&V^p7)3A#+NI@dYU>YaT zYPzZNdr)q1p+ApSVz@pgcC3#_~}Dc-~Z39~(oz6=<37?8@7s2hp<%63Gst5cVFS z2|&YR2hkY*#{}g!@Y$_ z`?o+#=w)vi-r=i&aLnbFe1^um(5$lAv14el3w>jyVpC}HI7N9kEOHvna-q?~3grzJ zPTS~Vi#(2__}l1Vi#(2=btw-;Yfh&Xhj5y*-RX3jK+0OD(^fZ)^Bqs0xM|hZ&qPn4 znnO9?GI}4Dd?HP8A+~F*92F$(FoW(B=*swe1Jbb>wBaz$x0)vQKOfNe@d|3NSH)(L zakzqp**C^!Q;iE1+PB9};{^O|%==@(Z(^q_0MO8q2LW9rlpFn-VUOlOR|s^qq%HHc zG(Ls28(nB@sbU7kaDt zF7Fw1nu4@58sChaLB&Ti_=lK7{U@n>t1+%Dpqj}Hsb0K*MhUcpR+<{l#tw8L z%UJ7OKu5UHfmnv7dMNk993@3l+_V>rySynnNuZ7Xfw8~DQgoVvw14E4f$}4P)L4}w z>sXP+cT^jv`CaJoR)#_fqJ}mu;aP!J)2V|#2hXRba6ZLlF>Mz}wdP`KpPHLCT|vI8 z5;MM-77Mgd>sRatWKNUP>5TUM{26*)j8gGDpI#AYHO}w~m)0y&0ig+vHOUQRT zL#y#dRKNHI^o|QHAKV;YN-v$DC{K@%h%cjW6(n|c2^F5G@(nH+6TgHOyHG*p;qeu8 z>I{`Ot95$(O1i{_1{9nczlyfFP{D`=@zu0;rlP!P_~Q5)Dm+<1r?y-izm95VDd^;W zzl`5VzjC2-T7DV7iF~K1v>yuA#&4z-F7$cq&iJkLl|V{^x6`=UigHx^;W++XkGTpu zVetC+U9{bW7PY<}|25U0!D-8URV~}&_tQ{;Hd15R!=d}>e3eH1Yd?rTK#!?3Z35mF zd4OJbDKoIa2dL;w=CYBt!R8;JfdZ*^c!2ir1Fh@>{iYAJr4KZIURJU{qx3Tb+UR=@ z@5nqrTUDC)f(PjR9?DNa$ybUX%U&sm&d>7v0+f>k+B@YR+_a{KZ$SA^mCr4Y51nC4 zViONgg+LqWjp)BYd7eP3?vKz?fmYL9HQ~}n=vf8%jvWy#eU$#~rahiFN_&(lQoTGM zqggo0Wcz%qZDi?V^!eEgG0($FpCoe;Luyv}G>sMLV{KIO=+dX@9D$b6ADgC?KEq`A z+vs_7;EAQr(v9aZr2NFQbf-WY$md;(wAJTvnv!}w-6W7oTi++`IjTuBa@&0Q{U!;8&OL;WgdsFF4v{ayt6v8q1CfYxv zN?`xFiDn9|W85oryg;giS7<>G2nu)2)=xG%7qtlc^A@~@cO%_ZE({(!eyU}6y?&raOrZ>_9n|6ZrUi} z(pS!x+_Vq&Qu;V7w^*{plJ9;Ox>ibm(}lhg?fxJT>&1gQ)LhK@RI6;JlU#^fWwUxY z&~25?RC$?D`sWROu5@#sR_RUSR@qFpqSQWUcnOq?U5Hy{Gc6TJmA;v7bJN%+UZam( zh)aKs&RNOjDVunWeksrg{zr%YzVx*|rT395gEic)JHunm--xDc2ATAy}*jXsyO z3u%Hr(fb;maXFW#JkjfYC|{>@B<(^v&hW?kroBO3ZrbLRH3>rEk#< zE_9~(W$D{}@@=JGxoMA}gspVbs@}S9-JMd>F2pJQL~q};cj#L;Z5!(TPM>_+sPsxz zKS%$rbX%Xacd5}$!@ZfZcl)IMf!f_P+<-3oL!Y$mbcmbwf<|TAX{taexx{8#l14yf=)AedgWqPI+OWNw>H6;u&MOm|Fsj?+tb8EX`tc z?Ei3lVY0DLk(k|7Mk}Y9M#I0 zSDQKYM#zJIX+Uy)8E5>1Z5)0XFD%3xaiWvlct0QKst$6li^EK*FkcMZTU@1beVJQW zO8=?&*X7KaHDh2`kabu%sIbsO*NBFqn>0lALP`c*2*&82@4(hg(5|f4iuj%YDB>VS4MX>XoZK6<0dU4Sx*@ zb$YUn`OLxn0<;vgq`PsYr8?DuIe68YA4%;L&1VHH=S7XoL17N@b6nB9C#`mIF_*$G z|Cn?)TFpa0!g4ISAEB4-D=RGY(f5Ugg?{=Av=pH6Wz3;gTJ{vQHU1rSDe-OC2HtZL zJnKQjE+u0=$%&tb8fEc{a&3Rbf#uwQmNn^NvFa?IWm_|x@to?}EtPZCCYfh1eQ%so zOGTcwxX7o|-$asLN`o##=_U>7kzdKy%Yiv_?R4SKk}yWK#VNREY0whbuqOWuwN6(+ zdj|ExO)Zo5tLnvbk2A0b%e6=fz5x4GIISpQ&L!Yr&?s;=>BU;E<1f+IG`dInva*>Q zq@`G&23;tWd1rg~@FUUW ze-3Ai;#?~H&y?9z9bXGJ@h>EsczW>j;}-;6M^y+9#49EImec+C@xNcS4!^r_GG2t= z{rKhMw+_F%@V;poepm_NLfBB?h63j&-k}a7#4A}6uSFQZw-KHnP>7pe9FCFj5D6zr zI90+K63#(bf@K3!o-1KkW1fQ~93$Z&+5wnROw@QL5u(_zdc^O+{Bfcd8`ea{boqc` zxG8%%<^-ESUr41obEpu?{*s!M_)v*IMxPZd!g}`ye;V@jLFS2N z_fb2-%`^rf#wvs#(Nu*0q8aA9!6pqm30UFHF_W#sv<2ofSgTw~14oWU_=Ud={QDt3 zmflE?7n*6>cpC1Xr)g3nP2=6|NyIyf%wZKc%x)M3Oux$2+H!MB;66<=2MzfxxYfsA zLfC)sW`s{yY)7aStU!1|45gUcu>U*993K3;w#Lkazt(OxLwUvebm4QZR+g`!jt3Ps z0mEfYBHmM+C3-kRbTUcm+o(^5%nQu9u~FJW$-9`!^6PP5LFI~;+^H`&^ZNZpzu(*! zr7x6Ri=nY+z?n5RNwl|6!s!w&mAp%Z+fsUS_@DKqLiw0^?5J-M|HnWNEfsl|3jKHV zUbNU)0ojtqRU+Fi?c(HUW0U#Inz6ue>%U=s7&!qnEY-QtQqT6l#b%@D`2lOpT77za9q?snsfR$h-F(swFCXxYxk0qi zsPj(JLo}s$ytYBK@f}q|!sTXZpxD!>vsH}o^s6lM90H!`9iE#}i;136-(|*B&qZam zo{64{s#>HTi8I+bo@8snGsk=*d8B8T`SysfwML!Sm9I#-ub>saF}Fy$+oi-c+RxiB z^K6lFmzyI7KIu8v^Y4MrfscRqOP(d3uWPn=c4;rS|IM@9v#$R?JZn7X`F`+h7d>wm zJzr^dmb0zKsyr6kYRHfuf=|Zxz7-OW@s-H@sYvpvNb;EH z;}M@&n>^3teFjRlrH{a;#9ItL32%iqzP%pzDPD<;@hv_|WQ zPVs(63GCc`M<3!6N3oQ$M0`%8&O47w^d*7wy#3*kl15TwTdwnchUNMfCD(X0?ZR57 z`E|j0-lXK+Wo~NvTH7vlZ*=+a&S#^}JDx*@&pxV-`nx!1*hg})wZnJmyoWf(b0SWh z8}&PycX{uJe*TW|?CNj4Z+QBREcM;5{n5|(Q>ywQ{0bfLRkcC?AnSk;VgD|@WcUhg7s{&juhEXn8|L4n z^SNUurF|FY=Ft_J-m61#BU2klk{le}-i> z+~yx+9T}SgdcG6#o&HYV3T?f{H%!)Re8XhD#`ikbXioGR?~CODG;%p-r{!@on@kutuXlo@@QJ<`utYd|bo1ZXNuwe~C2!`@?Ir zG3dWxpbapn;aaRO_?6cdcF8;Fj@$_10Qg!Y=K)@KJ$H z*0bU3e2oTG9UEAqv2AR#3ffKx?9z%GPY--xJ=EU`?6T?_JoJTCHh3Xucof*B9RVBr z&a(1XfpVr`Qtf4=dFKpd%scVh0~3u8Tki?@y*CZKFEGb*;fVEtNzyB)YurO?z3&a) z6==ji)%Rmyllk`wGdRfmM)?YD6Rk`351!%n-;3Ht1ZN?>j%I0ZN6HYk4z8#5RtP6C z>#eP2?AiVpn;RVCZTBw-)*4RqoZv(+EHK#a&G=RYOFc&gwgqQ+KaYGE^m~7n_$0Vc zvJ*Lc@x2L*!uCEmAcjtR{%Ud9cRIfh+$oo^1_A2=D9 z8qm)%F0Z);_=*A!pG4oEV=Tap5zzCPV!SPw<%0RMU~X)IT^Tb9ndXoEIX=1Sw9p6U z*8UfV?$^J0z&{Tu( zFibT@4}Sren`&N0$a~V~8oU>MF8VS&tsB0LJ4;ug?$}qfuB*AucbE6EnjN6$J>@y( zz>%Ma)=EpQm6lp7Ew$_aYwvBKC&;+>wKJ*Hg&h&n%n3^IgPr}%8KJ8 z+J+}pYNvMNbgepeA|ESV?}lmB#!Y|!=f3aE0E8sRJ=?SAY(dU_?|ts~bD#Ts-TTh8 z|G_=Ct;#3wUa?`-DX?_cs+W@Yam(eBwJBclZ<2q{@cB97+&^pEaL@i#FIsNC{dU^? zy!H69g|8&{Zo9tcH*L56wyoFiTl~uw|GM$y&nL$3JDm7D>+(-}zHa>aPZN^we`+m! zp7=L9UrgKxWz2xt%{rTSQoxgC; zFZX`Wu&$2+afoz&gjHe_{&0%=n_1L+d)wn^^K zw>^w^xT{@W;g^y(Zhbj@*xFg&u01<$;~8lCy^Y^a9&4Mw_uJ{m0%0Jm&G=cJSVGrYrde+tz0uvr#=}`{>1_yv&c; z$h%AfU!Qs+wJozgwK4UxiA^a{V}Z5Uh%S9$+tEy-e-IHV|KWHV|L>OhWw*Cw05*?^&5QgVkFP^!==@ z$R`b}!)>FtznXf3do1&P$2z}w$4~XW(fQ)8UrbF}Yftfw-#^`_@E7~uaGzSCet!%} z^oIL5_uT%{C_KPs`VL>wu#Yg~UUk1u_$3R!XW_dRCZO3A@8i5m*qit*%BK_GA$}e4 zZhp7&yTory{4T$3yB>JPZKQm_-A=Wq4 zZxd$RJJ#=wfqGvXyh+#(hEi@r@W+Ik48Fy}ZNWEyJYeww3rB+ghhDOQ`g%Q3YhN?? zUt8$f)LMI+T1&O5weGfW^=-vYeUq@yy?XOjz6<1c2yb`aBD~A}1>p|&eZr4eIB4M^ zgO9nkTek8&dCJXMc*cDQNW~q#lR{By!@T9^w2SqLr)9ti%0;O|%{ zNL#xgZ?*q8;b4d0ISVgZ_$wBE(ZX+9*w(2sw_7-9Va~#f7XFHbU$pR>7T%sz`9TYF z7GAXQS1kOZh2ONWEoCiRIA~$c!WUMoqy?8&ZhsVNb$_P&&F+8Q{b${O)%_p3Z(g-))yS$(uKMGicURxl`?=n)^xm63 zlpafeEL~0ix9R^O{gw2+nfo()GZUGq%xva=%KS#=pJo1i#`SgfZSQ-s?;rI2uh4!1 zKTLohhTq-e?YLF=Qh0-gFT_}j7v)wUx8Y^!2l62x8@P}5Bc$$doAA_pn14ImX8bN& zo#UM}R7%&sHbb~}Ek>yO`zsaxPA?ZI+{gEY;(hY2@#Dm-f8?{(Zw z{FY9If2U&?;V*Qk);ktH)Twyay$bJG_YuOMOR2Sgv2HKnw^tt^+_OfW%KENjggS0CrQYF@8J>i|?2fQn?k#Go@ zIQJ&PlkP6UdESc*+|%xE!XL*c7Py~a1q1ht+eMo{Nf_|f$8N&^4!$2C=RQLCY4-r( zuey&C{%?*~%-wI&L%^FB`v_m-{uCUPw~Yh$Tka6yZ}X-~z&i<}gx};X%)tFA_n`v! zUG6jCk>$In1Ky`NMYuBYF~UsZal-2o6VTHiCN>g&IdKQ!R}-5E|7Akoko9%$xqaCE ztHj-e-$-m{)ZM{G!k*v`!c4H6@VekG!s~-Agf|BF5#AhZhdOViQN~xT(Z*i4O%21qXvq1pj03`@x2`d)t1l z?UQZ)uI#Oh z`8)vrAB5gN3Y|X$UvN>L!e(-bzeK0pMF_f=Re15Qy ztyHY2>fEC`N6X>B++1OPC_9^-4kt(+%~o?Ws%`m8YkMHIcc}JsSe+Qp&-vH2_nohn zv#MxWODir5+`dz-EG@b$aQm+1iY^P>eyL zmrknz5(i4v(s;fQM#;f!F&7r1#K7d_{%pQ5SSn8DtNBtf0zZQx;oGdgTjag67xlLU|nF(`e28xq(QK`*_nrE$?3*+pgkWM2( z1N#f5Y;`0o)<)+vp14?q9)@ef%r=k|7dTq0%CZU%Dp0fdaL|!bf#kY+~<+ z3SZ*EJ=AjdFN1#H_Hx)!4lCT8D*z2&kBT1qYsK6X+nv@cd%6%39o|=DDawu1Q?+b0 zN(_ZlLrP>TD#&yv^SNwQ@qwHcgvj^|Gn61o=g;l{1=PP>N|KRMz z#QuCSTPVx}Emn8j6Qh&J`=XQl_aF#%BAMZXyWl2pi|DD@-s5L`k2@63pUf6&u$_GQ ziF@2o-bSA-&y!#jC&L^yr&M#tdv>$KjhB4c9d3WQG)pC>NqJ~_DnGriTrQO>4^D#P zoxavLYTKz;0p1-Ot{yu~Xf&IAFHS<8UcA(2~?f z9&lC5I#vs7B${PyWd>ZOQ8@xMOT<+d)uPG0txfJ-+T`A)O}3VZtG2>4%E6Xa2BYQ& z-FSGuS}TY54EbD<65qLj0I9O!D@05FagzNRZXFnQkkk0_F;|+JVp>1u&T3I7Cfs0F z1ne7GBqL*`fdy)}zWyj3SPQxzgEC{MU^Mz7(j%@ch~3j7__JaK~D? z92TppG*}3;#oAm8gt0J&NtmcLs6s^un3%}ZdOlld0M+FX`Cy_nXOU?3nyfG7#Dw9^!nhvU z)0I;BbU109FnaWk`LMjdgv^+fa?(r;&PbAth2bPQVNv1nQfZ3Eky153H9rBiD4=2t z)K9+xBJ-6Ql881hh{kFX;2u&vQLN?*2g7Wk*$Rrw3$>CNT&Z03DiER= ziCKv%AI;VjjV7t#!KA`+xi(i_3=Yc!I|6-{;n=L@oJ~>>0SLUO5 zku64ipqQt~qb4#-QQjl$mdOKUQc#9HhbyB6Uyo%p(R?tB03+Esi|^0J5UcKv=VyK7 zoLY0oQ6a$%29kMRMi*>Clx+RpjD$X@52sYOzp{L(#!LDQ`q8bJ`f5Mw{b}(v@nh7)2=t zTPlFPQqf2xhO;e}&9EJmEgCD(?jJAZ3&X{|waUDwci$PRxlzBHj3a}Lry33yBY1?9 zMp~OU$}&BL9S7qWg_E(~HZuwL!4h$i96SqDhidt zS^T&F7c*GITo%C&m$H*%)Qbw7u1#C)aH(|0B5ZJxoX{v8`|-?p$)W@21W=uZ%8b@@wghlk8?{zM zD@2zh)sTWvgn<}X6sy!K+RMJ6mh*Tx6~g&*p$9d!P&X`7vQ&xS64MsVWh=ET)E%+6 zymeV=ibl_f7w3B!u^4u|249~I$LHrlZ?Xu3N=dDYAY%w{W~50=eeo)fBC-9%Z>E)G zPY4FiyyeHTqA7TW6V+t}44bj))m&MD8F8_SBRJA0|H+ zqDF+33BUGQ^(AGNWO!bA7&XA1K=RJ-D^4p8R&pV%4O?wuv{uDBg*r+EM-&((gt`12 zJj_3&3keyF%8bxxItDTlvzQ2D?>tLrsmbiDJtvTH-X^modqNFG*hT3=q`_B2tohu2 z_N&X8)Yhg!?}#9aNF1i8at(Eaxc1#Ny7)A5%TGW`18O9!=v*<5M*{IMx?~K3j;t7% zJUw1IQ3;)w0edlT+}KPOD=@ZpTn?GqCfE3_B&PFUn+dUDmDNDqvf0vH%X#xEG#kd;l~y~#jL?=EL(qQAvk)|NJS=3- zTddN|kH^EFovh`m*Jccs=H|=!>6vA-X6LfS`DUGnIjK+jIh`-Clbg9s25V-AGTac@+yAN{~`02?o_Jksf9VIVBp2 zii)vC8Q18PGd<8p{SY}$RGDmK8E;i>RN~wju@&OSaY7tL?NL0&jRtc@OIyNX0p?eAbZW|UCBHy&q0CIVnNnf0BAZSNJ)WJ$ zi!j|Jl%d&aL%qpw29739=#Vdya>z!>Mc!*GFSc5ddkPg7IXtOK5g+#^sR4|Xjo;h) z2zFWvrHB^X5NNU3r1X%f$iVa|M2?v8Xt7zGedrU9WXnahHeA_T^D%7~oR3-V-fR`-eYi9&?ZpIp128Ey zQaPwNU?(@@4rg&7&bY~P_8dI4I%W&ZsI{y7a9Ax0yoWQ-HJp~%4HU~|i-_MDwQuNk zLo^Ic&zQzFT-lFhJ|p`NJ3W^C^6nZXT>s&`-mn{8*$gDI!Z>_#{`#}Wnc&ZM^UyAVQQW)&ZY32 z*Jz{E(J(xNkzG0?np^B`J6g`;|ER*zC&gsU1y)`P#JM$A!ZRWDs~mUeW}}{6?5KFu zJ1%1XMU>KxjiT(OhWHzo_>o9mJacnWwq|$&(^M;QUU)uV#lA)~46CmRKbI|5_l6iIv9m(P&*VJJw*kP%+lb2zn5$y-739w- zH#4g01X`bjquZX)bKApVj_yl^%GODeHsX-Temu%EgNg~{4PQ%g^i^76tpXgN zYVu90xsQkw9i>5-FTrpnGKR)#Il17bYQDu`T&0oFkek5H>rR>%Dso0q6D2V}U6evC zE7OhDW?@JKgJ1_UcyhD|J1WWB>&NYN3O9wPaTp;fZ*aaiTK2Xwyon7{@^%z|ARXwCUQ|vus_ELv8h;$)24;TvczjA+NDJYy}~vK z^0`tG=eKrT5zQDMx;P-c;snJ?0FrCOw8a{Vyyw~&cHYf}kALDsk+Ya1;k0SiE}Ekh zcpQ^byBq%INT1gN4aISB5l&is!Ql$J7v6WqrF!rs`4K1lah1aX;zda_4KEd$MgS3V z6pfG+ZRiM?l?ydnSX6x&V><#MrsAk54W+|I!3@W0r>k&UOGfGi#&hIbm*^4N zLF$L4*}?C9q9M}#DXo(#AP3LB^SRJ0EYXo1>-bm07U)2EnuEt8lo6LxvyX&XM2u~M z;fndBCL_=}pK}@Qp%$gT=fM`>>?%S|_NRQk%q!F<&+z_j^Q@x#Pc zv#Ve_yMstC?2z%2aTS%t`-SC#ql+P;pjr;j>*3;5DRLZG6sF<#ho!tfI6AHK`Fw3W zve%3=1DFS(C5;kEi+1|g%6lslay1zqjJ*$L=PZGkK_uqqPyunpDkZE%hPjfB<&Y|e zY@9#42g)VDVhs5lBwR6bsZ<`76Qf*JmUpJ$&w8rWuHg1a z<0gVzax^X-Bfh2JbSxt60L`(=tp%?}L~b7X)p!4!E+3X#o39+i%7{V!Ska$tl?}~e z6>%D>)LBrRggRT3Lvpm19Y#E5T**Q$R3t%gE}NK$y=<*lJ={nMPq-E@!nu#Pn13D+ zaVXudU^R6a!_z$&#H+dpq(iLg%p#BpxELZq-rB^zr)v2*?af8d=3a=)HhqhWoCS8h zzP>wwA1Jwweqh|^ZW;q3A5hJo< zt1GFN?My(JHyb$Kw~h3ZamKP9T^WJCUc-uZ(_&vO?RZ@rGlydWli%`!L@`sYWGGR? zEJP_YQ933HSw;JiDJ2z}v(N|#yAOax$Ii^3E}i!P7N9jLN*$f@4t1B!bGi}Ry)ybZ z98sfOrm)3DUua=dQpjU@?HQLrI2nx8S4-Ndcm-BPVLKDI7T{^sJX!!i{KRn-8Z<{J z(D<&3N<<8zDL5NP)LY|XXj}J3#r%$ckW=hxbkgv*Xv1@@24nSd?mw$7WA{Hm3oSEQ zGIXsumPi%l6DKG5U}lZD^pUd$-KtwE$^%3sXI?xhCM34z?BR*Qb|yfUSE|NvWsIYV zfeNM*_L=UU3|Fj+R?mZ7?Gn`AUGd3*8uyQMr3%9ViF%}T&cm_98>V^1%q-8YjvxZg znq#D5M1UsWU_aU^bjwzs$>%EZk`LvxD5}s0APzfq>RZtfKH3C~jKL2~fs}LEGT>O* z@@GC<&A2MfjfG{7iNkBMCBhhUxsi{50wbY$o?4O73y7L_@;lKu#qxufC}SA7J);W+ z=Et}en!Bc)8Ds<3UX4SIUVK;1Z+T28I|8lX0;`s@UInSNNbZTHr;n|f2+{a>>DpqE zOR-|U7(1}vH#yCWqeJ3|!Z2=HF9Pi`neh9p_xCC5b{eHPw=i z8BPmmIcBQ!tzxyMP!*18a~ehfLnH8j3LHN_i!O}UK<8f~yn+TET zu;MV37Nt3@~ZEH^K%lXU^O<8D~%(_$kNrV0gQ54U0P>&V?}pTVGa>&+LZTJo3Y}i z%o!;Tt6Fod_M;`6_8`;0<{DK@I4xpJ*OgcsZ+XE+e4nkBnsMGG;)e;!;KvFxt|{@a zxG9$N?9no}n2eI*oXMy}gI((&AYvGXBzPY?MW?IHBz%7Y)QT_KAbcceN#$wdRUE2| z?QB1kcw>uKMtfR_QNiX8)^%|%OS7{ou?`&T#0@}f1-D%AmE4GQ(u$*ge5riA)Nm*m z%^V3iZ#&J6Of7lidL}ej5n;^E*)4Uv*wVUu+$KJ#W8aoEdkPd|ka!p>7!x)V12091 zwjyR|L_OiJ9D5{~P>qz_Na}hqD$$3R{k&SubF{;TloW&PVB>iu(8Xk~;$$JA8;}lq z#(2(_^97FF?c$bd+k#+PkL2+!`8(&}*)r@r+WY2@bEZ*)y8VO2Z_p74#F3cKc`GVB zn@0_2E!6%%ReKXH59~$P+M=0~!?`Qh+;F;b&tR$%rzHH+QMrsIB;NvCMB5VAM-F!d zY?d1b1E)1jGGg^bSG)@Goe7UX*Sx-Mq}_r_V7oQkA>r)6cxIbl{C~`hOkv^ ztLm`wI6G6!Uy*f)Gco-_0i>OghgK&pi#3|D5>U+SaCB-+htv{|K4OO|2ep%`jkA&{ ziO$chl5C!i<|c-@yag$%rawp?)v2Hy)6hzp%e;-GS5p|P^0drRbYi0HVJ&x|24<_s z7m1=OX1mUk+4#6)CGXXfkIY#TNoEGs^0zZ!HIjQSK0)L7L&60OL|4T26+&6Mkw|#B z#9am{zLE?Em&`X?7*!5}(s}&kllb5*(`Zpl(N0A)tY(6(sCJiGI54cMw5 z{oB+&X?~T)){ZTdAF7qeHhG`Au~j0%d!J%Iz%-}Xr+>>9-eamibW726KcIf=lv|75 z|KL6N(4)mNX3=n6cnyxzQ*&fQob`B#%QhliDBzLo{G7Oas{?8;7cb^u1yy5xItW<| zL90C5gb<5Ln&fg*x=-e#ISeGzseKYXr6D2B1KN~#?{y)-S7htt&csc|y$#GtP|D{Y z#o%#KEbFtl5oy&X=r0@&Hb$`tpIBQR_M+Tzv$l{o`Cu;kUM$oUfq zy@;E0IjSKCIi|39e8P*va~OnI5wvJ`eq`pHfU%I2Iyq-{oxfZz9LFNJBVNhNrx!IZSzzD+gv2i)LZmm}$)A5eXcy`t>C^w-n#cqVd_WJUg9A7*? z%fE4#<<}0l*TnYa#*3SBZZ!&E zqxQg(^xh@uLFaC2Eq{z(fDY|L&G*Qmjg=Z{%@s918?}!&Yr8(|6&nXUk+J678Ryo8 z?!4pJiP1qAR$DVWOF3q8SI*7Qw@QuzQw|PbW)_kz@&toEG!cod#=e<197K^B#Q-43AK{z=zBHj8h|3zm&S8wbYp9pcIn3q}+PVB~Shc zb?0n^1JQ`1`Fv!G9IetYt1?Jj*m{_;YDA-y9pn=NuM#T1%tv*LjP;DwR9#Ncfz9zx z^BcEv5oPS2AyuP?QOg${RBcuA%*2m+h_rB}8Tg)+%k!f1qFcZ&$;DYIm)mKf6s`qC&gx_QQ%C&ihy%}6a&=ur^$nFn4JZdYpz+;AYoB}T1y z97EJAHRd>AG2ugNsQDQpq#4C3>t zu@<6zmE6ZzxV}wVsUw8y>$Grrhj6XE?P>oJo*1Z0D1`R+Jxr|}wZ#`yqr$fo{3!qW zjV3il;WZ!4w%=M%yTV#r(k1)B(gSdhe%8f52lZSpO!&RiPs`#<;zsd);+s|0^g|tf zZ2kO}Yl+eK^W*0Ih84|Ay7eIIJCqVIcI-MT{t;GP49aemQ<+UIDKAIVr$MjWxV4jj?wv}HH06y<0< z;xF$tQg^%GapEF}DLci8J^%45q!GH?&oORM;a*B`6_dEuUX&DLMeE;+r9s9$YkOGu z=WPYj8jHJ0dq&hKsA}&gF23j1c;4t&PwRM&e%vZy%=5fCMk0=_5~5n|r2^kCBFg7N z9&Kp!Zsk#OR2Mu~gy$K<i4%+Q`Dgze7>kt>*mMNPg|k{ag)>5V?Vtp zPuyyTJdM8D+MRHvO?-n#Ok1tA3{`Z9&fQ>)wI)SqUc!%W+f$+EUgB{chy7sGV-bpZ zVBa!x(YX5g9uJil2aWp?&D}}bpH|xjK+ySQzE2qI<$+(AFpR&|! zBla|91otbVRozNTyiU0F^gc=b7@v(jcaz3YwH$Gcmc6t6z2`PgNy)q=^I4;|1{YBv z^Lku-_4E>c@Y+O=cu@ zVY&rT9(5Y7P$^>YZN$W;;lx{2q~RI7mRcfB3!;Tl2)T6m{$RkT-kSj*v3gQy#MV7w zi}k3@De^p#_S-x(B45f2fBMM3cgur|%6g=YM}3Ipm+8R^f#vgBl@8e1D$i_uS=Z-N zty|5d{d`+gyT`{^PK~&^wSAdZl5UchNMAFo83r|5u{YmiKMei>!?V^Be_A%$SJWiVu2*QmYvEM@yEQ|L6 zZQRggXN&sVB)C`K#P+!_YwL-DNvjfRf>t7Nt)7;r54UTvn2_L+Ld2IZG{pK@Tj6Q? z^YaFuBTZF7dq=8(c0T7E)Xh;|%s$srL;F?Cce%ap2K&kBk8shXYcZXoDQVsS+E1I> zvFfdrX1(Cinn}58Rdbs2?x*)Aqt;l9j9U~Q&k9Ok7q5f%gRmgQAf_qT71wY#EH@8N z1AbhwaMJq4wI&!rQ~7fn2kBdQRz4T;2$$(|*`C1v9fQU@wb#6{HOmn%#^A=y4 zr-m0v1N6K<8-I{i-5I~e;+93kRtfP_WGr!?;uPXm zqCd~qCGJ{uWvgy?Kh#I!PrcllJA}z9c~;-X({8eJKetQd?URRX#~6Da(>b zQs4S9A>!R7i6e-(rdJTX6gubm+73Uj=4c^H$PgF865z%`yVf4DWz2<0lzW&gSHW zyaY+pzVb6bp;~`{a(L&#dCb~zK?8}mq`T{bN=!ssoYpoDfGf?XiPLdXQcSdpQqk~k z-2H=;YH794k3holX|p2eY2CH3mKwWdMW{zvH(BUF@ll>0E1VOUXTz_$tUFIZ?${4k zZ^G~=#>qts`V-qyk7X4tyZ;;M{Rwy z+S-4@i+Dq9O%9Rbwgp&PO!bdY*OwQwbhnFYDwQMH65@XJkf`&hPHr2 zt`|CP{c>gG_VFx@EwW>|5@U=(Gn4CGn{9C~?(XI4#BL+uVoCXB`|wP_Q;KH3q>jyQ zVhMD~?Dh%cwTAOjZelrRHFi1gq>;7GwI8aNFqD9oN)TCL9~IW$U;KE+D|(L|r(3BZ zEJEe$G!waw{VL4U3*QRIXBw!x`~7k!j1}@F9X4{Q2CggSH|{oJd16s(WAyLEJ}bBW zD6^5E^=l-J+Y3oCV`JazV=K`M46i9K8ePI|^t~K}GrUh zNABA^WII@vfcTJ};tN>5+gp3Swv>7iuaq0z+p(^V-vZq2YaJy=t%VJ-p&3uWrHZz? zI$+_e4=5uAg0by5O30xnSd!~o)FE!U95i+`x$XO*tx;$xrj=n@_aaE`#)7NqNpNla zTHZ&0&{|C{8jDczaCi68`r?6pMb(p6ROMb*1uFTM3_jzsI}b%6I6;lKxTwHe0XRXfqLdJ}HETItnc;pgBrrAAvz z?HVvFzJDq4Ie#1`+a8_ZzNPq+B$b@hNW^F3l~g?59Y#xQ{I1cg#m}T?Od#F)tT{;= z^1sOI+StQ=o>O^)M05|8-_Q#4`j~c@OSi(cR_+FGYK+sa=Uu)BmyC?4q!e^Cs8x%& zYN+1jjcl5PUee2ylLjVFl=x7r!FXrCMy@=iJXJ_m#hCMW_S9??+=iC$F&T}#)ynF{ zUXZ2{s5VtzNVCMneXmyuaGa*{k+T){}j*A9+%vOZ{5=B zDfa96W41m>!Sy5b;*VCPPmEBbRo{Wy`c7I2t?C#t<+|G?C&Z)9n#QA@DtgdWjk&YH?=;HqK%+veTxU5QAxaC-F#}8gh{hK+mu{jdSf#yiOsV@9OTX$=2 zk`i;ax|*k_(!)Gw>0d_LG%@jIXl~O7mDfmx=~$|YU(VB(@Yt%8JLmrB?%#Rw@%x?{ zeD3K#f8}RB`K#ZNjh|@mPb5+u1nD)3_9zI*2s+nf7A`C8`c!bO(!ZSOLD95~K8fkf z!sk+!%G9?g^2>=Ra+%2b7@|o1dx`YI&$K5KnWx%1Gf%a%n}$iHhdYx&x|Sa9PId&r zn#>50KwT@M{F;W==TvdNt2fb>=)INSLTFz>QbAt9;|gX|y@|kbmFni#ClbBs;huDF zqCL^8_NbS>uxZ^|veUyW4Gid37qqQNr1)5)$CP_YErg1lV04+@48NJ2SesdR4m9-e z;}$(VJ?#!uwIve){RHXZ^f1E=`dl*E(GvtgPp506P>)94om`W-@Bq(FM}eLoW%vV; zoyoQ!v)Ruzvzew-9WK$cZY?eKxl}v9lM-}*fQ2{chGZf`zRO%lbZkrT3j!Ssap9LJ zkXg853vngsn3qzj^d>Mus`jLk9hsB{)zKe~oPkmM8Jb8hysl~1Eczvo(B0mdzHlOy zY)@qtz7hnCeS{ufwH}^Zoox4uy_s>7Pp(#cvz{#Y=IfKa^rJsI%xqStDwa;JQY^(k z4+xlC5cDOxX(p9kctv3U>{frY_Unx76_Jlcz(@*m)9g$90yJt!dZCkY)bC2RWfopwKrgWP325y?7MfsA!J72K_n75X{s%_hn)6kw zd^KwKs^BWd(!|BvJ2Mx;RDT^2WXtlK3hQY$6Jbw^$HH^z3(u!r zd*;F=;yvpK^jT?0_3739?TO5V&txuq%KyJLY21OyvxN1VXll)xbbXzkg8B8TuUP@x zFmymT;0;v8rEMjtU@Pe>u1L0L7QO&NHwH#!FLw4*Wn)S+dWm4+)f-_h)*QbSBqTQ; z*7$k|8m0sb=rO9fa=oa^Mz?Uqk4}VeB^rYwHspmX5qVvq!$kVRE1Qz5GtY<*YGRA3 ziZ+G!-(J^~sc(WcXg9Dg*$pYtvo?!{brZ-GC13G7_iFS2rpbJ%3*=pRLv1Jf)!dZ; zw$#(J4vwYA+LctVZ|Y&jOhsM1sgY$aeC46!4UB5Ls?e1-$Q4^*Pw@3!nT0RM;8eV! zG-c>&U5{w1t5JQWV`Z!b<3XAFu4vJAMO&**BvYSPAFKPVY#&$$z$WH7Y=h`yMdC>t z@K%?Kx8@ZHJC#Z?MXK~AH1oG45PEptmh57D_51ux()9-{qG@>)uhd2-TNS$+1wHhE z2GrMTM>Zzdc*6KIGy$&Eny82NZid0t2W%6H~*>2c~79~^9 z2il7lS4j@l^F$ZkMPPPsNoFz&U++$(>rX*p$UCISo9rGVu9$@Ux>AGzs|^1;I@b{z zB9s(F4Zp=tQ$>{lk?!jk!^)y%`jY8$cO%(2eEJ>4SbFSO#Q!I3zHPnLJQ*~8qd(as`4tY3dy8evk ztFU{r>feHoGB?qB(4ErcNbrAkGMTP_oT=8IXBNiPFAiw2ES<9PKhNYu6!nisNFlB6 zM*5tgoUx@Zo=9Ij6{IgdPCsf|;x?69fv~7wvaR2pOlbi#^-qx$0xxDYu1|?$2tO=0 zR6)xz8aH)RWr$oa#Q;+b^_gPh3i0d_H~g zFGbv=eks}&m%1s}D3e0rT=)k6X>;Kc=*V3B43X8zHWP~y;cr8ko&K4M zq|J*F=c&KgEzX0YV(d2JJl!S+UX-@D@aNqtlN~hAlnAAspaY4QUi@WAzKbvRXfmJ8 z^mm9$kQVo-Uj`(^WiDPGNcM~BJt>kA#vA^!ip>aBepe_RWC}>w`bz@NDX9NCC}lfc zd`S`&nY4CoJcr8>J}$=yx@^NHX$nyNGAcB9qE)FHGjO*|7*G3ha2?ZbATgS^>CA*^)n7;CC3=mZ-c;jPZRcK6xNueYhph^ZB0`tqC6A$m2r7YwT4YN36E`Hg z3?|gRjqtQkjM>LjZ?YYA9IYMV2O%uk*U)Y1S4`imf2ARa5TH=|SAq>JG+5crjDAKm zN&M}0=EAU;ny2P1>p!r>d~yZK5!3|-Sa{C<|E$p(qUZtN_A>2iUtCVSZ;|)SRKw9K zZdoPqtX*c^dl5@q5gXHOE8f4O4}I`(RpbMPyY79*%TDP-wBPiei2kW$8Ui$|Ls!rl z&E5CDOOsjncVKaZX^wMnb#!&ZU+{&jlcSxHv?flqkKbFuMLzZ!4*t9~X|*J9csKq&N<$=FQ& zIjSM^RNI)_w_*u&@mty~Z<|1P#{~Oxo)_?wkgR~DEiwUIqsS458K}OOKks&-6#(q+ zNmP5f?W6u{7#$?bhZ33AM#sW9UuB*3a{1f}BSE|bfTcXSc z3SpNRkKM2$$?oyi*9vVUA5CJLURdRoxeKdqkv1`avYIyK5&qO*LN+wg zTEzD3MiyxeN|zifnT6lC@SpW0y%2~(F9Aec&u)(qv#ZlcpvQ(|3dm=TxH9$6@_z*m z86zm~m8pN$6B9X}n27YCHA$pP9@Jl9!{A?%5g;184w7e#UN?+UEtR?f)Hv(kB7{q) z{_)d~oxEx1H=b|56^~x~3I#7K;DfwW5GY`luAK#Q?aI+_-#YhNBGLXRxhRy~ZJp_1 zZ%N~Vv)Q3s+9o?j)(JkRDE2s?ET37K^&bZ(3!ftOOjL67Dyw0OFMo}%zwoLGzfKD^ zMZOe+U!Z1+PcNVAl=CNX&J{IWkCDAEj*I}VAEP9SuW!2k(uatAfQ*gHZc!i42Ayl8 z(Qd%@jka4<&WuhB&2F@)?mIL0YFpcem*-j6dKGd{GKdm2|`QO*Ef>uRb-cn ze07Be>8(_azNRwXoYjy_@BGskR=*UNMzd7y?>2HSH*zkE92fpFP9vef!v_ftji)=V zQhy!ygv&f7?FpBp_H{RVQdGthf2fGiVuJd3Do9#>O5%Y+HGC?@T8XL!xoye8Kl%*K zvdJx!FPUvF67NR+beYZUcf6R2rUITfqGQ!nU#z> zrn0U$u2Ip>t2m2-UN%;5&@0vgU6CO%p|LHzkXoh5Ml5aN9ZCS~a!eeH{ZeK6h zE8ToU<{3RwnP;RyZ%)^sgkIN?!QYv#*#L0y*$AJxQKq4smYI4&g0Lf|EyD~xO|e1q zZEAcpS?`i`>8C8U-eG$tdKrWUjd$93%9NS}$5>pLxp*Uq4Z%RNFzw}PFqtX{a{ zU0tTR&?)PX*%QFIiP&BN)vO7#uJ<{4e7`264Xf>#hJ8Y9Jp`s?kV)h&yyX>E@BsGS z@#wgxyGsOXZ+CJwy}ur>rSrPI*GsneReyG^NKfY+Jl1ZAyf)39 zx{T&7`_pg^nIIJWXhgZ9MIO+iQGX=O{pkV6GMdE#y9Lc@i+2whPcp#zCSbh=1lD-4 zS zJ=^%XOt*<2Am6!t_vt>ZD5`p}8&_#Yf^+!2N3bCuuanm~{QZA8cRS(wvpq#=QN% zogAfu19vku6I?y=mjL{sI@by8??Wwlx>lzbI*#zv;d}gdzrzr0j66Q<*EpJQs;ca@ zS4Oo4*fWi~CuvpJPyBJe>TKsC$~HcG?CIQtZZ+kF9e?>jZ@U*-Mzn32Ui9jPuCVFv zB&Rd~a6v?UB*6uTiBJ`H z#fsKlL9F6Zms%^<4T}qwR?*hhwl1`4rS)~I^;K)*?|aUDW-7I0drTAK}05gzxjsfQ9Su)l7#;{Sb^kN-D5F&IQWZ(N3|KhXgKtw zMLqSWce@L_=bu`C-2Br{bC=dHIHA7#jMM5DomRikL5I|z>K=bWTQnLP>am`=FVPIm zptWVr+(Kz@(~$bGHj*f$5m^drIf&OIJ_%2va*69oZbq>D^0NZz!1IqmlP+LV{@?%f zKt|!`;b9sb#1Zg)niaA0&#@XscE5F#67l!`|1EcuxP>D#(bIK>5_$O@T72j#oaO)1GH(f3h*{$bg4^3kE+ zL!s9Y4a_Md|4}eRcWO}?YI)2Vgr_qY!3r=lhamgJlHi8xt0p>ioQhhTErazOT3Vid z?+NvpEkkr8FA)#~3kZn-5h@@gLWz+&twAv;&L%wLc|a4Y!e%Aw?VR6lg=FX-SOq)7~C$(wDP@ z-B8o%DF;oI0fuvQqXwrZQ;wlfEOd7hP?hP+(ap4`l)lbEXUsrYZV#xPO_AGU7z%YA z1l{eRmzXmgU?@XY%W0%Ls2)_`XQd%gPX>UKWenufX%6_HNSln1wJ&#eFcsz_@U-!p zX{BB~O|z#JnZgXlOTfVc!LorM`BApWy9iIPx2by?gbe9U1%wIfZW513Pa9ZAgL)2y zhTM?|n*BoOj6ytN+GaKo^s9tGNrKPzAt9g=g6?P#hpdDJqp(!DKAI0j!!C>E=3`(R?kwDiZB$7XO9Z*0-gI#Tm5NWv3-sMQ}#1W!g6%a2&WX*x9Lw#C;B^Yd*-QPi_ zdh#&d^z8zbo_Q zP^{^6?Urxv3Z!}5DvR9uh4sWsAt_f-r zQ(ZUqqjGzBc)#uMLM02Ng3nDrVyaJ11nfX|AqBf3*MOF0ru~$c!2&gBB5Z!J8gD@Ay$CGUHKnD|)-_f3%eJnmN(^^hQ?)7}nb7w#u*uD!Wugo*wo??nI=M8#o?u zrZN!}7v=XO`I%);Q{ovhsxPxV@i9m+_mfG#pXZ}-qOcI9QgkZoO4t%n)Z4YjC&vve$B z<-nr}jsH!bbc0l13XXe!H}L1?A~lWicaS|O+lV&16si`U{^gvc=GQTZdHN^Mt-w4t z81vlV7N~qO43aJ7aRkrc*$W4%3{U=H{K0T^Fp|)9c$VT1^AU|i3toU}uzB>jzS9DY&hXb(iJZ499_ssEj1%e zdJ=gs3fMjGVonZOdVU>pQqM7<3OmOlbmt@JS%4rCP!7hMXT0P&SCT zy9k6R3H(n+to8fonPy)KwJtW6KLH2U4ng4>&^mR|sXtI^tAXFT8JUBuk5s5Pfx@sL z!IC3IFT=l6+H_#G)(TET3-QBUjFKW5H?BLUAQq)GyA$HV&82iG=$s1d(jh31r*u7k z8o-w)1C++;evl2$1x|NQM_8y4PvkZnprt6H#*Hd|R>Hx84rdQ=rv%=b?rB{c>wW_AGwD+)2ZqGU4yNn=wTGVQp<532xbR3?Tp-;Iavs#X|IAu| zQE`5zD6%c)$NCY)s8yLnfM_frBmx8$sIn%l=jYLE!Hmf>s2iqp2CJ?G|FL#3XdLl6)pCdc&LP|&r;owESBXCtT!9fi&S_XYi-oS-Ns(A{C;i>l(o{;p49Gh7sxlAfaq z69BFcvST?K&{OU*DZ)7i53C5FHRQ=PAPY=PmLfIOn?qv4r=uS%M=Z~&)OnSVI(bgB zbYUQFUX_<$cY2ZJoQuF+fuO)Qw-P|g{Vu|#--Eg3&O@wVUff~E^GLs9qVAwpmJ)x? zVg)UpHwPY@-wrwFBUAnY1hya4^i+No;w+I`FES3z&f|xw3)XwthyvUTnN)W!;ztXw z*Gw6|I5*IkkdeBao37iZVcD8;(DT>;>KRp~P$-L0+>G6=K-C9OT*?u2%agi*c}~UZ znkB#kGO=wlV?3nEoJ&N8zaX_q5jCp^n$pxO@)!nTlo+(Z7dse2W9B8%Cy6Z(nQi8I zmYshLJ$D(%^S2?Vb2(y0{tAQ=P3Ese^kod^ULXGs1eZQ8$v$^AlBpzp&VY1tm-L9Ji2Rt_ZCwS+qd5?HDTZbQG?PvbiE!qh@Z2gVX2k<`7KqcCmJmW1rQg>u&*z{-CV zkIh(Wh4dV&jJ9acRdG}N_IoEs2Jg)Qes zJY{)UM(J?xO@N%65wJPmf+waD=T;`cFrT$#Hj7xjP=Cl-%VbvXI*#AYaot_damjA= z+<|yN&;0<8Avath~#hnd^k#jdfl_?d~bN2vhHByxTg}djR!gj_U44hOm|_%;SlO9m)1$VudJN zy7L$lMC~Y7d(xalG#>LL#^a|*v!g8Aq{%EhXRxD6%2@B?oLw|sqNlX;1khy1P^8G8 zQiu|gQnl*tlORuEDUdxAjr0_=e3~)kdTtY*Sv;R%ZfekQaq9TYV-kSmSm) zn*}`&4U0=s7tc$;N)x?0@Vy#>l=CcDH={n!;VGiG4tFq6gxnVpWUKq*%eMewIWHoV z+NHT5xc_Kb%gg?Aq`?JY=f4XhBumViNu=#`wjDsJdf=m1W)mK=cPq%8Ur6?Jvgena zsVcKjcVA-s%N%S&fO5rIk5E6+lz6IA?8@O>r8!;!Om+&429uv1_iVU7TR2rLhU_Xe zr_O@J5$^9XA0~ntGJ0R-lErQewya6cuYkZ#w=e0yM+m{Y3X$Pc6jY`)Ij;e0&UJo+ z2N^L_rL=%A?<Zlo<;lLAMdB$aD)%kM!>2asYVeIJ8BvnA zrycJ8IS;{aOYWS)8>sv#UMcQ&q(tI+U4`>U#PWYa5ND0ir2fEphp}c~#aK)&aWlXv zT9%#hMGtNs2XRzBmS2uLG3n{J-f$4Mh z!h=fCu*uz_gQaM;xp62LCWw9U98APiYlCXoB-T;R-k^4`WX_i1Ud2z-a{tCc>&{FD z;Y63p;Y{8M$x`fsWEni9@?n-j1{?o-U@cg`8F@^WCW`8_U^rIKXDHAK!|n36v(Z0I zzxz3`JjNB30CJet&g3{(!NRehs+iHMz+hENIU~qIj<{-r5ydt@uTvfBj3in$&k1M< zen>+Ux-sO}Tbc{qv4wc;b`SW$Y}lXwZ&6yV4cS@)x;qPkDla|=;id!Pag|eH;pcer zHnp0~$&8PyZe?p#9T=C&LXu zk*iPR8HCR#hLR2(r#ll66rnUmr4>(c-$m_<)xUeU)%WUuBF%kT)qe`FvbdHy?;Wxi z$u_I;cuEzlgPw07M930jkTjiQc*62+=mB|7pOuyqs%imRs%4B6d&49|Dbb@eJ@oQD zV5p~_l~H1|C2EQLOYq(~qB3sjY8vzmb?{+gfspY72&MaZgyKFHNjasI)bFC*ptF`x zs^v_KU)-`-z=$@I(i3zChou<82B%h_^O!B6G>_;9i=sZ%do(2GM{=%YeiT0(oykdm z8S3-)f(&5vm&=MU)3q${DE0nrjyw~hhpFRXYWW=2HyX6vN5Rx8yakxPyq!^tdE`bB zyigm%h;xAuD<~}f(S`<1gtF60|CqlpKXo8Ud*M(&$N6n2|Uliv+=}4!Q(rp>p3n_%3`@D>bXw9 zSnSS)?y%T(0-Rq_Sxyju%&NNh1TOA1goHv;#PoP9uSFRcx_48CgS~Ji4$F#GC3Jhx zxksWn5tC)yRKz>DA%H=CISbi+Ig}Ttz6xkkgM$z2X1#JPx^LWV5?7`BM@Yh;fYxSe zsM_p)X#ff{mf8JRpwh*4HoC3Z9W+Wu6ZBfMdk~`>*a)-2fNys1QHt4vF$eTxl+G>D zhiVf;ccQETEFxlfnm)L33&cu!O^9KHX`zo@=;B&m#UN<;lm*@5mPK;a}2 zU<`qP(6&c5TahU`r-I2+!p+-8%FNVvO_LIeTTX50@bjQ@uaq>hW0-;t6k72E%?aEr zeEQGw`{)OF)`|Q%R-ic3U2A|uM`DD`%1WOH!JfB6AI&K+)-&A-5@{2@xX-Cn6_YVf z&m2;cKN4`UyMu)WXLqZ)W|V1Beyc+2?olke6sh`P4Rdp9g;sZPV1YcMbDfq$x_Tuu zH>_F!EP%iaiNH{9yWbg%OxcX;CIroyxUmb)Hq*1Y5%e673Vm_} z-})n+kBm*(Oz9{UbI6G&o;b0$8O-#GBz~kDq*LBgpp=74NKn5gLunl`bzR13xoxTZ&i&0Llv1+#%Ol6G5xS;_^3DFa_Vj48|zDf}*Og!BU=81UF(zF;9C za!V=7aM_X!mxqj0&nSe>Xb##DKvtCE09qK(^iF!;OnV zc_sN6TT)yxAL~(_m@MkgS1RYl12Y!ngiGk<+qnCD@BX`d4ZfnBrRB{6xtjex$;L?s z882grpu9zQPvBcCOE7I={R~cqiDtAk##JAsA{ig0BN+;SF`p0q27H^DFBvX^j5`5b zLY=%kv)qY@W5uMqxFi)?ie-()mkBcNWPp*((ttY!5nPUt#fG1616jFIGBk*dA58wB zEbOsdku-L9-48L3Bz&1_%sL-&)S{qmsdb2p;R9V6DW4#v^$jdTd;|6n2*;9GHHKQx ze={7&`U8c#4VGZXPv?sdVJqvmyacS-9LP_n)3EQWHH(fbLn|KQZEnWL=!u`JIIl@x z+`TT?rTKTdSorUBu`jRLc2PodfD&8`vnAF4)3;aus@+!qh+V7i)qfE+T+&~EY_b>Y z|G<-l`v0f4u=oFxEnr?PQO5t9wy;}W{QqMMlLl1(f7KS)H$DNr%`i3IT!9XE2IeFl zN3af`iWCev`@jsk`K-&`7cuUC*n`TB^UJK~fGE^H%74& z&I|;yKY^hM+dc58c)RCnlm+fNE>mXKu2)eS34;W@BF5(qK-Q9ChL@tHz%)Bh{iIwj zymk~Mdm-=zy>c>Vqo^yv(!toqn*(yBwE!NRKeL~ggnJ4Ha(TkIiWzf;0=9%TUjpEL zZK*=07S{pb%HjM=WpEGT`pWIQ);mxmT(Zmf(#7iy7~?I1O8Jfl`%y)mH?bOUZVk7Q zN1@jd$Sp_+3zdDxBNdg%03Eel4Cz)XC}+^_TEv@sXQFKHsL+$I4IYl=PFPXg2B`1vu#N%8wPuTXt0> zNbf!_vs_xfH%2Y7>@f8X2C$*A0L)i-5J(^3!(IY?IV^m={JweZN zs@PJfU1p1%5Ygd3y^}{m*emdZy@Z)nj9Wz25vB1dB1oE zXoVy;9N9m>y&;P)3n7a9a##>*{nMLKzR(RYj^2dZiG?fMYL9g|HB6UnMDz=d_Y2jY zq1r42Ez!6HyfJQek}-auy=sU4xVGTxsq4JZXl#bKP(2!_Yq=vYEIA|J0Q1{PLs z#jF^rq!xx=X*>+=zO)$=x($D6o&FBJ7TNP+#W@WD_iw&&Vo~R>kZ$H&Mvkg4$ialQ z&glqqOAy5T-Y72DhH>mEij`CD-HCz5n%F(4RE*4$(gx@T%aRHk4yKq;T45@&XSNie zdj&6iTk5@aLU;Rs0@YqbfYt_xuy1Qq5_cLri#`*qb7vvon?8Jo+JYgL zZN2+D;NhH&n6nH4*8Jz-v2q^_T&YBD=i%UGC{?MOg>lf+-5iCg((=5#@J)B!^kdR=FH(+GtxYecdR`YUVv&W%*c>!=H+Ki3@&!A zMj>+(Eb5AhxF7F{(O-&cW?YNGWh7?}i0$aSM1_#s6>|`4Z*QL{im)r@&c;od1fF2T zdz3FsM#&v^M>axsg3F$W6qIczP@)~N!;pHMJ&u#hu+O`70?=fa^T^+6cNWky1dY3F z*e&d`yD(r|Xz*(wN@Bdqw-#ml-!1~D{Zb0So92p}cy9wqj)_vDH4rx1Q;6E5ni2i)B6BVfVzviB-DABhR} zge;FZI~NRfRZZ;fK$*qjGDnt@T_^In*W;0xXivdK=DZ>toZJojgJ^1-}VxN!YoNQ0dR+H(K%432|b!kj>(2nXD158rflN(r~De)=J zjfl)kq~d8sW2c;(fQhF|_&GN-aV1sG?n62&aE8ZJD#@pmUO$aJ&e(LZ|64P zxnJ&M?~|>-@%7$2cYn^j7DU)Ss&dvL!nN4f-nVswcf64e+t!eu{rxU=T9DY!-Vb-S zP1{$j7Zz@OQCp;`W@)OGG*cnXR3%M$8%r~_D9!%%{vyrPU8SimNK;*uW|}>%C{1Fz zJv|#MEkBbgXq%_6f@6WjOl=DU<2Ct0JloJYdp^Z@$9MUE2=@$ELhj{g5Tb(FqQcq6jSBcl&?2@j;y%e@FURj>GhqU z;QL7bPpt=7PSQlqjVvd0r4tS=XasbHZi%fo?_L)U67<|;uJ@_v%S*B3(es?DXmq{< zjV&hyi3+}_SLP=%K`OtudcafS6MM#z zHwA=Ep)79DVnN3{4zOu#n*eROcR{(4Of5`s17cBZ$f8Uuh%sx$MCWeSJe%h|h_wD5 zTZ4FyU>FtOBVeCat(`{F@HuL)kM&RnIoNZ<`K@~qSFgB+(&;6nVY^nHfkBD@wud_( z2U3+B!jQ_>B?Ns3&{pnV6wV$bFNp<>eG0FJIo3?J&T2K18LV%4rY}_bKE!)}h@dTC zx%cB)*ol$-=mV|X1Hds`UhoKRywX~Zm7X0`3Y07A+=IxX)F-PS$z^&Q+g$HcAlPWG zTLqjMZh_n+@Cy6WbM`fm1YKhLmqb08iu$h@m5J8v8Oj9eUxvQ;+`mE=HrQopR(A*G zEd%SQ)*w`Q2{@wZSUZ3&286XU-xGj4LG7aN+yN*MwZdw1Pqw@L0lE)C?A|93Yidn5 z^EF+w&kDhIdwzt3rWKsR@2q5&#@IHQ1I&>hVvevh<|39R5g>46q7V`RVg@6m55WFu zjFM$Kkm^ddx-6;k<>0%Rc}_zq{3w(%74a6_AT#n3Ti}sHC^LsMPQLYV`jokgTGZLZ zLXs!3}^4Pbhp`ExtVfHsx;>r#pY~zZP!u?(nBf{&djq8bhE#C)P3Cx zAm=!xXC_eH%g&*TdvPDX0b+SuhH_6?Y{$KnRf~T5eLUeN!K86}QXuycsF0JOYpY^Z znR=b(CqSys1p~)yE2-Fi#p(1M=Ne%K)xpMgw>MLA$IDlG$BXGz|G>41!n@&Rx?K9m zmf?+`IJr1#u~fm3(MQQ>rUeP^Z9s<&B*?&%P`y9~BY(<$6v8(9)omj+Pv#&ScA|Lf z7e$Kc^lzQYo)cO%o!^M8xVXTUmFG3TWn{5Er=|0}`-T334NBa?M;wD=6M3=@II513 z6_6n<|5K1bOmF)Ubv5V_$bpmcLS1zOHN0KburS&}nZy-?o_p169K6fT0=bWaVRk5P z-C~RlWox{MESwaDMAd4A_X|gReMB}YF_fBk5$y@^V72jU7t0VtdgavlBv0pa+vF1g3xMhaU>PZmLwGNF7k+n-Xki^(;Ve+u0BiY!yg z3pw&N1$2684n8Wd)SH!luw$E)wsA4Vcz8>W%0l_4!6+F<3l+x%d6^}@3HSn5hA`L- z5PjCYVA1moQuCJqBi0wuQ*phZcBmQ0;Q{w&AOUG{uh^p3P*0pV74Ib)t+h%vb=vS9 zWNI(tkmaM;~m!@r5!>ju{ZK(A}XBDhX$)^t&Sw)|KJj4W7Egp@SV#w0f3HG$Ang zF&`Ro&ulNDm2Z@E*MgVsz6e@%eVnfW@_Y?~;XJ$q z%vmoXFYbrxxt9@XQFAHkN0YcbJ$EFCP#x$LH^BsQx1->2rcTezLt1khb-;;}0O3qf zcejC$Xr6ib=w0wahb-`F#TKN>hanCJc{d{&O1U3$V)yeE4K3qC>pBm^t?OGNdP)aws^@AU@_xJi@LixPf6-lBqR z>OBbCDt!^cZ~F@GKV+H)UNU=41jKk0a%&LX>3$j1hdKvn37%7=&W5uIHRJnTtiofU zC(hgdT@BRvH{cV&Ev%B1NuYrSeH;Es*fXVnrciuz-y7J*LneKXYzsi)n zhtI1Q?&7l$p$7ALpE+-EAPIlA6Q`rRqRNg?eOL8b>A{I$JSZ2n(e-Yd)KPj}Qr?;4gCe+rNu{aI7r8K1 znumE*%2(>R5M?NJq}{(D&aXIf_4s8*w3r?8^1%Nrs<1zg`&VRfKj3_k%oID~{uf81 zgfE#$BYX%DQewqy7f_c1g-cGnQpER4u-B*CQB}s9jRX#GB0{Y{#wlV1r-%{n6tPel zOjO>x8rnfGXi?_Oc7kbw_T{!u!W6mSGtdS2Rs&iWn&?NtNARvl!DcMBLf)7w&MMu&BpryWCslmgk-%9#i+d=uT>6 za6dxDyC352g{g<%vGoPzgC>3A|H6^$x`*o%l+T{@ehljNazhSubDsdHR4+twv#hAh5wpCW7T-w@y`Rx0U!h8Wzs4BqhgRu=q{Yr{?~ zlvD$F!0Qw%nGA2C3T)lKBS3sRYNxJ9s!U1|n4eDXh3{sHcL1Bf%PF682Fi^3mw7JV zT^?xtKom2+SA7WtJ0@UM`0@fb9*=Qs#yCjqvQ>LBs_?-Ve)+cR3s$#B%P%K|60y$b zfQiS{H(1K}3_#k{E|U+JsFvbWhCT4+x#({^WW;Nwp4Gutfx}7q84*lMQ!SvL9v}amO^hP5=pX?e0444yp4e9O`hxu z-#>xxOE^m*`21?qiFJivzQ_7Ho`1v>3)JEdEBWuheU4xBVLBGuR@^r)MjRd~-f#SG zG7#QYFx+ChC(1hk=uARxI{yIO(lF|pe+n$E9EVC= zw}Iy?g)wqD;Q4xF0n>l^sjcqYD+%e;JQGuV{7Ls~6zFl)9o`|9yCaT+ShJapngdoR zg^yMw6P{@5cEdkGY`T32u|pB#9g1(55$4Z~co+xbeQK+W@tV$Kk1AYlGkZ~)8~fP| zS#i+Mrs6v%jt+Xcf5b~o$Kc%jS{-ld@lZ6>lU!K!n4BCm?Vwa4>G%rdULh7>XiRik zxFN;tjI{8ra%VxUP!fjW>wv_3&#$s$k3bS~elS3)EU*eTp!N=8)cpvLt;hL%HsAU-#wpFQ!Kd|p>=|o)sW!+|xO4;g z)I6D`!&a(p%6)Mr3-*N5iNzPcqr8+ z6u#w2(qmSh2UtDk&(D@;AkTHiD?vON>IPmuis5DRI0WW%h5%u8!tZ`VcZR!(xho$} zy$z`6*r{cG^3$Dy;YsNe6T0YA(E9-$fj)Klm|GOz8w$$j*n;vIHP6@Qmtc1G_05Y%u_iA1f@^RD1j1vvK@-wS$J1;5*>Dp((CtdXu#6oAqq&U`X^QOorF}l z8w^Y*$#J-1?4ig~Cw~GmqOG`XPJ=$+Nfi9oGwPx15OyR{T{C|&7hvUl5eu|2p$?;PWNZDq|`}}MB9fv-4bSdb1W=>jf!fj46I|NG8|Ga0U1W z>LLw+j$cN>E5KaolRNuWVgt@rsrk-}cfS0Vf?RUy>%A^H#9Nv3`;BV0dj$lbkeI$_sV7aM&sR+uz5`AIDsm&*v~Faan5XIWA3Y1n^$B z$$O68xs}*~dfy?-niONsi5W{AH+)#Di*bj9EoSk&+4MSg*j)wd{Yc`;EKHd0uH_(lys*s{F0 z?y#8eYz8+B+yT*QNgA#h4|w5FOe#uxFwcczJ;_~&#|O2Y!Ryynxb8K5+^66aw@0^6R18IOJHn0K*;I7?An6=Aa6~Yb>G|Bs42SBBmzj?lNHgSSC zUv5YG0GpWr>%nD)QZt$a)W6#M8ZaLQybZ7%PY~HEC|TVKnJ6#h>N%c6)LmE}H)CY* zo0@w$gP=(qc_@D(%EKyq;aIAcY+wcXGdP%Dyd6mPIi10ruN2c;2Mjm-M5kVOQsxL) zJDa$&`2qVZ{@w-k(DJ&caIUFr(Y$eA&=h$~S7KtEs9>=OVhAl3$yOU!VaO_}?t>V~e9J`QXt2uTN z$8O@-#T?tru}e7iHpedI*jF68jAO|tVwZCaw+>HVaRp*r7oFgb$qzJpC6IWm=0`G* zMFl^uR*y9*?HYbSU-gso*DB2SRr+-bx?VkQP>&nc<0gJ2^Ea!#zm+2Da>^VHeurqbu3n_WA)@jj(BgwM6=0m09T3yfqZ1 zptlN_t5A@-E5Nd1V1VN{0sU?_iMb>w;Q9^zmgF>&7sEunPf*Cd?hNK?M;h_l5HZk(5_e1he zBcsQf^W{(9GW<=*OoTc=g04%;tpcx?;gYCVYTNKRA5o^rBxzP5jh%+Hc%t}o4&PE{e0OCA z+!jcLZx}8XN-bO)k{M7|W7C!jkFFrs38^JqT zXzd0~<`w=0EgMloq2dnc3;Na!m zj!H)iWS)Se5_@wd0$w^8bdXQ!mxn`HxEByS?#iMaHJHTZRRnkP#FY!~PDY|vpl&)- z0P)ohkrTs=EHk;2^NO;FEU87DB8RVthEA_G=5yzIhS zq-!NJhi(r4W#ok`Qgk$NVs5;%(HKT z$8G%RIT+~tS}}`5gaU`;e`2d>S!K9~0+UVS#D5(K+G6Ty$fpy~ek~IW`9_+aTaRRX z;H1}cVR19>4&ith^1Fv~33mc+;kzpay$^LChOtS{F%h=30=U(ZZZk9d?}StfZv1fq zuLU;XiNA1wf%h)N+%CwajyKBXvvqoo3EU&NfV&aXa~!&G&ESz_8<0(42yf+o!0Bn> zobE3o>E&ZS5j}t{Cypt;0}93Ksy^>^RbQs8|D$>8omIa2Fb`wIXc^>9d0jOc9KSb) z=oGt!TzE@$&uj>Kj`*p2LI;Nzbx_yWK1e>?YdS@ZVdpKSv>3`HQu5(EzQo0Pkk98? z;Ol&hn#uhI9D~vkGTzHA_S_tlgsba(0Xa7p@o+MdjKb@>7unr;K*(o|e#-+pf5x7D ztuBlO@G4}f8Rd6#55lw?$H#^5K^|e4KbeQYKp=l47{qbFe-_|8KAHwV&taisX2ZDQ z8bW06l7Cf!LTA7*X6woT$5x5eb(PmT>mQ>O=)@eLKRuLQ;}Hio>-Kp zYG9)DMHW=);F4I*?oCed@~D7$YEu7gUJS2_7jaGuC8nvO3E^1&~GrG_E2IRZ8wUkpeupAah+FBB;2PR5e zb3(DL=N9#>+L{|-r?wUyNn7JILE4%%mFGa(8Y@7nrL8B3$BM_9cZ(r+)iH#&9IXD9 zovv=Xqx~$*h#iQ|rL;hWv z%%1CW*8iOMw13AtJIs*Nd*@_Sr8T_^c?GHuA4_UD<&f!9uxf`C>hDpWIl66R+t`ug zMvr5RPu_dkAMwUs{QXTlCv_oy$kOgbr!DMZiqB3b`a=}B!w#XBLBn0Kaq3~y_QCUQ zz$;RKr<~$0U}F5B>uN{TtqTW30KU@N`J=2{I&KNbdEh3*F_07d5>6sifxrFA?}HHR zQ}~a@b1(cdeiVK=KMxBL{5InkZylx>2MePY%l$(w8fSC(P1&uDWz;p4@x#hDR9SSN zgjYy7*k;UMByLE2g2WT$?>AcXNg0PrfCso~V_=o4v+PSpqdLUe6{@o$%Lc&T}-5u!e!d1%nE_IcEZEfLhG>30hf4*2qTtUT#Ch+@GJeeP1p$lpK;AeV zRK;@EjQThdq8r;jh{fm?{o_cC_RVq_2r+(2igTrWocf-m{taP>re~Q?QfkqRvMl;- znCs;ZIb;~VvjzSZ9g0+oHisEAr~KB&5PdzAx!omlHaZ-CD9Pd9P-}dfL+4U%uVnr& z1sL3_%%$O~Mxh@Z;I6SMK!*d!r9NNIzTRxh@zxkQ6L+blRaQ=zdKb){H_M?`x+0EZBblKAgyR-@L}RkP+V zsbW4e6C8dO(C{6$5yGKilr{*hDRumr)c10c`FP=DNV~iz@x4ZKSqBc`vYu$>QXT@v zqEkex!zAxbO^iQr7>Dyh9JWX;J`#)Stz-HZldSDPgr#b4XPV=OF#ZZ@g(0v&i;j}i z?ZWeO2_F#sKPTaE;dZXb@X<)-un*e8q9c$uPS1u9MeXJ^K9Nq*7tNc;TC}Z(t^ID1 z?NVu}h_ue}B4Lx*>d|6{r=Ul~=(Pmb@qLpy|H@{K-75NdxPCR_|A;aEM+Q^gk6sg^ z^T0EPe#CZoS&T6+HZtYkT9~p++T!Sj4`OjzAiA0)wcaQk9MPu>&4lRZu%8f}BB^&t zxI(1*tH|)N$Z(cuW1;lHCn{LBN7Eb*k-Ym$>IRe*qD5(zYDI-e)yPsUm)490IrTuP z`{TlMco$>N5X}sc@TGB#`I~5|t&{n;#5jCWEPrt)r#3+5gmFO|+v-~);bYR)y)q`e z3!SIvjR5QamKf{5LZo^c8cxxtvCU&+bZV5PS|&Ap9NGxcDpEm4VHN z=mwFhL9FXYk*!v0Q6A!cF->%(iDqI_i?gJ+J}kM87MUw0*Ro+uKU{Lzg5NlpF+Z1D zj4$K(kR*p@9oPB;v7B$fvrJ2NaDB&1uCJx%CZgQdjU6oE*TUg>(eSi7=CEFRQ>EBg zooKSHkttu0S}Z{i3elV6xDVbin8RaD4x>WWU7y5p~m`lcmu9xuKA%|R@~ud6t`M8=#8d`$oI3}eoQJUqJ$GdSegQ^UM;)3Cm} z$qK^cGpoI?ZW{gyt|4iT$!Rz|73lm#U)@odt;%U7wr$(voMywTVdy)Z3?%?D&-;fm zl*AXL8G5map=#XSVCZat2H}gt40T(5b+d4DyMq7@<Qsly~XU!XRWHyM8=YL!4e zsKaF3;k;b#tW4-&eI7{nN!rbT7HNlg&?SJ*hRi>dw8vt7b!TXY(~kv8)pOcW^sGQ_ zfKJDqr&k0DG;;}O(W|2QL1hdrr(a9jkHGV0?Ml4I#dY`)&>h;XxGBTX>!bVXR?|9q zhYYk>5H>Iw(7OT+7HB>FS)irxUMABW^cR7?FKPGCrz#(;WHRofeI`&jY-ut*K%WaV zT_}G{eFFVcxI6+=GaAb2Q+Upk>2V5ZT>2|Q`6Pt}!tMpqo}#EgV+4Ad%C!#qqP<%0 zppOw+)*Hrc+Tkl+Y`E1ve8nBctvLKyU2`8?_QzY!hW|dh<#u4ENVsh{$4$g7x}f4+ zSTNIAw8^{&n2VhU5S~+6t*7X-#1mnRTPBAcl@9~II=j^bWt79u>p2`9zD={JI>X_u z!e>~*idu9@aE)QnhE5J+iJy8Hjouo28*X%b)5_t=^^Zf6JL_1^P{&qNqY;Cc=T~)` zP}YB$&muf`+=~crZf5?|TQ`CJqcOh(X3fys?Ie9Zj&qGMUj^n~Kj%H)zAwnBzX7I4 zLe>A0z_4ZEF4$ur5%c%*38okl>DdfBxn#8x_E4ZerE!HPK2j=7I zYF(4sX>^4174nAaQD3hG-%1$q!&ls%#|sMd-70xBaWVJ zDnr=QltySY*C9L?rJ!}p=i$Tt0d=wHu6oXOztm`Q%mK~868>^bE8@q5neyu@4j+>C zI$lzLCh;#Md_%(WE^f_#R5G_{6^AV%$y%|8Z==sf*v3k8RZFfll50caTJZUP+z4AV zFYzhtWcn!P%=XYhw+ww3Z(Xl$;jnQyhd+#R7|d|^Ry~I|*KimX{DlU`|B&GDwj_sd zRC4&G;Kv6!evX8PjpFzg;rw^Wdl+aeN{wJWSGI9@rD*cP8rJH{v8?Aq#k3;81cRYo?>$8w+lJv6EYQBs3jOx!|S2LQQwP)62K%!NZ z$2D3QN9PE1Ri)dw3Op`SX@N-1T=ekO9&}I3-JrbAgDx0;2`F##pw+{#2DHJ0Vl9{8 zlJA2a|bP>{&!qX&x6&2b+^ zhA`!OS{2&Oq9X-*j=m1Q59lHf`V9TuqV)o;qI1mKp@m2z=X*}Ozq&~a(D@$JrlNCrx56}#OR^mNG`2NIy`Ge?MniRh`9-t#z71UAllX#H!ghxrF^a;;i zAf;>gv;&}v1yXeg(PIPBUK)`0l}Za-SvMC8c6|hwuqtq4-RRcNhM~tj zh&3Oh7%%)iTZ++yBJ@N&M#~jMcbm_}ZJNp31>oXqe>0w@dp+nboE2UP&N&4U(YEUKr8ohq#Y za@N!S9`yH7O$ zR2-G)pr?z_lEirWxCrGFd(lmknesV&JQBVJ9XUlom$oxhzBfZF=~1k2rqFc)ZPw!1 zxxOiM-#(nC>b^IDt;G6Z_Jz{rdAwrIAG_8<?-f1fBTtGAEUUqarIc&@$i391;?HL4`NW}gMTztdq}_A~r>&x+s=r7aO*4*E(2{B+c`Q98 z&}RB=b2PbtUQ%gdXA1_Dw}5^tX{x*hbm&pcMU}UJ77Da`E@w;Hsz9o)5+yvNAg_c! zduc~GgOK)-2Q74l0Qy3p=d^{{o8!mPile1G?f9&dJf3dypxJ;Ppuk%gmwIWW2YrRnrk9or^c?Xx(MzW<5~=Bf;9R5?X6EfJ zbA9L1$0|)*J^I4r3R-Y-e+esTv4R4d>gNVm(%Aw%CnMNOdf$V1Tv|!TFXnvb(_cb! zeJg3T2l2S{UApX4;TgCgaYgdGg%Mi2so`osn^hVe(R6$4d~%iuB`v7BDR}`s?Lqt0 z+>u;GGvria6}?jXK=L9omnzD}CahNJVS%30xPBK?`57v0OvO)^b=T2Sfz;f19Zg!nX$3Bu6cl)|<4?)!Xp0BE*6}`|S3Kxi=fmXn^p*#0 ziC+Qe6A$`9Z5tpoJ${~}zh*xJbdf-twSTl&bOUA2mo)97QC}r*pfLh%rfWu3(@nJh z1)O$1ofFY2ZlXOdW@vNZZ=>JG-v!%Wpyw!G#(yR31c8*)x6p+HpwiLp7FsQ7=TVcU z>$eOT`EI3$ytF;FWyyYM3!vNRnIcb(*3usZ+OBQG&LMV!JZNxxHK5;K!g6j8E*@D{ zv5wwWkak@wQx?+h8JPw2zL)mYkP1+ayj1dOTI1eGE0ua3bxPWKG#e|tozvPc=X~eU zrII#PAl8Hi%2GLRr;{XYyT)?fPRCy%c6waWlq|Q?%K|A`ZXY1adivPo!m_NVnXCI{SwBFQ{xp_lJBFlQZ&4XB$ z^>mj&%94?rJbvds<>l7z8}!9yfjyv68QoB(SzRA z)+Fv6KzSG3OD^v`x&>)>(NYikJD?5pvIqS{Uz4~SR2uc#yAMP4jQ@Rx&q}Xq<@mHH zhX)SYnf~lrrg_`P_^;|X{ybJ92K}I!G5-W!r{plktg9+7H_6{nUhboPtnzY;Mq#C; z(V6WWJ|U&7!`c$(#lYhR8t^8)j?hQnNVzeTrFmstnJ6#U>HhX|Y+4>GW&LLu=D!Jx z3j=wXe<3e(zA`Z|RFs7h|A>poI=x=aH0Q-RJZ>;^YsL|y-!GaR?J(vaBRSjv*>q}@R(L$f@mZpiUE>>5Ot0|$afKNe zu9niTkT#kLZuq*5pJj_9^wAdP+_YQc(>&FmWP zYGc2UcAR8#-Z`)|oo*G)ABz@Yd($C_(sKdBl;0lTxm|kDF1&}y+*og#XTwU*Dttol zD(-J!N)_LnX8QJ~LWnors|xW#OR08eYca4l%NlF0;MP291Y7lQn##-lbP2)$CB-ro z=hB{{FpAGIvHV_JN4Zx>zxy6uDbVT8HZJ#%ur!?_LUSVYQ?L_dE!|~|DGe1~g{rrz zuoVBhF(%%(4&pb2-#C7&^F)5DUzvDNC-*@r51Ak>8 zj^DrIH-_JL@w)>&dBnF7TKMay$2H=l4q-WNNO0IC;baM?NjOWwITFrCSOMRgDVIpN z453AvB-|n4ClYSa-ocEwO=ge?y*P3h;y=O6woQ8xqjQq#8@p(SR*%v66OB343e8Z# zuM`f8j2i|W2cNblwn)My_@*dRE;B}UU4ghSd@J0A6QXz1#fFu-pRPjqBwdg2CE7?Y zVuyI8?6++&Hnx304;sANHXmhuN*j%l))%yexoNKp&yDnC^}G0P$SaX5ZIiLQqfT2% zFC?3^4OAT&2h49X6SZx|meKoZuN%!}`)S(^PG$Uev>nCxA=)R1U!`>!w??kjw&@Q> zZq&XsHpFfd%G(j=6N8PkZ*7ydCygETKEC{Se)Si>M+(i6LUW{~9xtg?+7Zr|T9x)#t*%#TI~oG`l;%av<$9I* zLi=r6gZWTng?_wn=rR^!k9@fK3Qm4DicYpc&qMT6=uUj&X{lhk%=wi|^e%J7(6jXA zz}$*cFqZawDNEB1Y`Q|f4ERrJvbiF9vp(5;Z1hi%ms{$5DP^h9uMzrb=FP!(bX!|F z;xGCvb86rteU5pG{e^xL8J5qmvHue`)<~}Trj<$=Yh@>Jt*p%!nSsHRj3wsdk@s=^ z`Mt6G8Mc0|RZT0+iv}HFbZJ-C9Bgc(1KMUAvy21Ujz#!q{~}|!_Kyk|;q=O7#(L4! zRp!%Wml)TZ4{28#leOQrtU>r|V-0A&thM01@s8qJS)r^I4NMbTou;kBiSHt_r+$Mm zU%$z`AK^X29yaEfXV{M$8_fI0K4WY&-!+~GemmAIYt1FjHlxc(4tveGSM;+?``wr| z#xiX@PCqtjH&oc>N^q_)H<_`9LFN{-eaKLAn|bJv;pXe+N}QW*H&5>viTGBu&NlO+ z*m!e;c~0ON;}dgLk;cz|V*=C#*z7cuvNUZ~nVO@h<6nUQlp9bF=qgt=>4I1(!QZK^l`E_$2tYWXy z4rqJU+@vkS*}^96MfA9}rBS{sD_=rc#}0ZO^uy7!7Magiyl-~-PHO+qoaURD zJri}{B!S>JYZIdr&E8`s8loYL0e+eXJF_wYSVv%@}U?54nUpRL{P%=FnhpCE11 z`9#jvc<*+JX$-+y5GA@uTniaiBK~RZMZV$s;mue0HfX;zuJf(+ zX>^D0dTpP`-M$BX%PSrLH{S8wWOQ`BOPi(7Zk8UgReHomx+nE6Z55lh#nQ$|U-*^R zr_OBq(l>@~v#&92jdxYY2!}Dk;Sa*$50ZDI&r0oOZStKSI>6#F^H!Wd^T_$2@Z2o% zFD3q^wg~5$YqcAyE=70-u1a5TzR>o4t3f}maUC$u*oP2qLFzW&c}N|u*H=Ab1$AD< z+WH@>-T>w4{-wUxecV&F;m=^bVQu%}vlRZI&MSFaKe*QR@9=GEO#46a{Z4Q2+xkaU zErJ>4Z_t15uSWkmq+zQ6OW)?qI+Sv-r>g_NVI_7OG^- zv)(Y8rvGBlqk#x!y)H@$W|m-{H^SSzjZ$zy^;VGllIsCInYFdC|{Rxh@K>C=L1 zDd(IMyvmv$uBIjWmF9}z7CIB!%ZmLh(fJhmdaHiKgTbuEgMLHR>jo9((W7=2=N#m4Q;ZjhE#+$TA7NWp|y09d2eV7t%==l@cjE==wjc|LtI~j{%8Mb z!R@{W+kO(-ZaroEG_*_~nOS38tS_p45%I0{YcS5gDz^Q*F_`=GJ-cqxE=J3~8oF2? zmi;|ws#@0=4f@3?+Z?4;2HpvMVjVnsM`(;__)BZ$h>GAg-_OSN0mIr}D<{mOjJAfY zX3+n;Xdt{y&$ezgm*^vnH>{xlpkO?Fy}7rU%8gAJivS9UZRnPe>mZeo!Be?}IH7{5vu->?xKu+7dk_4R|$ zYF4EBBHtGCzRY(clg(F0Ume*d_1&TKor@hhpPuZ{`7Xu|o$qBd=aG@D=>VT zvP1922tQn((8QE{N23ZH-ivI<$ZtiL_@Ai_N8gc|afgg`JM<*#xI^btnjJE-?a=wO z<4fZi-&Rn$wTDG_=zRO*6YHkT{OBjv`pl`( z88QMKD($jO4~@Wl?Q27QuksH{{WN-&^{e31(aHWJ>z<8X<-eu=r_r_kL&{!^e(9U( z$L$yY9__D1AM`&m_S0z4*xZ0tFgl{2MmPHZoc{0VCVz8HUCh=mtZIpk(zXq2k8SZU zsp^a!DeZW@wPEax*zpqI=5IMVLj!3cB{_tCzQ6lCv$K+TYyRqKR+{_V z`@8SI`+K{;d*_+t|4cnQvY~G?9{Wqd`k@bvTpIY@wb#0DBsZ^rd*a*4^16@F@_ngH zGLib^HJ=`lbp6ao$#|i}jDA1Sv>7#x#$F0`tr(@Ee1_dHYMNE(Oo6In$UrH>AFK^V-o}Hp25B=g{8k2Hs?pdEQ35%j&)`_>E0BQ&JjJTHtj9M-mTiePDFF zzqVs)^g_S{QA*1nPhmzq~$XvIWP48yX)RLdT-yK-1>+8&(O|5-|@aL z4t;)5xcW6(c zp{ZjDzJ6;Esei^64@xJ`d&krKKv6*vy_uY``&-J}(<9!1c`iIbK7y8ev`H%E+ zfzyOH86Kt$KNsEkS6=JJQ-3t@hoj@E=LWulX;NW7CW_XcY7 z)fSFhI7PUP8wa0Wzl~dypCi1^{SD!be0^XWd*uw_ofh6_;e^2-a@PQ#G00C?n0He^ zPPyvKCR~GAe9Zj}VIp`V;TM7>LHZSb$-=$?#c#B5!os|TOBVi;g&(uStHKZS`NQb|V)@zA`ej=EgO5uepEC^qO;P{&>x2*Blu=Gy0!KzdZWY(do>g z%%l9ge1bJk@{^v!ctFyuJTEuk-!BtaX-?T{BPkz_lg99UJO|sV$1X_Rh0}+1sAHEPmhhZwB)2Ek8rZ z9aBQz{@d5Sjrfr*?;!lkYu`=yH5*Cw7WML#{)>d)u^#{aR<-YL(0G1v?fVG-#XY}4 z_>L_v5`HQx$ggcw%YU;|b${=U-ysaPf1L22-th-liOVC{haZghNDvNyb-vt181NY) zo+1qR3=`*85bg$aCHyl%_Af>la5UbjsACe|$AhBChf!kyx42=8Up z0`4d99Z)yH$_2bv`+CAd)DF03d?VpcP$O_Z$uCI<-08iI@TXYQfIGZf3D2^+0XK_x z5Vqm^0Pn}dgaNmS?HD(aFzhdlx`!=Vwf%`j`BkW7$2?r7(RQg{NHxqs?aVz1UByJ=8v&8L$ zf1cP%_=UtBgnyCP!My(mC2x0Mr{wMKuepnTyZc|1yxo0^lDE76ow$eaZz&0Gf}08Z zgIfs)gS!Y*!R>^+7nd*{+(S4L?0{FcGrOaV@-6OtiA#ykCH^w;)x=*XZVg@^{FC6# z!CQmR2j2hr57M}BJL+arlJeWRO3Yoq;bc};PwcK`m~{O#SOTg*)1oz`F0{q%-2&-nOX z;J3c~@9Swn`k=}9Z!z;ncI@D}LxR;0xiKDQw&UdiWnKCgoMw({AA z#JGdccCfGm`kdfwavG20L+%r-@;mr-t52Z0KS4U%_maE5?;-bdeEwzMR}=4W-%jiw ze966O@F90;aN2!#@T-Z>4!$w?rPLdP52c>P?>0d@e?a`9zRK`~d+YF56E6+FtV-kL8r^LT;6K#wDjdwBj~+zbC!KFY|f3JD3*%N z#bb@It{$&i%>$|BXE9zXO)L~kg?d;yG_Oj4kA~&y=`d<+y3!2mm0T&x+gEK?CvuG@ z(=9fO)k*}OspZa84)cl9+w#q-je+J4=1zqVhi7K1#Zn{6K2|H_n&E7&&Zr|8i&L&` z-{I~rK5*CE9M1=K+v9rznir9YDpRjC_ZBOKu-;RjnUUI`Yb?x!O~DTo8+zV9Q7zYE!e~sLZPs%S z6z1l3?sVYr&YkXlCOcg@nyZ`)g$qp+V9u{ul)7RDJKf$^CI9$N_edy|?sT(NS|f2M zF%P@b9j!KZxq~^ra(Z^x*2 zt$Mg~(v2URo1C5*-*aGU(lO6tmEsevP&Ch1S@(q%P}>ZNM$0;0ol*^-Qes~{x2VSU z>|-+ZM!0Q!+8Glas_<=CwLnM#!h^Z`siWaZ)}gUy?~DV_vqxuKb$-4PHecsX=Sr<` zZq6Nsrw>)anT2ZeP-P;gwN;OXc~-X>agf%5(VVw9Sy6oA83mU=x96=mKhT+_&& zZwFgy57Vr8BmsJ~*jzC1!CbLo5iy%ZXmzq)JRR2O1d0Z3IlxXx&_yjn71kN}t}PVv zTB<`70a-C*X0g!>%iAWZr4m#nEN`>*^MzTf$*|$uu!!*1)8Ex#!nVN+;e4)DYFgYl ze(qo~YU^OGk~E8T>w5U-pC@x@xO<&N}!-gad z7#p8QK8Xlzc`YJ*%vQ$>1!;lBu)eoi&xZwvMkw%T)I!2SuFPN#Io&{`NOaIn9Fg#wX_d>>3Q!H$gi{ostez1#UxN0g z=cClY+({ze9d36bpz4dBYWDwS8s}o_VTd|xw zYXW9DKW?%&2Oe)Vu9o5HFwW5|4(D182J~>XS)5;FWlprf_&ihtaJn%QihziAWzoz+ zkp(HZ$$IWgBsumLo4)kX5XE$wOuxvDX1%&-%}jeDD83=et5oadT*;CM;rU{{JkuTs@Mfwl;_4A< zmYz9{#Pq;D=qc2L>HK|lD;Kexv^ip0YE?g(yqLN2ydi z8LC{dHz6c~IT+h{q|Iq)EPp6ONjXnci9ZxB+VgO(xqwIpk0H`LN6|*;6KG-yFOcs6 zkpNo(lT?|ZlGQj+t)8-o2m%VWcv%f=Oh^^a)Rr1AHI2h9u@@3X<{)dZ3?@zfpes+I zj3kO&vs$He4Q+PjaJ~9^3FcBauUHNnv(>0%(WoR!j0?X}yx?0ph}o$Yk$@%)oVTHT zJTys%VDm{Z>?3v2IGQ$JtrX}A%2|+}vXSp^LCK}!DR5mmUFA`LyJ4xBe6Ga0P(|$S zQ?ph7>WiZYZiz_OWb7bMqS^%NBe{CfG9Jy9PFZAcX_4GRCp71|sV7>+nt^-lH5bWS zH!V}XYO)u5PP*KRP8Et~%DFwQX0uvhl*L9-ogZyg)c@>aE!+`tNi8QvRZmK@T!uV?nwj$&WO>14D_jAaZtMwj<(@(jk@Y}o-6gkvXN&n$ zjeVFjj-n6i$vTIX!hvEXbQ1U$fmW(bi(!j37pE$i5}}(!1z96ArD~0e*kDW;`5*?W zh~+Fz!}j!cRt%Ez-s?4=foc|NIH(#m(_D^5sB}}O5g3*!lr>cftyveREsi&vx%`6U zjho0-kSSjHxO{JdA!2mwtrwYLY0(PL_a?gbirTD7Hep&xMzT;7lC?94Ih(0;qJ$9! ztD(RPp4lq;YhP7zdv5w9+J$;DYE(*kJB~A|lC(GR!i)qW(qaD2Y?hD@k zz>c}OhI9sBK@da564ch=%tDb2sVJ2$<_}g$V#`&}2wfOlO(T?3jLWjh%2x}>z`EI{ zG+dwziVQo=9ji2u$31|3tzu8g?39xd4a-$%?GY~(mSN+KMp!;kTAVF5dy96#^;{t= zvlm&e;ad*t`-_D_SXqY0RS@za$ZUZ8D>KcQIoV>Lbk%Gb&Glk!Wu`}h)i@fKa%U~p zxUy~NrqId@jS-6C5lvKUi}m8kg{x+vNh;#es7@p<)hGS# zjgPQR^O4gAkM>itU!*)uY)v=DPr$H|M&e->p*sO9$Yz_k{C@=A9Wz zKI-+Ik4M^0@+Ss#%@+?a^Up^k(dHB0P6_Ki6`5N;!JJljM%-Q~p%5)BW0|gCn8Scg z;zA3x9D7rH`T;w!yTB4K55Yx>L*Mp{r{cO3i3EWP?P(#WM7v6;@n~erl0g~E3PY)t zNFdpZ0#{y{+>f(keqPns=0q_W&4OSs?O~Acp;9sCn7-+5!RD8vJqUE6^tL)u8O+06 zX&Ip|A_Zk>LI-OFVzug-kR3G(Tf=L0Xnx-LfkmV8B|*DX^-QxxKDu{de%YzO?qlA_ zL{X#7=BEw`53%{w$s}AG@Dq8`nbwtmqrC+$B0iN9eu>xvNP2(mcBZPtts|eqNCZ^ zb$|@7)|OLhd%CflmTEHNz}k>4aSS`CB<(23qt$BRK=q_;U8I(=)$$9@n=NMBsUVur zJbW`@u1@YgTn{u^H`{s+or0wVSeAkC=NfUIVGw#;aINArrlBkef5 zGZw>yMl{OVb~u+m$pqzaDRw+4H*f$VF zLy@fARw$LMTbYU88nD=uq%yO!#9mzC3l>vH+Q}3vrdfP0jUTE2twD2P;ZR*(RLObv zl-Qymp&_PxZJG92=)>$>ynu|cXAreKji1Su2H{l;>&;@=h{ahqD@LP=&bDxJdY*Hq zi^!a^O@%E=p<0FsP-kiMOfnA3==U$ zF_0L=j%YFJ6)XW)t#L%5EemnR!@dT}RAREa91putS@bqP{5ZB~5L9;oQ4EpgIvE)n zJ*I0HB+kHV>}zYGrp_YPyAXNh#!cco)L`{Y6j#AW6G(MeOQ*v)8F{-Tq#DzeE;Nic z6S3ORTxVJ**a7?IBl&tXoR3_QLcp?PQpMpv6GRgAh>0knvBV^OqCvN>WKwhZ1En#VLU{!m zY~F93n88uw+iKO&X$Uo*GF5fLvQ5s!n%UIeJB^VZr)$uFPhz?P^jkAn48ImziE8~& z#R#9QdiX?a3gK^fg5~hXY6w*aJI96~c0u(dzWIjW+Q{{$HMF|TId3r|j_JvVTjdiW zt=Oj2tSeH}rj++XBqT(BXdZN61nA{Fe>?~J{TkXCjVo05;P;HG$`tTt4|Oxfd$gV3 zf0z`EO9(07zr>_GWp(tnogLI2TP3_5u4H9>?S$KCHTDgE?d67ymNB7;`r&RJXZo+&kN=zl-mqrY8fu_qKL^& zot{MLf{ulvxH(83-2LEH$;8MR<8{N1!E>~w;X4A zw%=k`S5{oh&+^q8N-)-=p;WFCS~;mK3>Zm(hz^t^3LNL$kEnceQMBja1_z$+o$ZUJ zVJpR(8C_5Kk=wA< zc;E-O(9`>6g|$YJEx-h{c)0(Y80dJa05G<0T$UiGRzU5FhYm?CZV!=;KN18sexl)C zUnPh<>qJ7iIE(p4jHAgSrzJ7~0BMb6Dfj~jQHXqaKms$oFX$&JlN zI0!fYHrt?8Ycm`(7P)+LdA5i}4#nksI~bemT4W7&6p%7@JZ?y=urAp(dXHy%4saR{ z0*X&_7%ZwUcanNcHB!**c$~l0;iZz&o_$5OeoGWxnSiBxU=YZOp5##u?|PC%BT?1^ z^!}5WC8D-h2=|`CCW9@|cB;X-I8@-HTE~!kA@y+`gxGB4USr@oZ1TM{#yL(yoJ9wP zjmYPt0xQ5$g)1SEePpgemdGywg16z!Hy;+F4tiRQA=X%&STN^R18;^M$~TN<#qHY9 zN8_>iMF5*%6xWrVupXD}O&9?@QpA}bHsvg7a8F^^++1^^$n=Gd@w3Ft`)nj@y&lY+ zl?bM|hrvufQs8<32RFHT!|o|~V7^uNk)~)Kdk{DH!D7BHGr106`4}PIPd8*b=1LG4 zmP34($^?>8yml9yrjb9M*PSz|V<-)>)dlVyiKQO% zsLM+|axGrFUXZHEQ_AMf>YCCMbsx8@@l);`j} z@wKN_Z!~pPrrP4{+b_K2G&?j~j%DVEp;9=dT+L^TL4N)s7e}7U(fnHhwW-HnS9wPcZ;%GLDXy&g2#w7)^~8HYU60mWfZouG7i; zP_3N5mlpwGxuyuibfVY&Fu7;9#fCYPIVx##tkAHFIpa;wc=3~ytcdU|W};id8L*mF zE)u1I!=QX3*OZ{bnL+cf!NqKDfwZS+*-aIWzesE4%UDD-3>ga%6Iz;87y)IHwBi8`)CZohf$Ibht0n zl)QB!!MJ2i$4RewBWf`~A@u+~`s78t2%|rw` zldE_W-#jiR1T@bmw}-4FNU!}KftW`WTZnzHx(}%>djxO#b|ZVOM`Lu2V(_(13a5#w zRXY&Q_pEX^6}ydWg$*hRd?nP@-11LIRj~1CHY|xBqs3i>hAvGUn#aMvzyff&X@6)@ zvFw76s^KV#4-zUX74yZWu1n=l9VnKGGHJ764(R|KU@MYsI2<`65Xkl@V-Lej(0c$;WC}Zr4?oof2VuVstpmD>)-P zm78C}Zwq`BU1FA(*vUh>+~t#btE?S+bS>M|l<6<3i0CelKg{;2+oqXQd+VVnU({P; zAWYH>HLmc4Xx-%;DV|6+LAF>2#*ldKV$V5tO4EFha~dyN4$BINCaDWm-rq=81T#mk zPpZ84BP^e{d98)qkZRhCMz)6JD73>Dgh3@bPDGw8AD$kCS5#)2LlM8b@s^(2kpQu| zMTv?%XRG$WnOIU8T+du>(_L5-E_UA8V?)l()?1+=(8i;YH(*K+!D#G$0|j@8_KWsy z6tHrdUBuZggUJh`8Q9adBNp@Yz*>+STPPwfl15}aRb+3eiWwSKS}r`TR;0JhFVoNg zjadh}?zLiJAFiH(HqKzQNYUC=Yc7!yQ-fzMWFvA`_J-TDkI}e2xq==ibRo;_DItXw zk#y5@F9(!*PC*Cyl0jrsOmpM=tlWEDJQ(#eFiEVl@wMj23Pt9H1siiuURUg0H8-m1 zFIax>x|ipBr5M(|W1!pR@~s!y{2qN8O2J#+><0OUhi%r(W-shn^q6vyy=5ug^MlnL zq@YLShFEmDGi>Y*RZ6_J%4{i%qS_9kor>(ydp#ViW_M%HO?qwNd)>ZlFg>j2&T6zP zk8`5Ud7R{yk+DZ~+|$6cq6=CbuPmDDXSPVh`}$B8+-`Q;qkF+NsmP=gzj5W(+@=g7 zPKs!{`vxyF;_ZU#+VS$QB2*?gbv=ns+%t4Hr2~y_A|iIbN?m9^uE`dZ`nvZFcjmAP z7IjPsp}?m;K3#$DeG1~c%;$V{ce8Oeg=;HM$!+%0cx+~ITw9Ph{s{3Np}Q8H|ZPih17ZqM^ZnoYj;g@(FiaXbX~^2wT5~y zCwrWfl@rGi`})e$F^&p_VJWXTj#v!icwS%di~YV~L7V$HORKe-G%q zes&vj?ga0>EAeUarsfG^IllkjaBlTsSEUSJEKq9w_=<9qz~}Wf(>`7YIee5loJ0e2 z13$($p54I1e2die5!)~WG*3$v$Cq>5fo_{_^(3{*e5~H4mE~qB*Hd;_EtFkNBe^EW zv&J|z+6C)5ubwmPXWeN&^=K|`Q<+qSdF3cQW6vg#XzXhhSDRI8S=uL=H6P5G7F7! zFRfJgG%Q_k?)oyVwn%gNnVM=lPhLDL$1ia?-Wp%!+t+^HT06#c-L&;nW+hgx+KdXRg5uO*R{Q= z2=m~gXWdo{|3z@7*}H2BHWKy5jU8HyFngV1er2=@)3$ORi_Y?d6}(*Jt)#2o{twV% zi+0t&&0#I?fj3&JQa9>plc#@;sA8pNsTHrO%LvEIZLpTta3K<`YrNd(qh%j+_i9#U zI7ss=fw678&0V~}fhg$`>6N_aSDF?#_4X)wImQ?@4^fZX`u%eG+9dsn&O}YTe*5Ob z)UVR3u;bUV#`v3jpIoq@G`78Rnb!Gi=W+VyiDWzvl_xy0>u4w-ihi!!$7%>C zGw^}v9+wC6kVJD^zjvP6(Oe}l*?p+=9TTi<-Jqh;UYb7!O=*oeDy9$5HEx4sxYt2r zl<(o#^}RV7m1t#U`4zI6@?3#O`l()l`KSkXjmlJbe*$m%v{89koS0K@;&jo0;#ETN zgvL0=T)foxGGUBW^^zu*Yy9dBWt)aAapf50$0BKd0tw;T|9qC_7bE4sw-uuXJ)3*h z5*zwKd3MlngbELnVD%+5&|K7bgII|YCzzg}Qk7EiK=KKD80`kAV!;?yaeqDT3e*FSClc@dRtB$6e`rN=6Gwj2aQm(^N5m~ zIm_!hv|zqZ{LsMSWgBBm^OQ}zdK+P^CWRlB@HqNGZ7}D7y}V4tt?eZNiTS2W3~Rm( zaEcJvp|zE?lDdLmcZ{P3 z#3_jkCnO$`s3pCf>-?Xff&f=3ow~MNcig$`m%( z>eooL;{}7(@t}=TOxJ5>QToQKmEKQjVW00BfH`-4Z<&<_g^g!`AB|#Ew^8ySwWP%2 zmE-m|^YQ|pkzb=3YQDm?RCHu)C8L?GiOWy=nXaE_#LLE83~ks-$T(hZ$K5$@lr84; z6g6ez7uH3QUVYYRS0c|FQ;r|zSr$VwuHcvT6UHy%L)BDy;b1RM)zWM{XGqD4wyf55 z2PuD+`d4Z3HgDLfUvbMkwIt$}MUVQ3`xcMO6w#VjJaqLeE2xoMnN8nso^Hd+{>KpW zGG)O1b(iNHVmvakFlTPKJnsPgiw=b;afKV6>e8FLwU?UIL(@uz%*f*|;)m;2uE2`C z4SQIBVODFiyo#8&8^og?K0}#2|GZ)3u3666OBwNs@n~ieV{-;--@}$*3ggl>B#~DN z{N=ji%xDVZc_n{dDds&*ihg5i7Hw&+v8kyQj5lKmR;kKslr$-^NcivOGfA8X7o_76XiA0L6SYm)kCZpttf&f^MTAyuyBav-?v44#B zQ32T~$maza8grJp*1>|=_DfOG&he;3=Xi2`wi70@3j=JvIv?P*SlKC_Dc7H!O6xB< z5b(D?dz>?z*Ql}e=s#)8Dgm-B{QX7T>PWRNLk!z8fmlbPbGWO8I= zBwG%G5zvt>k5DBTQRR`<$<#=;{Y(&8u4Z#A)A=$#6iS5=-nTX~l63uws}A8k$?L6r zwwx(xp8T!PJdw!m&+d<-Te4f?=uO$1(m{}-GjLCPgV|0|!FPf|UWnK?vT@@^B@-S` z`x)F?%_lLkX`_WBDVBrg*SbO9i!ZoE1510*77x0~r*2C5DwqM$IhS8A!Pxdv0s?n9#g&W7PfApg@=-%(lPNw~EQrvC-84 zRMvjp$fNy2kWCJ29clfYnPRqmAqdhooqJU^bMDo2(SE0~!`mPbigbojJUbVO7#Ca| zg3w6wKgR!*AH=ySRlXq1r-Q*Xg9!MfhQM0;y$N4G+u1>(b4QXMl}C({MHlCe^NKmv z?|8QT0?E!h)z(ECrfR0RHMud<{z#CW3Nr1Fk1%|t7`h&r_8$-v=*1|2*3-$ceuj}w z!z3yUO>{mWhT%a+VDJh4t4lJo=UUy^apta~!iH6Ae~`NEk7V3nRFqCX2q3LNYqc4X zrg-jY@;}bH`v~g+nbG42P~N1c%CHq;1~KBt50mk(L>tt(xA9;iBf(%04Miz8pq}X~ zJH^y(oosE+U0{5ETG?~&SL-7@ZDG#6NDpf4+y{BhJB7}D(D(4c{v;Tq@u*3tCy~}d zv%uX2B6;q(F#jDPEGI0Gzgl80)4pW?Kg0Sa5G~C65-q1Q=RP$!)+bzxJldDkLuWlm zx|9a2DxLL&!q#W3yYgz@sZAo&{!F%0PK_i7Sx{r1b=h?zo-WpTvR^mAn6sn(NyO+- zvOnAYh3o<%hT+0n3&A=_yvscXgsrT~5gW2^bwQ$8yt%M8IT*?6ZceZ&md2YlN*s?$ zczk&@>C3gB_00Wj#AVM);2Vfx1W1=-Vy;dimF!P3#~{V45jA7`51vx#fg}`{@ziuF zg`~DDTLl&K`Rk3tge4UxTor}l8IfaVH8ndKN_>sxR;S`fGTFz%bTXo(bed66nSlw- z?HA}o-4V0qGsJBios8vlGUN<{ksy1-H=@P=&M2=aw8hc7X?+IigAz$dYH1*Q#Fo5$ zsn5Cea580e5%~e{el)yvh8T`I_iNM{3Q}WKT+gU)by?wp%rqzy*@@dbNErQ3)0Vpih`sfAiUA}E1yMB>wqrUhV?=*>C^Y{pL_qL`|LN~ZH9sLgh6 z@I`squo5F9DDtJ75v53M{;RpAn@6n7(#>m-Alap@*`?e3{~?<9MF)g-dQWajNS&pk?o!t7D9fH??H)x+`#IlbDmBo6m+swY zBfNKHfR;BqlO``H?A!%62OEvOo-)8w!j!}ky6MQ8nu}d0V^X$gvL^y!czT=@Q4YoPDUzNSu_ul;WEZ&Gnj@C!W)DM`r7U1XlO9Z5c3&+ zEW0UuWCXs2Tud8c2(3+yFe(}qQlme5&J@K>os9p_e3p(4u_PqZBPofej8V!FB8)t< zB)PTpSQ0u_TP$s6DVIHxSqd{t#b9Kt-`Xl>mde1-CLhXn##5Qjls;-Q`cpKfWCLY7 z(^Ndje@2$=7#$J>R03Wd>7*44(1uuuvK4N$2*#ga`kPai+FyOytoMrWYc@=p;j*v3lTg((? z3R4<$#M3eM;}I3xj=>ycw+|-!HAD@JUpxR+OYg;O9Klo-yRO5g9H9t;FNJQ(6h~d3 zku#JhfqOAXW7~B#6IC)riE2sb4g9DDPyZi5Shm<_Ks+c#^g|!*PuUWzmkxulpyt)c z;&o#ZV5k(4+S2<4U-|&XzK|7-wf!tcAN^87!`!c6i-MbOOs-+Bi+VHQ$EHp`O#u;pYs5Mj3Syv>RA?z}DgDt^=)+UvYP0Vu-i98qsy9*)?F%%|Wc z)jGoFOQOkJGAUX`S$#CiT$rZd&_4guCQphMzF^_ga29=} zZ%>Xw48Lo##cWihfrb!G#OB4D>mgC?l321#v2W1C+xbi^Jvu`kH=UuEv#_=pUAANi zwMX}o@S?Wuo|-qimnYL;*Xuy*4!vh{)@~)mu1AV65QS$t@70{nW;*W&y>T%ss|6*3 z5iCKAjG%06+Q8CU)YYz!ij-qRq=9G7Z({MY=Wk%S=-;;(sbX8McfBmR3R(_TMS2fi zPUEi*lBfyVd<;@ony$PwKfhJvb$*BFo&rl{nMi7Y0>(ZVMvvK2D1ziglD-Ej;xw0$bfc}zINT|{ZAxz1yheyu>iO5`UM`E>>V zVHM*O^P`x^colO_$b%s(XkiF`_c7!A-7Ek|FX5eW9?lM*Ej{d%(u(ZPE~Ks*8wC3( zw2L&WJ+Bnz`*BxDbhJMpOQ8KCThBDiy}TtP6UsqpJg8tasn*s7>DAZ|*>!#dZ1B~@ zI;40Proxl_mZTR?kta;r_E|V;v(WIiqM+q ztur9Kn|%!Dmy=w$8HkVFmhJG%f-1X%2U*c$0PIkcac0snR(Fq}0!8(mSIaa@tuoRy zYG>=qYKexslVb6hWI@5>h5&`=N&zfbr`QxyOg4lt1omvS>#+2LOd6KOC8c#EYHYw$ zb+-G&sQhbeLz&tLb6n@A{Dex>sK?qG0+`cNh-(I$eHBkqenrpUIF=F?v+E>m4ZR|r zn{3gxScqizBN85PLTZqN4EP!1=}{T-sD)tlSR{O86cnw%7d;+O$?Y!+&^g`(bdK9d z+fVmz!May)EVU(~+rBL>;FA*cK?S1dh?S!Fda_uYsOoMNEGT$ffhE@s zMVY>@DXM{MW!DreSo#?YzepDw6~p$#||yD#%>w=@i5Q3YD!}}x9_-nD*->L zdt1WYv}?ybCwAYx>)x&R#ncUO>^us&ykJ( zZn9cBQqtiu-^}9KJs7hRzux~*8ci@J9m)FRqAOeaMJuzNdHa96I7}7?UQ5k{9Tt_l zw`4eSw7*yMNn%@N2Iz5R_Ynq)%)6Jho>d#H#ss+*bTmu zR#Qi1HRh&KpX6AQV=}|YO4yjYh+vtpdFiqMuQ(%p3!fin)XVp_#+cJ~#(X!&d_IPR zf-q?q1{gVd}sv?o@Xw$;@<;=}t0BGBYF;y<}#R*)m%)D==&W!$6V|WF3|P3c48( zYN}~=L>7@nk!?g-6h#GGP*xE|5e507qJWBusED{LX!w7>=T=o$caj0#@4feVFQ1vJ zyPSLOx#ymH&bdq7-f!f?T13;dDE`0wwx)d*Z~hI+bJvd&vL|(XZIX6h-BYu^TC?v{ zvkpG~ghJ=3dHcBhktcT^edH;p*r#_Mb!=yT`zf6#oYJ}WfK8nz+s7Q+)7WV4=AquW zPSf_SiD(aBnI7?L`-L{Uv%Y4Yrv1J~(+riGkL#M&iEt<0nl?qk2$F98`ETtABnpUz zb`4%gQ2r~wy(p9L*9p7_NI=&vAtS2)26e3gX|Ec(HoZD;SMg3wi-+>#i0>7O_ndz0 z2Tn))1Fxcu$dk5ubo*dPKB6aI$RCXap^a^4LtjIg(BGh@4ff=ZJ;??jY1KfpMqF=< zfm_Y&@ZZ7YEB;8EuGMP)`U8r!*Jza`1>{{lUefa@da5-;(@YnksBXWO)iXYE6X6&5+z|CG}`<#zJ3bOv9?hD~pC1MX*OT2O|~D*@MlQ zE6rh!1qw3hc5qMA(q;-gjcSh|3|tA_nS>(F@7U@X!1PfAonaJuQQCr_W{SFxy9R+# zBTL-q5wMCmRvio3C~A!AVPvL4)=6ZGh^!t7W^PLUqdxa6bhVi_kaS07lI}Euoa_ws zc8+3XO8)*zpp>(tEIu*?kXFq`Upy6y_a1?I z_Mr$hWG2P!Ap{zYI{P+=Mcf7_%-ru^GUHi9K)d-u%pS%I%&0+B*ZQ>f{WOy-VcjQr zb%z_0J?wu;$sN0?TC&Gedv|)gSW;Ct$;nAn3 z(n&M3NU_SW4?~(AAO|D7_AiS9t!sRQMjwb94ko) z0xhIzp-+g#`N`67go7R#p~lLi)W5D^20uEsmj7g_ZpL|Pc~$7v225pKMpXeg{gY4 z7vc)x2?2OKHPjFfk<$CPVV{WHZo}TjS}{z_^vk*fy%f#X=TG*lO)LG7tIuCqP7>ui znuN<#Bc;O40@toz>8Gy;g^pup-lVO-# zOm9{3nYwi*Yr~r(Nep;tF#QTm0qQe+^eO1 zz#JHuXr1jKd)t;~gmxg*T$|}=sMtnf=w7wJS$; zNNceodvZj`QB+I5*#_Up0Yjsn*H%j@r*pV+jS{f|e+=$RV(_Os=)!1jh3=Hl0{dJ% zvb#b0&O@MhJ|4P_F^cDfc-j}?;j%!c!Gn>QLPGlvnTn`ph!gQKLLN~(c^*88gn3fD6ur`7eF)Ff?}6^`0`}5? zeHr3i9pCI&Ze5PhHunm~lby$dSt@1r$FFZ20PNs^btUrb4--JQufogy2p$z){?$n6 zPWk@LLt5r{KL4ZIDL{$NsF?3~$_?K7yHRdy309@tz$~)U({UR;9k-V!Y_E~iY8oN~ zj%^;?@=VIc+}_X;(==hd=LBC9v?pa>i*PdSX|;8#w_^5nNZqyt9^OY0XoOfstdAk2 z)LmR@I;35XwA`;=I-FeqsrU4ZA~FZ!q`U2p3$kYP@eK$;gH45sx-mePh>E*gbsj+yHciRs$oTYfoykUQ>OcYwb0&mn%KjJkQW>0~27(;7i_&T6AkZxZID9 zgwjFDXl_|p>CDlKfR9d~a|oZQS0FAUN>1P_?6`%^+Fy4%kven;)Y48Qa5iXQ5+k6J zVt)e3Ml77vV&96ir1eQWm0qmT20ZVEB!4a9i7pa)B?k*|Ri1`PR(w4j&#-YZt zB$;|I|2&dYlG>HjZ?*P7j?DSj`E^w}5J@@%Tnw3tz^Jij*@0k=av)&gqyF5JnpB*L z4a%9A&him=CSDVnAG9VqzIj?e#G;2J|90J(gOpsO?m#a_?Yo4P!i+SYXRpy6uq3)| zgwy#8gk_B9|EZXRF3O}YqK8yso^HW&$+*OXaF*dNgaOq&FQ)ASeqc&e_V>|YhH}3R zLFhBFqT3G~=b{)}DYqR?_s&H-W>t8`;@obmssdP>xp)O@haAARr5$N3PX_1ZyrHCUg@y zX;||R%k>z=Zgvy9xeI|&<1ltJ%XF2P!;zN}pOmH2hrm)WfEW3zTM%F)eU##UYW^fx z5T>VwCEL%KIXB1{QW@~GFK44I3_<$YwDTL#mL~86ZGPiXK2}wz@h`F+FcPMTJWa#n z%{88iycenVea!z79=f#&NJoqj^e5-*n*rSnyh*GP>eiP5(Fkq$6}%fVyT$FVA^>%V z`KE{Mek3HK_Sf*rM!9(Ctq}ZAc!j`-4R15HZ9x^@yt!GMw?@sI;h66vSD>j!Jxl$X z@Twme?N^}Ww-t{=g1rL4QTka}#;Vu7>7iQw@)l0S2VbOX8hpMA8x=#Zpo51|PnFd- z(KYV_c0-JRE@u=izk_#|4nBe%jNye2W=?3OZUMCF?kEb@KCyan`xx5Wm5G8R25>tE zhg=p(LZN{squyw-dO@5004ivXW_rQM2U(Z6qcQ6tCfBN1qE`7JF$C&k(y0semr^K! zQDNpDf2ko6&BhSLU^HI{`#he79%1XD#?12c1M7V-=atisEd;By(2a35{n(>UO+RK$ z)K-iZGBcT0fH0HN%sS8JHe(HmMz=WzGZ_n6-Gt$p$(S;`FT?D{!e&cVE%H{*3>vs*Ws44GX;Xz?0Qt6L9~DUaZhgn-t-2I$(o+Q47ba=)(KR5SZw zWovcqk2SL=>)@HDL2iEoR;5p*o`i9yo?HqXYGo08_VgC?lm^=Z+x#eUQ`R@|#EN}} z68sp#hV@N6U8vP)`gY);*w23IdoK*8tj7_A*dEOu`4+-d@EI4{O6gu*12g4Mx4unK zt^h`}^K^&Ea&g@{3?;dG!?^tfK(c-!EVd+mhvnco-p$M;`j04d2Yi4q>DG}zfMpwL z*LMM8J&DJ(zNCW4&A{j(sBRq&K+Mm*a!E zFis`+cgXeE&W~Y(F)l(AS+J=SjpqPO`vY_j8K6g(2PkvY0Cmub(FIu52Z5?ZOsE)c z4Vj+!n8DVl##)^>)apVbt;N%8-wo?E-C=Lo-vg}}zDHy9iGHk2)GDS~Pa!9}(2o|s z&qn=#&_=?@&PW)=rxEF(jxIgi($bPFJcGFXLp-`Y#*l4^+P02kQuc4bJb%1jQ#s!A zt0+%1P_AlzaLFn)KcK=GkR_8`v}0yQ?|9jpC@6_*j$uGPi{cYZ2$E^#gPx@=y;tdN zUHh(f>e8A93g8C1v5%~B$z)HRqwgunn4nU4k}dGL{s)0z$;dZlm@^MfU(e;4Gbutx zkxux81w?ewg2OWVPoLrMJ3tpl^GBk!0;znv^!~o2!AwU}?i+YQ6vc0tVEj2%;}3>A zDt2`Z3BX@yShFF@gLa-nPz_8M?FyVZR;xSe$#na_lyeyRP|_%p)Kak2^HbCT&FuT^ z4l0TEe+Y?9+UV5P&_hjN!&Rux`Vk(`2;W;_{g~08;Nd=xN0U}ughDPbA*@@cgJTMKMA|pPMU@c8{=-TZ z>Gr9pWwv(2iF-jeO7pKkXV|6odM{z*A7^$4vd8+` z2k9L%tzRR{T`2VL1pVNrTJs@4^FK%7B21lWy@E%Hl90!lf^ZtUAENdA0J?GCm4)9D zj-qM3icr#mZZ}JmNa^MBqwxE3Hifi2j1NF8<^GvzU(=lxcxTZ?eA|COnQXJ}tYqXh zMj#v7*=y5yVrLdSuGK!sApX4hutIQl7{SS51V?yN**^lC^*T}RuVh_N;!)!2iKZ3) zL;#LIMhD9em2o>Vik|>ky0aY5kK1n${3r^sOr~xEYhmEgVHuZA@h4MkN%|qrhNCy` zMzQQnNEET8hFrc>q;-A_Lz8h#Ey`{OEP2KqU@FMs+~5klTSK~KPvm9Kc`u3uS};&7 z&LAV6Vp+@Z3!o6%XC1>YO1P|8u&IE4Gb^N{2;57>7O8rEM)xRfXl_kM^z1nGQ~?Ee9Sp@}1g4CfV>BCqf_l(iuA8BR&C zf)eA_ddA%g*ki@4@3UmYXW2@hb=IXna#btT%zj8{ZU+^3ax0czjbtAT0qr&~CKAWBCmB33m})<(+5QW*0mqq!D#c1^2Rl_@=J z83@6)qS&3QygGKW4(yQxNyQj|yp1l1KLtPJp*| zsMbDMNr*t0)J$=yKQ`b~U~%RH92;OWh8c6z8r=S<5Dmfz^QLOFHR(&kqt65`j6SIH z(5ahrukNs{IvjJjw?QOsY+o#5f1dnIDxE~t#7z~tDT62?-39R$`wx01meoRqtg>ug zOnW_e6E^MPO=Ixp5>|elZk>y_?r;d_;FLi!$NFrbLD!B14eijC=-&ol#@U3pA?Izx zmcokG8g?Txwr#1Ogr)6C2o5*YvKiWye|BfJrmHbJc=4UZsKh%q+&=SiOjG?5bvDp=-6k7_zWckMNzVVk3&j zBeOSezHo2^&R$sXu;YFpxL`rb4EG@N!{JjA+P6aSzPeCTeU`+PD zAY9}5Yej4To7w3`{#taKDk!SOYC^id1bY8FcWFomsdE7SP$lhN?;etW9*9DI7<-o+ zft&cAtw&r5jK3POnK0`)(^{u|?g0$k5xCY|-vgh;wFZ}|OYg&by7bk}=tJR@ZhuJx z>tLW!Yl_8BB8byRXlFh4?WRKc*I=DX<||T!k7}n$*6We6lb(~fR67Ti5^Dh-uA7_j z7`E{lxfS>;(T(xJl+y-9dMIG+6iSKC97fGEK)=D~@_$D6u^!Fejv(3j`e;Qe1`KuRR{%Cs`atJMZq}AVe*&)0u zPj9+#jF2)LHsQ+7hxQMk5$^*`a2!P`>5Ahhm`7@7uT%OdszF=H-p$_$0;8J^bW*V7Mhp=4SG zB>@DtP0msd%1Y&+aPR(Xw5$WN6tOx$;<-RlqjTZWz}(;JL=r6BcM&bGFv@b4naLTl znAM=D!SNBoszsgCh(!_>#3FIQX{crBCtp$r-Jmhe7b4bdlmU~~*^GHw{|RdCNakoY zIFMA9ac>Q>e>;+O%po2JN&QDMlC$%dy0lu=lS+CeW4jx6Hbv3HQGA#vU z9H5{w1x+P1D5}oFjs^rcB@Fh*0%S#-#eVTRA=?t>XGfdb)kxnON{v)+)1ZpM!I9C3 ze<()hp%}XFZ;W?%o}f8R^PFO zIo12PXb{h2oeg2Br~Ic5ijI3M3zOL~nsA(bkrxT}0g47ZnfG!m>m?TKWx+TLg1-|V z%d(yUaQLiABs#&dEP+(ox9V6{C@0*E-B2%v`p-!Xbiz2tvNrSBn*A&Q{_j1R<&XcB zHQ5u@KFWFCi6r)$I*?U9bR-fm=6K#J-?JYS&;Ek4XU`nv*<)C%9rcTq65NwzBJSRJ zjondSAXSsy`IJy?wd~hlrLbc%MC=CegiBWLP40YVllA3S4Bp(5S1DKBA6wNOWdwhv=UzW#^?S4sQW zJ=V?S9XHVrMqt#qfxU?i!90yQ;XPKa3;n;pRr)#`u?Gi9D~D_whitg5?W(PRB3PwL z@V81$Z>tpa|Nnk3^lWY5et$1?UCr#{{Jqd?Yi55%g*WIHHsef}QtWMu&h+-=d0h5p zHDb1~*CXy>cyTg)1b}U9*_q0H_7)msEt6U4^YArA2HBDPCX5^l3uR_^B!65GhA?t2 zy9P2j!Te0Ouq0;YW*K%5-pTp+*7L>pOhcQXKoS+=E-2b!lo9k2qa?@v@^WesP zKo4hLo#(B!u}gP$^w?%mF4 zQZ@JhiNfd6UVN9~9)kuKk46D&5I|Y1yGzV)m|?F0l5*Op@dfJWwMev933M`zgNe=a z8nq{Yw~KhcD0n08u_zAoTlsSMEPpZLJb>zqQR5yWTSsK8fy`QiM~Rdm>t1H9M^=5b zK^3=Q$4zH1JZzY9)82rGm(x!PSu6C^`p``CvMH3-z5s7k32iXH`ym>Sg#oZEX(Xp6 zrzfrbkq3E=XotYQ@elK6BsnnkX7R(IFKJ`yVP?1M664T#$btg^!Pa z1dWJhXOB+4jz6^&k)h3$>60dC2Nk|X1>Hcz?n1ePwFhQFl z+RbPW>?Xcrg!I5YKL9-Mhwx#bmb(xtM|FK}dy5%S^L`twHuG=MLRjFn*;k*RRtpyZ z9l_P_eT(3)4=Z6C{55S5WY!zb$#}(Vw9K4fh!`;ot%Xqm6O?{7v}-^XL_JZ!;+5#z zyzqlh#Sg<_*w;x#R1#*(*T{s^fUc{=oQ`9R9f+YQ3h`Jp7jx3;AF0P?hbY!F zkSo)P(m(Z)nvYLRahJL-CGOQjEqWHE=Jy0Ed;l}WizqFY5j zM6~6g56)mhR9f)0YAid+h!q{6k{%i{Be}S>15snaIG8qskS7&#&yT_hdf?Bo{f>*` zDZ7X#yfEt=yiadKYvF)8B}8-!%g2UwE`thoYKwIqVzMLn7+8!QL9|n*f#)-Qy((f; zvDq3ezK=@EI~R

    PdwP27&lh=*($m;(-`9i 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 literal 0 HcmV?d00001 diff --git a/Source/Dependencies/CompAnimated.dll b/Source/Dependencies/CompAnimated.dll new file mode 100644 index 0000000000000000000000000000000000000000..f18dd007ba01daab915c4db093ef52330174f699 GIT binary patch literal 8192 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 M&hTqx|A!;+-=*tvzyJUM literal 0 HcmV?d00001 diff --git a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs index 8692e80..6cae5be 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_BloodVomit.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; -using Vampire; using Verse; using Verse.AI; using RimWorld; @@ -14,25 +12,19 @@ public class JobDriver_BloodVomit : JobDriver private PawnPosture lastPosture; - public override PawnPosture Posture - { - get - { - return this.lastPosture; - } - } + public override PawnPosture Posture => lastPosture; public override void Notify_LastPosture(PawnPosture posture, LayingDownState layingDown) { - this.lastPosture = posture; + lastPosture = posture; this.layingDown = layingDown; } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0, false); - Scribe_Values.Look(ref this.lastPosture, "lastPosture", PawnPosture.Standing, false); + Scribe_Values.Look(ref ticksLeft, "ticksLeft"); + Scribe_Values.Look(ref lastPosture, "lastPosture"); } [DebuggerHidden] @@ -69,7 +61,7 @@ protected override IEnumerable MakeNewToils() int curTicks = ticksLeft; if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite(), 1); + FilthMaker.MakeFilth(pawn.CurJob.targetA.Cell, pawn.Map, ThingDefOf.FilthBlood, pawn.LabelIndefinite()); if (pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); diff --git a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs index 1c65c12..5659778 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_ConsumeBlood.cs @@ -22,44 +22,38 @@ public class JobDriver_ConsumeBlood : JobDriver private bool eatingFromInventory; - private Thing IngestibleSource - { - get - { - return base.job.GetTarget(TargetIndex.A).Thing; - } - } + private Thing IngestibleSource => job.GetTarget(TargetIndex.A).Thing; private float ChewDurationMultiplier { get { - Thing ingestibleSource = this.IngestibleSource; + Thing ingestibleSource = IngestibleSource; if (ingestibleSource.def.ingestible != null && !ingestibleSource.def.ingestible.useEatingSpeedStat) { return 1f; } - return 1f / this.pawn.GetStatValue(StatDefOf.EatingSpeed, true); + return 1f / pawn.GetStatValue(StatDefOf.EatingSpeed); } } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.usingNutrientPasteDispenser, "usingNutrientPasteDispenser", false, false); - Scribe_Values.Look(ref this.eatingFromInventory, "eatingFromInventory", false, false); + Scribe_Values.Look(ref usingNutrientPasteDispenser, "usingNutrientPasteDispenser"); + Scribe_Values.Look(ref eatingFromInventory, "eatingFromInventory"); } public override string GetReport() { - if (this.usingNutrientPasteDispenser) + if (usingNutrientPasteDispenser) { - return base.job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); + return job.def.reportString.Replace("TargetA", ThingDefOf.MealNutrientPaste.label); } - Thing thing = this.pawn.CurJob.targetA.Thing; + Thing thing = pawn.CurJob.targetA.Thing; if (thing != null && thing.def.ingestible != null && !thing.def.ingestible.ingestReportString.NullOrEmpty()) { - return string.Format(thing.def.ingestible.ingestReportString, this.pawn.CurJob.targetA.Thing.LabelShort); + return string.Format(thing.def.ingestible.ingestReportString, pawn.CurJob.targetA.Thing.LabelShort); } return base.GetReport(); } @@ -67,84 +61,84 @@ public override string GetReport() public override void Notify_Starting() { base.Notify_Starting(); - this.usingNutrientPasteDispenser = (this.IngestibleSource is Building_NutrientPasteDispenser); - this.eatingFromInventory = (this.pawn.inventory != null && this.pawn.inventory.Contains(this.IngestibleSource)); + usingNutrientPasteDispenser = IngestibleSource is Building_NutrientPasteDispenser; + eatingFromInventory = pawn.inventory != null && pawn.inventory.Contains(IngestibleSource); } [DebuggerHidden] protected override IEnumerable MakeNewToils() { - if (!this.usingNutrientPasteDispenser) + if (!usingNutrientPasteDispenser) { - this.FailOn(() => !this.IngestibleSource.Destroyed && !this.IngestibleSource.IngestibleNow); + this.FailOn(() => !IngestibleSource.Destroyed && !IngestibleSource.IngestibleNow); } - Toil chew = Toils_Ingest.ChewIngestible(this.pawn, this.ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) - .FailOn((Toil x) => !this.IngestibleSource.Spawned - && (this.pawn.carryTracker == null || this.pawn.carryTracker.CarriedThing != this.IngestibleSource)) + Toil chew = Toils_Ingest.ChewIngestible(pawn, ChewDurationMultiplier, TargetIndex.A, TargetIndex.B) + .FailOn((Toil x) => !IngestibleSource.Spawned + && (pawn.carryTracker == null || pawn.carryTracker.CarriedThing != IngestibleSource)) .FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); - foreach (Toil toil in this.PrepareToIngestToils(chew)) + foreach (Toil toil in PrepareToIngestToils(chew)) { yield return toil; } yield return chew; - yield return FinalizeIngest(this.pawn, TargetIndex.A); - yield return Toils_Jump.JumpIf(chew, () => this.pawn?.BloodNeed()?.CurLevelPercentage < 1f); + yield return FinalizeIngest(pawn, TargetIndex.A); + yield return Toils_Jump.JumpIf(chew, () => pawn?.BloodNeed()?.CurLevelPercentage < 1f); } private IEnumerable PrepareToIngestToils(Toil chewToil) { - if (this.usingNutrientPasteDispenser) + if (usingNutrientPasteDispenser) { - return this.PrepareToIngestToils_Dispenser(); + return PrepareToIngestToils_Dispenser(); } - if (this.pawn.RaceProps.ToolUser) + if (pawn.RaceProps.ToolUser) { - return this.PrepareToIngestToils_ToolUser(chewToil); + return PrepareToIngestToils_ToolUser(chewToil); } - return this.PrepareToIngestToils_NonToolUser(); + return PrepareToIngestToils_NonToolUser(); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_Dispenser() { yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, this.pawn); - yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); + yield return Toils_Ingest.TakeMealFromDispenser(TargetIndex.A, pawn); + yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedNullOrForbidden(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) { - if (this.eatingFromInventory) + if (eatingFromInventory) { - yield return Toils_Misc.TakeItemFromInventoryToCarrier(this.pawn, TargetIndex.A); + yield return Toils_Misc.TakeItemFromInventoryToCarrier(pawn, TargetIndex.A); } else { - yield return this.ReserveFoodIfWillIngestWholeStack(); + yield return ReserveFoodIfWillIngestWholeStack(); Toil gotoToPickup = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnDespawnedNullOrForbidden(TargetIndex.A); - yield return Toils_Jump.JumpIf(gotoToPickup, () => this.pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); + yield return Toils_Jump.JumpIf(gotoToPickup, () => pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch).FailOnDespawnedNullOrForbidden(TargetIndex.A); yield return Toils_Jump.Jump(chewToil); yield return gotoToPickup; - yield return Toils_Ingest.PickupIngestible(TargetIndex.A, this.pawn); - Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C, 1, -1, null); + yield return Toils_Ingest.PickupIngestible(TargetIndex.A, pawn); + Toil reserveExtraFoodToCollect = Toils_Reserve.Reserve(TargetIndex.C); Toil findExtraFoodToCollect = new Toil(); findExtraFoodToCollect.initAction = delegate { - if (this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def) < this.job.takeExtraIngestibles) + if (pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def) < job.takeExtraIngestibles) { - Predicate validator = (Thing x) => this.pawn.CanReserve(x, 1, -1, null, false) - && !x.IsForbidden(this.pawn) && x.IsSociallyProper(this.pawn); - Thing thing = GenClosest.ClosestThingReachable(this.pawn.Position, this.pawn.Map, - ThingRequest.ForDef(this.IngestibleSource.def), PathEndMode.Touch, - TraverseParms.For(this.pawn, Danger.Deadly, TraverseMode.ByPawn, false), - 12f, validator, null, 0, -1, false, RegionType.Set_Passable, false); + Predicate validator = (Thing x) => pawn.CanReserve(x) + && !x.IsForbidden(pawn) && x.IsSociallyProper(pawn); + Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, + ThingRequest.ForDef(IngestibleSource.def), PathEndMode.Touch, + TraverseParms.For(pawn), + 12f, validator); if (thing != null) { - this.pawn.CurJob.SetTarget(TargetIndex.C, thing); - this.JumpToToil(reserveExtraFoodToCollect); + pawn.CurJob.SetTarget(TargetIndex.C, thing); + JumpToToil(reserveExtraFoodToCollect); } } }; @@ -153,17 +147,17 @@ private IEnumerable PrepareToIngestToils_ToolUser(Toil chewToil) yield return reserveExtraFoodToCollect; yield return Toils_Goto.GotoThing(TargetIndex.C, PathEndMode.Touch); yield return Toils_Haul.TakeToInventory(TargetIndex.C, - () => this.job.takeExtraIngestibles - this.pawn.inventory.innerContainer.TotalStackCountOfDef(this.IngestibleSource.def)); + () => job.takeExtraIngestibles - pawn.inventory.innerContainer.TotalStackCountOfDef(IngestibleSource.def)); yield return findExtraFoodToCollect; } - yield return Toils_Ingest.CarryIngestibleToChewSpot(this.pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); + yield return Toils_Ingest.CarryIngestibleToChewSpot(pawn, TargetIndex.A).FailOnDestroyedOrNull(TargetIndex.A); yield return Toils_Ingest.FindAdjacentEatSurface(TargetIndex.B, TargetIndex.A); } [DebuggerHidden] private IEnumerable PrepareToIngestToils_NonToolUser() { - yield return this.ReserveFoodIfWillIngestWholeStack(); + yield return ReserveFoodIfWillIngestWholeStack(); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); } @@ -173,12 +167,12 @@ private Toil ReserveFoodIfWillIngestWholeStack() { initAction = delegate { - if (this.pawn.Faction == null) + if (pawn.Faction == null) { return; } - Thing thing = this.pawn.CurJob.GetTarget(TargetIndex.A).Thing; - if (this.pawn.carryTracker.CarriedThing == thing) + Thing thing = pawn.CurJob.GetTarget(TargetIndex.A).Thing; + if (pawn.carryTracker.CarriedThing == thing) { return; } @@ -187,10 +181,10 @@ private Toil ReserveFoodIfWillIngestWholeStack() { if (!thing.Spawned) { - this.pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true); + pawn.jobs.EndCurrentJob(JobCondition.Incompletable); return; } - this.pawn.Reserve(thing, this.job, 1, -1, null); + pawn.Reserve(thing, job); } }, defaultCompleteMode = ToilCompleteMode.Instant @@ -202,8 +196,8 @@ private Toil ReserveFoodIfWillIngestWholeStack() public override bool ModifyCarriedThingDrawPos(ref Vector3 drawPos, ref bool behind, ref bool flip) { - IntVec3 cell = base.job.GetTarget(TargetIndex.B).Cell; - return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, this.pawn); + IntVec3 cell = job.GetTarget(TargetIndex.B).Cell; + return JobDriver_Ingest.ModifyCarriedThingDrawPosWorker(ref drawPos, ref behind, ref flip, cell, pawn); } public static bool ModifyCarriedThingDrawPosWorker(ref Vector3 drawPos, ref bool behind, ref bool flip, IntVec3 placeCell, Pawn pawn) @@ -249,15 +243,15 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { if (!(ingester.Position + ingester.Rotation.FacingCell).HasEatSurface(actor.Map) && ingester.GetPosture() == PawnPosture.Standing) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable, null); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.AteWithoutTable); } - Room room = ingester.GetRoom(RegionType.Set_Passable); + Room room = ingester.GetRoom(); if (room != null) { int scoreStageIndex = RoomStatDefOf.Impressiveness.GetScoreStageIndex(room.GetStat(RoomStatDefOf.Impressiveness)); if (ThoughtDefOf.AteInImpressiveDiningRoom.stages[scoreStageIndex] != null) { - ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex), null); + ingester.needs.mood.thoughts.memories.TryGainMemory(ThoughtMaker.MakeThought(ThoughtDefOf.AteInImpressiveDiningRoom, scoreStageIndex)); } } } @@ -270,7 +264,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) { thing = thing.SplitOff(1); } - if (!thing.Destroyed) thing.Destroy(DestroyMode.Vanish); + if (!thing.Destroyed) thing.Destroy(); }; toil.defaultCompleteMode = ToilCompleteMode.Instant; return toil; @@ -278,7 +272,7 @@ public static Toil FinalizeIngest(Pawn ingester, TargetIndex ingestibleInd) public override bool TryMakePreToilReservations() { - return this.pawn.Reserve(TargetA, this.job, 1, -1, null); + return pawn.Reserve(TargetA, job); } } } diff --git a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs index e3e1f8d..9c54ef2 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Diablerie.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; @@ -18,13 +16,13 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -35,7 +33,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder, false); + BloodVictim.TransferBloodTo(1, BloodFeeder, false); } public override string GetReport() @@ -49,10 +47,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } @@ -62,8 +60,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - this.job.SetTarget(TargetIndex.A, p.Corpse); - this.pawn.Reserve(TargetA, this.job); + job.SetTarget(TargetIndex.A, p.Corpse); + pawn.Reserve(TargetA, job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -72,10 +70,10 @@ protected override IEnumerable MakeNewToils() { initAction = delegate () { - VampireCorpse vampCorpse = ((VampireCorpse)TargetA.Thing); + VampireCorpse vampCorpse = (VampireCorpse)TargetA.Thing; vampCorpse.Diableried = true; Pawn p = vampCorpse.InnerPawn; - this.pawn.VampComp().Notify_Diablerie(p.VampComp()); + pawn.VampComp().Notify_Diablerie(p.VampComp()); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs index 10b0d70..18df63f 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_DigAndHide.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using Verse; using Verse.AI; @@ -16,40 +15,40 @@ public class JobDriver_DigAndHide : JobDriver [DebuggerHidden] protected override IEnumerable MakeNewToils() { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); if (TargetLocA != pawn.PositionHeld) yield return Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.Touch); Toil doWork = new Toil(); doWork.initAction = delegate { - this.workLeft = BaseWorkAmount; - this.job.SetTarget(TargetIndex.B, this.pawn); + workLeft = BaseWorkAmount; + job.SetTarget(TargetIndex.B, pawn); }; doWork.tickAction = delegate { if (GetActor().Downed || GetActor().Dead || GetActor().pather.MovingNow) { - this.EndJobWith(JobCondition.Incompletable); + EndJobWith(JobCondition.Incompletable); return; } - this.workLeft -= this.pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); - if (this.workLeft <= 0f) + workLeft -= pawn.skills.GetSkill(SkillDefOf.Melee).Level;// (StatDefOf.ConstructionSpeed, true); + if (workLeft <= 0f) { - Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole, null); - thing.SetFaction(this.pawn.Faction, null); - GenSpawn.Spawn(thing, this.TargetLocA, this.Map); + Thing thing = ThingMaker.MakeThing(VampDefOf.ROMV_HideyHole); + thing.SetFaction(pawn.Faction); + GenSpawn.Spawn(thing, TargetLocA, Map); - Pawn actor = this.pawn; + Pawn actor = pawn; Building_Casket pod = (Building_Casket)thing; actor.DeSpawn(); pod.GetDirectlyHeldThings().TryAdd(actor); - this.ReadyForNextToil(); + ReadyForNextToil(); return; } //JoyUtility.JoyTickCheckEnd(this.pawn, JoyTickFullJoyAction.EndJob, 1f); }; - doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)this.workLeft / (float)BaseWorkAmount); + doWork.WithProgressBar(TargetIndex.B, () => 1f - (float)workLeft / (float)BaseWorkAmount); doWork.defaultCompleteMode = ToilCompleteMode.Never; //doWork.FailOn(() => !JoyUtility.EnjoyableOutsideNow(this.pawn, null)); //doWork.FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); @@ -59,7 +58,7 @@ protected override IEnumerable MakeNewToils() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.workLeft, "workLeft", 0f, false); + Scribe_Values.Look(ref workLeft, "workLeft"); } public override bool TryMakePreToilReservations() diff --git a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs index 14a73ac..29dfe70 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Embrace.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; @@ -18,13 +16,13 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -35,7 +33,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); + BloodVictim.TransferBloodTo(1, BloodFeeder); } public override string GetReport() @@ -49,10 +47,10 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, this.GetActor()?.Faction != this.TargetA.Thing?.Faction, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, GetActor()?.Faction != TargetA.Thing?.Faction, false)) { yield return t; } @@ -62,8 +60,8 @@ protected override IEnumerable MakeNewToils() { Pawn p = (Pawn)TargetA; if (!p.Dead) p.Kill(null); - this.job.SetTarget(TargetIndex.A, p.Corpse); - this.pawn.Reserve(TargetA, this.job); + job.SetTarget(TargetIndex.A, p.Corpse); + pawn.Reserve(TargetA, job); } }; yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); @@ -72,7 +70,7 @@ protected override IEnumerable MakeNewToils() { initAction = delegate () { - this.pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(this.pawn, Victim); + pawn.VampComp().Bloodline.EmbraceWorker.TryEmbrace(pawn, Victim); } }; } diff --git a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs index 1646f97..0dd1979 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_EnterTorpor.cs @@ -1,5 +1,4 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; using Verse; @@ -11,24 +10,24 @@ public class JobDriver_EnterTorpor : JobDriver { public override bool TryMakePreToilReservations() { - return pawn.Reserve(TargetA, this.job); + return pawn.Reserve(TargetA, job); } [DebuggerHidden] protected override IEnumerable MakeNewToils() { this.FailOnDespawnedOrNull(TargetIndex.A); - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell); Toil prepare = Toils_General.Wait(500); prepare.FailOnCannotTouch(TargetIndex.A, PathEndMode.InteractionCell); - prepare.WithProgressBarToilDelay(TargetIndex.A, false, -0.5f); + prepare.WithProgressBarToilDelay(TargetIndex.A); yield return prepare; yield return new Toil { initAction = delegate { - Pawn actor = this.pawn; + Pawn actor = pawn; Building_Casket pod = (Building_Casket)actor.CurJob.targetA.Thing; actor.DeSpawn(); diff --git a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs index c029223..264d6fa 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_Feed.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_Feed.cs @@ -1,13 +1,9 @@ -using AbilityUser; -using RimWorld; +using RimWorld; using System; using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using UnityEngine; using Verse; using Verse.AI; -using Verse.Sound; namespace Vampire { @@ -17,26 +13,23 @@ public class JobDriver_Feed : JobDriver public static float BaseFeedTime = 320f; public static float BaseCoolantThrowupChance = 0.25f; - protected Pawn Victim => base.job.targetA.Thing as Pawn; + protected Pawn Victim => job.targetA.Thing as Pawn; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); - - public override void Notify_Starting() - { - base.Notify_Starting(); - } + protected Need_Blood BloodFeeder => GetActor().BloodNeed(); + + public virtual void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); - if (Victim.IsAndroid() && !this.pawn.IsAndroid()) + BloodVictim.TransferBloodTo(1, BloodFeeder); + if (Victim.IsAndroid() && !pawn.IsAndroid()) { if (Rand.Value <= BaseCoolantThrowupChance) { - this.EndJobWith(JobCondition.Incompletable); - this.pawn.jobs.StartJob(new Job(JobDefOf.Vomit, this.pawn.PositionHeld)); + EndJobWith(JobCondition.Incompletable); + pawn.jobs.StartJob(new Job(JobDefOf.Vomit, pawn.PositionHeld)); } } @@ -47,9 +40,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); - this.AddEndCondition(delegate + AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -57,7 +50,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(this.job.def, this, this.pawn, this.TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(job.def, this, pawn, TargetA, VampDefOf.ROMV_IWasBittenByAVampire, VampDefOf.ROMV_IGaveTheKiss, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } @@ -66,8 +59,8 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, ThoughtDef victimThoughtDef, ThoughtDef actorThoughtDef, float workLeft, Action effect, Func stopCondition, bool needsGrapple = true, bool cleansWound = true, bool neverGiveUp = false) { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); - Toil gotoToil = (actor?.Faction == TargetA.Thing?.Faction) ? Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch) : Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); + yield return Toils_Reserve.Reserve(TargetIndex.A); + Toil gotoToil = actor?.Faction == TargetA.Thing?.Faction ? Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch) : Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() { @@ -75,7 +68,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { MoteMaker.MakeColonistActionOverlay(actor, ThingDefOf.Mote_ColonistAttacking); - workLeft = JobDriver_Feed.BaseFeedTime; + workLeft = BaseFeedTime; Pawn victim = TargetA.Thing as Pawn; if (victim != null) { @@ -84,7 +77,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { if (needsGrapple) { - int grappleBonus = (actor is PawnTemporary) ? 100 : 0 ; + int grappleBonus = actor is PawnTemporary ? 100 : 0 ; if (!JecsTools.GrappleUtility.TryGrapple(actor, victim, grappleBonus)) { thisDriver.EndJobWith(JobCondition.Incompletable); @@ -95,7 +88,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, } if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); + actor.jobs.EndCurrentJob(JobCondition.Incompletable); } if (actor.IsVampire()) VampireBiteUtility.MakeNew(actor, victim); @@ -120,7 +113,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (victimThoughtDef != null) victimThought = (Thought_Memory)ThoughtMaker.MakeThought(victimThoughtDef); if (victimThought != null) { - victim.needs.mood.thoughts.memories.TryGainMemory(victimThought, null); + victim.needs.mood.thoughts.memories.TryGainMemory(victimThought); } } if (actor?.needs?.mood?.thoughts?.memories != null) @@ -129,7 +122,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, if (actorThoughtDef != null) actorThought = (Thought_Memory)ThoughtMaker.MakeThought(actorThoughtDef); if (actorThought != null) { - actor.needs.mood.thoughts.memories.TryGainMemory(actorThought, null); + actor.needs.mood.thoughts.memories.TryGainMemory(actorThought); } } @@ -138,7 +131,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); v.XP += 15; } workLeft = BaseFeedTime; @@ -180,7 +173,7 @@ public static IEnumerable MakeFeedToils(JobDef job, JobDriver thisDriver, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs index 96210bd..494446c 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndDestroy.cs @@ -1,9 +1,7 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using UnityEngine; using Verse; using Verse.AI; @@ -20,66 +18,56 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; - else return null; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; + return null; } } protected Pawn Master { get { - if (base.job.targetB.Thing is Pawn p) return p; - if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; - else return null; + if (job.targetB.Thing is Pawn p) return p; + if (job.targetB.Thing is Corpse c) return c.InnerPawn; + return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; - public override void Notify_Starting() - { - base.Notify_Starting(); - } - private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + BloodVictim.TransferBloodTo(1, Master.BloodNeed()); if (Victim.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside) is List parts) { for (int i = 0; i < 3; i++) { if (!Victim.Dead) { - Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, this.GetActor(), parts.RandomElement())); + Victim.TakeDamage(new DamageInfo(DamageDefOf.Bite, Rand.Range(8, 12), -1, GetActor(), parts.RandomElement())); } } } } - public override string GetReport() - { - return base.GetReport(); - } - [DebuggerHidden] protected override IEnumerable MakeNewToils() { //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding, true, false)) { yield return t; } yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); yield return Toils_General.WaitWith(TargetIndex.A, 600, true); - yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => (Master == null) || (!Master.Spawned || Master.Dead)); + yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => Master == null || !Master.Spawned || Master.Dead); } public bool ShouldContinueFeeding(Pawn feeder, Pawn victim) diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs index c128411..45ed372 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedAndReturn.cs @@ -1,8 +1,6 @@ using RimWorld; -using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; @@ -19,8 +17,8 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } @@ -28,13 +26,13 @@ protected Pawn Master { get { - if (base.job.targetB.Thing is Pawn p) return p; - if (base.job.targetB.Thing is Corpse c) return c.InnerPawn; + if (job.targetB.Thing is Pawn p) return p; + if (job.targetB.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => CompVictim.BloodPool; protected Need_Blood BloodFeeder => CompFeeder.BloodPool; @@ -45,7 +43,7 @@ public override void Notify_Starting() private void DoEffect() { - this.BloodVictim.TransferBloodTo(1, Master.BloodNeed()); + BloodVictim.TransferBloodTo(1, Master.BloodNeed()); } public override string GetReport() @@ -59,16 +57,16 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, this.GetActor(), this.TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, GetActor(), TargetA, null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } yield return Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A); yield return Toils_General.WaitWith(TargetIndex.A, 600, true); - yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => (Master == null) || (!Master.Spawned || Master.Dead)); + yield return Toils_Goto.GotoThing(TargetIndex.B, Master.PositionHeld).FailOn(() => Master == null || !Master.Spawned || Master.Dead); } public bool ShouldContinueFeeding(Pawn feeder, Pawn victim) diff --git a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs index 0ed0f6c..b54a91b 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_FeedSip.cs @@ -1,12 +1,9 @@ -using AbilityUser; -using RimWorld; +using RimWorld; using System; using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; -using Verse.Sound; namespace Vampire { @@ -16,11 +13,11 @@ public class JobDriver_FeedSip : JobDriver private float workLeft = -1f; public static float BaseFeedTime = 320f; - protected Pawn Victim => (Pawn)base.job.targetA.Thing; + protected Pawn Victim => (Pawn)job.targetA.Thing; protected CompVampire CompVictim => Victim.GetComp(); - protected CompVampire CompFeeder => this.GetActor().GetComp(); + protected CompVampire CompFeeder => GetActor().GetComp(); protected Need_Blood BloodVictim => Victim.BloodNeed(); - protected Need_Blood BloodFeeder => this.GetActor().BloodNeed(); + protected Need_Blood BloodFeeder => GetActor().BloodNeed(); public override void Notify_Starting() { @@ -29,7 +26,7 @@ public override void Notify_Starting() public virtual void DoEffect() { - this.BloodVictim.TransferBloodTo(1, BloodFeeder); + BloodVictim.TransferBloodTo(1, BloodFeeder); } [DebuggerHidden] @@ -38,9 +35,9 @@ protected override IEnumerable MakeNewToils() this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); - this.AddEndCondition(delegate + AddEndCondition(delegate { if (!CompFeeder.BloodPool.IsFull) { @@ -48,7 +45,7 @@ protected override IEnumerable MakeNewToils() } return JobCondition.Succeeded; }); - foreach (Toil t in MakeFeedToils(this, this.pawn, this.TargetA, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in MakeFeedToils(this, pawn, TargetA, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } @@ -56,7 +53,7 @@ protected override IEnumerable MakeNewToils() public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, LocalTargetInfo TargetA, float workLeft, Action effect, Func stopCondition) { - yield return Toils_Reserve.Reserve(TargetIndex.A, 1, -1, null); + yield return Toils_Reserve.Reserve(TargetIndex.A); Toil gotoToil = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return gotoToil; Toil grappleToil = new Toil() @@ -80,7 +77,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, GenClamor.DoClamor(actor, 10f, ClamorType.Harm); if (!AllowFeeding(actor, victim)) { - actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); + actor.jobs.EndCurrentJob(JobCondition.Incompletable); } if (actor?.VampComp()?.Bloodline?.bloodlineHediff?.CompProps()?.verbs is List verbProps) { @@ -110,7 +107,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, { if (actor?.VampComp() is CompVampire v && v.IsVampire && actor.Faction == Faction.OfPlayer) { - MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15, -1f); + MoteMaker.ThrowText(actor.DrawPos, actor.Map, "XP +" + 15); v.XP += 15; } workLeft = BaseFeedTime; @@ -139,7 +136,7 @@ public static IEnumerable MakeFeedToils(JobDriver thisDriver, Pawn actor, defaultCompleteMode = ToilCompleteMode.Never }; feedToil.socialMode = RandomSocialMode.Off; - feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime, false, -0.5f); + feedToil.WithProgressBar(TargetIndex.A, () => 1f - workLeft / (float)BaseFeedTime); feedToil.PlaySustainerOrSound(delegate { return ThingDefOf.Beer.ingestible.ingestSound; diff --git a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs index e431a5b..5dbb8e1 100644 --- a/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs +++ b/Source/Vampires/AI_Jobs/JobDriver_MakeBloodBond.cs @@ -1,8 +1,5 @@ -using RimWorld; -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; -using UnityEngine; using Verse; using Verse.AI; @@ -18,19 +15,19 @@ protected Pawn Victim { get { - if (base.job.targetA.Thing is Pawn p) return p; - if (base.job.targetA.Thing is Corpse c) return c.InnerPawn; + if (job.targetA.Thing is Pawn p) return p; + if (job.targetA.Thing is Corpse c) return c.InnerPawn; else return null; } } protected CompVampire CompThrall => Victim.GetComp(); - protected CompVampire CompMaster => this.GetActor().GetComp(); + protected CompVampire CompMaster => GetActor().GetComp(); protected Need_Blood BloodThrall => CompThrall.BloodPool; protected Need_Blood BloodMaster => CompMaster.BloodPool; private void DoEffect() { - this.BloodMaster.TransferBloodTo(1, BloodThrall); + BloodMaster.TransferBloodTo(1, BloodThrall); } [DebuggerHidden] @@ -39,14 +36,14 @@ protected override IEnumerable MakeNewToils() //this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOn(delegate { - return this.pawn == this.Victim; + return pawn == Victim; }); this.FailOn(delegate { return BloodMaster.CurBloodPoints == 0; }); this.FailOnAggroMentalState(TargetIndex.A); - foreach (Toil t in JobDriver_Feed.MakeFeedToils(this.job.def, this, (Pawn)TargetA, this.GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) + foreach (Toil t in JobDriver_Feed.MakeFeedToils(job.def, this, (Pawn)TargetA, GetActor(), null, null, workLeft, DoEffect, ShouldContinueFeeding)) { yield return t; } diff --git a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs index 03ab9f2..a161283 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_GetBlood.cs @@ -1,6 +1,4 @@ using RimWorld; -using System; -using UnityEngine; using Verse; using Verse.AI; diff --git a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs index 17b408f..176a550 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_SeekShelterFromSunlight.cs @@ -2,8 +2,6 @@ using Verse; using Verse.AI; using RimWorld; -using System.Collections.Generic; -using System.Linq; namespace Vampire { @@ -21,7 +19,7 @@ public class JobGiver_SeekShelterFromSunlight : ThinkNode_JobGiver protected virtual IntVec3 GetExactWanderDest(Pawn pawn) { IntVec3 wanderRoot = pawn.PositionHeld; - return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, this.wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, this.maxDanger)); + return RCellFinder.RandomWanderDestFor(pawn, wanderRoot, wanderRadius, delegate(Pawn p, IntVec3 v) { if (v.Roofed(p.MapHeld)) return true; return false; }, PawnUtility.ResolveMaxDanger(pawn, maxDanger)); } public override float GetPriority(Pawn pawn) @@ -44,7 +42,7 @@ protected override Job TryGiveJob(Pawn pawn) return null; if (pawn.Drafted) return null; - Room room = pawn.GetRoom(RegionType.Set_Passable); + Room room = pawn.GetRoom(); if (room != null) { if (room.PsychologicallyOutdoors) diff --git a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs index 6c7909c..32fc83b 100644 --- a/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/JobGiver_VampireBeast.cs @@ -1,8 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; using Verse.AI; @@ -28,28 +24,28 @@ protected override Job TryGiveJob(Pawn pawn) { return null; } - if (pawn?.TryGetAttackVerb(false) == null) + if (pawn?.TryGetAttackVerb() == null) { return null; } - Pawn pawn2 = this.FindPawnTarget(pawn); - if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) + Pawn pawn2 = FindPawnTarget(pawn); + if (pawn2 != null && pawn.CanReach(pawn2, PathEndMode.Touch, Danger.Deadly)) { if (pawn2.InAggroMentalState) - return this.MeleeAttackJob(pawn2); + return MeleeAttackJob(pawn2); else - return this.FeedJob(pawn2); + return FeedJob(pawn2); } - Building building = this.FindTurretTarget(pawn); + Building building = FindTurretTarget(pawn); if (building != null) { - return this.MeleeAttackJob(building); + return MeleeAttackJob(building); } if (pawn2 != null) { - using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings, false), PathEndMode.OnCell)) + using (PawnPath pawnPath = pawn.MapHeld.pathFinder.FindPath(pawn.Position, pawn2.Position, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.PassAllDestroyableThings))) { if (!pawnPath.Found) { @@ -62,22 +58,22 @@ protected override Job TryGiveJob(Pawn pawn) //Job job = DigUtility.PassBlockerJob(pawn, thing, cellBeforeBlocker, true); //if (job != null) //{ - return this.MeleeAttackJob(thing); + return MeleeAttackJob(thing); //} } IntVec3 loc = pawnPath.LastCellBeforeBlockerOrFinalCell(pawn.MapHeld); - IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map, RegionType.Set_Passable), 9, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), null, null, RegionType.Set_Passable).RandomCell; + IntVec3 randomCell = CellFinder.RandomRegionNear(loc.GetRegion(pawn.Map), 9, TraverseParms.For(pawn)).RandomCell; if (randomCell == pawn.PositionHeld) { - return new Job(JobDefOf.Wait, 30, false); + return new Job(JobDefOf.Wait, 30); } return new Job(JobDefOf.Goto, randomCell); } } - Building buildingDoor = this.FindDoorTarget(pawn); + Building buildingDoor = FindDoorTarget(pawn); if (buildingDoor != null) { - return this.MeleeAttackJob(buildingDoor); + return MeleeAttackJob(buildingDoor); } return null; @@ -107,13 +103,13 @@ private Pawn FindPawnTarget(Pawn pawn) private Building FindTurretTarget(Pawn pawn) { - return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); + return (Building)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedLOSToPawns | TargetScanFlags.NeedLOSToNonPawns | TargetScanFlags.NeedReachable | TargetScanFlags.NeedThreat, (Thing t) => t is Building && t.Spawned, 0f, 70f); } private Building_Door FindDoorTarget(Pawn pawn) { - return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f, default(IntVec3), 3.40282347E+38f, false); + return (Building_Door)AttackTargetFinder.BestAttackTarget(pawn, TargetScanFlags.NeedReachable, (Thing t) => t is Building_Door && t.Spawned, 0f, 70f); } } diff --git a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs index 0cf4fd7..c83b4cb 100644 --- a/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs +++ b/Source/Vampires/AI_Jobs/MentalState_Rotschreck.cs @@ -1,8 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; using Verse.AI; @@ -10,8 +6,8 @@ namespace Vampire { public class MentalState_Rotschreck : MentalState { - CompVampire vampComp => this.pawn.GetComp(); - Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); + CompVampire vampComp => pawn.GetComp(); + Need_Blood vampBlood => pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -23,7 +19,7 @@ public override void MentalStateTick() { base.MentalStateTick(); if (pawn.PositionHeld.Roofed(pawn.MapHeld)) - this.RecoverFromState(); + RecoverFromState(); //Room room = pawn.GetRoom(RegionType.Set_All); //if (room != null) //{ diff --git a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs index 3d4f0f6..288b1c6 100644 --- a/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs +++ b/Source/Vampires/AI_Jobs/MentalState_VampireBeast.cs @@ -1,8 +1,4 @@ using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; using Verse.AI; @@ -10,8 +6,8 @@ namespace Vampire { public class MentalState_VampireBeast : MentalState { - CompVampire vampComp => this.pawn.GetComp(); - Need_Blood vampBlood => this.pawn.needs.TryGetNeed(); + CompVampire vampComp => pawn.GetComp(); + Need_Blood vampBlood => pawn.needs.TryGetNeed(); public override bool ForceHostileTo(Thing t) { @@ -24,9 +20,9 @@ public override void MentalStateTick() if (vampComp != null) { if (!vampComp.IsVampire) - this.RecoverFromState(); + RecoverFromState(); if (vampBlood.IsFull) - this.RecoverFromState(); + RecoverFromState(); } } diff --git a/Source/Vampires/Buildings/Building_Coffin.cs b/Source/Vampires/Buildings/Building_Coffin.cs index a68362a..b449cbe 100644 --- a/Source/Vampires/Buildings/Building_Coffin.cs +++ b/Source/Vampires/Buildings/Building_Coffin.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using RimWorld; using Verse; -using Verse.AI; namespace Vampire { @@ -27,7 +23,7 @@ public override IEnumerable GetGizmos() foreach (Gizmo g in base.GetGizmos()) yield return g; - Pawn p = (Pawn)this.ContainedThing; + Pawn p = (Pawn)ContainedThing; if (p == null) { p = this?.Corpse?.InnerPawn ?? null; diff --git a/Source/Vampires/Buildings/Building_HideyHole.cs b/Source/Vampires/Buildings/Building_HideyHole.cs index 527bcea..90caf7a 100644 --- a/Source/Vampires/Buildings/Building_HideyHole.cs +++ b/Source/Vampires/Buildings/Building_HideyHole.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -12,7 +8,7 @@ public class Building_HideyHole : Building_Grave public override void Open() { base.Open(); - this.Destroy(DestroyMode.Vanish); + Destroy(); } } } diff --git a/Source/Vampires/Buttons.cs b/Source/Vampires/Buttons.cs index 1a33527..06deff7 100644 --- a/Source/Vampires/Buttons.cs +++ b/Source/Vampires/Buttons.cs @@ -1,5 +1,4 @@ -using System; -using UnityEngine; +using UnityEngine; using Verse; namespace Vampire @@ -8,12 +7,12 @@ namespace Vampire public static class TexButton { //VampireIcon - public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon", true); - public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon", true); - public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty", true); - public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull", true); - public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted", true); - public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed", true); + public static readonly Texture2D ROMV_VampireIcon = ContentFinder.Get("UI/VampireIcon"); + public static readonly Texture2D ROMV_HumanIcon = ContentFinder.Get("UI/HumanIcon"); + public static readonly Texture2D ROMV_PointEmpty = ContentFinder.Get("UI/PointEmpty"); + public static readonly Texture2D ROMV_PointFull = ContentFinder.Get("UI/PointFull"); + public static readonly Texture2D ROMV_SunlightPolicyRestricted = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRestricted"); + public static readonly Texture2D ROMV_SunlightPolicyRelaxed = ContentFinder.Get("UI/Icons/SunlightPolicy/SunlightPolicyRelaxed"); //public static readonly Texture2D ROMV_Ashes = ContentFinder.Get("Things/Item/Resource/VampireAshes", true); } } \ No newline at end of file diff --git a/Source/Vampires/Components/CompBloodItem.cs b/Source/Vampires/Components/CompBloodItem.cs index a91216d..cb4b88e 100644 --- a/Source/Vampires/Components/CompBloodItem.cs +++ b/Source/Vampires/Components/CompBloodItem.cs @@ -1,13 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; namespace Vampire { public class CompBloodItem : ThingComp { - public CompProperties_BloodItem Props => this.props as CompProperties_BloodItem; + public CompProperties_BloodItem Props => props as CompProperties_BloodItem; } } diff --git a/Source/Vampires/Components/CompProperties_BloodItem.cs b/Source/Vampires/Components/CompProperties_BloodItem.cs index 1b7f819..cc4e1ef 100644 --- a/Source/Vampires/Components/CompProperties_BloodItem.cs +++ b/Source/Vampires/Components/CompProperties_BloodItem.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; namespace Vampire { @@ -11,6 +7,6 @@ public class CompProperties_BloodItem : CompProperties { public BloodType bloodType = BloodType.LowBlood; public int bloodPoints = 1; - public CompProperties_BloodItem() => this.compClass = typeof(CompBloodItem); + public CompProperties_BloodItem() => compClass = typeof(CompBloodItem); } } diff --git a/Source/Vampires/Components/CompProperties_VampBed.cs b/Source/Vampires/Components/CompProperties_VampBed.cs index c68c109..9d59c60 100644 --- a/Source/Vampires/Components/CompProperties_VampBed.cs +++ b/Source/Vampires/Components/CompProperties_VampBed.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Verse; +using Verse; namespace Vampire { @@ -13,7 +9,7 @@ public class CompProperties_VampBed : CompProperties public CompProperties_VampBed() { - this.compClass = typeof(CompVampBed); + compClass = typeof(CompVampBed); } } } diff --git a/Source/Vampires/Components/CompVampBed.cs b/Source/Vampires/Components/CompVampBed.cs index b21b15d..2b1e1e2 100644 --- a/Source/Vampires/Components/CompVampBed.cs +++ b/Source/Vampires/Components/CompVampBed.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; using RimWorld; using Verse.AI; @@ -14,22 +12,22 @@ public class CompVampBed : ThingComp { private Building_Bed bed; public Building_Bed Bed { get => bed; set => bed = value; } - public CompProperties_VampBed Props => this.props as CompProperties_VampBed; + public CompProperties_VampBed Props => props as CompProperties_VampBed; public override void PostSpawnSetup(bool respawningAfterLoad) { base.PostSpawnSetup(respawningAfterLoad); - if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (this.parent is Building b) + if (parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); - bed.SetFaction(this.parent.Faction); + GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); + bed.SetFaction(parent.Faction); } } @@ -38,28 +36,28 @@ public override IEnumerable CompFloatMenuOptions(Pawn selPawn) { //return base.CompFloatMenuOptions(selPawn); - if ((selPawn?.IsVampire() ?? false) && this.parent is Building_Grave g && !g.HasCorpse) + if ((selPawn?.IsVampire() ?? false) && parent is Building_Grave g && !g.HasCorpse) { yield return new FloatMenuOption("ROMV_EnterTorpor".Translate(new object[] { selPawn.Label }), delegate { - selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, this.parent)); - }, MenuOptionPriority.Default, null, null, 0f, null, null); + selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, parent)); + }); } } public override void CompTickRare() { base.CompTickRare(); - if (this.parent is Building_Grave g) + if (parent is Building_Grave g) { if (g.HasAnyContents) { if (bed != null && bed.Spawned) { - bed.Destroy(DestroyMode.Vanish); + bed.Destroy(); bed = null; } if (g.TryGetInnerInteractableThingOwner().FirstOrDefault(x => x is MinifiedThing) is MinifiedThing t) @@ -70,18 +68,18 @@ public override void CompTickRare() return; } - if (bed == null && this.parent.TryGetInnerInteractableThingOwner().Count == 0) + if (bed == null && parent.TryGetInnerInteractableThingOwner().Count == 0) { ThingDef stuff = null; - if (this.parent is Building b) + if (parent is Building b) { stuff = b.Stuff; } bed = (Building_Bed)ThingMaker.MakeThing(Props.bedDef, stuff); - GenSpawn.Spawn(bed, this.parent.Position, this.parent.Map, parent.Rotation); - bed.SetFaction(this.parent.Faction); + GenSpawn.Spawn(bed, parent.Position, parent.Map, parent.Rotation); + bed.SetFaction(parent.Faction); } - if (bed != null && bed.Spawned && g.assignedPawn != null && ((bed?.AssignedPawns?.Contains(g.assignedPawn) ?? false) == false)) + if (bed != null && bed.Spawned && g.assignedPawn != null && (bed?.AssignedPawns?.Contains(g.assignedPawn) ?? false) == false) { bed.TryAssignPawn(g.assignedPawn); } @@ -96,7 +94,7 @@ public override void PostDeSpawn(Map map) base.PostDeSpawn(map); if (bed != null && bed.Spawned) { - bed.Destroy(DestroyMode.Vanish); + bed.Destroy(); bed = null; } } @@ -104,7 +102,7 @@ public override void PostDeSpawn(Map map) public override void PostExposeData() { base.PostExposeData(); - Scribe_References.Look(ref this.bed, "bed"); + Scribe_References.Look(ref bed, "bed"); } } } diff --git a/Source/Vampires/Components/CompVampire.cs b/Source/Vampires/Components/CompVampire.cs index cf1bdb1..e037585 100644 --- a/Source/Vampires/Components/CompVampire.cs +++ b/Source/Vampires/Components/CompVampire.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; using AbilityUser; @@ -60,7 +59,7 @@ public IntVec3 VampLastHomePoint if (vampLastHomePoint == null || vampLastHomeCheck < Find.TickManager.TicksGame) { vampLastHomeCheck = Find.TickManager.TicksGame + 500; - vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(this.Pawn); + vampLastHomePoint = VampSunlightPathUtility.DetermineHomePoint(Pawn); } return vampLastHomePoint.Value; } @@ -98,24 +97,13 @@ public float XPLastLevel return result; } } - public float XPTillNextLevelPercent - { - get - { - return ((float)(xp - XPLastLevel) / (float)(XPTillNextLevel - XPLastLevel)); - } - } - public int XPTillNextLevel - { - get - { - return (level + 1) * 600; - } - } + public float XPTillNextLevelPercent => (float)(xp - XPLastLevel) / (float)(XPTillNextLevel - XPLastLevel); + public int XPTillNextLevel => (level + 1) * 600; public int AbilityPoints { get => abilityPoints; set => abilityPoints = value; } public bool Transformed => currentForm != null; - public PawnKindDef CurrentForm { get => currentForm; set { currentForm = value; }} + public PawnKindDef CurrentForm { get => currentForm; set => currentForm = value; + } private Graphic curFormGraphic = null; public Graphic CurFormGraphic { get => curFormGraphic; set => curFormGraphic = value; } @@ -125,7 +113,7 @@ public SkillSheet Sheet { if (sheet == null) { - sheet = new SkillSheet(this.Pawn); + sheet = new SkillSheet(Pawn); } return sheet; } @@ -139,7 +127,7 @@ public List Childer if (childer == null) { childer = new List(); - if (this.AbilityUser?.relations?.DirectRelations is List rels) + if (AbilityUser?.relations?.DirectRelations is List rels) { foreach (DirectPawnRelation rel in rels) { @@ -188,21 +176,19 @@ public List Souls } } public BloodlineDef Bloodline { - get - { - return bloodline; - } set => bloodline = value; } + get => bloodline; + set => bloodline = value; } public int Generation { get => generation; set => generation = value; } - public bool Thinblooded => this.generation > 13; - public Need_Blood BloodPool => this.AbilityUser?.needs?.TryGetNeed() ?? null; + public bool Thinblooded => generation > 13; + public Need_Blood BloodPool => AbilityUser?.needs?.TryGetNeed() ?? null; public float TrueCombatPower { get { float result = 0; - result += this.AbilityUser.kindDef.combatPower; + result += AbilityUser.kindDef.combatPower; result += 4000; - for (int i = 1; i <= this.generation; i++) + for (int i = 1; i <= generation; i++) { if (i == 2) { result -= 3000; continue; } if (i < 7) { result -= 100; continue; } @@ -216,13 +202,13 @@ public bool InSunlight { get { - if (this.AbilityUser.Spawned) + if (AbilityUser.Spawned) { - Map curMap = this.AbilityUser.Map; + Map curMap = AbilityUser.Map; if (curMap != null) { - if (VampireUtility.IsDaylight(this.AbilityUser) - && !this.AbilityUser.PositionHeld.Roofed(curMap)) + if (VampireUtility.IsDaylight(AbilityUser) + && !AbilityUser.PositionHeld.Roofed(curMap)) { return true; } @@ -243,8 +229,8 @@ public void Notify_LevelUp(bool sendNotification) { if (XP <= 0) XP = 1; Level++; - if (sendNotification && this.IsVampire && this.AbilityUser != null && this.AbilityUser.Spawned && this.AbilityUser.Faction == Faction.OfPlayerSilentFail) - Messages.Message("ROMV_LevelUp".Translate(this.AbilityUser), new RimWorld.Planet.GlobalTargetInfo(this.AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); + if (sendNotification && IsVampire && AbilityUser != null && AbilityUser.Spawned && AbilityUser.Faction == Faction.OfPlayerSilentFail) + Messages.Message("ROMV_LevelUp".Translate(AbilityUser), new RimWorld.Planet.GlobalTargetInfo(AbilityUser), DefDatabase.GetNamed("ROMV_VampireNotifaction")); } public void Notify_ResetAbilities() { @@ -253,7 +239,7 @@ public void Notify_ResetAbilities() public void Notify_UpdateAbilities() { - if (this.AbilityUser.IsVampire() && this is CompVampire) + if (AbilityUser.IsVampire() && this is CompVampire) { //Disciplines Skill Sheet if (Sheet?.Disciplines is List dd && !dd.NullOrEmpty()) @@ -264,9 +250,9 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef vd in vdd) { - if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) + if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == vd.defName) == null) { - this.AddPawnAbility(vd); + AddPawnAbility(vd); } } @@ -278,22 +264,22 @@ public void Notify_UpdateAbilities() { foreach (VitaeAbilityDef bloodVAD in bloodVADs) { - if (this.AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) + if (AbilityData.Powers.FirstOrDefault(x => x.Def.defName == bloodVAD.defName) == null) { - this.AddPawnAbility(bloodVAD); + AddPawnAbility(bloodVAD); } } } //Regenerate Limb if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_RegenerateLimb) == null) { - this.AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); + AddPawnAbility(VampDefOf.ROMV_RegenerateLimb); } //Vampiric Healing if (this?.AbilityData.Powers?.FirstOrDefault(x => x.Def is VitaeAbilityDef vDef && vDef == VampDefOf.ROMV_VampiricHealing) == null) { - this.AddPawnAbility(VampDefOf.ROMV_VampiricHealing); + AddPawnAbility(VampDefOf.ROMV_VampiricHealing); } } } @@ -301,47 +287,47 @@ public void Notify_UpdateAbilities() public void GiveFeedJob(Pawn victim) { Job feedJob = new Job(VampDefOf.ROMV_Feed, victim); - this.AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); + AbilityUser.jobs.TryTakeOrderedJob(feedJob, JobTag.SatisfyingNeeds); } public void GiveEmbraceJob(Pawn newChilde) { Job embraceJob = new Job(VampDefOf.ROMV_Embrace, newChilde); - this.AbilityUser.jobs.TryTakeOrderedJob(embraceJob, JobTag.Misc); + AbilityUser.jobs.TryTakeOrderedJob(embraceJob); } public void InitializeVampirism(Pawn newSire, BloodlineDef newBloodline = null, int newGeneration = -1, bool firstVampire = false) { //Log.Message("Init"); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); - this.AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); - VampireGen.TryGiveVampirismHediff(this.AbilityUser, newGeneration, newBloodline, newSire, firstVampire); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is HediffVampirism_VampGiver); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x.def == HediffDefOf.Malnutrition); + AbilityUser.health.hediffSet.hediffs.RemoveAll(x => x is Hediff_Addiction); + VampireGen.TryGiveVampirismHediff(AbilityUser, newGeneration, newBloodline, newSire, firstVampire); if (!firstVampire) { - this.bloodline = newBloodline;// sireComp.Bloodline; - this.generation = newGeneration;// + 1; - this.sire = newSire; - VampireRelationUtility.SetSireChildeRelations(this.AbilityUser, newSire?.VampComp() ?? null, newGeneration); + bloodline = newBloodline;// sireComp.Bloodline; + generation = newGeneration;// + 1; + sire = newSire; + VampireRelationUtility.SetSireChildeRelations(AbilityUser, newSire?.VampComp() ?? null, newGeneration); } else { - this.generation = 1; - this.bloodline = VampDefOf.ROMV_Caine; - this.sire = null; + generation = 1; + bloodline = VampDefOf.ROMV_Caine; + sire = null; } - VampireGen.TryGiveVampireAdditionalHediffs(this.AbilityUser); - if (VampireUtility.IsDaylight(this.AbilityUser)) VampireUtility.MakeSleepy(this.AbilityUser); - VampireUtility.AdjustTimeTables(this.AbilityUser); - - this.sheet = new SkillSheet(this.AbilityUser); - this.sheet.InitializeDisciplines(); - this.Notify_LevelUp(false); - this.AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" + VampireGen.TryGiveVampireAdditionalHediffs(AbilityUser); + if (VampireUtility.IsDaylight(AbilityUser)) VampireUtility.MakeSleepy(AbilityUser); + VampireUtility.AdjustTimeTables(AbilityUser); + + sheet = new SkillSheet(AbilityUser); + sheet.InitializeDisciplines(); + Notify_LevelUp(false); + AbilityUser.needs.AddOrRemoveNeedsAsAppropriate(); //This removes "food" and adds "blood" if (!bloodline.allowsHair) AbilityUser.story.hairDef = DefDatabase.GetNamed("Shaved"); if (this?.AbilityUser?.playerSettings != null) - this.AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; + AbilityUser.playerSettings.hostilityResponse = HostilityResponseMode.Attack; } public override void CompTick() @@ -364,7 +350,7 @@ public void SunlightWatcherTick() try { //Log.Message("SunlightWatcher"); - Pawn p = this.Pawn; + Pawn p = Pawn; Map m = p.MapHeld; IntVec3 i = p.PositionHeld; if (p.ParentHolder.IsEnclosingContainer()) @@ -378,7 +364,7 @@ public void SunlightWatcherTick() ThinkResult thinkResult = thinkNode_JobGiver.TryIssueJobPackage(p, default(JobIssueParams)); if (thinkResult.Job is Job j && j.IsSunlightSafeFor(p)) { - p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null, false); + p.jobs.StartJob(j, JobCondition.Incompletable, null, false, true, null, null); } else { @@ -401,10 +387,10 @@ public void Notify_Starving(int lastNonStarvingTick) public void Notify_Embraced(CompVampire sireComp) { - InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1, false); + InitializeVampirism(sireComp.AbilityUser, sireComp.Bloodline, sireComp.Generation + 1); Messages.Message("ROMV_EmbracedSuccessfully".Translate(new object[] { - this.AbilityUser.LabelShort, + AbilityUser.LabelShort, sireComp.AbilityUser.LabelShort, sireComp.Bloodline.LabelCap }), MessageTypeDefOf.PositiveEvent); @@ -414,12 +400,12 @@ public void Notify_Diablerie(CompVampire victim) { Messages.Message("ROMV_DiablerieSuccessfully".Translate(new object[] { - this.AbilityUser.LabelShort, + AbilityUser.LabelShort, victim.AbilityUser.LabelShort }), MessageTypeDefOf.PositiveEvent); - this.Generation = Math.Min(this.Generation, victim.Generation); - this.Souls.Add(victim.AbilityUser); - VampireThoughtUtility.GiveThoughtsForDiablerie(this.AbilityUser); + Generation = Math.Min(Generation, victim.Generation); + Souls.Add(victim.AbilityUser); + VampireThoughtUtility.GiveThoughtsForDiablerie(AbilityUser); } #endregion Methods @@ -444,7 +430,7 @@ public override bool AllowStackWith(Thing other) } - public override float GrappleModifier => (IsVampire) ? 20 - this.generation : 0; + public override float GrappleModifier => IsVampire ? 20 - generation : 0; @@ -452,13 +438,13 @@ public override IEnumerable CompGetGizmosExtra() { if (Find.Selector.NumSelected == 1) { - for (int i = 0; i < this.AbilityData.AllPowers.Count; i++) + for (int i = 0; i < AbilityData.AllPowers.Count; i++) { - if (this.AbilityData.AllPowers[i] is VampAbility p && (p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0)) yield return p.GetGizmo(); + if (AbilityData.AllPowers[i] is VampAbility p && p.ShouldShowGizmo() && p.AbilityDef.MainVerb.hasStandardCommand && p.AbilityDef.bloodCost != 0) yield return p.GetGizmo(); } if (AbilityUser.Downed && AbilityUser.IsVampire()) { - Vampire.VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); + VitaeAbilityDef bloodHeal = DefDatabase.GetNamedSilentFail("ROMV_VampiricHealing"); yield return new Command_Action() { defaultLabel = bloodHeal.label, @@ -467,11 +453,11 @@ public override IEnumerable CompGetGizmosExtra() action = delegate { AbilityUser.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess, -1f); - this.BloodPool.AdjustBlood(-bloodHeal.bloodCost); - VampireUtility.Heal(this.AbilityUser); + MoteMaker.ThrowText(AbilityUser.DrawPos, AbilityUser.Map, StringsToTranslate.AU_CastSuccess); + BloodPool.AdjustBlood(-bloodHeal.bloodCost); + VampireUtility.Heal(AbilityUser); }, - disabled = this.BloodPool.CurBloodPoints <= 0 + disabled = BloodPool.CurBloodPoints <= 0 }; } } @@ -480,22 +466,22 @@ public override IEnumerable CompGetGizmosExtra() public override void PostExposeData() { - Scribe_Defs.Look(ref this.bloodline, "bloodline"); - Scribe_Values.Look(ref this.generation, "generation"); - Scribe_Values.Look(ref this.level, "level", 0); - Scribe_Values.Look(ref this.xp, "xp", 0); - Scribe_Values.Look(ref this.abilityPoints, "abilityPoints", 0); - Scribe_Values.Look(ref this.curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); - Scribe_References.Look(ref this.sire, "sire"); - Scribe_Collections.Look(ref this.souls, "souls", LookMode.Reference); - Scribe_Deep.Look(ref this.sheet, "sheet", new object[] { this.AbilityUser }); + Scribe_Defs.Look(ref bloodline, "bloodline"); + Scribe_Values.Look(ref generation, "generation"); + Scribe_Values.Look(ref level, "level"); + Scribe_Values.Look(ref xp, "xp"); + Scribe_Values.Look(ref abilityPoints, "abilityPoints"); + Scribe_Values.Look(ref curSunlightPolicy, "curSunlightPolicy", SunlightPolicy.Restricted); + Scribe_References.Look(ref sire, "sire"); + Scribe_Collections.Look(ref souls, "souls", LookMode.Reference); + Scribe_Deep.Look(ref sheet, "sheet", new object[] { AbilityUser }); base.PostExposeData(); if (Scribe.mode == LoadSaveMode.PostLoadInit) { - this.AbilityData.Powers.Clear(); - if (this.AbilityUser.IsVampire() && (base.AbilityData.Powers == null || base.AbilityData.Powers.NullOrEmpty())) + AbilityData.Powers.Clear(); + if (AbilityUser.IsVampire() && (AbilityData.Powers == null || AbilityData.Powers.NullOrEmpty())) { - if (this.Sheet.Disciplines is List dd && !dd.NullOrEmpty()) + if (Sheet.Disciplines is List dd && !dd.NullOrEmpty()) { foreach (Discipline d in dd) { @@ -503,12 +489,12 @@ public override void PostExposeData() { foreach (VitaeAbilityDef vd in vds) { - this.AddPawnAbility(vd); + AddPawnAbility(vd); } } } } - this.Notify_UpdateAbilities(); + Notify_UpdateAbilities(); } } } diff --git a/Source/Vampires/Defs/BloodType.cs b/Source/Vampires/Defs/BloodType.cs index d03ef2b..0104bd6 100644 --- a/Source/Vampires/Defs/BloodType.cs +++ b/Source/Vampires/Defs/BloodType.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public enum BloodType : int { diff --git a/Source/Vampires/Defs/BloodlineDef.cs b/Source/Vampires/Defs/BloodlineDef.cs index 75cef41..10d1530 100644 --- a/Source/Vampires/Defs/BloodlineDef.cs +++ b/Source/Vampires/Defs/BloodlineDef.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; using Verse; using UnityEngine; @@ -30,12 +27,12 @@ public EmbraceWorker EmbraceWorker { get { - if (this.embraceWorkerInt == null) + if (embraceWorkerInt == null) { - this.embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(this.embraceWorker); - this.embraceWorkerInt.def = this; + embraceWorkerInt = (EmbraceWorker)Activator.CreateInstance(embraceWorker); + embraceWorkerInt.def = this; } - return this.embraceWorkerInt; + return embraceWorkerInt; } } diff --git a/Source/Vampires/Defs/DisciplineDef.cs b/Source/Vampires/Defs/DisciplineDef.cs index 73396ee..18abe6f 100644 --- a/Source/Vampires/Defs/DisciplineDef.cs +++ b/Source/Vampires/Defs/DisciplineDef.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Collections.Generic; using Verse; -using AbilityUser; namespace Vampire { diff --git a/Source/Vampires/Defs/ScenPart_GameStartNight.cs b/Source/Vampires/Defs/ScenPart_GameStartNight.cs index a9ebfdb..7c8c55e 100644 --- a/Source/Vampires/Defs/ScenPart_GameStartNight.cs +++ b/Source/Vampires/Defs/ScenPart_GameStartNight.cs @@ -1,5 +1,4 @@ -using System; -using UnityEngine; +using UnityEngine; using Verse; using RimWorld; @@ -15,16 +14,16 @@ public class ScenPart_GameStartNight : ScenPart public override void DoEditInterface(Listing_ScenEdit listing) { - Rect scenPartRect = listing.GetScenPartRect(this, ScenPart.RowHeight * 5f); - this.text = Widgets.TextArea(scenPartRect, this.text, false); + Rect scenPartRect = listing.GetScenPartRect(this, RowHeight * 5f); + text = Widgets.TextArea(scenPartRect, text); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.text, "text", null, false); - Scribe_Values.Look(ref this.textKey, "textKey", null, false); - Scribe_Defs.Look(ref this.closeSound, "closeSound"); + Scribe_Values.Look(ref text, "text"); + Scribe_Values.Look(ref textKey, "textKey"); + Scribe_Defs.Look(ref closeSound, "closeSound"); } public override void PostGameStart() diff --git a/Source/Vampires/Defs/VampDefOf.cs b/Source/Vampires/Defs/VampDefOf.cs index 9e78d83..aab4c6e 100644 --- a/Source/Vampires/Defs/VampDefOf.cs +++ b/Source/Vampires/Defs/VampDefOf.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Defs/VitaeAbilityDef.cs b/Source/Vampires/Defs/VitaeAbilityDef.cs index f517ca2..1504c24 100644 --- a/Source/Vampires/Defs/VitaeAbilityDef.cs +++ b/Source/Vampires/Defs/VitaeAbilityDef.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class VitaeAbilityDef : AbilityUser.AbilityDef { diff --git a/Source/Vampires/Discipline.cs b/Source/Vampires/Discipline.cs index 1c1fd3c..4d470b9 100644 --- a/Source/Vampires/Discipline.cs +++ b/Source/Vampires/Discipline.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using System.Collections.Generic; using Verse; -using AbilityUser; namespace Vampire { @@ -47,9 +42,9 @@ public void UpdateAbilities() public void Notify_Reset(Pawn p) { - p.VampComp().AbilityPoints += this.points; - this.points = 0; - this.level = 0; + p.VampComp().AbilityPoints += points; + points = 0; + level = 0; UpdateAbilities(); } @@ -83,10 +78,10 @@ public Discipline(DisciplineDef def) public void ExposeData() { - Scribe_Values.Look(ref this.level, "level"); - Scribe_Values.Look(ref this.points, "points"); - Scribe_Values.Look(ref this.prevPoints, "prevPoints"); - Scribe_Defs.Look(ref this.def, "def"); + Scribe_Values.Look(ref level, "level"); + Scribe_Values.Look(ref points, "points"); + Scribe_Values.Look(ref prevPoints, "prevPoints"); + Scribe_Defs.Look(ref def, "def"); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs index 3be73bc..4396ce6 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Beckoning.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -15,15 +11,15 @@ public override void Effect(Pawn target) int count = new IntRange(15, 25).RandomInRange; IntVec3 loc; - if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal, null)) + if (RCellFinder.TryFindRandomPawnEntryCell(out loc, target.Map, CellFinder.EdgeRoadChance_Animal)) { - VampireUtility.SummonEffect(loc, this.CasterPawn.Map, this.CasterPawn, 10f); + VampireUtility.SummonEffect(loc, CasterPawn.Map, CasterPawn, 10f); for (int i = 0; i < count; i++) target.Map.wildSpawner.SpawnRandomWildAnimalAt(loc); } - Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map), null); + Find.LetterStack.ReceiveLetter("ROMV_AnimalHerd".Translate(), "ROMV_AnimalHerdDesc".Translate(), LetterDefOf.PositiveEvent, new RimWorld.Planet.GlobalTargetInfo(loc, target.Map)); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs index b5af0ad..b32b02e 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_Communion.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -12,15 +8,15 @@ public class DisciplineEffect_Communion : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { for (int i = 1; i <= 3; i++) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BatSpectralKind, Faction.OfPlayer); - p.Master = this.CasterPawn; - VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 3f); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + p.Master = CasterPawn; + VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 3f); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs index ee1e47f..9d4de8e 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_NightwispRavens.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,7 +7,7 @@ public class DisciplineEffect_NightwispRavens : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - VampireUtility.SummonEffect(target.PositionHeld, this.CasterPawn.Map, this.CasterPawn, 2f); + VampireUtility.SummonEffect(target.PositionHeld, CasterPawn.Map, CasterPawn, 2f); HealthUtility.AdjustSeverity(target, VampDefOf.ROMV_NightwispRavens, 1.0f); } diff --git a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs index 6983686..de6430e 100644 --- a/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs +++ b/Source/Vampires/Disciplines/Animalism/DisciplineEffect_SpectralWolf.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -12,12 +8,12 @@ public class DisciplineEffect_SpectralWolf : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_WolfSpectral, Faction.OfPlayer); - VampireUtility.SummonEffect(t.Cell, this.CasterPawn.Map, this.CasterPawn, 2f); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + VampireUtility.SummonEffect(t.Cell, CasterPawn.Map, CasterPawn, 2f); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs index e1cbbea..edf9626 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffCompProperties_TickGraphic.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Verse; namespace Vampire @@ -11,7 +10,7 @@ public class HediffCompProperties_TickGraphic : HediffCompProperties public HediffCompProperties_TickGraphic() { - this.compClass = typeof(HediffComp_TickGraphic); + compClass = typeof(HediffComp_TickGraphic); } } } diff --git a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs index 2d9040e..8275c17 100644 --- a/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs +++ b/Source/Vampires/Disciplines/Animalism/HediffComp_TickGraphic.cs @@ -1,7 +1,4 @@ -using System; -using RimWorld; -using Verse; -using System.Linq; +using Verse; using UnityEngine; namespace Vampire @@ -16,13 +13,7 @@ public class HediffComp_TickGraphic : HediffComp private Graphic curGraphic = null; public Graphic CurGraphic { get => curGraphic; set => curGraphic = value; } - public HediffCompProperties_TickGraphic Props - { - get - { - return (HediffCompProperties_TickGraphic)this.props; - } - } + public HediffCompProperties_TickGraphic Props => (HediffCompProperties_TickGraphic)props; public override void CompPostTick(ref float severityAdjustment) { @@ -38,13 +29,13 @@ public override void CompPostTick(ref float severityAdjustment) curGraphicIndex = 0; } } - CurGraphic = this.Props.cycleGraphics[curGraphicIndex].Graphic; + CurGraphic = Props.cycleGraphics[curGraphicIndex].Graphic; if (CurGraphic != null) { - Material material = this.CurGraphic.MatSingle; + Material material = CurGraphic.MatSingle; Vector3 s = new Vector3(CurGraphic.drawSize.x, 1f, CurGraphic.drawSize.y); Matrix4x4 matrix = default(Matrix4x4); - matrix.SetTRS(this.Pawn.DrawPos, Quaternion.identity, s); + matrix.SetTRS(Pawn.DrawPos, Quaternion.identity, s); Graphics.DrawMesh(MeshPool.plane10, matrix, material, 0); } } @@ -52,8 +43,8 @@ public override void CompPostTick(ref float severityAdjustment) public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.curGraphicIndex, "curGraphicIndex", 0); - Scribe_Values.Look(ref this.activated, "activated", false); + Scribe_Values.Look(ref curGraphicIndex, "curGraphicIndex"); + Scribe_Values.Look(ref activated, "activated"); } } } diff --git a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs index 8f7e2a3..744433d 100644 --- a/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs +++ b/Source/Vampires/Disciplines/Animalism/PawnTemporary.cs @@ -1,9 +1,5 @@ -using Harmony; -using RimWorld; -using System; -using System.Collections.Generic; +using RimWorld; using System.Linq; -using System.Text; using UnityEngine; using Verse; using Verse.AI; @@ -33,11 +29,11 @@ public override void Tick() { setup = true; - if (this.def == VampDefOf.ROMV_BatSpectralRace) + if (def == VampDefOf.ROMV_BatSpectralRace) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -45,21 +41,23 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.StopAll(); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.StopAll(); + jobs.TryTakeOrderedJob(newJob); } } } - if (this.def == VampDefOf.ROMV_BloodMistRace) + if (def == VampDefOf.ROMV_BloodMistRace) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndDestroy job."); } if (Master != null) { @@ -67,13 +65,15 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } } } @@ -83,11 +83,11 @@ public override void Tick() if (ticksUntilNextTryGiveJob < 0) { ticksUntilNextTryGiveJob = new IntRange(500, 700).RandomInRange; - if (this.def == VampDefOf.ROMV_BatSpectralRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndReturn) + if (def == VampDefOf.ROMV_BatSpectralRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndReturn) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -95,22 +95,24 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndReturn, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.StartJob(newJob, JobCondition.InterruptForced); + //jobs.TryTakeOrderedJob(newJob); } } } - if (this.def == VampDefOf.ROMV_BloodMistRace && this.CurJob != null && this.CurJob.def != VampDefOf.ROMV_FeedAndDestroy) + /*if (def == VampDefOf.ROMV_BloodMistRace && CurJob != null && CurJob.def != VampDefOf.ROMV_FeedAndDestroy) { if (Master == null) { - Log.Warning("No master for " + this.def.LabelCap + ". Cancelling FeedAndReturn job."); + Log.Warning("No master for " + def.LabelCap + ". Cancelling FeedAndReturn job."); } if (Master != null) { @@ -118,20 +120,21 @@ public override void Tick() this.CanReserve(x)) is Pawn target) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, target, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } else if (Master.Map.mapPawns.AllPawnsSpawned.FirstOrDefault(x => x.Faction != null && x != Master && !x.IsVampire() && x.RaceProps.Humanlike && this.CanReserve(x)) is Pawn tTwo) { Job newJob = new Job(VampDefOf.ROMV_FeedAndDestroy, tTwo, Master); - this.jobs.TryTakeOrderedJob(newJob, JobTag.Misc); + jobs.TryTakeOrderedJob(newJob); } } - } + }*/ + //The above should no longer be needed as the action cannot be interrupted. } ticksLeft--; - if (ticksLeft <= 0) this.Destroy(); + if (ticksLeft <= 0) Destroy(); if (Spawned) { @@ -143,14 +146,14 @@ public override void Tick() else { LocalTargetInfo target = this; - if (this.Spawned) + if (Spawned) { effecter.EffectTick(this, TargetInfo.Invalid); } MoteProgressBar mote = ((SubEffecter_ProgressBar)effecter.children[0]).mote; if (mote != null) { - float result = 1f - (float)(PawnTemporary.ticksToDestroy - this.ticksLeft) / (float)PawnTemporary.ticksToDestroy; + float result = 1f - (float)(ticksToDestroy - ticksLeft) / (float)ticksToDestroy; mote.progress = Mathf.Clamp01(result); mote.offsetZ = -0.5f; @@ -164,15 +167,15 @@ public override void Tick() public override void DeSpawn() { if (effecter != null) effecter.Cleanup(); - VampireUtility.SummonEffect(this.PositionHeld, this.MapHeld, this, 2f); + VampireUtility.SummonEffect(PositionHeld, MapHeld, this, 2f); base.DeSpawn(); } public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.ticksLeft, "ticksLeft", 0); - Scribe_References.Look(ref this.master, "master"); + Scribe_Values.Look(ref ticksLeft, "ticksLeft"); + Scribe_References.Look(ref master, "master"); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs index 212ebe2..45859c0 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_CrocodileTongue.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs index 527d392..2ddd416 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_HeightenedSenses.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs index 7caaa80..9fb9867 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_ReadMind.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -12,14 +8,14 @@ public class DisciplineEffect_ReadMind : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, this.CasterPawn, null); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + HediffWithComps hediff = (HediffWithComps)HediffMaker.MakeHediff(VampDefOf.ROMV_MindReadingHediff, CasterPawn); if (hediff.TryGetComp() is HediffComp_ReadMind rm) { rm.MindBeingRead = target; } hediff.Severity = 1.0f; - this.CasterPawn.health.AddHediff(hediff, null, null); + CasterPawn.health.AddHediff(hediff, null, null); } } } diff --git a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs index 981dd7a..7b09a2e 100644 --- a/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs +++ b/Source/Vampires/Disciplines/Auspex/DisciplineEffect_RevealIllusions.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using RimWorld; using Verse; @@ -27,7 +24,7 @@ public virtual void Effect() { if (defsToCheck.Contains(h.def)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap), -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, "ROMV_HediffRemoved".Translate(h.def.LabelCap)); p.health.hediffSet.hediffs.Remove(h); } } @@ -36,15 +33,15 @@ public virtual void Effect() if (t.Cell != default(IntVec3) && t.Cell is IntVec3 c) { // Verse.FogGrid - if (this.CasterPawn.Map.fogGrid.IsFogged(c)) + if (CasterPawn.Map.fogGrid.IsFogged(c)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - this.CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + CasterPawn.Map.fogGrid.Notify_FogBlockerRemoved(c); return; } else { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs index 492a29a..0589490 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Hunger.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using RimWorld; using Verse; @@ -12,20 +9,20 @@ public class DisciplineEffect_Hunger : AbilityUser.Verb_UseAbility public virtual void Effect() { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - IntVec3 curCell = this.CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; - if (curCell.GetThingList(this.CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) + IntVec3 curCell = CasterPawn.PositionHeld + GenRadial.RadialPattern[i]; + if (curCell.GetThingList(CasterPawn.MapHeld) is List things && !things.NullOrEmpty()) { List temp = new List(things); foreach (Thing t in temp) { if (t.def.defName == "FilthBlood") { - this.CasterPawn.BloodNeed().AdjustBlood(1); - t.Destroy(DestroyMode.Vanish); + CasterPawn.BloodNeed().AdjustBlood(1); + t.Destroy(); } } } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs index 3477020..fe3aeaf 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_Purge.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs index bedc31d..0779adb 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_StemTheTide.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using RimWorld; using Verse; namespace Vampire @@ -11,15 +8,12 @@ public class DisciplineEffect_StemTheTide : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { - Log.Message("1"); - if (target.health.hediffSet.GetInjuriesTendable() is List injuries && !injuries.NullOrEmpty()) + List injuries = new List(target.health.hediffSet.GetInjuriesTendable()); + + if (!injuries.NullOrEmpty()) { - - Log.Message("2"); - foreach (Hediff_Injury injury in injuries) { - Log.Message("3"); if (injury.Bleeding) injury.Heal(30); } diff --git a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs index 8eaa3b3..87d6192 100644 --- a/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs +++ b/Source/Vampires/Disciplines/Blood/DisciplineEffect_UnstoppableTide.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -12,11 +8,12 @@ public class DisciplineEffect_UnstoppableTide : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_BloodMistKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + p.Master = CasterPawn; + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs index 926a5e1..2adaaa7 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Mesmerise.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,7 +7,7 @@ public class DisciplineEffect_Mesmerise : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - if (target.Faction == this.CasterPawn.Faction) //To avoid throwing red errors + if (target.Faction == CasterPawn.Faction) //To avoid throwing red errors target.ClearMind(); } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs index e665777..3bf4c4b 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Possession.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; -using Verse.AI; +using Verse; namespace Vampire { @@ -13,10 +7,10 @@ public class DisciplineEffect_Possession : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target, null); + Hediff hediff = HediffMaker.MakeHediff(VampDefOf.ROMV_PossessionHediff, target); hediff.Severity = 1.0f; target.health.AddHediff(hediff, null, null); - hediff.TryGetComp().ActivateEffect(this.CasterPawn); + hediff.TryGetComp().ActivateEffect(CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs index 1e3061b..54082d4 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Sleep.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; -using Verse.AI; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs index 54299e7..540bb66 100644 --- a/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs +++ b/Source/Vampires/Disciplines/Dominate/DisciplineEffect_Suicide.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs index 1dfd403..248f1e1 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_LongFlight.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -15,9 +11,9 @@ public virtual void Effect() if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { CasterPawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); - flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); + flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs index 9140eac..ce56489 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_ShortFlight.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -17,8 +12,8 @@ public virtual void Effect() Pawn caster = CasterPawn; LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); - flyingObject.Launch(this.CasterPawn, t.Cell, this.CasterPawn); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); + flyingObject.Launch(CasterPawn, t.Cell, CasterPawn); }, "LaunchingFlyer", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs index a10702e..668f7f5 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_SkyFall.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -15,11 +11,11 @@ public virtual void Effect() { LongEventHandler.QueueLongEvent(delegate { - FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), this.CasterPawn.Position, this.CasterPawn.Map); + FlyingObject flyingObject = (FlyingObject)GenSpawn.Spawn(ThingDef.Named("ROMV_FlyingObject"), CasterPawn.Position, CasterPawn.Map); flyingObject.damageLaunched = false; flyingObject.timesToDamage = 3; flyingObject.explosion = true; - flyingObject.Launch(this.CasterPawn, target, this.CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, this.CasterPawn)); + flyingObject.Launch(CasterPawn, target, CasterPawn, new DamageInfo(DamageDefOf.Blunt, Rand.Range(15, 25), -1, CasterPawn)); }, "LaunchingFlyerSkyFall", false, null); } } diff --git a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs index 3c6d245..30a40a8 100644 --- a/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs +++ b/Source/Vampires/Disciplines/Flight/DisciplineEffect_WingBuffet.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -12,7 +8,7 @@ public class DisciplineEffect_WingBuffet : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, this.CasterPawn); + GenExplosion.DoExplosion(target.PositionHeld, target.MapHeld, 1.9f, DamageDefOf.Stun, CasterPawn); } } } diff --git a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs index 766503d..00ffd49 100644 --- a/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs +++ b/Source/Vampires/Disciplines/Fortitude/PassiveEffect_DamageSoak.cs @@ -1,11 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; - -namespace Vampire +namespace Vampire { public class PassiveEffect_DamageSoak : AbilityUser.PassiveEffectWorker { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs index 93d4485..fc7343b 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_ArmOfTheAbyss.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -13,11 +9,11 @@ public class DisciplineEffect_ArmOfTheAbyss : AbilityUser.Verb_UseAbility public virtual void Effect() { //target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); if (TargetsAoE[0] is LocalTargetInfo t && t.Cell != default(IntVec3)) { PawnTemporary p = (PawnTemporary)PawnGenerator.GeneratePawn(VampDefOf.ROMV_AbyssalArmKind, Faction.OfPlayer); - GenSpawn.Spawn(p, t.Cell, this.CasterPawn.Map); + GenSpawn.Spawn(p, t.Cell, CasterPawn.Map); } } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs index eb52b5b..5c1b54e 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_BlackMetamorphosis.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs index 77ee47b..5186b25 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_EnterTheAbyss.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Linq; using RimWorld; using Verse; @@ -11,16 +8,16 @@ public class DisciplineEffect_EnterTheAbyss : AbilityUser.Verb_UseAbility { public void Effect() { - this.CasterPawn.Drawer.Notify_DebugAffected(); + CasterPawn.Drawer.Notify_DebugAffected(); if (TargetsAoE.FirstOrDefault(x => x is LocalTargetInfo y && y.Cell != default(IntVec3)) is LocalTargetInfo t) { - if (t.Cell.Standable(this.CasterPawn.MapHeld)) + if (t.Cell.Standable(CasterPawn.MapHeld)) { - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); - this.CasterPawn.Position = t.Cell; + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); + CasterPawn.Position = t.Cell; return; } - MoteMaker.ThrowText(this.CasterPawn.DrawPos, this.CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure, -1f); + MoteMaker.ThrowText(CasterPawn.DrawPos, CasterPawn.Map, AbilityUser.StringsToTranslate.AU_CastFailure); } } @@ -32,14 +29,14 @@ public override bool CanHitTargetFrom(IntVec3 root, LocalTargetInfo targ) protected override bool TryCastShot() { - this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); return base.TryCastShot(); } public override void PostCastShot(bool inResult, out bool outResult) { - this.CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); + CasterPawn.jobs.EndCurrentJob(Verse.AI.JobCondition.InterruptForced); Effect(); outResult = true; } diff --git a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs index 2dcbf8b..086e772 100644 --- a/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs +++ b/Source/Vampires/Disciplines/Obtenebration/DisciplineEffect_TenebrousForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs index c855290..0afcf4c 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_BatForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,7 +7,7 @@ public class DisciplineEffect_BatForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_BatFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs index aad70aa..faec2af 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_FeralClaws.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; @@ -14,12 +12,12 @@ public override void Effect(Pawn target) base.Effect(target); IEnumerable recs = target.health.hediffSet.GetNotMissingParts(); Dictionary bodyPartRecords = new Dictionary(); - if (recs.FirstOrDefault(x => (x.def == BodyPartDefOf.LeftHand)) is BodyPartRecord leftHand) + if (recs.FirstOrDefault(x => x.def == BodyPartDefOf.LeftHand) is BodyPartRecord leftHand) bodyPartRecords.Add(leftHand, VampDefOf.ROMV_FeralClaw); - if (recs.FirstOrDefault(x => (x.def == BodyPartDefOf.RightHand)) is BodyPartRecord rightHand) + if (recs.FirstOrDefault(x => x.def == BodyPartDefOf.RightHand) is BodyPartRecord rightHand) bodyPartRecords.Add(rightHand, VampDefOf.ROMV_FeralClaw); - if ((bodyPartRecords?.Count() ?? 0) > 0) + if ((bodyPartRecords?.Count ?? 0) > 0) { foreach (KeyValuePair transformableParts in bodyPartRecords) { diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs index 9657b6f..ea5924f 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_MistForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,7 +7,7 @@ public class DisciplineEffect_MistForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_MistFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs index b94c63d..4230994 100644 --- a/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs +++ b/Source/Vampires/Disciplines/Protean/DisciplineEffect_WarForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,7 +7,7 @@ public class DisciplineEffect_WarForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_WarFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs index 1075541..4f33ce6 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodBoil.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs index f226bed..ac94c8a 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodSalvo.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs index 90a5494..09e3e18 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodShield.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs index 1114b4d..1583979 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/DisciplineEffect_BloodStrike.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs index 5b0faa8..6c318a5 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodBoil.cs @@ -1,9 +1,7 @@ using AbilityUser; using RimWorld; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire @@ -20,13 +18,13 @@ public override void Impact_Override(Thing hitThing) int num = GenRadial.NumCellsInRadius(3.9f); for (int i = 0; i < num; i++) { - FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite(), 1); + FilthMaker.MakeFilth(hitThing.PositionHeld + GenRadial.RadialPattern[i], hitThing.MapHeld, ((Pawn)hitThing).RaceProps.BloodDef, ((Pawn)hitThing).LabelIndefinite()); } List parts = p.health.hediffSet.GetNotMissingParts().ToList().FindAll(x => x.depth == BodyPartDepth.Inside); for (int j = 0; j < 4; j++) { if (!p.Dead) - p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, this.Caster, parts.RandomElement())); + p.TakeDamage(new DamageInfo(DamageDefOf.Burn, Rand.Range(8, 13), -1, Caster, parts.RandomElement())); } } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs index 04a2a04..fbfa5af 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodReturner.cs @@ -1,9 +1,5 @@ using AbilityUser; using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire @@ -15,7 +11,7 @@ public override void Impact_Override(Thing hitThing) base.Impact_Override(hitThing); if (hitThing is Pawn p && p.BloodNeed() is Need_Blood bn) { - MoteMaker.ThrowText(p.DrawPos, p.Map, "+2", -1f); + MoteMaker.ThrowText(p.DrawPos, p.Map, "+2"); bn.AdjustBlood(2); } } diff --git a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs index 402e49c..01feec2 100644 --- a/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs +++ b/Source/Vampires/Disciplines/Thaumaturgy/Projectile_BloodStealer.cs @@ -1,9 +1,5 @@ using AbilityUser; using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire @@ -16,13 +12,13 @@ public override void Impact_Override(Thing hitThing) if (hitThing is Pawn p && p?.BloodNeed() is Need_Blood bn && p.MapHeld != null) { - MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2", -1f); + MoteMaker.ThrowText(p.DrawPos, p.MapHeld, "-2"); bn.AdjustBlood(-2); if (p.MapHeld != null && p.PositionHeld.IsValid) { Projectile_BloodReturner projectile = (Projectile_BloodReturner)GenSpawn.Spawn(ThingDef.Named("ROMV_BloodProjectile_Returner"), hitThing.PositionHeld, hitThing.MapHeld); - projectile.Launch(hitThing, this.origin.ToIntVec3(), null); + projectile.Launch(hitThing, origin.ToIntVec3()); } } } diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs index aa44354..bbf7f26 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_RegenerateLimb.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using RimWorld; using Verse; @@ -20,7 +18,7 @@ public override void Effect(Pawn target) Hediff_MissingPart partToRestore = missingParts.RandomElement(); target.health.RestorePart(partToRestore.Part); - Messages.Message("ROM_WerewolfLimbRegen".Translate(new object[] { + Messages.Message("ROMV_LimbRegen".Translate(new object[] { target.LabelShort, partToRestore.Label }), MessageTypeDefOf.PositiveEvent); diff --git a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs index 875b8a6..734fe44 100644 --- a/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs +++ b/Source/Vampires/Disciplines/Vampirism/DisciplineEffect_VampiricHealing.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { diff --git a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs index 3b35f65..f7cf3ef 100644 --- a/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs +++ b/Source/Vampires/Disciplines/Verb_UseAbilityPawnEffect.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -11,18 +7,18 @@ public class Verb_UseAbilityPawnEffect : AbilityUser.Verb_UseAbility { public virtual void Effect(Pawn target) { - if (this.Ability.Def.MainVerb.isViolent && target.Faction != this.CasterPawn.Faction) + if (Ability.Def.MainVerb.isViolent && target.Faction != CasterPawn.Faction) { - target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, this.CasterPawn)); + target.mindState.Notify_DamageTaken(new DamageInfo(DamageDefOf.Cut, -1, -1, CasterPawn)); } target.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(target.DrawPos, target.Map, AbilityUser.StringsToTranslate.AU_CastSuccess); } public override void PostCastShot(bool inResult, out bool outResult) { if (inResult && - this.TargetsAoE[0].Thing is Pawn p) + TargetsAoE[0].Thing is Pawn p) { Effect(p); outResult = true; diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs index 80868b1..dd41e1e 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_CorruptForm.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using RimWorld; using Verse; namespace Vampire @@ -11,7 +8,7 @@ public class DisciplineEffect_CorruptForm : Verb_UseAbilityPawnEffect { public override void Effect(Pawn target) { - if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) { base.Effect(target); int boolSel = Rand.Range(0, 2); @@ -43,11 +40,11 @@ public override void Effect(Pawn target) } IEnumerable recs = target.health.hediffSet.GetNotMissingParts(); - if (recs.FirstOrDefault(x => (x.def.tags.Contains(tagOne))) is BodyPartRecord bp) + if (recs.FirstOrDefault(x => x.def.tags.Contains(tagOne)) is BodyPartRecord bp) { HediffGiveUtility.TryApply(target, hediffDefOne, new List { bp.def }); } - if (recs.FirstOrDefault(x => (x.def.tags.Contains(tagTwo))) is BodyPartRecord bpII) + if (recs.FirstOrDefault(x => x.def.tags.Contains(tagTwo)) is BodyPartRecord bpII) { HediffGiveUtility.TryApply(target, hediffDefTwo, new List { bpII.def }); } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs index be15bdc..6718b02 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_PerfectForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,7 +7,7 @@ public class DisciplineEffect_PerfectForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_PerfectFormHediff, 1.0f); } } } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs index 196057c..151b990 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ShapeMonstrosity.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,13 +7,13 @@ public class DisciplineEffect_ShapeMonstrosity : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - if (JecsTools.GrappleUtility.TryGrapple(this.CasterPawn, target)) + if (JecsTools.GrappleUtility.TryGrapple(CasterPawn, target)) { IntVec3 curLoc = target.PositionHeld; Map curMap = target.MapHeld; Name tempName = target.Name; target.DeSpawn(); - Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, this.CasterPawn.Faction); + Pawn p = PawnGenerator.GeneratePawn(VampDefOf.ROMV_MonstrosityA, CasterPawn.Faction); GenSpawn.Spawn(p, curLoc, curMap); p.Name = tempName; } diff --git a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs index bdb8baf..4b25713 100644 --- a/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs +++ b/Source/Vampires/Disciplines/Vicissitude/DisciplineEffect_ZuloForm.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; -using Verse; +using Verse; namespace Vampire { @@ -12,7 +7,7 @@ public class DisciplineEffect_ZuloForm : Verb_UseAbilityPawnEffect public override void Effect(Pawn target) { base.Effect(target); - HealthUtility.AdjustSeverity(this.CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); + HealthUtility.AdjustSeverity(CasterPawn, VampDefOf.ROMV_ZuloFormHediff, 1.0f); } } } diff --git a/Source/Vampires/FlyingObject.cs b/Source/Vampires/FlyingObject.cs index a50f830..82c68bc 100644 --- a/Source/Vampires/FlyingObject.cs +++ b/Source/Vampires/FlyingObject.cs @@ -1,8 +1,5 @@ using RimWorld; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using Verse; @@ -27,7 +24,7 @@ protected int StartingTicksToImpact { get { - int num = Mathf.RoundToInt((this.origin - this.destination).magnitude / (this.speed / 100f)); + int num = Mathf.RoundToInt((origin - destination).magnitude / (speed / 100f)); if (num < 1) { num = 1; @@ -37,61 +34,43 @@ protected int StartingTicksToImpact } - protected IntVec3 DestinationCell - { - get - { - return new IntVec3(this.destination); - } - } + protected IntVec3 DestinationCell => new IntVec3(destination); public virtual Vector3 ExactPosition { get { - Vector3 b = (this.destination - this.origin) * (1f - (float)this.ticksToImpact / (float)this.StartingTicksToImpact); - return this.origin + b + Vector3.up * this.def.Altitude; + Vector3 b = (destination - origin) * (1f - (float)ticksToImpact / (float)StartingTicksToImpact); + return origin + b + Vector3.up * def.Altitude; } } - public virtual Quaternion ExactRotation - { - get - { - return Quaternion.LookRotation(this.destination - this.origin); - } - } + public virtual Quaternion ExactRotation => Quaternion.LookRotation(destination - origin); - public override Vector3 DrawPos - { - get - { - return this.ExactPosition; - } - } + public override Vector3 DrawPos => ExactPosition; public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.origin, "origin", default(Vector3), false); - Scribe_Values.Look(ref this.destination, "destination", default(Vector3), false); - Scribe_Values.Look(ref this.ticksToImpact, "ticksToImpact", 0, false); - Scribe_Values.Look(ref this.timesToDamage, "timesToDamage", 0, false); - Scribe_Values.Look(ref this.damageLaunched, "damageLaunched", true); - Scribe_Values.Look(ref this.explosion, "explosion", false); - Scribe_References.Look(ref this.assignedTarget, "assignedTarget", false); - Scribe_References.Look(ref this.launcher, "launcher", false); - Scribe_References.Look(ref this.flyingThing, "flyingThing"); + Scribe_Values.Look(ref origin, "origin"); + Scribe_Values.Look(ref destination, "destination"); + Scribe_Values.Look(ref ticksToImpact, "ticksToImpact"); + Scribe_Values.Look(ref timesToDamage, "timesToDamage"); + Scribe_Values.Look(ref damageLaunched, "damageLaunched", true); + Scribe_Values.Look(ref explosion, "explosion"); + Scribe_References.Look(ref assignedTarget, "assignedTarget"); + Scribe_References.Look(ref launcher, "launcher"); + Scribe_References.Look(ref flyingThing, "flyingThing"); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing, DamageInfo? impactDamage) { - this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing, impactDamage); + Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing, impactDamage); } public void Launch(Thing launcher, LocalTargetInfo targ, Thing flyingThing) { - this.Launch(launcher, base.Position.ToVector3Shifted(), targ, flyingThing); + Launch(launcher, Position.ToVector3Shifted(), targ, flyingThing); } public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing flyingThing, DamageInfo? newDamageInfo = null) @@ -101,37 +80,37 @@ public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing f this.launcher = launcher; this.origin = origin; - this.impactDamage = newDamageInfo; + impactDamage = newDamageInfo; this.flyingThing = flyingThing; if (targ.Thing != null) { - this.assignedTarget = targ.Thing; + assignedTarget = targ.Thing; } - this.destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); - this.ticksToImpact = this.StartingTicksToImpact; + destination = targ.Cell.ToVector3Shifted() + new Vector3(Rand.Range(-0.3f, 0.3f), 0f, Rand.Range(-0.3f, 0.3f)); + ticksToImpact = StartingTicksToImpact; } public override void Tick() { base.Tick(); - Vector3 exactPosition = this.ExactPosition; - this.ticksToImpact--; - if (!this.ExactPosition.InBounds(base.Map)) + Vector3 exactPosition = ExactPosition; + ticksToImpact--; + if (!ExactPosition.InBounds(Map)) { - this.ticksToImpact++; - base.Position = this.ExactPosition.ToIntVec3(); - this.Destroy(DestroyMode.Vanish); + ticksToImpact++; + Position = ExactPosition.ToIntVec3(); + Destroy(); return; } - base.Position = this.ExactPosition.ToIntVec3(); - if (this.ticksToImpact <= 0) + Position = ExactPosition.ToIntVec3(); + if (ticksToImpact <= 0) { - if (this.DestinationCell.InBounds(base.Map)) + if (DestinationCell.InBounds(Map)) { - base.Position = this.DestinationCell; + Position = DestinationCell; } - this.ImpactSomething(); + ImpactSomething(); return; } @@ -143,36 +122,36 @@ public override void Draw() { if (flyingThing is Pawn) { - if (this.DrawPos == null) return; - if (!this.DrawPos.ToIntVec3().IsValid) return; + if (DrawPos == null) return; + if (!DrawPos.ToIntVec3().IsValid) return; Pawn pawn = flyingThing as Pawn; - pawn.Drawer.DrawAt(this.DrawPos); + pawn.Drawer.DrawAt(DrawPos); //Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.graphic.MatFront, 0); } else { - Graphics.DrawMesh(MeshPool.plane10, this.DrawPos, this.ExactRotation, this.flyingThing.def.DrawMatSingle, 0); + Graphics.DrawMesh(MeshPool.plane10, DrawPos, ExactRotation, flyingThing.def.DrawMatSingle, 0); } - base.Comps_PostDraw(); + Comps_PostDraw(); } } private void ImpactSomething() { - if (this.assignedTarget != null) + if (assignedTarget != null) { - Pawn pawn = this.assignedTarget as Pawn; - if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (this.origin - this.destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) + Pawn pawn = assignedTarget as Pawn; + if (pawn != null && pawn.GetPosture() != PawnPosture.Standing && (origin - destination).MagnitudeHorizontalSquared() >= 20.25f && Rand.Value > 0.2f) { - this.Impact(null); + Impact(null); return; } - this.Impact(this.assignedTarget); + Impact(assignedTarget); return; } else { - this.Impact(null); + Impact(null); return; } } @@ -186,7 +165,7 @@ protected virtual void Impact(Thing hitThing) if (hitThing == null) { - if (this.Position.GetThingList(this.Map).FirstOrDefault(x => x == this.assignedTarget) is Pawn p) + if (Position.GetThingList(Map).FirstOrDefault(x => x == assignedTarget) is Pawn p) { hitThing = p; @@ -203,11 +182,11 @@ protected virtual void Impact(Thing hitThing) else hitThing.TakeDamage(impactDamage.Value); if (explosion) - GenExplosion.DoExplosion(this.Position, this.Map, 0.9f, DamageDefOf.Stun, this); + GenExplosion.DoExplosion(Position, Map, 0.9f, DamageDefOf.Stun, this); } - GenSpawn.Spawn(flyingThing, this.Position, this.Map); - this.Destroy(DestroyMode.Vanish); + GenSpawn.Spawn(flyingThing, Position, Map); + Destroy(); } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs index 39acb96..5797434 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches.cs @@ -6,7 +6,6 @@ using System.Text; using Verse; using Verse.AI; -using System.Reflection; using UnityEngine; using RimWorld.Planet; using Verse.AI.Group; @@ -23,83 +22,83 @@ static HarmonyPatches() //Fixes issues with having no food need. harmony.Patch(AccessTools.Method(typeof(Pawn_NeedsTracker), "ShouldHaveNeed"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(ShouldHaveNeed_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(ShouldHaveNeed_Vamp))); harmony.Patch(AccessTools.Method(typeof(ThinkNode_ConditionalNeedPercentageAbove), "Satisfied"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Satisfied_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Satisfied_Vamp)), null); //The wander handler now makes vampires wander indoors (for their safety). harmony.Patch(AccessTools.Method(typeof(PawnUtility), "KnownDangerAt"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(KnownDangerAt_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(KnownDangerAt_Vamp))); harmony.Patch(AccessTools.Method(typeof(JoyUtility), "EnjoyableOutsideNow", new Type[] { typeof(Pawn), typeof(StringBuilder) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(EnjoyableOutsideNow_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(EnjoyableOutsideNow_Vampire))); harmony.Patch(AccessTools.Method(typeof(JobGiver_GetRest), "FindGroundSleepSpotFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindGroundSleepSpotFor_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(FindGroundSleepSpotFor_Vampire))); harmony.Patch(AccessTools.Method(typeof(JobGiver_TakeCombatEnhancingDrug), "TryGiveJob"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(TryGiveJob_DrugGiver_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(TryGiveJob_DrugGiver_Vampire)), null); harmony.Patch(AccessTools.Method(typeof(ReachabilityUtility), "CanReach", new Type[] { typeof(Pawn), typeof(LocalTargetInfo), typeof(PathEndMode), typeof(Danger), typeof(bool), typeof(TraverseMode) }), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CanReach_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(CanReach_Vampire))); //The Doctor alert will no longer check a vampire to see if it's fed. harmony.Patch(AccessTools.Method(typeof(Alert_NeedDoctor), "get_Patients"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Patients_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_Patients_Vamp)), null); //Vampires vomit blood instead of their digested meals. harmony.Patch(AccessTools.Method(typeof(JobDriver_Vomit), "MakeNewToils"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(MakeNewToils_VampVomit))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(MakeNewToils_VampVomit)), null); //Adds vampire right click float menus. harmony.Patch(AccessTools.Method(typeof(FloatMenuMakerMap), "AddHumanlikeOrders"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(AddHumanlikeOrders_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(AddHumanlikeOrders_Vamp))); //Gives different skin color for Vampires harmony.Patch(AccessTools.Method(typeof(Pawn_StoryTracker), "get_SkinColor"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_SkinColor_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_SkinColor_Vamp)), null); //Adds debug/dev tools for making vampires. harmony.Patch(AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DoListingItems_MapTools"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(DoListingItems_MapTools_Vamp))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(DoListingItems_MapTools_Vamp))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(ThingDef), "get_AllRecipes"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_AllRecipes_BloodFeedable))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_AllRecipes_BloodFeedable))); //Adds blood extraction recipes to all living organisms harmony.Patch(AccessTools.Method(typeof(Bill_Medical), "Notify_DoBillStarted"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Notify_DoBillStarted_Debug))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Notify_DoBillStarted_Debug)), null); //Add overrides to methods if CompVampBed is active. harmony.Patch(AccessTools.Method(typeof(Building_Casket), "Draw"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Draw_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Draw_VampBed)), null); harmony.Patch(AccessTools.Method(typeof(Building_Casket), "Accepts"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(Accepts_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Accepts_VampBed)), null); harmony.Patch(AccessTools.Method(typeof(Building_Grave), "get_Graphic"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Graphic_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_Graphic_VampBed)), null); harmony.Patch(AccessTools.Method(typeof(Building_Casket), "GetFloatMenuOptions"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(GetFloatMenuOptions_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(GetFloatMenuOptions_VampBed))); harmony.Patch(AccessTools.Method(typeof(WorkGiver_BuryCorpses), "FindBestGrave"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(FindBestGrave_VampBed))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(FindBestGrave_VampBed))); //Caravan patches harmony.Patch(AccessTools.Method(typeof(Dialog_FormCaravan), "CheckForErrors"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(CheckForErrors_Vampires))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(CheckForErrors_Vampires))); harmony.Patch(AccessTools.Method(typeof(Caravan), "get_Resting"), null, - new HarmonyMethod(typeof(HarmonyPatches), (nameof(get_Resting_Vampires))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_Resting_Vampires))); //Lord_AI patches harmony.Patch(AccessTools.Method(typeof(Trigger_UrgentlyHungry), "ActivateOn"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(ActivateOn_Vampire))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(ActivateOn_Vampire)), null); //Allow fortitude to soak damage harmony.Patch(AccessTools.Method(typeof(Pawn_HealthTracker), "PreApplyDamage"), - new HarmonyMethod(typeof(HarmonyPatches), (nameof(VampFortitude))), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(VampFortitude)), null); //Changes vampire appearances and statistics based on their current forms harmony.Patch(AccessTools.Method(typeof(Pawn), "get_BodySize"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireBodySize)), null); + nameof(VampireBodySize))); harmony.Patch(AccessTools.Method(typeof(Pawn), "get_HealthScale"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(VampireHealthScale)), null); + nameof(VampireHealthScale))); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveAllGraphics"), null, new HarmonyMethod(typeof(HarmonyPatches), - nameof(Vamp_ResolveAllGraphics)), null); + nameof(Vamp_ResolveAllGraphics))); harmony.Patch(AccessTools.Method(typeof(PawnGraphicSet), "ResolveApparelGraphics"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_ResolveApparelGraphics)), null); harmony.Patch(AccessTools.Method(typeof(PawnRenderer), "RenderPawnInternal", new Type[] { typeof(Vector3), typeof(Quaternion), typeof(bool), typeof(Rot4), typeof(Rot4), typeof(RotDrawMode), typeof(bool), typeof(bool) }), new HarmonyMethod(typeof(VampireGraphicUtility), @@ -107,7 +106,7 @@ static HarmonyPatches() //Allows skill adjustments harmony.Patch(AccessTools.Method(typeof(SkillRecord), "get_Level"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(VampLevel))); //Vampires do not age like others. harmony.Patch(AccessTools.Method(typeof(Pawn_AgeTracker), "BirthdayBiological"), @@ -119,7 +118,7 @@ static HarmonyPatches() //Adds vampire skill sheet button to CharacterCard harmony.Patch(AccessTools.Method(typeof(CharacterCardUtility), "DrawCharacterCard", new Type[] { typeof(Rect), typeof(Pawn), typeof(Action), typeof(Rect) }), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DrawCharacterCard))); //Fills the character card with a vampire skill sheet harmony.Patch(AccessTools.Method(typeof(ITab_Pawn_Character), "FillTab"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_FillTab)), null); @@ -158,32 +157,32 @@ static HarmonyPatches() //Patch to add comfort to vampire beds. harmony.Patch(AccessTools.Method(typeof(PawnUtility), "GainComfortFromCellIfPossible"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedComfort))); //Patch to remove vampire's ability to bleed. harmony.Patch(AccessTools.Method(typeof(Hediff_Injury), "get_BleedRate"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(get_VampBleedRate))); //Patch to hide vampire capacities. //harmony.Patch(AccessTools.Method(typeof(PawnCapacitiesHandler), "GetLevel"), null, // new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_HidePawnCapacities)), null); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetPawnCapacityTip"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_GetPawnCapacityTip))); harmony.Patch(AccessTools.Method(typeof(HealthCardUtility), "GetEfficiencyLabel"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(GetEfficiencyLabel))); //Vampires do not worry about hot and cold harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Hot), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Cold), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreHotAndCold))); //Vampires are not affected by Hypothermia nor Heatstroke harmony.Patch(AccessTools.Method(typeof(HediffGiver_Heat), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); harmony.Patch(AccessTools.Method(typeof(HediffGiver_Hypothermia), "OnIntervalPassed"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IgnoreStrokeAndHypotherm))); harmony.Patch(AccessTools.Method(typeof(Pawn_HealthTracker), "AddHediff", new Type[] { typeof(Hediff), typeof(BodyPartRecord), typeof(DamageInfo?) }), new HarmonyMethod(typeof(HarmonyPatches), nameof(AddHediff)), null); @@ -217,7 +216,7 @@ static HarmonyPatches() //Vampires should not dislike the darkness. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_Dark), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyDontDislikeDarkness))); //Fixes random red errors relating to food need checks in this method (WillIngestStackCountOf). @@ -227,16 +226,16 @@ static HarmonyPatches() //Vampires should tire very much during the daylight hours. harmony.Patch(AccessTools.Method(typeof(Need_Rest), "NeedInterval"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_SleepyDuringDaylight))); // harmony.Patch(AccessTools.Method(typeof(GenCelestial), "CelestialSunGlowPercent"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_CelestialSunGlowPercent))); //Patches out binging behavior harmony.Patch(AccessTools.Method(typeof(JobGiver_Binge), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_DontBinge))); //Patches corpse generation for vampires. harmony.Patch(AccessTools.Method(typeof(Pawn), "MakeCorpse"), @@ -244,33 +243,37 @@ static HarmonyPatches() //Vampire corpses can resurrect safely inside graves, sarcophogi, and caskets. harmony.Patch(AccessTools.Method(typeof(Building_Grave), "GetGizmos"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_TheyNeverDie))); //Caskets and coffins do not autoassign to colonists. harmony.Patch(AccessTools.Method(typeof(Pawn_Ownership), "ClaimBedIfNonMedical"), new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_BedsForTheUndead)), null); harmony.Patch(AccessTools.Method(typeof(RestUtility), "IsValidBedFor"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_IsValidBedFor))); //Vampires should never skygaze during sunrise... harmony.Patch(AccessTools.Method(typeof(JobDriver_Skygaze), "GetReport"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_QuitWatchingSunrisesAlreadyJeez))); //Vampire player should know about the rest curse. harmony.Patch(AccessTools.Method(typeof(Need), "GetTipString"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_RestTextToolTip))); //Vampires should not try to do drugs when idle. harmony.Patch(AccessTools.Method(typeof(JobGiver_IdleJoy), "TryGiveJob"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontDoIdleDrugs))); //Vampires should not be given food by wardens. harmony.Patch(AccessTools.Method(typeof(Pawn_GuestTracker), "get_CanBeBroughtFood"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamps_DontWantGuestFood))); - //Vampires should not be given food by wardens. + //Vampires should not get cabin fever. harmony.Patch(AccessTools.Method(typeof(ThoughtWorker_CabinFever), "CurrentStateInternal"), null, - new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever)), null); + new HarmonyMethod(typeof(HarmonyPatches), nameof(Vamp_NoCabinFever))); + + //Blood Mists should not attack, but drain their target. + harmony.Patch(AccessTools.Method(typeof(JobGiver_AIFightEnemy), "TryGiveJob"), null, + new HarmonyMethod(typeof(HarmonyPatches), nameof(BloodMist_NoAttack))); #region DubsBadHygiene { @@ -288,6 +291,18 @@ static HarmonyPatches() catch (TypeLoadException ex) { /*Log.Message(ex.ToString());*/ } } #endregion + + Log.Message("Vampires :: Harmony Patches Injected"); + } + + //Rimworld.JobGiver_AIFightEnemy + public static void BloodMist_NoAttack(Pawn pawn, ref Job __result) + { + if (pawn is PawnTemporary && pawn.def == VampDefOf.ROMV_BloodMistRace && __result != null && __result.def == JobDefOf.AttackMelee) + { + //Cancel any melee attacks + __result = null; + } } // RimWorld.ThoughtWorker_CabinFever @@ -401,7 +416,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra dReason = "ROMV_NoBloodRemaining".Translate(); } - Vampire.VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); + VitaeAbilityDef bloodAwaken = DefDatabase.GetNamedSilentFail("ROMV_VampiricAwaken"); if (!AbilityUser?.Dead ?? false) { @@ -420,7 +435,7 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra }; } - Vampire.VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); + VitaeAbilityDef bloodResurrection = DefDatabase.GetNamedSilentFail("ROMV_VampiricResurrection"); if (AbilityUser?.Corpse?.GetRotStage() < RotStage.Dessicated) { yield return new Command_Action() @@ -432,11 +447,11 @@ public static IEnumerable GraveGizmoGetter(Pawn AbilityUser, Building_Gra { AbilityUser.Drawer.Notify_DebugAffected(); ResurrectionUtility.Resurrect(AbilityUser); - MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess, -1f); + MoteMaker.ThrowText(AbilityUser.PositionHeld.ToVector3(), AbilityUser.MapHeld, StringsToTranslate.AU_CastSuccess); AbilityUser.BloodNeed().AdjustBlood(-99999999); HealthUtility.AdjustSeverity(AbilityUser, VampDefOf.ROMV_TheBeast, 1.0f); MentalStateDef MentalState_VampireBeast = DefDatabase.GetNamed("ROMV_VampireBeast"); - AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + AbilityUser.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); }, disabled = (AbilityUser?.BloodNeed()?.CurBloodPoints ?? 0) < 0 }; @@ -454,7 +469,7 @@ public static bool Vamp_MakeCorpse(Pawn __instance, Building_Grave assignedGrave __result = null; return false; } - VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse"), null); + VampireCorpse corpse = (VampireCorpse)ThingMaker.MakeThing(ThingDef.Named("ROMV_VampCorpse")); corpse.InnerPawn = __instance; corpse.BloodPoints = __instance.BloodNeed().CurBloodPoints; if (__instance.health.hediffSet.GetHediffs()?.Where(x => x.def == HediffDefOf.Burn && !x.IsTended())?.Count() > 3) @@ -609,7 +624,7 @@ public static bool Vamp_GuestFix(Pawn p, ref bool __result) if (p.IsVampire()) { __result = !p.Downed && p.health.hediffSet.BleedRateTotal <= 0f && p?.needs?.rest?.CurCategory < RestCategory.Exhausted && - !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff(false) && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; + !p.health.hediffSet.HasTendableNonInjuryNonMissingPartHediff() && p.Awake() && !p.InAggroMentalState && !p.IsPrisoner; return false; } return true; @@ -655,13 +670,13 @@ public static bool Vamp_LovinFoodFix(Pawn pawn, Pawn partner, ref float __result __result = -1f; return false; } - float num = HarmonyPatches.LovinMtbSinglePawnFactor(pawn); + float num = LovinMtbSinglePawnFactor(pawn); if (num <= 0f) { __result = -1f; return false; } - float num2 = HarmonyPatches.LovinMtbSinglePawnFactor(partner); + float num2 = LovinMtbSinglePawnFactor(partner); if (num2 <= 0f) { __result = -1f; @@ -837,7 +852,7 @@ public static void Vamp_BedComfort(Pawn p) { if (edifice.TryGetComp() is CompVampBed vBed && vBed.Bed != null) { - float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort, true); + float statValue = vBed.Bed.GetStatValue(StatDefOf.Comfort); if (statValue >= 0f && p.needs != null && p.needs.comfort != null) { p.needs.comfort.ComfortUsed(statValue); @@ -993,7 +1008,7 @@ public static void GetGizmos_PostFix(Pawn __instance, ref IEnumerable __r HediffComp_Shield shield = shieldHediff.TryGetComp(); if (shield != null) { - __result = __result.Concat(gizmoGetter(shield)); + __result = __result.Concat(gizmoGetter(shield)); } } } @@ -1009,7 +1024,7 @@ public static bool Vamp_CanVisit(ref bool __result, Pawn pawn, Pawn sick, JoyCat { __result = sick.IsColonist && !sick.Dead && pawn != sick && sick.InBed() && sick.Awake() && !sick.IsForbidden(pawn) && sick.needs.joy != null && sick.needs.joy.CurCategory <= maxPatientJoy && InteractionUtility.CanReceiveInteraction(sick) && - pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None, 1, -1, null, false) && !HarmonyPatches.AboutToRecover(sick); + pawn.CanReserveAndReach(sick, PathEndMode.InteractionCell, Danger.None) && !AboutToRecover(sick); return false; } return true; @@ -1168,7 +1183,7 @@ public static bool VampireBirthdayBiological(Pawn_AgeTracker __instance) Find.LetterStack.ReceiveLetter("LetterLabelBirthday".Translate(), "ROMV_VampireBirthday".Translate(new object[]{ p.Label, p.ageTracker.AgeBiologicalYears - }), LetterDefOf.PositiveEvent, p, null); + }), LetterDefOf.PositiveEvent, p); return false; } return true; @@ -1306,11 +1321,11 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra { if (__result != null && __result is Building_Grave g && g?.def.GetCompProperties() is CompProperties_VampBed b) { - Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m, 1, -1, null, false) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); + Predicate predicate = (Thing m) => !m.IsForbidden(p) && p.CanReserve(m) && m is Building_Grave mG && !mG.HasAnyContents && (mG?.Accepts(corpse) ?? false) && (mG.GetComp() == null || mG.GetComp() is CompVampBed v && (v?.Bed == null || v?.Bed?.AssignedPawns?.Count() == 0)); if (corpse?.InnerPawn?.ownership != null && corpse?.InnerPawn?.ownership?.AssignedGrave != null) { Building_Grave assignedGrave = corpse?.InnerPawn?.ownership?.AssignedGrave; - if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false)) ?? false)) + if (predicate(assignedGrave) && (p?.Map?.reachability?.CanReach(corpse.Position, assignedGrave, PathEndMode.ClosestTouch, TraverseParms.For(p)) ?? false)) { __result = assignedGrave; return; @@ -1318,7 +1333,7 @@ public static void FindBestGrave_VampBed(Pawn p, Corpse corpse, ref Building_Gra } Func priorityGetter = (Thing t) => (float)((IStoreSettingsParent)t).GetStoreSettings().Priority; Predicate validator = predicate; - __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false), 9999f, validator, priorityGetter); + __result = (Building_Grave)GenClosest.ClosestThing_Global_Reachable(corpse.Position, corpse.Map, corpse.Map.listerThings.ThingsInGroup(ThingRequestGroup.Grave), PathEndMode.ClosestTouch, TraverseParms.For(p), 9999f, validator, priorityGetter); return; } } @@ -1327,7 +1342,7 @@ public static bool Draw_VampBed(Building_Casket __instance) { if (__instance.GetComps() is CompVampBed b) { - if (!__instance.Spawned || __instance.GetDirectlyHeldThings()?.Count() == 0) + if (!__instance.Spawned || __instance.GetDirectlyHeldThings()?.Count == 0) __instance.Draw(); return false; } @@ -1386,7 +1401,7 @@ public static void GetFloatMenuOptions_VampBed(Building_Casket __instance, Pawn }), delegate { selPawn.jobs.TryTakeOrderedJob(new Job(VampDefOf.ROMV_EnterTorpor, __instance)); - }, MenuOptionPriority.Default, null, null, 0f, null, null)}); + })}); } } } @@ -1486,22 +1501,22 @@ private static void AddHumanlikeOrders_Vamp(Vector3 clickPos, Pawn pawn, ref Lis FloatMenuOption item5; if (bloodItem.def.IsPleasureDrug && pawn.IsTeetotaler()) { - item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); + item5 = new FloatMenuOption(text + " (" + TraitDefOf.DrugDesire.DataAtDegree(-1).label + ")", null); } - else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly, false, TraverseMode.ByPawn)) + else if (!pawn.CanReach(bloodItem, PathEndMode.OnCell, Danger.Deadly)) { - item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null); + item5 = new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null); } else { - MenuOptionPriority priority = (!(bloodItem is Corpse)) ? MenuOptionPriority.Default : MenuOptionPriority.Low; + MenuOptionPriority priority = !(bloodItem is Corpse) ? MenuOptionPriority.Default : MenuOptionPriority.Low; item5 = FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, delegate { - bloodItem.SetForbidden(false, true); + bloodItem.SetForbidden(false); Job job = new Job(VampDefOf.ROMV_ConsumeBlood, bloodItem); job.count = BloodUtility.WillConsumeStackCountOf(pawn, bloodItem.def); - pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); - }, priority, null, null, 0f, null, null), pawn, bloodItem, "ReservedBy"); + pawn.jobs.TryTakeOrderedJob(job); + }, priority), pawn, bloodItem); } opts.Add(item5); } @@ -1545,7 +1560,7 @@ public static bool MakeNewToils_VampVomit(JobDriver_Vomit __instance, ref IEnume int curTicks = Traverse.Create(__instance).Field("ticksLeft").GetValue(); if (curTicks % 150 == 149) { - FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite(), 1); + FilthMaker.MakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map, ThingDefOf.FilthBlood, __instance.pawn.LabelIndefinite()); if (__instance.pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0) { n.AdjustBlood(-1); @@ -1605,7 +1620,7 @@ public static bool get_Patients_Vamp(ref IEnumerable __result) } else { - if ((p2.Downed && (p2?.needs?.food?.CurCategory ?? HungerCategory.Fed) < HungerCategory.Fed && p2.InBed()) || HealthAIUtility.ShouldBeTendedNow(p2)) + if (p2.Downed && (p2?.needs?.food?.CurCategory ?? HungerCategory.Fed) < HungerCategory.Fed && p2.InBed() || HealthAIUtility.ShouldBeTendedNow(p2)) { Patients.Add(p2); } @@ -1639,7 +1654,7 @@ public static bool GetExactWanderDest_Vamp(JobGiver_Wander __instance, Pawn pawn if (pawn.VampComp() is CompVampire v && v.IsVampire && VampireUtility.IsDaylight(pawn)) { IntVec3 wanderRoot = pawn.Position; - Func wanderDestValidator = ((Pawn pawnB, IntVec3 loc) => WanderRoomUtility.IsValidWanderDest(pawnB, loc, pawnB.Position) && loc.Roofed(pawnB.Map)); + Func wanderDestValidator = (Pawn pawnB, IntVec3 loc) => WanderRoomUtility.IsValidWanderDest(pawnB, loc, pawnB.Position) && loc.Roofed(pawnB.Map); __result = RCellFinder.RandomWanderDestFor(pawn, wanderRoot, 7f, wanderDestValidator, PawnUtility.ResolveMaxDanger(pawn, Danger.None)); return false; } diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs index 7e2c646..84906e6 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_Caravan.cs @@ -1,10 +1,6 @@ -using Harmony; -using RimWorld; +using RimWorld; using RimWorld.Planet; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using Verse; namespace Vampire diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs index d024490..5d09f97 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_DebugTools.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Verse; namespace Vampire @@ -18,7 +17,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan "Spawn Vampire (Random)", new Action(()=> { Pawn randomVampire = - VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null, null, false); + VampireGen.GenerateVampire(VampireUtility.RandHigherGeneration, VampireUtility.RandBloodline, null); GenSpawn.Spawn(randomVampire, UI.MouseCell(), Find.VisibleMap); }) @@ -28,14 +27,14 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (Default)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (!pawn.IsVampire()) { pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is now a vampire"); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -45,11 +44,11 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Give Vampirism (w/Settings)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { //pawn.health.AddHediff(VampDefOf.ROM_Vampirism, null, null); - Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Bloodlines(pawn))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Bloodlines(pawn))); //DebugTools.curTool = null; } })}); @@ -59,7 +58,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Remove Vampirism", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null) { if (pawn.IsVampire()) @@ -75,7 +74,7 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan pawn.health.RestorePart(rec); } pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, pawn.LabelShort + " is no longer a vampire"); } else Messages.Message(pawn.LabelCap + " is already a vampire.", MessageTypeDefOf.RejectInput); @@ -86,24 +85,24 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+1 Blood"); } })}); AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Drain Blood (1)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.BloodNeed() is Need_Blood b) { b.AdjustBlood(-1); pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "-1 Blood"); } })}); @@ -111,12 +110,12 @@ public static void DoListingItems_MapTools_Vamp(Dialog_DebugActionsMenu __instan AccessTools.Method(typeof(Dialog_DebugActionsMenu), "DebugToolMap").Invoke(__instance, new object[] { "Add XP (100)", new Action(()=> { - Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); + Pawn pawn = Find.VisibleMap.thingGrid.ThingsAt(UI.MouseCell()).Where((Thing t) => t is Pawn).Cast().FirstOrDefault(); if (pawn != null && pawn?.VampComp() is CompVampire v) { v.XP += 100; pawn.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP", -1f); + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "+100 XP"); } })}); } @@ -133,7 +132,7 @@ private static List Options_Bloodlines(Pawn p) { list.Add(new DebugMenuOption(current.LabelCap, DebugMenuOptionMode.Action, delegate { - Find.WindowStack.Add(new Dialog_DebugOptionListLister(HarmonyPatches.Options_Generation(p, current))); + Find.WindowStack.Add(new Dialog_DebugOptionListLister(Options_Generation(p, current))); })); } @@ -151,7 +150,7 @@ private static List Options_Generation(Pawn p, BloodlineDef blo p.VampComp().InitializeVampirism(null, bloodline, curGen, curGen == 1); //Log.Message("0" + p.LabelShort + " " + i.ToString()); p.Drawer.Notify_DebugAffected(); - MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire", -1f); + MoteMaker.ThrowText(p.DrawPos, p.Map, p.LabelShort + " is now a vampire"); })); } return list; diff --git a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs index 42455dd..228450d 100644 --- a/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs +++ b/Source/Vampires/HarmonyPatches/HarmonyPatches_PathFixes.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Text; using RimWorld; using Verse; using Verse.AI; @@ -16,7 +13,7 @@ public static void CanReach_Vampire(ref bool __result, Pawn pawn, LocalTargetInf { if (__result && pawn.IsVampire() && (pawn.VampComp().CurrentSunlightPolicy > SunlightPolicy.Relaxed || pawn.MentalStateDef == DefDatabase.GetNamed("ROMV_VampireBeast")) && - VampireUtility.IsDaylight(pawn) && (pawn.Faction == Faction.OfPlayerSilentFail && !pawn.Drafted)) + VampireUtility.IsDaylight(pawn) && pawn.Faction == Faction.OfPlayerSilentFail && !pawn.Drafted) { if (!dest.Cell.Roofed(pawn.MapHeld)) __result = false; } @@ -30,7 +27,7 @@ public static void FindGroundSleepSpotFor_Vampire(Pawn pawn, ref IntVec3 __resul Map map = pawn.Map; for (int i = 0; i < 2; i++) { - int radius = (i != 0) ? 12 : 4; + int radius = i != 0 ? 12 : 4; IntVec3 result; if (CellFinder.TryRandomClosewalkCellNear(pawn.Position, map, radius, out result, (IntVec3 x) => !x.IsForbidden(pawn) && !x.GetTerrain(map).avoidWander && x.Roofed(pawn.MapHeld))) { diff --git a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs index c89bc82..45e0652 100644 --- a/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs +++ b/Source/Vampires/HarmonyPatches/VampHumanlikeOrders.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using JecsTools; using UnityEngine; using Verse; @@ -38,7 +36,7 @@ public override IEnumerable 1) { @@ -51,7 +49,7 @@ public override IEnumerable 140f; public override GizmoResult GizmoOnGUI(Vector2 topLeft) { - Rect overRect = new Rect(topLeft.x, topLeft.y, this.Width, 75f); + Rect overRect = new Rect(topLeft.x, topLeft.y, Width, 75f); Find.WindowStack.ImmediateWindow(984688, overRect, WindowLayer.GameUI, delegate { Rect rect = overRect.AtZero().ContractedBy(6f); Rect rect2 = rect; rect2.height = overRect.height / 2f; Text.Font = GameFont.Tiny; - Widgets.Label(rect2, this.shield.labelCap); + Widgets.Label(rect2, shield.labelCap); Rect rect3 = rect; rect3.yMin = overRect.height / 2f; - float fillPercent = this.shield.Energy / Mathf.Max(1f, this.shield.EnergyMax); - Widgets.FillableBar(rect3, fillPercent, Gizmo_HediffShieldStatus.FullShieldBarTex, Gizmo_HediffShieldStatus.EmptyShieldBarTex, false); + float fillPercent = shield.Energy / Mathf.Max(1f, shield.EnergyMax); + Widgets.FillableBar(rect3, fillPercent, FullShieldBarTex, EmptyShieldBarTex, false); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.MiddleCenter; - Widgets.Label(rect3, (this.shield.Energy * 100f).ToString("F0") + " / " + (this.shield.EnergyMax * 100f).ToString("F0")); + Widgets.Label(rect3, (shield.Energy * 100f).ToString("F0") + " / " + (shield.EnergyMax * 100f).ToString("F0")); Text.Anchor = TextAnchor.UpperLeft; - }, true, false, 1f); + }); return new GizmoResult(GizmoState.Clear); } } diff --git a/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs b/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs index c4b51d7..a76993c 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_AnimalForm.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; namespace Vampire { @@ -10,7 +9,7 @@ public class HediffCompProperties_AnimalForm : HediffCompProperties_Disappears public bool canGiveDamage = true; public HediffCompProperties_AnimalForm() { - this.compClass = typeof(HediffComp_AnimalForm); + compClass = typeof(HediffComp_AnimalForm); } } } diff --git a/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs b/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs index d35d849..ae0e3ca 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_Possession.cs @@ -1,5 +1,4 @@ -using System; -using Verse; +using Verse; namespace Vampire { @@ -7,7 +6,7 @@ public class HediffCompProperties_Possession : HediffCompProperties_Disappears { public HediffCompProperties_Possession() { - this.compClass = typeof(HediffComp_Possession); + compClass = typeof(HediffComp_Possession); } } } diff --git a/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs b/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs index 05a3e2d..fa98680 100644 --- a/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffCompProperties_SkillOffset.cs @@ -1,5 +1,4 @@ using RimWorld; -using System; using Verse; namespace Vampire @@ -10,7 +9,7 @@ public class HediffCompProperties_SkillOffset : HediffCompProperties public int offset; public HediffCompProperties_SkillOffset() { - this.compClass = typeof(HediffComp_SkillOffset); + compClass = typeof(HediffComp_SkillOffset); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs index b1ae4d0..3dd0b92 100644 --- a/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs +++ b/Source/Vampires/Hediffs/HediffComp_AnimalForm.cs @@ -1,6 +1,4 @@ -using System; -using RimWorld; -using Verse; +using Verse; using System.Linq; using System.Text; @@ -16,13 +14,7 @@ public Graphic BodyGraphic { get => bodyGraphic; set => bodyGraphic = value; } - public new HediffCompProperties_AnimalForm Props - { - get - { - return (HediffCompProperties_AnimalForm)this.props; - } - } + public new HediffCompProperties_AnimalForm Props => (HediffCompProperties_AnimalForm)props; public override string CompTipStringExtra { @@ -41,25 +33,25 @@ public override void CompPostTick(ref float severityAdjustment) if (!activated) { activated = true; - if (this.Pawn.health.hediffSet.hediffs.FirstOrDefault(x => x != this.parent && x.TryGetComp() != null) is HediffWithComps h) + if (Pawn.health.hediffSet.hediffs.FirstOrDefault(x => x != parent && x.TryGetComp() != null) is HediffWithComps h) { - this.Pawn.health.hediffSet.hediffs.Remove(h); + Pawn.health.hediffSet.hediffs.Remove(h); } - this.Pawn.VampComp().CurrentForm = this.Props.animalToChangeInto; - this.Pawn.VampComp().CurFormGraphic = null; + Pawn.VampComp().CurrentForm = Props.animalToChangeInto; + Pawn.VampComp().CurFormGraphic = null; //Log.Message("CurrentForm set to " + this.Props.animalToChangeInto.label); } if (CompShouldRemove) { - this.Pawn.VampComp().CurrentForm = null; + Pawn.VampComp().CurrentForm = null; } } public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.activated, "activated", false); + Scribe_Values.Look(ref activated, "activated"); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_Possession.cs b/Source/Vampires/Hediffs/HediffComp_Possession.cs index 547b7e0..dc69295 100644 --- a/Source/Vampires/Hediffs/HediffComp_Possession.cs +++ b/Source/Vampires/Hediffs/HediffComp_Possession.cs @@ -1,31 +1,23 @@ -using System; -using RimWorld; -using Verse; +using Verse; namespace Vampire { public class HediffComp_Possession : HediffComp_Disappears { - public new HediffCompProperties_Possession Props - { - get - { - return (HediffCompProperties_Possession)this.props; - } - } - + public new HediffCompProperties_Possession Props => (HediffCompProperties_Possession)props; + public void ActivateEffect(Pawn activator) { - string text = this.Pawn.LabelIndefinite(); - if (this.Pawn.guest != null) + string text = Pawn.LabelIndefinite(); + if (Pawn.guest != null) { - this.Pawn.guest.SetGuestStatus(null, false); + Pawn.guest.SetGuestStatus(null); } - bool flag = this.Pawn.Name != null; - if (this.Pawn.Faction != activator.Faction) + bool flag = Pawn.Name != null; + if (Pawn.Faction != activator.Faction) { - this.Pawn.SetFaction(activator.Faction, this.Pawn); + Pawn.SetFaction(activator.Faction, Pawn); } } @@ -34,7 +26,7 @@ public override void CompPostTick(ref float severityAdjustment) base.CompPostTick(ref severityAdjustment); if (CompShouldRemove) { - HealthUtility.AdjustSeverity(this.Pawn, HediffDef.Named("HeartAttack"), 1.0f); + HealthUtility.AdjustSeverity(Pawn, HediffDef.Named("HeartAttack"), 1.0f); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs index e0801fc..672391e 100644 --- a/Source/Vampires/Hediffs/HediffComp_ReadMind.cs +++ b/Source/Vampires/Hediffs/HediffComp_ReadMind.cs @@ -1,6 +1,4 @@ -using System; -using RimWorld; -using Verse; +using Verse; using System.Text; namespace Vampire @@ -29,7 +27,7 @@ public override string CompTipStringExtra { StringBuilder s = new StringBuilder(); s.Append(base.CompTipStringExtra); - string curMind = (MindBeingRead == null) ? "" : MindBeingRead.Label; + string curMind = MindBeingRead == null ? "" : MindBeingRead.Label; s.AppendLine("ROMV_MindBeingRead".Translate(curMind)); return s.ToString(); } diff --git a/Source/Vampires/Hediffs/HediffComp_Shield.cs b/Source/Vampires/Hediffs/HediffComp_Shield.cs index 52aed18..e1a21ff 100644 --- a/Source/Vampires/Hediffs/HediffComp_Shield.cs +++ b/Source/Vampires/Hediffs/HediffComp_Shield.cs @@ -1,6 +1,4 @@ -using Harmony; -using RimWorld; -using System; +using RimWorld; using System.Collections.Generic; using System.Diagnostics; using UnityEngine; @@ -40,50 +38,20 @@ public class HediffComp_Shield : HediffComp private static readonly Material BubbleMat = MaterialPool.MatFrom("Other/BloodShield", ShaderDatabase.Transparent); - public float EnergyMax - { - get - { - return 1.1f; - } - } + public float EnergyMax => 1.1f; - public string labelCap - { - get - { - return this.Def.LabelCap; - } - } - public string label - { - get - { - return this.Def.label; - } - } + public string labelCap => Def.LabelCap; + public string label => Def.label; - private float EnergyGainPerTick - { - get - { - return 0.13f / 60f; - } - } + private float EnergyGainPerTick => 0.13f / 60f; - public float Energy - { - get - { - return this.energy; - } - } + public float Energy => energy; public ShieldState ShieldState { get { - if (this.ticksToReset > 0) + if (ticksToReset > 0) { return ShieldState.Resetting; } @@ -91,27 +59,21 @@ public ShieldState ShieldState } } - private bool ShouldDisplay - { - get - { - return !this.Pawn.Dead && !this.Pawn.Downed && (!this.Pawn.IsPrisonerOfColony || (this.Pawn.MentalStateDef != null && this.Pawn.MentalStateDef.IsAggro)) || (this.Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < this.lastKeepDisplayTick + this.KeepDisplayingTicks); - } - } + private bool ShouldDisplay => !Pawn.Dead && !Pawn.Downed && (!Pawn.IsPrisonerOfColony || Pawn.MentalStateDef != null && Pawn.MentalStateDef.IsAggro) || Pawn.Faction.HostileTo(Faction.OfPlayer) || Find.TickManager.TicksGame < lastKeepDisplayTick + KeepDisplayingTicks; public override void CompExposeData() { base.CompExposeData(); - Scribe_Values.Look(ref this.energy, "energy", 0f, false); - Scribe_Values.Look(ref this.setup, "setup", false); - Scribe_Values.Look(ref this.ticksToReset, "ticksToReset", -1, false); - Scribe_Values.Look(ref this.lastKeepDisplayTick, "lastKeepDisplayTick", 0, false); + Scribe_Values.Look(ref energy, "energy"); + Scribe_Values.Look(ref setup, "setup"); + Scribe_Values.Look(ref ticksToReset, "ticksToReset", -1); + Scribe_Values.Look(ref lastKeepDisplayTick, "lastKeepDisplayTick"); } [DebuggerHidden] public IEnumerable GetWornGizmos() { - if (Find.Selector.SingleSelectedThing == this.Pawn) + if (Find.Selector.SingleSelectedThing == Pawn) { yield return new Gizmo_HediffShieldStatus { @@ -129,9 +91,9 @@ public IEnumerable GetWornGizmos() public override void CompPostTick(ref float severityAdjustment) { base.CompPostTick(ref severityAdjustment); - if (this.Pawn == null) + if (Pawn == null) { - this.energy = 0f; + energy = 0f; return; } @@ -146,7 +108,7 @@ public override void CompPostTick(ref float severityAdjustment) if (!setup) { setup = true; - this.energy = this.EnergyMax; + energy = EnergyMax; KeepDisplaying(); } //{ @@ -160,28 +122,28 @@ public override void CompPostTick(ref float severityAdjustment) public bool CheckPreAbsorbDamage(DamageInfo dinfo) { - if (this.ShieldState == ShieldState.Active && ((dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(this.Pawn.Position)) || dinfo.Def.isExplosive)) + if (ShieldState == ShieldState.Active && (dinfo.Instigator != null && !dinfo.Instigator.Position.AdjacentTo8WayOrInside(Pawn.Position) || dinfo.Def.isExplosive)) { if (dinfo.Instigator != null) { AttachableThing attachableThing = dinfo.Instigator as AttachableThing; - if (attachableThing != null && attachableThing.parent == this.Pawn) + if (attachableThing != null && attachableThing.parent == Pawn) { return false; } } - this.energy -= (float)dinfo.Amount * this.EnergyLossPerDamage; + energy -= (float)dinfo.Amount * EnergyLossPerDamage; //if (dinfo.Def == DamageDefOf.EMP) //{ // this.energy = -1f; //} - if (this.energy < 0f) + if (energy < 0f) { - this.Break(); + Break(); } else { - this.AbsorbedDamage(dinfo); + AbsorbedDamage(dinfo); } return true; } @@ -190,73 +152,73 @@ public bool CheckPreAbsorbDamage(DamageInfo dinfo) public void KeepDisplaying() { - this.lastKeepDisplayTick = Find.TickManager.TicksGame; + lastKeepDisplayTick = Find.TickManager.TicksGame; } private void AbsorbedDamage(DamageInfo dinfo) { - SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - this.impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); - Vector3 loc = this.Pawn.TrueCenter() + this.impactAngleVect.RotatedBy(180f) * 0.5f; + SoundDefOf.EnergyShieldAbsorbDamage.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); + impactAngleVect = Vector3Utility.HorizontalVectorFromAngle(dinfo.Angle); + Vector3 loc = Pawn.TrueCenter() + impactAngleVect.RotatedBy(180f) * 0.5f; float num = Mathf.Min(10f, 2f + (float)dinfo.Amount / 10f); - MoteMaker.MakeStaticMote(loc, this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); + MoteMaker.MakeStaticMote(loc, Pawn.Map, ThingDefOf.Mote_ExplosionFlash, num); int num2 = (int)num; for (int i = 0; i < num2; i++) { - MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); + MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); } - this.lastAbsorbDamageTick = Find.TickManager.TicksGame; - this.KeepDisplaying(); + lastAbsorbDamageTick = Find.TickManager.TicksGame; + KeepDisplaying(); } public void NotifyRefilled() { - this.energy = this.EnergyMax; + energy = EnergyMax; } private void Break() { - SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - MoteMaker.MakeStaticMote(this.Pawn.TrueCenter(), this.Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); + SoundDefOf.EnergyShieldBroken.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); + MoteMaker.MakeStaticMote(Pawn.TrueCenter(), Pawn.Map, ThingDefOf.Mote_ExplosionFlash, 12f); for (int i = 0; i < 6; i++) { - Vector3 loc = this.Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); - MoteMaker.ThrowDustPuff(loc, this.Pawn.Map, Rand.Range(0.8f, 1.2f)); + Vector3 loc = Pawn.TrueCenter() + Vector3Utility.HorizontalVectorFromAngle((float)Rand.Range(0, 360)) * Rand.Range(0.3f, 0.6f); + MoteMaker.ThrowDustPuff(loc, Pawn.Map, Rand.Range(0.8f, 1.2f)); } - this.energy = 0f; - this.ticksToReset = this.StartingTicksToReset; + energy = 0f; + ticksToReset = StartingTicksToReset; } private void Reset() { - if (this.Pawn.Spawned) + if (Pawn.Spawned) { - SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(this.Pawn.Position, this.Pawn.Map, false)); - MoteMaker.ThrowLightningGlow(this.Pawn.TrueCenter(), this.Pawn.Map, 3f); + SoundDefOf.EnergyShieldReset.PlayOneShot(new TargetInfo(Pawn.Position, Pawn.Map)); + MoteMaker.ThrowLightningGlow(Pawn.TrueCenter(), Pawn.Map, 3f); } - this.ticksToReset = -1; - this.energy = this.EnergyOnReset; + ticksToReset = -1; + energy = EnergyOnReset; } public void DrawWornExtras() { - if (this.ShieldState == ShieldState.Active && this.ShouldDisplay) + if (ShieldState == ShieldState.Active && ShouldDisplay) { - float num = Mathf.Lerp(1.2f, 1.55f, this.energy); - Vector3 vector = this.Pawn.Drawer.DrawPos; + float num = Mathf.Lerp(1.2f, 1.55f, energy); + Vector3 vector = Pawn.Drawer.DrawPos; vector.y = Altitudes.AltitudeFor(AltitudeLayer.MoteOverhead); - int num2 = Find.TickManager.TicksGame - this.lastAbsorbDamageTick; + int num2 = Find.TickManager.TicksGame - lastAbsorbDamageTick; if (num2 < 8) { float num3 = (float)(8 - num2) / 8f * 0.05f; - vector += this.impactAngleVect * num3; + vector += impactAngleVect * num3; num -= num3; } float angle = (float)Rand.Range(0, 360); Vector3 s = new Vector3(num, 1f, num); Matrix4x4 matrix = default(Matrix4x4); matrix.SetTRS(vector, Quaternion.AngleAxis(angle, Vector3.up), s); - Graphics.DrawMesh(MeshPool.plane10, matrix, HediffComp_Shield.BubbleMat, 0); + Graphics.DrawMesh(MeshPool.plane10, matrix, BubbleMat, 0); } } } diff --git a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs index fda70b0..63e9dab 100644 --- a/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs +++ b/Source/Vampires/Hediffs/HediffComp_SkillOffset.cs @@ -1,26 +1,11 @@ -using System; -using RimWorld; -using Verse; +using Verse; namespace Vampire { public class HediffComp_SkillOffset : HediffComp { - public HediffCompProperties_SkillOffset Props - { - get - { - return (HediffCompProperties_SkillOffset)this.props; - } - - } - public override string CompTipStringExtra - { - get - { - return this.Props.skillDef.LabelCap + ": " + ((this.Props.offset >= 0) ? "+" : "") + this.Props.offset.ToString(); - } - } + public HediffCompProperties_SkillOffset Props => (HediffCompProperties_SkillOffset)props; + public override string CompTipStringExtra => Props.skillDef.LabelCap + ": " + (Props.offset >= 0 ? "+" : "") + Props.offset.ToString(); } } diff --git a/Source/Vampires/Hediffs/HediffVampirism.cs b/Source/Vampires/Hediffs/HediffVampirism.cs index 67a9a1a..aae9acd 100644 --- a/Source/Vampires/Hediffs/HediffVampirism.cs +++ b/Source/Vampires/Hediffs/HediffVampirism.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using System.Text; using RimWorld; using Verse; @@ -23,7 +21,7 @@ public class HediffVampirism : HediffWithComps public override void PostTick() { base.PostTick(); - if (this.pawn.VampComp() is CompVampire v) + if (pawn.VampComp() is CompVampire v) { if (!initialized) @@ -34,7 +32,7 @@ public override void PostTick() { if (sire == null) - sire = VampireRelationUtility.FindSireFor(this.pawn, this.bloodline, this.generation).VampComp(); + sire = VampireRelationUtility.FindSireFor(pawn, bloodline, generation).VampComp(); if (generation < 0) generation = sire.Generation + 1; if (bloodline == null) @@ -46,7 +44,7 @@ public override void PostTick() { v.InitializeVampirism(sire?.AbilityUser ?? null, bloodline, generation, firstVampire); } - this.pawn.Drawer.renderer.graphics.ResolveAllGraphics(); + pawn.Drawer.renderer.graphics.ResolveAllGraphics(); } if (Find.TickManager.TicksGame % 60 == 0) @@ -55,7 +53,7 @@ public override void PostTick() HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_SunExposure, 0.001f); if (v.BloodPool?.CurLevelPercentage < 0.3f) HealthUtility.AdjustSeverity(pawn, VampDefOf.ROMV_TheBeast, 0.001f); - if (this.pawn.health.hediffSet is HediffSet hdSet) + if (pawn.health.hediffSet is HediffSet hdSet) { if (hdSet.GetFirstHediffOfDef(HediffDefOf.Hypothermia) is Hediff hypoThermia) hdSet.hediffs.Remove(hypoThermia); @@ -71,13 +69,13 @@ public override string LabelBase { get { - if (this.pawn.VampComp().Generation != -1) + if (pawn.VampComp().Generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.pawn.VampComp().Generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(pawn.VampComp().Generation)); } - if (this.generation != -1) + if (generation != -1) { - return "ROMV_HI_VampGeneration".Translate(AddOrdinal(this.generation)); + return "ROMV_HI_VampGeneration".Translate(AddOrdinal(generation)); } return "Vampire"; } @@ -89,23 +87,23 @@ public override string TipStringExtra { StringBuilder s = new StringBuilder(); s.AppendLine("ROMV_HI_Bloodline".Translate(this?.pawn?.VampComp()?.Bloodline?.LabelCap ?? this?.bloodline?.label ?? "Unknown")); - s.AppendLine("ROMV_HI_Sire".Translate(this.pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(this.pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); - if (this.pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) + s.AppendLine("ROMV_HI_Sire".Translate(pawn.VampComp()?.Sire?.LabelCap + " (" + AddOrdinal(pawn.VampComp()?.Sire?.VampComp()?.Generation ?? -1) + ")" ?? "Unknown")); + if (pawn?.VampComp()?.Childer?.NullOrEmpty() ?? false) { s.AppendLine("ROMV_HI_Childer".Translate("ROMV_HI_None".Translate())); } else { - string[] childerNames = new string[this.pawn.VampComp().Childer.Count]; + string[] childerNames = new string[pawn.VampComp().Childer.Count]; for (int i = 0; i < childerNames.Length; i++) - childerNames[i] = this.pawn.VampComp().Childer.ElementAt(i).LabelShort; + childerNames[i] = pawn.VampComp().Childer.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Childer".Translate(string.Join(", ", childerNames))); } - if (!this.pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) + if (!pawn?.VampComp()?.Souls?.NullOrEmpty() ?? false) { - string[] soulNames = new string[this.pawn.VampComp().Souls.Count]; + string[] soulNames = new string[pawn.VampComp().Souls.Count]; for (int i = 0; i < soulNames.Length; i++) - soulNames[i] = this.pawn.VampComp().Souls.ElementAt(i).LabelShort; + soulNames[i] = pawn.VampComp().Souls.ElementAt(i).LabelShort; s.AppendLine("ROMV_HI_Souls".Translate(string.Join(", ", soulNames))); } if (this?.pawn?.VampComp()?.Thinblooded ?? false) @@ -144,7 +142,7 @@ public static string AddOrdinal(int num) public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.initialized, "initialized", false); + Scribe_Values.Look(ref initialized, "initialized"); //Scribe_Collections.Look(ref this.carriedBloodInfectors, "carriedBloodInfectors", LookMode.Deep, LookMode.Value); //Scribe_Collections.Look(ref this.carriedBloodDrugEffects, "carriedBloodDrugEffects", LookMode.Deep, LookMode.Value); } diff --git a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs index 84d6d47..26418f1 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Gargoyle.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Gargoyle : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs index d58f1c2..9d223f1 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Lasombre.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Lasombra : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs index d3ba5f8..d467a56 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Pijavica.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Pijavica : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs index cc3985d..c8e4bff 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tremere.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Tremere : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs index dc12603..40ae933 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_Tzimisce.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Vampire +namespace Vampire { public class HediffVampirism_Tzimisce : HediffVampirism_VampGiver { diff --git a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs index cc1ea45..687beda 100644 --- a/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs +++ b/Source/Vampires/Hediffs/HediffVampirism_VampGiver.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Text; using Verse; @@ -16,7 +15,7 @@ public virtual int Generation { if (generation == -1) { - switch (this.CurStageIndex) + switch (CurStageIndex) { case 0: generation = 14; break; case 1: generation = Rand.Range(10, 13); break; @@ -28,20 +27,14 @@ public virtual int Generation } } - public override string LabelInBrackets - { - get - { - return "ROMV_HI_Generation".Translate(HediffVampirism.AddOrdinal(Generation)); - } - } + public override string LabelInBrackets => "ROMV_HI_Generation".Translate(HediffVampirism.AddOrdinal(Generation)); public override string TipStringExtra { get { - int gen = this.generation; - int math = (gen > 7) ? 10 + (Math.Abs(gen - 13)) : 10 * (Math.Abs(gen - 9)); + int gen = generation; + int math = gen > 7 ? 10 + Math.Abs(gen - 13) : 10 * Math.Abs(gen - 9); StringBuilder s = new StringBuilder(); s.AppendLine(Bloodline.LabelCap); @@ -68,11 +61,11 @@ public override void PostTick() if (!setup) { bool setup = true; - if (this.pawn.VampComp() is CompVampire v) + if (pawn.VampComp() is CompVampire v) { - int generatonToSpawn = this.Generation; + int generatonToSpawn = Generation; //Pawn sire = VampireRelationUtility.FindSireFor(this.pawn, this.Bloodline, generatonToSpawn); - v.InitializeVampirism(null, this.Bloodline, generatonToSpawn); + v.InitializeVampirism(null, Bloodline, generatonToSpawn); } } base.PostTick(); @@ -81,8 +74,8 @@ public override void PostTick() public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.setup, "setup", false); - Scribe_Values.Look(ref this.generation, "generation", -1); + Scribe_Values.Look(ref setup, "setup"); + Scribe_Values.Look(ref generation, "generation", -1); } } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs index dd601b6..288b4e1 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_BeastHunger.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; -using Verse.Sound; namespace Vampire { @@ -20,20 +15,20 @@ public override void Tick() if (Find.TickManager.TicksGame % checkRate == 0) { - if (this.pawn?.BloodNeed() is Need_Blood pB) + if (pawn?.BloodNeed() is Need_Blood pB) { - if (this.CurStageIndex == 3 && this.pawn.MentalStateDef != MentalState_VampireBeast) + if (CurStageIndex == 3 && pawn.MentalStateDef != MentalState_VampireBeast) { - this.pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true, false, null); + pawn.mindState.mentalStateHandler.TryStartMentalState(MentalState_VampireBeast, null, true); } if (pB.CurLevelPercentage < 0.3f) { - this.Severity += 0.005f; + Severity += 0.005f; } else { - this.Severity -= 0.2f; + Severity -= 0.2f; } } diff --git a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs index 8e92712..a598a72 100644 --- a/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs +++ b/Source/Vampires/Hediffs/HediffWithComps_SunlightExposure.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; using Verse.Sound; using Verse.AI; @@ -21,36 +17,36 @@ public override void Tick() { base.Tick(); - if (this.pawn == null && this.pawn?.Corpse?.InnerPawn == null) + if (pawn == null && pawn?.Corpse?.InnerPawn == null) { return; } - if (this.sustainer != null && !this.sustainer.Ended) + if (sustainer != null && !sustainer.Ended) { - this.sustainer.Maintain(); + sustainer.Maintain(); } else { //LongEventHandler.ExecuteWhenFinished(delegate //{ SoundDef def = SoundDef.Named("FireBurning"); - SoundInfo info = SoundInfo.InMap(new TargetInfo(this.pawn.Position, this.pawn.Map, false), MaintenanceType.PerTick); + SoundInfo info = SoundInfo.InMap(new TargetInfo(pawn.Position, pawn.Map), MaintenanceType.PerTick); info.volumeFactor *= 2; //this.sustainer = def.TrySpawnSustainer(info); //SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); - this.sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); + sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); //}); } if (sunBurningEffect != null) { - sunBurningEffect.EffectTick(this.pawn, this.pawn); + sunBurningEffect.EffectTick(pawn, pawn); if (Find.TickManager.TicksGame % 20 == 0) { - if (this.CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(this.pawn.DrawPos, this.pawn.Map, 1f); - if (this.CurStageIndex > 1 && Rand.Value < (this.CurStageIndex * 0.31f)) - MoteMaker.ThrowFireGlow(this.pawn.PositionHeld, this.pawn.Map, 1f); + if (CurStageIndex > 1 && Rand.Value > 0.5f) MoteMaker.ThrowSmoke(pawn.DrawPos, pawn.Map, 1f); + if (CurStageIndex > 1 && Rand.Value < CurStageIndex * 0.31f) + MoteMaker.ThrowFireGlow(pawn.PositionHeld, pawn.Map, 1f); } } if (Find.TickManager.TicksGame % checkRate == 0) @@ -67,16 +63,16 @@ public override void Tick() } } - if (this.CurStageIndex > 1) + if (CurStageIndex > 1) { Burn(); } - this.Severity += 0.017f; + Severity += 0.017f; } else { curSunDamage = 5; - this.Severity -= 0.2f; + Severity -= 0.2f; if (sunBurningEffect != null) sunBurningEffect = null; if (pawn?.MentalStateDef == VampDefOf.ROMV_Rotschreck) { pawn.MentalState.RecoverFromState(); } if (pawn?.CurJob?.def == VampDefOf.ROMV_DigAndHide) pawn.jobs.StopAll(); @@ -91,9 +87,9 @@ public void Burn() if (!pawn.Dead) { int dmgRange = curSunDamage; - DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage), -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown); + DamageInfo dinfo = new DamageInfo(DamageDefOf.Burn, Rand.Range(1, curSunDamage)); dinfo.SetBodyRegion(BodyPartHeight.Undefined, BodyPartDepth.Outside); - if (this.CurStageIndex > 2) + if (CurStageIndex > 2) curSunDamage += Rand.Range(1, 2); ApplyBurnDamage(dinfo); @@ -119,7 +115,7 @@ public void ApplyBurnDamage(DamageInfo dinfo) { h.CurState.RecoverFromState(); } - if (this.CurStageIndex > 1 && Rand.Value < this.Severity && !pawn.InMentalState) + if (CurStageIndex > 1 && Rand.Value < Severity && !pawn.InMentalState) { h.TryStartMentalState(VampDefOf.ROMV_Rotschreck); } @@ -137,7 +133,7 @@ public void RotCorpseAway() public float CurrentSize() { - switch (this.CurStageIndex) + switch (CurStageIndex) { case 1: return 8; diff --git a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs index 572a2c0..4480238 100644 --- a/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs +++ b/Source/Vampires/Hediffs/Hediff_AddedPart_Fangs.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using RimWorld; +using RimWorld; using Verse; namespace Vampire @@ -18,7 +14,7 @@ public override bool ShouldRemove { get { - if (this.pawn.IsVampire()) + if (pawn.IsVampire()) return false; return true; } @@ -29,9 +25,9 @@ public override bool ShouldRemove /// so we should also give them back their jaws. ///

    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%0Au_~y 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 z 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�_3G2h3Kw`KzWyu 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