From 444d16d1500516aa4696d227c7027777bdc8f55d Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Tue, 29 Sep 2026 21:01:38 -0400 Subject: [PATCH 01/28] UPDATE Guides Part 1 * Incorporate Pulsar into the Installation Guides. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2acf2604..c2ff42ff 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ To begin, we'll go over how to install BepInEx, the framework all Inscryption mo **FOR LINUX AND STEAMDECK:** Ensure that the game is set to run using `Proton` in he game settings on steam. Should be a setting like this: `Change launch behaviour` -> `Proton`. ### Installing with a Mod Manager -1. Download and install [Thunderstore Mod Manager](https://www.overwolf.com/app/Thunderstore-Thunderstore_Mod_Manager), [Gale](https://thunderstore.io/c/inscryption/p/Kesomannen/GaleModManager/) or [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/). +1. Download and install [Thunderstore Mod Manager](https://www.overwolf.com/app/Thunderstore-Thunderstore_Mod_Manager), [Gale](https://thunderstore.io/c/inscryption/p/Kesomannen/GaleModManager/), [Pulsar](https://pulsarmods.com/) or [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/). 2. Click the **Install with Mod Manager** button on the top of [BepInEx's](https://thunderstore.io/c/inscryption/p/BepInEx/BepInExPack_Inscryption/) page. 3. Run the game via the mod manager. @@ -268,4 +268,4 @@ Contributors and builders of API 2.0: - Keks307 - Creator/Chaosyr/SaxbyMod/The Stoat Lord/ThinCreator3483 - stillrinny -- R3b00t3d-kawaii \ No newline at end of file +- R3b00t3d-kawaii From e4fd1fbb6378252d1946c2afff0c902d8137e94f Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Tue, 29 Sep 2026 21:03:01 -0400 Subject: [PATCH 02/28] UPDATE Guides Part 2 * Incorporate Pulsar into the Installation Guides. --- docs/wiki/getting_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wiki/getting_started.md b/docs/wiki/getting_started.md index f647ae54..b6a02088 100644 --- a/docs/wiki/getting_started.md +++ b/docs/wiki/getting_started.md @@ -5,7 +5,7 @@ To begin, we'll go over how to install BepInEx, the framework all Inscryption mo **FOR LINUX AND STEAMDECK:** Ensure that the game is set to run using `Proton` in he game settings on steam. Should be a setting like this: `Change launch behaviour` -> `Proton`. ### Installing with a Mod Manager -1. Download and install [Thunderstore Mod Manager](https://www.overwolf.com/app/Thunderstore-Thunderstore_Mod_Manager), [Gale](https://thunderstore.io/c/inscryption/p/Kesomannen/GaleModManager/) or [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/). +1. Download and install [Thunderstore Mod Manager](https://www.overwolf.com/app/Thunderstore-Thunderstore_Mod_Manager), [Gale](https://thunderstore.io/c/inscryption/p/Kesomannen/GaleModManager/), [Pulsar](https://pulsarmods.com/) or [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/). 2. Click the **Install with Mod Manager** button on the top of [BepInEx's](https://thunderstore.io/c/inscryption/p/BepInEx/BepInExPack_Inscryption/) page. 3. Run the game via the mod manager. From a58736cff3b3a16d5664e654d44f59282e4e5e04 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Wed, 30 Sep 2026 22:11:12 -0400 Subject: [PATCH 03/28] Null Checks and Custom Appearances * Added more null checks into the following patches `GainGemsForOpponents`, `LoseGemsForOpponents`, `GainTripleGemsForOpponents`, `LoseTripleGemsForOpponents`. * Removed `_specialSequencer` from `SpecialSequenceManager` as it was unused. * Removed `FontReplacementDataInitialized` from `LocalizationManager` as it was unused. * Added new Support for Custom Appearances. - Image Handling is to be handled by the mods using the API. - We now provide a storage of Base Game Decals that mods can reference without needing to instantiate their own. - This comes with 5 new Dictionaries `BaseGameCustomAppearances` (Internal), `BaseGameCustomAppearancesPublic`, `ModdedCustomAppearancesDictionary` (Internal), `ModdedCustomAppearancesDictionaryPublic`, `CombinedCustomAppearancesDictionaryPublic`. - This system is stored under the `TextureHelper` class. --- APIPatcher/APIPatcher.csproj | 36 +++++-- CHANGELOG.md | 12 +++ .../Assets/BaseGameDecals/decal_blood_1.png | Bin 0 -> 22707 bytes .../Assets/BaseGameDecals/decal_blood_2.png | Bin 0 -> 13213 bytes .../Assets/BaseGameDecals/decal_blood_3.png | Bin 0 -> 13098 bytes .../Assets/BaseGameDecals/decal_blood_4.png | Bin 0 -> 15085 bytes .../Assets/BaseGameDecals/decal_child.png | Bin 0 -> 6525 bytes .../Assets/BaseGameDecals/decal_fungus.png | Bin 0 -> 53101 bytes .../Assets/BaseGameDecals/decal_smoke.png | Bin 0 -> 48541 bytes .../decal_smoke_abilityhole.png | Bin 0 -> 51671 bytes .../Assets/BaseGameDecals/decal_snelk_1.png | Bin 0 -> 1188 bytes .../Assets/BaseGameDecals/decal_snelk_2.png | Bin 0 -> 1097 bytes .../Assets/BaseGameDecals/decal_snelk_3.png | Bin 0 -> 1330 bytes .../Assets/BaseGameDecals/decal_snelk_4.png | Bin 0 -> 1372 bytes .../Assets/BaseGameDecals/decal_snelk_5.png | Bin 0 -> 678 bytes .../Assets/BaseGameDecals/decal_snelk_6.png | Bin 0 -> 927 bytes .../BaseGameDecals/decal_snelk_main.png | Bin 0 -> 3335 bytes .../Assets/BaseGameDecals/decal_stitches.png | Bin 0 -> 16124 bytes InscryptionAPI/Card/CardExtensions.cs | 1 + InscryptionAPI/Card/OpponentGemsPatches.cs | 20 ++-- .../Encounters/SpecialSequenceManager.cs | 1 - InscryptionAPI/Helpers/TextureHelper.cs | 101 ++++++++++++++++++ InscryptionAPI/InscryptionAPI.csproj | 73 +++++++++++-- InscryptionAPI/InscryptionAPIPlugin.cs | 2 + .../Localizing/LocalizationManager.cs | 1 - .../InscryptionCommunityPatch.csproj | 37 +++++-- 26 files changed, 247 insertions(+), 37 deletions(-) create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_blood_1.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_blood_2.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_blood_3.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_blood_4.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_child.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_fungus.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_smoke.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_smoke_abilityhole.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_snelk_1.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_snelk_2.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_snelk_3.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_snelk_4.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_snelk_5.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_snelk_6.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_snelk_main.png create mode 100644 InscryptionAPI/Assets/BaseGameDecals/decal_stitches.png diff --git a/APIPatcher/APIPatcher.csproj b/APIPatcher/APIPatcher.csproj index 296ee20b..2cb804d3 100644 --- a/APIPatcher/APIPatcher.csproj +++ b/APIPatcher/APIPatcher.csproj @@ -1,16 +1,26 @@ - netframework4.7.2 + netframework4.7.2 + win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm64;osx-x64;osx-arm64 + Assembly-CSharp.APIPatcher.mm + The MonoMod Patcher for the Inscryption API. + 2.24.2 + Cyantist, IngoH, WhistleWind, Chaosyr and Contibutors + true + Latest + APIPatcher + full + $(NoWarn);AD0001;CS0612;CS8604;CS0252;CS0618;Harmony003;Publicizer001 enable disable - latest + false + true + false + false + true false - Assembly-CSharp.APIPatcher.mm - - - - $(NoWarn);AD0001;CS0612;CS8604;CS0252;CS0618;Harmony003;Publicizer001 + true @@ -22,4 +32,16 @@ + + + + + + + + + + + + diff --git a/CHANGELOG.md b/CHANGELOG.md index d4bddb22..a68919c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# 2.24.2 +* Updated Installation Guides to Include Pulsar Mod Manager. +* Added more null checks into the following patches `GainGemsForOpponents`, `LoseGemsForOpponents`, `GainTripleGemsForOpponents`, `LoseTripleGemsForOpponents`. +* Removed `_specialSequencer` from `SpecialSequenceManager` as it was unused. +* Removed `FontReplacementDataInitialized` from `LocalizationManager` as it was unused. +* Added new Support for Custom Appearances. + - Image Handling is to be handled by the mods using the API. + - We now provide a storage of Base Game Decals that mods can reference without needing to instantiate their own. + - This comes with 5 new Dictionaries `BaseGameCustomAppearances` (Internal), `BaseGameCustomAppearancesPublic`, `ModdedCustomAppearancesDictionary` (Internal), `ModdedCustomAppearancesDictionaryPublic`, `CombinedCustomAppearancesDictionaryPublic`. + - This system is stored under the `TextureHelper` class. +* Improved In-Code Documentation via XML Comments. + # 2.24.1 * Added Extensions for setting the IconTexture of a Starter Deck. * Added 2 Alternate Constructors for making a StarterDeck with a Display Name different from its Internal Name. diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_blood_1.png b/InscryptionAPI/Assets/BaseGameDecals/decal_blood_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8ecf3a094d124b236757cf3026c986410fbd66d9 GIT binary patch literal 22707 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

t}I~@i6s*lC{1V=^wQIp6aL=?7NIPtj>S$8&p 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 literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_blood_3.png b/InscryptionAPI/Assets/BaseGameDecals/decal_blood_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e172d394e8f7b95b4de37841f31733f951b6483e GIT binary patch literal 13098 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 literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_blood_4.png b/InscryptionAPI/Assets/BaseGameDecals/decal_blood_4.png new file mode 100644 index 0000000000000000000000000000000000000000..16c4c2e56ad13ca64c74a9c5fe68278b8d42bc0c GIT binary patch literal 15085 zcmX9_1z1zx`!@*@DFx|fATdC4upv?#AQJ>hhje!cqm&p-MPj6sz!0RnI|Y=-5;J^ zQ@YBod+BLBy;eHJM!G88vQvJheC=9A4Aq&%?W;1SJJi_g+BJIb|I+n2TTZ`g*Fd2# zRb_oY#CpbI8(U99e*Us*My{9l{U==SuF-`@G3q|lriH0;hbg~~y-9Xc{Wlev$nz7X z@zt7V^c|CLM`mXOT3RP$*Df4RgH}cf%`bL!KpxmZ8eD!;k+2W=)z}yq{5aZNmc@Jo zV6HzFdQ@_hhrg`5e&l_AV#BLgUxr49A9PLN;TAmE=UX*iPDdVx5Bwtbc~Rj9Dtu&f588w}8MXL4o;UA_fm@>wsd(N|af>+r|6}qb6C|HI zcLM&D&isxn54uI}n|Ee;dm<10G))|rTq5=j17|-%FmG$**$EcwmatdxdOkGjmRPtB zKHC`sow1a2!FH8RPw_7Ry4mSvOzxOb#I;9okw)kPQ&V<3shwh=Cbs(NhT;1?4*chB zbyZq9I&XE}k`}{_Xye*%i(eQUtQ!Uc3aoUO8F?I19oTm}3aA4-Okj~bO32|Cj?D~h z&w0_kmXs_?e6;J#=dTRbM=7c?AVwcoZcy)!0=#*dT+@J5i`+U^W!Us9pHtY5YmyDM zCSM)vyEPUVoZ&|STi7}H;fv;PlCNZW7HHKGLOf`yjt}{f>NeC*`D!?M7RpueUEZ0M zkT`b=hO+x{?GPhg+YjaZ7=+Bsmq5`L^1OP8yy==?CnF#Dy{XL1(<2ik&6%j4kS8r! z;!p|R6BenQM;NKns|IK;3$4;pMv8B1F6M>JGxe``bK%!7{N(dg+VJPRBd&|N)tQxN zP`PllVZ1Azo1RTq6Uf>wz97uaj)VatSo5}YNMM_(|5b#q1*^i>(5(fenX9^s2dGt1 zIPu0a_8%l{2k0g-|4#`%#yd(iVBqG4Dv(5*x7z7qSxZ5+ZKE2m6?i7Lb%P8iFg@@g zTqU9ZJ-*C4%38(0eD zHRRRRF-+@}G~WEoz9d@WV~V)%%3D773PxRdZ4{pJv2})-!3N&{b%%%>+j)Gvo~Ohb zUL$4HhUXqA;{4Af6HQoW6<+##3)f5eY}CAtu=PI|ALi{ry6c|HjB{PRR>d0E%&~U2 z({bR0)rOVjs+DM5`8^VwjhtVD-!oCl=8yr=EKbj_bkCyU%YVs;rpiWC!yffA#oImy zo$~%BzNK7sQOty)2eTqyb2T+`v~tvCb5Qh#(39&#^NC#Z97#>&{!m``w1}euj@-(s z=uuF~!;1AveCuM|ZynWWPH8>cXzcFu+)|A;RidBv(G6@HPo`ielD@{Y+fmD{!*JRV zLTid1<|)4IM3L3z#)W%|dK0C}im0bcoQ=L5CWo}TRk_}6*`ra{;FWm~cwf#kPiw;* zoK- zJ||DMZvDU?2(tyIa&+Iu=Xdj}8L_^Ee_HTPo{Q6o)>~Xs#rLm*rFD$+^+0>PY=JB> zFhB?sq{P$pM~snz<^H+~^1OMeI(~ztSm04#xm=$2V3|4T_v$cOGI}8|EFw8nD=?#F z&$T7P6J-J-AF6b2rf@2tCl0Q5#+-U8c5mZ@GK=`xDS-R|XA)0@!1QotA6CH4}i+eMG`!rGB6#d`pW_YkJC>P^yq)Z|o6weyBzS)_vr=>l z?StK^4(ru`-sEG`Bnh=T%~a-JRuqCXfg`@5f%aST%Wr-`jx-;6}zd+AH7F^`>`o{Azw9fxZSTO9DEg653;y>dCui1fh;I;;Dtr1Rs0YQO*((A$+T-MBo}$~ zBk{qT=E8c>(DPc2=mW>t*4qq(h^!+;>4Egvf@nmFX~>4`PuutTWHq2CeVh_IK0?D6 zui`HXv27=P>NV)ix>Tv@e=iooZ^pzO?^ALz!rGwtH)(rpZuOPB{J?7!q z7_I4gY;=mZAUsp)8&g=KF?9ZmmE2D24rWi-pl_giWNGk(`G4YF6UF>WO*h4KBWM!I z#krswb1~gckFvNSuzbk)ujy9!KE#pen89Ej!*amZvjpC~KTkBpL{7x7(<5(?C?au1 zkD}Q$cguH_G)^_1fn0j^eAWblgtf+21A9WA<$mWLb7Kc{2-X#+(cLkU>}(>2&=CdNY7+g^ZxGr8yceB((^gC^lu=6sEW8@%6Uf@Kv5N0wbEr%OeN<9jVH>s;7yXxy#U#t5rDC;?i#Wc%`B47o%e z4-q0^;vu}G$M5!91sV~fdY-l6N}`Bd3F&Z^M%1#p1%AiZ^dlj`DFr%$^WjcWcCm&zC#@Fy0vtYd)zdU}4Df}C`eyowy>BtS0GS|&Oe=gx zZw~r*^6iqUIH23jhrT?ke5Q**{^#}C>x#KnirmK^>6cUeRs=YP21`fDD@Om^IM6kg zzA;Lj++aLYV)}u#p(XZ+eKFs+{W$!|(TJw36X`U&SWDKE1@f)YlsI4FnPpfny~heM zhe3VbklZvFea0@*0?hzHYr9iZkvcMkoSH{oNwQrHFrw<~+0Hf9En3^Upe>+D@>&`d zDTt0tjB%o9$Up^A!auqI5$i0GMN^^6!kSG^OJ6Q+$9Is`wE;90#GyGHjz*J%=zL`Q zFL$KssjEz!0Q-HwzBdDQPviT|$;-L!aEbGaNh7VY+o}Ygbf2wC7kj`=Cxq??L4~Jo_puD1Bddz{Pa1$| zfjnmH(Z9@t<|(}=go!(wco93j}M*HzeTcEd%emZuIpHj3!78$DKgEA$)Bw!+20 zd6;fS(wFKHfge_##`vYwc8`(+4`?4`;QUo<7C`&hmD?@xva&`9FBDRPbz{(X1`?n@ z7PyN9**6%x)QspgZicRuzw&|6r&w2v`XZsKVVaHXT6sswc0#=}>NoIQIF#3uFQRlq z@lv&%kXUDdH;uOW7Uv9!SNr;6?E#Had|9J6hY#dy@8V}RO%172=h;D4RS@|q_pIfY z;X7i9-Rl=7RE4G=yz!2wjy-N@J8vow-!?O%?e%uYGdujR$)tPzbW&2+V=33-MDd;srq|gl4`qTa#Fxw!q|FjgXfnBkoL5sz{ z1>afj`B-i4VA5^;u+ILw=;6faP6^Agdk$@Ht2Yq%@MQfDcjol67;L_z{IT~;K*AwM z&wOssn;;2^?a!UZ$4R22BX!_#^0r%BpBWBIWi=OZHHZ+h=*NWa(fn_h5rxt27!EE3;q&IwP2 zY{hVgc|zfmS2`PL!#lp9c`3{AK^ARmHp9+<*(GBqnbD12{cqBbUT1yDK8bgYjqG99 zuYXsbqr;9~dA*;@;RsF9n~`_PhovokB;A@VDwp9#Eq2V1=jIxo+c>UtXYrRO+>5Hs z_mE+srK#9+-w_(2?TwVi+N2#}N1QL~Yv<|83Ws7I%}M9jV5wOxgq}xW%(ibz|0;0% zj=)nN09EC%LnCQ0Cd zd|*K*z~wC;#s+7gSohTquE)EeGYmz^aOI2-$m&kV6ia({Ls zxbE37%y&c@M|Sfr-swplVQ-Jp>DBDM+D$ze*8**+epFhd+!fc%K7Z@XD_9q89`lJM zVE$(`$GdB+rI%mS?J`npV{&&e&fO{25T#{|M6EpK8f6+K`JXt>Nmxg`BzllyyWw?P zG)q)|U}sbxWjjbuASj|A#o8&yc(_>P~vcx50U3H9l`(u){ws zPd9U-@!Q02~p6zW884TJJ zYY95XoD7jZLjD(<(T*`rm0BHURKHA)Cp*m) z$j0_+0RH0bi1c{MMg1-6DO;y8&sCmp$dENR81M3$(_ivEZI*X2hH01bASlNte1w3; z$Uj0bz*jvzbCc4#qwF7wQa2@ts5bV*V8bx4R5@15{q?jT@&hvoW z?eP%D8-UiL^|S}A27vbNHkm?AsgJd&SC7czT(=d2G(+_Kn*~Y0!jB3_SY+iHJrV?n zTe(CHXwxT@s--V`Q9k($<_$4i6``Z=AwS^GT-^?_7lHvU%8uT2I6c2RHIo?!aKG_u zB$Z0szls^`g#s3?9Ay=*u&GjXV2a4Anir-Nb|SONSQLnF-#{9Hq#7 zG^^M30d5*(y($Nt(#Xl~qC`i47t?$Bh!}?^dTOI#^vn&vo*}Q}wL}o@EU{8P6yx}zwx7PBOQ}0Wg#Q)X#6!74p zASuAiD9svD%sqn&Ss8!#iih@KtRywkNgk{Ne$>B=Wbe7De$963yLFT;MU3^$F0hKy zHni&xZl%Y^eBIrQpdo#unLia6T76dLwIta3t9 zQ-uNY$B!LUK>m84lAs|PhZ~n)&f!{u^O^GIm=@+&GQAgS6CT!1@pfD-dNaMrAm(Xn z(FX#KblR}-y6zVyaC3lI9&e2MAIak#OVM;2zKpGFtu3GPg2$R1oL8^rd8g6}?E#T{ zgY%C>XubP$;??r}D0;70Cr2S+-hUuK^QlI44E*}>T2@H=L%L_MGX1$IF>;2_ zFMgqCWI$z}HXNyocS?m2L zJIErV`+>l0H=(g0(k2ERr8_0<9JZ3ILy=S)<6=A8OsV2lYhl(>y+JHKWeCk2f^Knk zy3T)B!SpOW%F4WGL>?%My3v_7ymUI^u!u68TB3)P5UU5wd1(XujCGS%yUGNh0R z5S}vsZt1ewDW%PS_bI%b0G)N4JZ-!c2pirVD+8v#&p^JN-|RP#zL-0U+&_ za5jS$>Hd*5uzk3V6)ousj=I^@DX!cJ|_F&kwcRn7Ivg|J+jK3KY5shFwj#aw;}D_5u3a z8r4JYr5uRi)jl7QB@jv?BdUuq68#{4E)+BOe5s?rwjFaf+p+z`u3tYni6b+d3e$`4 z=GAgo?W?tc%Wm&E3%JXSdR0n1bzi*phIXZ*&j82UD81Bp0q$vfvF%$BoR;9KS#>Uf zR4jvj)0t_FUNKUa27RPQ$aZU%(~>d`66Ss*WS8HBXPa7x*0~i|{b^-4-qXWY>X@D0 zik8z}p>yySRGu8JS|Rg^6nG= z3R{laaaggocT~04Jb6yNX&3d4N2HsI97BlNlLU62#$|5ae|w0-i~l4PMyW>aXjUPm zeMQ+lx|gODE7xiYJ&nkL>5;N#IQe(Qk;@j~#13TUYsu^YEuN4Z;tP|xBBIYCkH^vy#_tM4I*ew*!;pLp*!%Y&ZZ{VctA}?e@aH8d$?v_f zv_tg&)@$dVJUsj>lTJ7fV5Wh_tcBeFerXh&8I&%l_e9yd5)VC>N@bE-;yYPMPD6kwy^n+?}VIq{P7^<1%ZUlFxt+%+R&%* ze^%;We>8{X@=VRE`@X?vrVZP>F8X50EBfVh^$=dbo(?-W63(Dh zQuRmqp1(Opjoxt%Z@e=pUpLI}US6jYw zU07>z!o56qBWh9tQ+XPqq*9M2{}8`AX*;{o64z0_nOFYtHK)pB2D#tJXAfgJ8WNQK z6K?+C_EV0}p4<5n$vgA+rZGr-^fJs(^VIj!G`B)+d%`}zXJdp{bD8em>+W@z&ePK3EM|!XkE`jjmsYk%wJwTXKK1mxtcS?w?_^iJV~8o?@ol+VZfF zO7*Skj;MBMdkKPt{nqZy)^Cou9lC)Q#l!vdhc+B*c2N_cPJhJ@TTDF+i#i@9J9F8A zbrGIPAM_em)iUazP@juR^8jyN;d?w&>YRAouZvZFM;Wb46dL!2sjdJLSe%MNxaK>v zS46#Jrw{jXDa&)34XJ+r+Lp9uy~C{-bZEA!J$(hobkaHE*RMLI-`~7^hVBsB-TL2< zb4!n}DI=893bGc&$`Qq+kwsx$!zs@8<7 zzC<#LHM_qy1?ZYAd%5e}MV7-f+fj1*eMFU&3sRq1}D;fs4)hnOWbBdQOH8#+%~i&~#WUtKsVl&BAXG!*}g zk)AHbI$UDv=~t!eZx=EmMIHB4HS;lK4e3$`>d{1HIe5pb z)9EjcL8Lo7G!t##;hS>EOzBCnJriC2x)Y~~y+Ifs#C;Xf$KIW^y}WvSl|TEhHS$6K zoPD^DRmQfQicvZk*$FPAS*wEa@x86eD(R4l0I$~lPE0+!$q+?m6RVXdb^T0n<(@p{ za+4c$Ir8!^UyzOuGab;hCDwH{w5?MoCi+1u4JB0nWVEW`ppXt@PjwT^omsz!94|S1 z{4}-~Dc+KXK{23$?vk)pH|$zM-p&o(x<|sHn|gdZmL_!Hxg*b3!0G4%V7MO0D2Dns zK@z%*BhQTA%hyjfE_%_9o$PAF*PPk1g}&vWEFLjk2f3Waq7`*$wQyU{9%AIVJ`o4) zxg=mRTfZZi6;{JfgKF2IKm&@_Uq+gduvd~Y5!4N4#R+>HiwgHPGk){mt-y6Zj5=Ro z8M0n4vY7i*^)s&>zVbKn^f)fmxFz~V`h9`fCt@+iE!Ic~ju6y*x2p-(rXh|t75+!e z{T!xUSp3sMMT|*Uh@EHQcV5-TcI5|TCa-bX5Y?GxGxZ=;wxTv`@SO|q6#g3F`!Zj- zoc7uPvqHjRoa^TN1M#>jrxSz+8o$+=9xi({FoIoa80H+Utit27F?+7wu|w!e<(!o| z3sUy3%0Y8Ig|*}w0bsXhjq>JbkUXuUdq*ytA>i`8Hby5XB?eP5r2t>xU{vS<&4n6( zk3X@Rdwq71FCf}7=NTfrVKfUQ!wjv^N{%G&;Fk*h7CSxet`j7kf?yvw(MmUb36CEeCf#M{a~VN zhR&nbmF_YxJi%}o0-mnBHpD#ir^sq!Su$^WzY{%Mlk2`Ylg>9 zq`Hn^>vsBF)Gh32v$hdC;+@?IPsHcFGBw^gbrgqq^T-JE9OwPy_sr1(X1Mj3_b)G6 z4iy;?cQRwY)V4L5iP&Vs4PCjJ!dQMxMk(@1GFwqh^e5KR4MF}0BM4hKncN%6WTNIL z<%M{f2k{!nXPN+wy`M~fuhCCZhmQ>UoBn0?NShS!GZknNNDK%#RTcw0@`in%SO$#R z&ohx2DiErn(FLWbc-jO;NRO}XweCmH2xNrj=Re&qQM8Jg&@_GbwGOdtk!am z25gnAbG^!IE+{|QoLh$C;-k{JYJtwLQ9_qGyKgKPGgPT8fq=f^y!erH&eT^sn)^F7 zz7z*Myl(W!m0g{sbo=i5o^9zEl)~?q?nOcU%Pp1L zn8r1C_A>jM(NEkpHJ6o)L&TUBXz?_0KOhUZ0|A3MY<qG5{fRqM=}=MDH4AvrI` z)p7x3-og2iP80K!gEJ14)XEGdT?!|p8-mmHH-CAO2;Y zI|rX|iQlll_nI@G=lpud;iz4L?EEu0gRFq(9de!4#1@-XCXCaSC;#4iTpcGgY%BeO z9?N5{6>KGjuJ#MHXuVh#`ZDLZR$b~OqrEFHZ|N_OM@nmLOc;|l(EvC5NIwry#WZi+ zpVdv|;a7&4;dUL zaGuQ8DUEL*2!2;#{_<*79_wX^*oJ@bD(nKSyfb3BgRMFem|br(!_x?-JIQVyY?u8s z^ho`+jn#_Su|Ah}9ganrC6Tpch@;%*$``@~m+p&q?;Z$em4b70|FA@h*qv7t3ixiDt2p~p%Ya(t1% zV)3vXwZV0M*W(>w1C49y#_|eBzA8pd<%-)6QbpOVO66b${8or^-*b(_Ss(HKr1Cr? zBpi4ka(*vp0Xx<-q;4bMXM%$(VzhKd-iKN#0T# z-e-48>47ej4F7)V&R?zTWT3xjg!bid2Zz}Qni-6&B-+{M?7sk%G4@j~WPSHpUDv(~ zm%-25w*`AzF179SDh>A2-oa8r=e34b)dyLz@)z5Efp} zHSstI+53@wd(Urmf0~?nwkUt_!(Tc!z~QglnSt#sl-)^GwW*x7M&}gHX|nl?vV5V^ zd|iMF@$89@V&6}Lm4hNf6j~(c>4P@oXb&OkMIqJ@p?@kT>!HW0?6&cbaZ@1P1p8Ar z*^7O2|Epl0Nbk(mti0xXEA=wL4HjK5=K_|y%NZh$wD)L-zzQvMI=5b@F+(OKdu^hCdkhDYwP8TOl?&Gqn|!iGrtymIsA9`lg5x> z^PSX#%e_?vQ-A zTW*{j6es;I%FtrW38mP>bKx2AjOvmtpwaS;r14wh`EV!@R z+9&08*^q?$RvaKblf}RA43MF;ooX-t+rT;vRnKIQ%|PGKcAr3<6@$S)$Px%8TOr%m zhkRS$KWEPScIjsx8m+~*DGng>h#L|~S_VDUgueG41f zPv;JvKzX}Z7-+kp&6Q=4u8@d3elN>Ya2PfHkc6?wExyqtM}c~VZmz#i_`ucXD&FD1 zur9>UBwn1A+qjbj)c)bB`+2X;l|0`HCK!5AgTrezaEchbnhwB7BzOhEp$Vg3&b!6~PyiuZF zfCcp&psy!aZIX-4LWuP9aH6>31#xrF=Ls7%6{l38?C8{=+3ZFP z?1VtydXpqS%XsTiFp|~^f39`^VaKfaFE2VYs-b-cp3J>ppj~6o}&$|ihQI}y2wXDAx|Ks zKLs*Ofs4X(IzO9P&85Of}JO}P6ZV0EO}i>S=HIC4IDDgqF#xS0;-M(yOh4#+cd%uUL6qg zgCtjS2lL+#SJlm3$P!)2Zwoj}#KQUN7!V-R?oCEScyWZ&{C{LqnG3|}#Y}-OLG|Nm z<-loa(P{Cg%lu8lF*-`~P3-Omqrmhuj;X(^MK`4Vk-aulh`K&*3S*boNaOyt6p{%TlD_!wwNgZ0`3~LpNe-9^S za`)yLf8?|Qf(w^4>kRi?GgAp#bm3ZytOHh&M4O{VKe9N)Uk7Vaey?a6yE9N5q^oVL`BkO4ACCiRqKpK^h2kDtGVGavg|lo3V`w4mX^6 zX+ny4xTxn~VAJse4XsB*pNI)3*$Fhvcze2S=>t|i7r_A*Yw<5U2)*m&@sh;DNq`+b*3>BJlk^scsc5H60&D?hJU&P_+w&KN#D* zQKcwqevpXwS=_lGz^k)j3|5NcLepds!b;d`W4UKO!jv96CVlctki*sKU z39b4TDO;|KS_?U=L383>O_QXq;^DwBmN@&EWW;;GdB3!iCf+b?{gpSei3Lo3s9A-} z2MVqJjR?a8Cw*F#%v*>~uMN~(Q0L2_%+C!5tm<27YERa>DLQGx`KGOo{fa%5QZu3_ zv8g9tajawK7nmv$lOgE#CM^Wt&193Ioh? z;XAOWQcn=Nym$G1w>Uz?XR#^?`MQ5s(cxj>f3%0tUom699Q>B2#f%RHUBLAIIgRho z8nx(M5?SKLQc`%d_{Tq)W8b#F@}03Re&lJ65H#P4Hl?Q|2h6e{mGCv%44}McWm^6@ zAb;;pKJ9d^CUv4>ft-^_X%F3U(>}`w!*+lx#)9`QuK@e|o9{#&?;}*tTE~x7<^*+k z1_;uwtXF{oET4gwyZ2bZ8A@m7cK#_pzChA?)M_)9wr71VjD?6!{_dW}iiG5;=gt6; zjJS~BXxO>urs41n}A_dqIo+|dsdC3 zjf33h;Awc+o4u{=I1C%5stiqn=ZY{#;j>qi zroP2&giR`H47U{1$Hln_AnAs46CK)qUjGG!+^yVm$@>$P7k>}&g?eIWqBA^6NuI7&SHv=+Fc&HQue= z>~Gof7m4sb^2(LuI4Lf?_t!kNpu$hBY!2Iu&qtm`X29|hts?)$iD2D=$_kHQ33Voq zK*i9L63|xUvybfJ_&8L7_IZ)cok*Dux+LITu5;&#uG*lW4jAXi^N17P*wtczh&Bjr(>=XUzSU!~o*vG1>r7tgMNIE!SB6B$vrFYf8ez zniu?qhloJjes9^;)_50X^$p~3V9$x)q1`Oh{UZpDqrhTU=8XwljY}5lUfjxK$Pmy# zdz4)E$FE#t+o{;r7;4ZF^*9CFYa!WAStyL0gtUWtI)bXBHqlQbe8B+pmD9R`{`&rQnfnGvYwm;STgPV%ypii8z@+`^ar zQf@9SxAXoTV|>#+Ht%f|VuZvJ8pAMYZk0O^3X&8R!C2mt2cm8jfvaJxw%VYsgs_R|{6NKfl?iJe)WdNi z=LW<+sHfLZvSED4k9ms_!TZa!+ln@jP{Yq7F{}ZBY%A6aQ1Uh+0QZ0HTy)c#pIYb!{u|9Nas)!HGRcNdhA_X?Y*jY(TZfoP5>}Qr{4qubI#JrKs4kN zf0G(Qg)v$D%WiF^132gM{c_2!Udz1G1@~*E3C{L$@Z3Zq%lITa3z)Aj=!w6%VUi7v z^Lwc#)pH34eX+@lyAz(LeMQnP4>;9dUI8vc?QI-WE~d|nONVn8w7&MpR*u#T9H!aG z3!Kjm4@<6x4h$VQu(wbeO5f*z8du6^o2wd15E_pvxE`EueC#4&*?;w85#uFrKQEN5!?CNvWvkf-A3V?lpFernF=;gDVH(^DiP)p;Y0`D6 zNII~GDHf;S!4Ed>Q7ScFzE#~RL)W-xZI-F4k82@c;L8F+tgY(~<^@Sho6mlje{Q&6 zAo{slLkAP=$wxKMB>>lX_G-@}*CTOpM|QzN4fW}Ta$~X#SDNZd2Ws%mU&Eh&4d_E~ zz@n9X3mK3I7-$Hx8(0mV~i8S9Pe?-fVw*jAt?J`smCK{)wzPHQc7%7~H y+B}h-bCb#EZ_zvbN%|w#opmcv-vE9dl8|e%MFDVLz6w#j22;~fEq(er^#1?}viw{C literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_child.png b/InscryptionAPI/Assets/BaseGameDecals/decal_child.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5492ec022fe9ad4832e68540ebe942a4359b02 GIT binary patch literal 6525 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 J|NER@{vTw$8#Dj_ literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_fungus.png b/InscryptionAPI/Assets/BaseGameDecals/decal_fungus.png new file mode 100644 index 0000000000000000000000000000000000000000..257e67479004348541ebf597300a6fc9d297b44b GIT binary patch literal 53101 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

gro`gN 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�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 literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_smoke.png b/InscryptionAPI/Assets/BaseGameDecals/decal_smoke.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd48df878a99a95297ecb3ee146e13c6e25203e GIT binary patch literal 48541 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%0D=a=9kz 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 literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_3.png b/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_3.png new file mode 100644 index 0000000000000000000000000000000000000000..86b02813c2f2ec0da6385436d9dd7cbbd7b2c45a GIT binary patch literal 1330 zcmeAS@N?(olHy`uVBq!ia0vp^wLrX&gAGVZ{9&*MQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0V%NOPv^?Bf|3urOFzG5N{u_JvMWUS`Qr?oL*|`vtDA%dXB8 z_*fkip;Hj_rTNh62ZuHt+9q~SD7D%mQs=FhsQh(fJC1d?jADHZmrcRGg)rmhO#mwuF;$v=eGX4=B9x_jq8)xOWLqamVAJmlF$=>wB%EDAP7 zv`nA8Z0e2Q-+q5C`}_U*^Cx#~d)HMgvMAACa3x{|Bre+_E;!j&)2p<4Zpv!1_fTgr-! zENgcMUbNoBSaTqc=sSV(m7 z|2eLILhx zTcLpbw)kYmTeFXFf1CfcZkg)M$vOAuC#T!R$XCehdjGOcNOa!Rb^I=O-m|cuY>Vc- z`@JMhL{#p7?fOIFV*Sl2hu5~recw7yMQrz?g8m=2d=q#r-c@SunxB&VP*>>sjYzXQ zJD#h)s1vH+ntnbytVW@rA!ozh#N$R=_AUMH8~>B-0P7K>JqwKb?=j4KBI764{h{a* zFx-CstN(aw>u0wNpdXJetXAy3wm8J~74yPPThF1y!DH6nrq;JRQ>t$S%H)`3=qvi_ z*jR5?ym52V!e5d4sUGV;sOC3(_@0pN-6rLIVV870b54!$1D3)M8+q2McOFeoPh(N< zXkO3t@o%7+$hrq9p@RFC8{b`1@$|7uDC5<*nQwRv9+xxBNqP4nInjC3{I78p-|k#` z(WO4qxFL)J&PciexhP~86J>5F}54gu4%%SMj)={F-Pyr;Z<=n&Tuzn5dJ zd*H`H+sDlhR@KU!V1IW#qUoF4$ELr$57MJ1@i(RX{wKr!f${f+#}8`#zb^)+aO3+7 zaxxmy1*R4EFV9rGYJT^-xJW;9D)Txv`R`lhRAE6qiP!So${9w|-1!rC9An(Xc-&Sr z@L2rYo1dq(%5#AAe~IY0wjF4o_C1Cj9T6SV!Kpp@d4b?YfwiZ$p;i1&E>0x1&T+~=)?Z89CQAy*#k1z)78&qol`;+0C_QD761SM literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_4.png b/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f424a824c30a822af0ff50fce2bdc0810266f5f0 GIT binary patch literal 1372 zcmZ`(dsNZ~6o!0-MkK{p_?$IUENwN#%_j(obu=}>QG}1qq-CWk7Ko2TMN5m*tc-0w zdrFDoN5DbNEVTj0|LPrOA3CK z?#2XSjL~>(B9r#U66l2jITYd;KmwvSBh;8hBdbISWgtWL+~ zY0D438k(lxttd&x<5UU}S0(iuU6HvySy;8JG2@Tn5y`q=Ck`i6C$UG9D2C$hcQ zP=u{VCfD*Eo!wz#AL+~nO8i|;NiM-u_iRO*>MXB>VZ&e_6kximl%T+eqiU^0-@NdW zt$vZSU48<|56bcrR25ygCb5%6Nn2X0J0qsE84ArK$vstg=koiRZMO_W^2gLDT4@Wd zRKFqKI9u3j*ONOxd>S@7MCD9-8aWoIitZt^!wL$DPPv$l6^yeC;w$f?Bb8J9Oc3ly zBJ{44XhQcSM1cvJj&!T=9FF%_9Wt#7 zS3E`-E&2T%nDvnaXonNiH)5uvO007LYAB|1k$-vG*YD0VUheM6cBIAfz3#Ecv|*47 z7#W>I7R9*=k#I&>bkaq89!VGKey+ja}U@*8&arDFOjUHw3pX1A>urU zu>K;tYb4{fu;7EV{9}f1I2*>_o!7eIg*fa%Z~om-Loh=*_&K6!xM;!DwyA5x%{r)= z`wvtx!$^lCe((EiF&|j<;Uek~W=hmDU!HjBXy&oCK+jhSz}gT$!Vru?Vd6i91dySa z2^K_HSYgj=&vRYc4clDbnZKP*BRh4!X|Br^dOFnn?`Q6ekxi2k` z#JpbLpS3KfGOiIjbWkAK3pgtcxDsWDw>?jV6MdiDMO5s7m+hSMXZ<49c(h|6my)ZI zm){GB%E5L!WCG$PLdX7buvT`QRF+H76eyDDhq0v7EZ#uT)-wxS%^6?7dRd_Hb52cD snAJd{CB*A8D+a({d_w=@xXI)37Qy;=G19cnhuoI}q6xA18@LqCzu)VDUjP6A literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_5.png b/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_5.png new file mode 100644 index 0000000000000000000000000000000000000000..93c2b6211bd0c3244c81cc4273aafd5b30b634be GIT binary patch literal 678 zcmeAS@N?(olHy`uVBq!ia0vp^wLrX&gAGVZ{9&*MQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0V%N)k%yhm5a|T{lYl ztGM_@@x3pe6%D&SZg%=qGf|tX|3kuNrB6EVBG0nUuaQd$JCI}M`k{ zon7C$clq!2=Ud%(u|KYFvnW!JHn$PKnkFLs{HNoJ<9}vPnQ(sR#I>{MobLRb>2`1; zZ|nI(%vY5@Rn5}omS4F`(tJwyiQ_RYYs5Pry{4lYdTcCV{zW$*E-WLKRb2E9mZCxzqR|d@_ZYCJAvCDZWhXN+-R5f z*7yDg)`aC*jytzx+WlslbI9*%Q&DE_H7@;n&Nm^t>Rdb<<5J#Ep8rqi#zGD4=-IxL z?-%6%`ggTx*QR@?=PuQ(X_;%ad`?Zi$ZiiU2sNn{1`ISV`@iy0V%N(r;B4qMcmt)-g&np1Xu&!*I$V~p)#4R zYQox-39TuNcmK9b30QNbTI}maiPtg@no>GXF3?-5@l6_NAf@1g(7(T>Pg;8}Devis z+4U&iBYY401J)~#ieLVm z`~SzLFP#1Sy5)-C#MPJn|9tIj9pBPyEh>7nFZqnyBgY$&HtgFq*N9cSKD1PvU(B#| zMRA@^jmnkmc{50krk11O_ zV*F-@KKyvnpzm>2>HGhZk4~_!@;=|nQ@Ho!niCp(*l3|9mp~B4gbaZ zU*?0#biMszWq#rBEY9Em_WHG^v&>J0>3TNeSJkFRoj!N6UQP8$vD}kOs?Uoa)y#@2 z`Llif?sCC-E5s(QU%qqWhl#6Ze{|T{QFF%i$XB(%x|sJrPR5zd{_Ifs@MnZ~$4#}J z4>a~@@15D2H!uD<1o=DGJ7D;DG( z+_V%b(=MkW@*%f{u1S9;lHF? zzU@PlTg?1TT7SC^xmz?ux#?xh`tjm@-0IACk56U^?wn)xe(&$kuOCP3ms!SB_=NfD z(&tWXJMN`~rPMGz(Qo|7pks8T@Wk^wk#SWKXP2FHeST!1wa>FVdQ&MBb@0L+)Jwg3PC literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_main.png b/InscryptionAPI/Assets/BaseGameDecals/decal_snelk_main.png new file mode 100644 index 0000000000000000000000000000000000000000..eceba729abc8957cb70b36c17d12ca02ada4b05b GIT binary patch literal 3335 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 Kr#YtrQ~n#q0gdbc literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Assets/BaseGameDecals/decal_stitches.png b/InscryptionAPI/Assets/BaseGameDecals/decal_stitches.png new file mode 100644 index 0000000000000000000000000000000000000000..4127675dc9d4eaa4eb65e169a71c6f0fc5f32257 GIT binary patch literal 16124 zcmXAwRa9GDw}yjLv=l2|q`14gI}~?sk)pwZLveR^D8=2~-5Xqs1$VcT?>`qi8T)39 zy?oC1eP+0-vJ5&3AqoHhK$nx1REPfiK%XvTMCkA57k~)#55`4ZMjTKzMSKW-f&VV1 zBnAM~#-hHMB0%3iILhj}005tW|2;4pR%9LkfN;E=q?m?>(W%d4CY5C}bMkYSl$GR} z{_dyN^YrBOMvGHh?em+l1v`3LWZJ+lC=_t8fjd?1YtmR&H~bV3a6AL>PX2ry%o)g< zTF$W(CjN$W-ytTW#0By@W%T|hIPFP6$b;Y7opYUi{>5Q#L-tsVLEA-uA1}QS8*PsvQrp+~7M^t6;uX%JrI3}pUL#d3C zD?Y+MRIrMZ1R=;sf3^%f8J)eb({3gGc3|m3DZ&bA;43s5-f?+Qo;mGvFAh~i>{Ow6 zy?93l)kE?qEA$#pTH_;rt|~?n(Ukx=s|aMjqGHx!*apYUkQb}-5jfYkS7nj-^!6{| z5o>+ZFHzgc_ot~zgazW3!nZN{eEi_}0m#Le9m9|}-K5auO34MFZgW%jpQgo)5M|u5 z*8ByT0vxZ&FD}H}mr)nywt$?xbHNr%vImq!QpxfJg@uuSWh0*dIgIAr%e}$gT$kx? zmU?Ps_wzgbD()K-%Ieo!;?{eg4bijTwBx&1BHCzn#%14xCr6CneS}@D4B%k9E8i1C6HO`TN-N_o0Z==||lI#07in5MG)!!4Bj%#IvtK8#Ju|pt|eV z$xQC(MTz4#BA@|&Cm;a5C#wi+&YAnDdtsWLXYTl3&F)=NKTMcUdxAKFq4+I1=2>7= zvYFuSy$Dk1=84SOMml^oh+yePihT1x3}ulSyj6nLXLS$}5Twq-kZ|D;|U znF;AvW_}|Fc8G7GTDj3B+ud+eY_qXNMT*MoEs?m<+3#{Z89zS#NxwN$?vz8qE>zpl z;kX@8?k=o?!@lHwl@VcOP?f`?n#Ukzs{}%zN0#Qvf|@r0@oFy zA^PP|T6nws>jLq7ozZ1E%b8~?eE%-a*}7S^b% zYcopth8FU!Sr2N+CH*;M$>IGZQiQ{hFDwc#?0fQC5X&1rIiX^sRv&R4Mcap-7V0$~ zktVBqrfhh9u!xx=TNX4}6)^nhtGrl6zD{`6(nJJY!RVYy4AE@|lL6aR6O!p&9*F90 zoU{BL`AAA z^UQI+PS3YO7dq`!1{Yh&x9+@5H2!+E>f6t`pu{?YTqeJbEdGFgjXyIXU4?Kogu-%*U z%S41AnKJ|jM{6@hxfTjzV4}*mz^J!);CPGfTO2~y3NP^50-H}j6y_l%E)^GoJo9}L zas4)H9c2Go5AqdmW0UI_WWG}IrQ{mi7q86kS(7d2Yg?D}R`{KQ0|NWI^PK{-FF1kTuTT zRywun$<1dDXVB{=AQ3<5+NHe$xUZD$k|+>Kd+`PjK$l@f1Wda zuN?Gv_#N@F(|39eVzhA{QaoPx(^gVTRArc=EIZPiHo0tnu#?X4BAq~GLkh?CNW z;GKq_d5ijCtz^YJY;{|!f9b)Kz>eUl>S`LwSi7G%ZAr}zG?)N|VF;lCCZ8!|kUjgtHDWE_343l|#Y(O93bk^PADj?jPTGsu z$rO%FB*@Jh>|vT($G zloYOBc=@U-NPZ9BHQhoahcl8y?2M&=!O)cQAvUPCvM$P?PDOLiqWWpuc*KO$9ZO+Y zKF}|c#!{>@jW<7BQXk%*NcXmdOt!*fEbD%#=gyu8QMO84PY;~Q9vNs?0Qc2r+n6%6 zdJ^1leJO`YHERVGCAcZ_prj@IQe*2iWmB2Onol;O5|UU@=5!^<~6>GA8J3tG7m1|r#3 zTDDP%`G$2p+H50`YDb=VIe>ROxU(tNX-V-AuFN&F|=E>`5d(-iXXM9zzGCA)|8fXU1(9xU3rK{ePHRl23C2Q66b>;4I ze>S?YFH%bQMykyXUH1_K)~C~`B%S@J@v{sPR+N`+2qws&g#}Sx6z{Uxa)za#LWi%^ z<{8M*k^fC1U8CKpgEZ%7ib?$EYiR_gA`N=mqT{gEO&z7H_iYzGqvp@(-O-ONG)=CA zG>h8TGNWbZUwYV5Vm@GS0EMMxCX8j)b7**Cxoy@k?}NX`i*=7U!$1DLW~E)h>>?Tbxam@oOKMj$LwY`ecc+W`6+mEII^>zwPPuxJRhBm}iFAgeqK) zNQCFzOWb7Zjy>Y5lW$UBwbFrPudrAmSp&LZ6jH^`gSLiK{I#1<&J{J8i#@Kr+jl3g z$epOrl;VLFA8yc!ZRWWXFQ3|aMARaK-+7b5Zs=kBs&}t*s^EQS#$Yz%3x<7I&$sWs zZEOVZ^EI`1X`L8xZ7wTp?)}8$7|GWNN&f#{6q(`L?|AfcsEvo?VWNBKmV+%E>2V_d z$d^ib4~=2-#M}A}95-~cWngWT4fKf=+vZYtf=$`hWj)`X^;!o`kBJ7)fWqsB75HQf zR0Y`vfzw=9ABqA1hD|rZ;qd$#;1L@1Tg5dEERWewrnkE=S@uIitXeKfYmI*;FNNio z&uBi~gShY>3+HWovvpoNse{hApU{TpzC*5e#HRS9A3eiKKccn#!X{^FvtpG(F_nO3 z4p-Wh**I0&9J3#pNTWzGVax=76BqV6VVZNTix@I>aDAKV>U3(@AgZ?Vlk|K>3a`lD z^x@ofBG;7g#mticlH&IHYTU;aDg+Ziudz`ZTkYQkzUy;8CL38b#B2~8O_CX+agriT z!){SZz&E9nm1E8m<6UC4Z&~W4E!ocQ6Lz}8OB3cDu@VvZ6u0q67wT`Z-emVME~z1! z{|hN~+86g`6c%qxv?hW%ZGj;=sYEd`yaR*+qQD-t{4|zTXrfxJMkC1 zw8d0(N{IFsn@ghO3aw3#vALBh$vdAyFPbFW8MSnV?)sOos(2L_7);a|-ty%%?xV)A zL!!SnV5E%Ek$WEQi0?OqlMaxTx~uHRqd!AGsfI*U9tHQSd$ardu!fbgr32Cl=yz^y z7@!L)Q8rIPv!b6`YcGX5guU=qkP&Yo#)DZIh+H$#nTa?~(}bou9cSwoT-7NVA%{6K z?Y=Z29o3#Hi#3f!O|0Aw#=CU-ou0B}M;FwExC=WY2hNsG&nC0AR5<+1Z^}ku&ANYY zu&OxR_4i}JW+qdSvi&hy4*As`7YOs~ay?G7h_e0bt6nq+JKOw)WKUbs-VqyOR_(<_ z0!No5W=u%|gDLtKoMnnNPEcQkd?)KV5VtS)?1y4c@@h%#YWelon(PX# z`mgcQU&d_GN$Pu|hKx=1jJwP);~le#gTBHU3NLm|Ny7ZPA2Fg25}s4bf=g)RmxXS8 z{;mzmVW@Qzof%HeF8ZUz2^js{;}5`up^9Uz)wD4&F~P>_hz(h<8vZ`sDxrq?EYRi~ zQzap`d!|vE#Pi8^Q=;_+u~SPxj*YaHzw5kuPyLH4z<^K&I_-tB%vz>AnE+la|f%@MUGQy$|XaW+dI9M;n43ab%O^tU=3fMVF{ak2{^mV8n z3I!D&F10E%dwLiaI@+y5w({5KDUlLj&WG$cd4mpBTXkp&?&=uh1w46O(MN4&U?SLh z*hm}YN3r$K)6mAmd5a#`um_zlayLpM8&Orf^ZmXy#2X@eUp>X}9 z>4yFDkO}R@_;|?*%fO5M%`iD!O~NV?#JQ|VdUrjKh@MXP#A#(GDaahgB)--5?~wq9 z_m=yq!N2bP@^tMKy*(oVmX}nqYM*rB>-2yC1$**y$KZa8r46}3(&br#7xHxpN1e&f zq0L9Ggw|+=PhNF5YRrI6DoJ8kEIv@Qy$)Iv8bfl#B>c%UvlbCW(Ud!Q5Qx^~=XQvsLU0;W<%^hOVZZ-K=o`BgK$?HVrns3a{E zBBO87`&mMU->u%L@NL48zbmy-zjv+HV@odB48ZV>_-l{5?O*yLTbo7#(6G`q#hAH zLSnhSM>qm<@l}?i0w#>>DJs8CJ<=eJS!I=2Fn~`GdRDu7u~=q&9nddxyW8?qsJK-B zVKOdrG}~BUo%TiHE8Zgwzh4|cq;md;@;3~>tSJYI&Lm(GDd1)(ymBh3YV_67R*|YF ze=bH5u%5aHR|#C|b{w3LZH|xdNm{zMADeY(NLRZ50j6&dfCJhc1f*fii2Onb;iLzr zsh7e-K8vKfTyxPf?3%%k-x>r$5~o zE{}P&WXD>cc=1J$^wK6txD>{|;95OG?6Yj|f$+CjM6dLka}n5z9oGg?V{Q)bkgF^G z@D`=G+roW}8Ewp(kvc?4SmL~%G4w%=2_B>AK+ni^_9CW;QGH6IyWhc}?Nn^f?F$ns zj{?G*T(My0AKaZJwK^$>x9RFVUS_;_!VNkM-oa~vDIXJmvyA3dW9g#vhNX<2yVWw9 zUt~u2~B%GFaX*7fm#=JFF^>__kuWTl+p*zV%^W2y)C>ci0xTv z&rH~R6Ww-1*2M05lg1^sKYXO&27`*4=WTB~Sga`CzLu;<%yONKx50u6;{uJYnhVaQ zbbs!pMND8Z$S7dzxX=Ds#8_sc#<9RdRxL7JRA0FZZa2TYSH*Ce)AuFUC^Z zWP8<>@YXe02QqsIdK)GpD#qt)KV1cq{G6_ii}ahc<9rG6e@D(XS9_PM7Yp@uznA3- z{WsB`No|3@DFcK2C)k{wT!-85v8~izX!m%b!`?}*=Fs`BgpzN2wJ>-$QQ=lR^=3vx zns-5Y_`Yerwm(_tVN#FrW;nRlZ2GijUFIGD`7`u^(fmHtn^+LJFBHBFzJt*x!99p{ zb;(+g*GN%l1MA^C3`i!-bzE45XPW=M*l;3%bBC9ab;7ClkT<(#)hJ@6qO)Us`MAi; z!3AUWJA_mKjeioJ1pC{mvr|Qm3#uvET6Q`PYzs?kZ4`OUeD#sKtLd9_)NJpuy+LiGA1Iv%=V|jfU1C{Zyx3D#-xGXa{rt zW*;sbNUr+_Wack^~ngw9|Ki#5Y2M&%icn9+;AgjT8v)@ z(?AzbT7-{FL(-dD3Z@Sw5xTG6;@VO?Q-9+()abs_vYu|f1eMp;?1zInL$B2 z4x(xdFT>;M^KR;&i}{Bd^&!e%3;8z9&}YPs-i|OIjpptPDwLN^;vx3Ee(ITw-$`wx z16h)M);8DzHnq_oFp|7C`oVec9w{!_qmETBAModQP8W=pY|aLMF6?bPZaqwmE<}ds zA-ODh#Ex%=BMAKi9;9o{YRFwOSe!joa?B`f9RJrJ=2njZLjVpd0q{|fY;9$V`ka`q zh}3YiN>HNBFW-olJtaJsI0`Z4nzTv#px*(XGJuDJe6!l4`MO=M`#HW;?+ul-ghZ10 z#F9W|U^u^5o#>{;f}&X(UZl(7)QrQzXiE(=IA@v`uU=r_(~%VBty8FOSg2JhY&CaG zno0ZpO)wrCl&!w6#AE)>)2VgMH3k-ua(dM(ReU;{$g#Ow0ZN8oFWunX|W(M?{p9);3Bk6nlLUE@!UJJB;M{cq`!m zm{c$>-+!4tU>lZ!MyhO&oM&nt4iGs!0;^tQ4f}fa<)E#51gX3Gr}u@Wzw%;nWg9bz z1K2*@M!RXxOpF{KlbonW$aTS8D>X&T7|uB$Inm4&`R^8tR#B_KB0mz3mIa^*KGB(j+S3Dms}p(rcw&~bYDr2iVa0|{G@41(|=vNpd0PK!k_Re`T-Cy2L&bj{= z5k+fWxvOq;T2iqHvTMl-&B_nIA2>#cXk0ndxRBcOP4R*XM?GS@yfSC=R?WGO4h{pv zhS6*usX+kXz`+D_yQalC7_BI)OZOHE6kAJH&PvL|s$=A|E3xS^JLz)gU0-`ecv+Edu0T&oh)tz6i} zF~Dw|GeUD;$30F&U#zYta)wuEiA_mE4zbqmoix-n93yqGy)%=r>(2%-Tf+1)#} z;6CAhxiG2J;Vx39vbQVC@vBJ*6HLPN=pL(|@*8P0e7EHsy}yd@A+v#fKT+j=W7&P` zCN&|bJyWJ%Sd+U{H3aY`0klW*?q#TEupCU2sp||vud}W)9l;9`EZ72>4uK zB%+7Tc`fHwkr5E-o&XM&jof{sIi-ff;{N)Z*))Xy?t8y|6eLB;PtXJ4(Q7mFF5axj zy{%c)%>cIv^|iF2&W0;xs=wC)xQ>l^cQ4KtW~6A|DxLnHNwBjxE8d-2`fnc(p`Bwd*7 zf2~7yGn7qm9_uHv{WOvB+1lJO_nZcSBg@TM@i!s77LMcs{<xhE8|9~<`K2}%^5c<_>DHVVvTyPara(TPCAMlq^X^xn4n+Y?Ef(B>C=DxtjKZ4L)g%e8;+(-<}`b=S!7WllZ5waQ=3_>w3?-7F-$|o`PR{xp_Dg` z-sl+>eXUiPuhjZX)#`@U1I)KccE&dBpHlP$MYlR~myiCCm4bc9@omX+o@`XukdJ5v z*MH!!#qUQl==x8&h4(RSDZ6ja21p3$P4oSdok`daqJSjT2TcS_YQyl8@FXOYeUZlG ziRBd$cOs=DniC9N{=quispvu(ls_sh%&Iq4Q>-Crmt=?k?F*=`_+Gat4MTIXaWL97 zPV2DHx0#aU(#wY#Nh?D96bB*AI>@LyvEnIDy_EOQqIL5u*WY!8sQ!$ygSoU?n>NTVy*#=}@yIdf7zK?Sa@iy!6fa-eG^NLe zW&+VAfBs72TS$WQ#2zIM@D1zhgY9J2=I}1h3Wo!lvk}xzHOY%n*xQ9*u6U4r&#_MZ zNbUFzMl<@)592?s`G?F3K>6Gh%}9Kx$4YP!{iK7$|H5_^Vum)yS!DM-Qb~5vmUf#| z*NgfK_41>ZH#Z?rj}0y^X@oSUrK!!4GH3&-H@55FMxn6ssk07D%#v`iRw-<0P4m}Z z-U={Nt&?Vd`}^Dz3uxhHq-+0Tn~?VT}lwmPDsMO z&1J6-vb|ovGwh~_N%ocaJntCdj{sQ`^DJNfldDFHs2YMW&LdD^6;GrJYJz>LYK>p; zV2VUSAqZ65eWC>z!e`;wum2qxnneyk2tbIKXM*+I9vht6Hst6ZE;-u!PAelKLGRX^ z@YTEk&Omrc;AscYM!swA3dI(9FA~BLZp5nfdD0Zpej`SnBmO5?BKvv(Fvf9qJW?=W z1%cBV$QN{xvo-yuY#SY3HV|I(MnU-rl6t*?mL6}r6a?=&=`G5P; z^s?`cezPkj8Gg7xf`>@j1Y4xpK+S^Y$=Js|>Y%FanuyGE#)LC=2(a0ZTfkWy8T1}M zRVy&hPA#B{#(U6^AtH+jn?X^WuZd&)_gLEIZrSZnd}g!u2FzyIbQj6^PQdzMi@HyvkmU$1N?S!$46k2!r z&Za9Xv=|YrQe-%hUN`Mkg%x{OHtSf88+$VrK67B;cC6JXAO5=fMh{V-)SRC4+|rj4 zBXsyrzLw4FZ!FXe%%v?6sZo`6r}^dK&WU%_L>b^y82-?kF8(y4VZ_UutdKnlFX+cg z1pFucSh0S$oR-^f^_ccM%2JB&AIug~3rmGAye~;WmvskeS&?V_T6Q<|f*5i;Zg7(o1hut&d{FYc;%JZRx zWuWBCw4M?or&^DTY)?d9D*Q%^Y>z~&2(T~$+GJ!)^-IQ8&RIVQ7CHlFDoYQIv1UeP*Va|T3H54QpiUV3ENUZtED-RB?S zfUkZP48_w8&ZRsgc=bO{fv+4m;|}WdxI}Wb>CAe0PApJtqYB98Hv5l;&{GiYXp)2E zW?@{iN+pntNQA#)ju`V%HL16u$cBA)bzPoDxYNh(A{81(Tf^RwU%_ssvlON905dw# z3xkA;#bIX1{{GQuR$FmP{+B(7T13E{5SiMexo<|U(_v#>5UeQnAEXn2;TTmKM%L&S z6^AR0dbnD`A?{9}xyF+oLzXo{9iwQGNF!4au%{%^n3^hmBvf~!Jv!Mfr8S?xcC#5?%%1J2$U)&NS2P`qvdq@#{^`>+-Zfp+{Azje!(!-|XfN_X7Cyrp_SuwuVjuu$gZPgi;~gKiqU!B-S4zBO|$$lNAYKn__|PrdA7 zUY&ttyf1KeF33K0+_Ks17kc7HRK#qziF2zNMkm}unc@0TeCqLZk#F99dxGI!;W3!j z;IdV3=I2|)Y%9fl)q(KGpkjqHpGL08HtUY??&hZqMtofW3M1y10RQkt_tbUv6U*#l zh&P<>OEmo1Fh9Yzwhn8YzfXFVxzW>3k?cVgrJ>4z@<|rCg1fZ$$&pn!7*MUH`$Ppm zu>XAa86J)30$jDqxs3k2u0Ps&o@eW2N4>M&U%FIpgnz9RY_>(LTh9v-2hnVlAerXW zrmxzUFj+OH5ldc(E>O)#Z84NW+Q|U_wFi4id^-BY#L4-x(w0XN_!Dm)5f(qsSOT;P z6uuQ7*?Ga!cC=soI7#bKH^Y&h7X0GZtQTD z*;On?SYxU}=VjNAg_A01Lk5PGHqvaihjniyI$i!P0KHM%y({5)RI&A9LWk{kN1Ffc zZ%rI8oBmYploYJr$ghs~cr*{c=2}A$%3t2@E0fd>qULbIZhw*zp0-R5$BLEFQ&<9x z-l1XP=A$YPC9Twu9PWzMLJHVmt z6PoDz$HRr1;l|oHWTm<&u<>{aK#-KG#pBkX++vk;*6~3{n#%1!6S3oehlwJ6@~6Ch zbn_X6OM=LcifR?zS#$M7JR0@GE^6=Cz|(rd#wX%p`|%srJOmIC8wl9{TVb@Or@P)g zvMNjOFhQ*uHBfM*P8#Yw(Mg#joBW-G0S*0`kD0+DVH5apqtCxQz=9IrgZW{Lgd0{O)K4RTSbJv3Mr2cdG1DMvj2Yt&uBhE)U zQ)LHNycEJ-?V7Sqb)!NSAuq%Me#}RfY7w34C7RRUjzXrNLn6dIKsElMNcXsgf~7it z_^SU)7@*5Xg4on$W#Y|@@h|b%01MMsiq*IfHmz~e_Q9~|3lXp~&HKG1|8nGWi(jmV zLHGDC?|0#Z{rAR%Fz@&dcv6fDfC!@f0=o9ES`ePk&AZ49G)05nrMRn;h(6G~afNq?Oe@j798QOiQkG;DP1SJ!W)f+EPB&j#D>5!kP*~8&>N*^K< z`L+ivs6Crb?r#ta1B?VneZ8n~&nNM|v1li5pR3Bd2aj73IO!<;NbN(;6dn&{OjYKd z^$lLf*S5KY&UY7dzM0$H6V=YI+m|aw^H>fZwtna7SJat0|BEiVUzr&4OPfIH47O@5 z0sk>JXWU=BC7c|WFNP)BH|LJxZODi~G&%j#eY_C+w{It!c&S4cA`9gz(Y(pvMcO2H zC!*Gm!r=u?Hmt`cLj{$e3l=RmB>;uhulDkXU99m+SvicB8-$-fdnDiBM$5ZSS+RRZ zq`fGYOrlUADabI&SZgnqTBO}lf>qVRWDki**$Ezm$82V536ofMU4vT9hitH}=c?B^ z8*@dwQ>IKOV;h2(0uIgEzRw-MMf(r^SmmqK3&yjK8Zr$ctKbRhCGxMxbx7_!4k^#q zk> z`6ArhW|tv@N)lWqI0yNTq5I?02Vjdq;-s0|s-pB;+2hp4ZKD~_bnQCY@mj7EAEw%r zZ_?G(H>vJ>yM^O3%Qb`QPZ#&p9N`>0p4-~}%e&e-?XKD2A0r7`}DIv^^EO)n8It436(v?A{Z}9CxAz74Iqa2gyK#?_r3~fbWD}=NFY+j}q3P z3-VgG<*{eRPY?i1UJnXWl1lr?SiF_#iqqI}-E=}@r0p~<4jhf#v}(rPBL$hajY7Ng zm}PwdI*8IU0E_IPuZ`nJl!4qblxfQ;p3Pvuz1`_esO*@A#(=@NN4!HZ8mRD!Ck5ou z1i%cj%w>Rrboup%2&jtRa`K(TSl@U&7Y{aPdX7&k@Jv;Qb}vCtE4>cNKU~ZJJWee- zw=UXHP^(hf;f4R|(@$vlMx2Z4q0)$`8CMl-t7Plr4Mi`>9J;s)O_*D_K#I7M!Z(ZZf-ot)B$Hj;f^}1X$rtza8XPQw7 z&GeF-St!e^!7!=^V=NMI6K|ZABJfaZb&-4AqE-Uf8ZYm{&v~jH|_)i zFHY>pUCYQNbAS9cGv4=Edxi)B=Y|vxb!>bql219c@L>MaZlOy?Q+`F zf*nFc|CJ*3Q{1W{_c(6qqrtfQ2E^;Y{dmU#+v;9o5R0TBOuli;uZ|Cws5#4MAS8fntWK3k-FD}p= z7_lq14i@zHJj4s1MrdhbXh4##{d=k2!>9*yt6$j{;w+}(*r@$aB9uID*U;@FF}Cby zK4asnA1Sr521OlK1ohrs`_5aT%YKTF@i+ZC(q#M=qAWu1+W+`JSQ0JTnDRwuIvgE< zPQsFhL^U|(nDZ!_y7SB?S>BVwu-nVTWD84O(Tx}Xwx&C?djDR!;{=YhMuo^v81>#whEW#s0~%iHB+%XpIJMl z=LhQkWqU$(G`wqD<;cg`FT-mxn=;IpGp2`2R6YHCrvMToNn0ow(E;BEy;>|0fa)aX zT&wk$AJYUFap|-Z*M#=V&WDPS_yc?4Zc-T$Um27$9~Jt8Ct~URLh*Z6&Rr}{gKm8F zD%FEewd%cEjL;B;vUta&>7jUxBrFLtY3-tpoD|zQ0yC*6Xx@t5j-sc!Z{v`@_!A$W z^KHFy=3e>gFrrFR-6#z%99-I>8$oAx(q7PNNyZ}s_cWT}p=tIu4%rQJO!LLZ?KgIa zttb^ht0KF{!iG+m3==f7y&|6D`{;czVCho$9r?ww&Sv+BMXlofrD({ z$%GxUtmygdx=OP`!;J}6j>T7ZSj3JO!KCi%Bo8pQmkgx&7WJx{;wrp|{G2mgJJl&5 zjbyyU2YwS{$Tdh3rI9j7W%5BEMS(oIFWAa-orQyzho&y~yFfGDJQmGw^@b&0>qWCK z3kBegsdnOby$??@%{%efr#g@kNor4%Z|!yN4RO95J)u><8-CJ4+)_B{aewpYBgSrP z@%^r5gF%+>R1Ufs`&X0Uy}N&{A7ZQ0_%EIX+xqz<7U#(vFyaPn@R4N#JtcRQZ&t9j zR9CRZwB<_WTTrkJI%pjP@=G)Gj{he><|xpAt4K^~Ke7lNg){&>fFgmfeQ=;mbLs93ehzcaYgi8E%{t;Rceitm(k1z1S}=;_{Ab>@qPlP_0y^se%GHo%0gSO+ zm@J2(#mr(HbUeS>(hR2Y_Yf5#nGnH5AiT!XLl0mG@|MWI@98Q^xZgzB4_!Zl2I;?< z;|$m4iRF-f-hCz|8?O;xI^Y%AhVhetHA;cHNN^{Fcpu!Ouy~4oN)$P+YJYq4(J0o) zONX_8!-JYV<3Fe$naClX;Zp~4Fre{a{*dX|O3GW8-xR*uO#ML&6;-|CP1yCKc;*&DUMjQAkX<_gD`0!AN1-S4 z%?@UwgOJ$aKuqAR%VvwM#W2|(%BKD~Y-r6z+S+rmbSK_Il#kY66J3x|D4pj7zlWt6lUa4`$xb&}(8AiRj)+C}I6NcJDiM?mUfXAJ#;O zqh;EoYy8gtV;#a$^&L6xi_e~JM;@S3X$bfj7E?2k~)wah^XjNAlL_|3F3dK}A|AQR0EZU2oQIkGXnh~-MN%kMoq46UC}i~hw^w!1L-$t%fa>3o_;39b2(j}4;^VhBAJ_J3(u_t! zUf!3L2j4jV!xZQ*9GJNyhMO@KRZeoq1hS$LyHlfsyM*=R{cKrrpRM%6d>mLw-aSTk z^a{>XA-*Fhtbg0u@SwJj<(9VtzdBv#Xr4<(G-AsReSq6-)8+oC+ekNYv+h)IrIl0m z(yz$Fui1($!>!6-@qj|h+%os+U3+j#;nOz)ALT9R>243(D`!q6(} z+#01TxiiuJ@n2Y{uGjGzje1j_nRkEQ&Qh@o>@xljNjUa?IPC~MkG3d@zi zW%{FDT9(vaU83U)7vH90%X#Fo6jA?etb-2sH$b28r_=ljzRi)iKbbMc@wj{#Y^h5L%Zjr*r+F)m zl46bS!3*rmYY8M^;rR?CtPlx0R2m0M-q4T^-2psdYFuu{(6KJ~I<flosG$zs$YjISpLyI_qB#%^61{Vw$A+9T4w9x{Q9YSOue0fIr&M6g!y_*PN zjj4WC^k=Xhx%z@UI&6~Xs=$BtdQ-TV8F~^6ERG6wjPfZ#+f~#;(s?Y^4yj(2!Z+D* znNlRA4B~}>q1mLL;DNtfbWBf8PLQ$uCRZ$V;V1%_U}7F3&vfEy5L@jlxPyzOm22FN z9lVvFZSC9lOgp8c<)T*U7N$SO6LCTsrLJHJhHQrH$8|C>dJ6YryhazGU4b*Z#*}`o?Ff_OCEBeReJ)EC(=6m3U)qatxb8EKo@vW zG;*&0AO?irUuG=COa3dg7AcapJRn5_K1<`YLEjapA1lZ-n>O1_a|C^0%OP*4G@tif zE6d5GetjQATK6YAZj)GDOc88ofdYg#{Cc8%~>^k$9mmnee-{O!ewhNSxj&)X-sfe`_GQ>G2$!V(ZTUNV@X|@XG8kE zef}Yvx^EcFOe~1pU4Q2PY|2-qu{mzgjm(rUpoy$d@#q_#k7s;eLmy?9B0SmCh3dkphQ&6WKp6D3dVD9 zTE83T)RJ;Y#e&FV^ia;GnXiCFV+U@%ZY=dl6TW`_R({6f>x(My#k6_x#ClSB5S$4! zF`^x;d~sl*SKxqLYnwrGd)O6JZEm$j45I&}kMxBaHtaBo1N+p@+l3sflO5uATALZ& z%>Q#g_mhhV{$0R^CUy`3HS1|*&)lHlK2fW=gH%}5oGp%JTvh)3EnD3`W3{d~D9?)S;cf#ys>Eux z)t(q;n)T9AM-$*d=p*HxfU*seGpMM;KJmZh@R);qu`IbDX2jjVvcY8a4h=duUc@?8 z9qO_lVv(b988U9}QBj%W4T#Aw!yvNg}gtO!() zMkfRf%pC6yu_@;ej#4p4Kk+L5lqMg>x@*ghHh?`$uhLXZpJsV~x` VkBh58pcU%?IVokyDshv*{{uJK@I?Rs literal 0 HcmV?d00001 diff --git a/InscryptionAPI/Card/CardExtensions.cs b/InscryptionAPI/Card/CardExtensions.cs index bdbcf3f5..dd8dcebf 100644 --- a/InscryptionAPI/Card/CardExtensions.cs +++ b/InscryptionAPI/Card/CardExtensions.cs @@ -412,4 +412,5 @@ public static CardInfo RemoveCardMetaCategories(this CardInfo info, params CardM public static bool ModPrefixIs(this CardInfo info, string prefixToMatch) => info.GetExtendedProperty("ModPrefix") == prefixToMatch; #endregion + } diff --git a/InscryptionAPI/Card/OpponentGemsPatches.cs b/InscryptionAPI/Card/OpponentGemsPatches.cs index c20af144..a65a3117 100644 --- a/InscryptionAPI/Card/OpponentGemsPatches.cs +++ b/InscryptionAPI/Card/OpponentGemsPatches.cs @@ -39,30 +39,34 @@ private static IEnumerator UpdateGemsOnHookGrab(IEnumerator enumerator) private static IEnumerator GainGemsForOpponents(IEnumerator enumerator, GainGem __instance) { yield return enumerator; - if (__instance.Card.OpponentCard && Singleton.Instance != null) - Singleton.Instance.AddGem(__instance.Gem); + if (__instance != null && __instance.Card != null) + if (__instance.Card.OpponentCard && Singleton.Instance != null) + Singleton.Instance.AddGem(__instance.Gem); } [HarmonyPostfix, HarmonyPatch(typeof(GainGem), nameof(GainGem.OnDie))] private static IEnumerator LoseGemsForOpponents(IEnumerator enumerator, GainGem __instance) { yield return enumerator; - if (__instance.Card.OpponentCard && Singleton.Instance != null) - Singleton.Instance.LoseGem(__instance.Gem); + if (__instance != null && __instance.Card != null) + if (__instance.Card.OpponentCard && Singleton.Instance != null) + Singleton.Instance.LoseGem(__instance.Gem); } [HarmonyPostfix, HarmonyPatch(typeof(GainGemTriple), nameof(GainGemTriple.OnResolveOnBoard))] private static IEnumerator GainTripleGemsForOpponents(IEnumerator enumerator, GainGemTriple __instance) { yield return enumerator; - if (__instance.Card.OpponentCard && Singleton.Instance) - Singleton.Instance.AddGems(GemType.Green, GemType.Orange, GemType.Blue); + if (__instance != null && __instance.Card != null) + if (__instance.Card.OpponentCard && Singleton.Instance) + Singleton.Instance.AddGems(GemType.Green, GemType.Orange, GemType.Blue); } [HarmonyPostfix, HarmonyPatch(typeof(GainGemTriple), nameof(GainGemTriple.OnDie))] private static IEnumerator LoseTripleGemsForOpponents(IEnumerator enumerator, GainGemTriple __instance) { yield return enumerator; - if (__instance.Card.OpponentCard && Singleton.Instance != null) - Singleton.Instance.LoseGems(GemType.Green, GemType.Orange, GemType.Blue); + if (__instance != null && __instance.Card != null) + if (__instance.Card.OpponentCard && Singleton.Instance != null) + Singleton.Instance.LoseGems(GemType.Green, GemType.Orange, GemType.Blue); } [HarmonyTranspiler, HarmonyPatch(typeof(DiskRenderStatsLayer), nameof(DiskRenderStatsLayer.RenderCard))] diff --git a/InscryptionAPI/Encounters/SpecialSequenceManager.cs b/InscryptionAPI/Encounters/SpecialSequenceManager.cs index e1396663..a42ba506 100644 --- a/InscryptionAPI/Encounters/SpecialSequenceManager.cs +++ b/InscryptionAPI/Encounters/SpecialSequenceManager.cs @@ -11,7 +11,6 @@ public class FullSpecialSequencer { public readonly string Id; - private Type _specialSequencer; public Type SpecialSequencer { get; private set; } public FullSpecialSequencer(string id, Type specialSequencer) diff --git a/InscryptionAPI/Helpers/TextureHelper.cs b/InscryptionAPI/Helpers/TextureHelper.cs index 742e1e45..0502a611 100644 --- a/InscryptionAPI/Helpers/TextureHelper.cs +++ b/InscryptionAPI/Helpers/TextureHelper.cs @@ -1,3 +1,4 @@ +using System.Collections.ObjectModel; using BepInEx; using DiskCardGame; using HarmonyLib; @@ -424,4 +425,104 @@ public static Texture2D DuplicateTexture(Texture2D texture) return myTexture2D; } + + #region CustomAppearences + + ///

+ /// All Base Game Custom Appearance Items, these are handled by mods themselves, not by us. + /// + internal static Dictionary BaseGameCustomAppearances = new Dictionary(); + /// + /// All Base Game Custom Appearance Items, these are handled by mods themselves, not by us. This version is exposed publicly. + /// + public static ReadOnlyCollection> BaseGameCustomAppearancesPublic => new ReadOnlyCollection>(BaseGameCustomAppearances.ToList()); + /// + /// All Modded Custom Appearance Items, these are handled by mods themselves, not by us. + /// + internal static Dictionary ModdedCustomAppearancesDictionary = new Dictionary(); + /// + /// All Modded Custom Appearance Items, these are handled by mods themselves, not by us. This version is exposed publicly. + /// + public static ReadOnlyCollection> ModdedCustomAppearancesDictionaryPublic => new ReadOnlyCollection>(ModdedCustomAppearancesDictionary.ToList()); + /// + /// All Custom Appearance Items, these are handled by mods themselves, not by us. This version is exposed publicly. + /// + public static ReadOnlyCollection> CombinedCustomAppearancesDictionaryPublic => new ReadOnlyCollection>(BaseGameCustomAppearancesPublic.Concat(ModdedCustomAppearancesDictionary).ToList()); + + /// + /// Initializes the Base Game Custom Appearances List + /// + internal static void InstantiateBaseGameCustomAppearances() + { + BaseGameCustomAppearances.Add("CardDecal_Blood1", GetImageAsTexture("decal_blood_1.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Blood2", GetImageAsTexture("decal_blood_2.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Blood3", GetImageAsTexture("decal_blood_3.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Blood4", GetImageAsTexture("decal_blood_4.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Child", GetImageAsTexture("decal_child.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Fungus", GetImageAsTexture("decal_fungus.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Smoke", GetImageAsTexture("decal_smoke.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_SmokeAbilityHole", GetImageAsTexture("decal_smoke_abilityhole.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Snelk1", GetImageAsTexture("decal_snelk_1.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Snelk2", GetImageAsTexture("decal_snelk_2.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Snelk3", GetImageAsTexture("decal_snelk_3.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Snelk4", GetImageAsTexture("decal_snelk_4.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Snelk5", GetImageAsTexture("decal_snelk_5.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Snelk6", GetImageAsTexture("decal_snelk_6.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_SnelkMain", GetImageAsTexture("decal_snelk_main.png", InscryptionAPIPlugin.APIAssembly)); + BaseGameCustomAppearances.Add("CardDecal_Stitches", GetImageAsTexture("decal_stitches.png", InscryptionAPIPlugin.APIAssembly)); + } + + /// + /// Utilize this function to add your Custom Appearance Into the Public Dictionaries. + /// + /// + /// The GUID representing the mod in which the Appearance Came from. + /// A tuple representing the Appearence we want to add to the Dictionary. + /// We error if any of the passed in fields are Null, and for strings if they are Whitespace as well. + public static void AddCustomAppearanceToDictionary(string type, string GUID, (string name, Texture2D texture2D)[] appearancesToAdd) + { + foreach ((string name, Texture2D texture2D) in appearancesToAdd) + { + if (texture2D != null && (!name.IsNullOrWhiteSpace() && !type.IsNullOrWhiteSpace() && !GUID.IsNullOrWhiteSpace())) + { + ModdedCustomAppearancesDictionary.Add(type + "_" + GUID + "_" + name, texture2D); + } + else + { + InscryptionAPIPlugin.Logger.LogError($"Failed to add KVP {type + "_" + GUID + "_" + name} to dictionary."); + if (texture2D == null) + { + InscryptionAPIPlugin.Logger.LogError($"Texture2D associated with {type + "_" + GUID + "_" + name} was null."); + InscryptionAPIPlugin.Logger.LogError($"Ensure you are passing a non-null Texture2D."); + } + if (name.IsNullOrWhiteSpace()) + { + InscryptionAPIPlugin.Logger.LogError($"Name ({name}) associated with {type + "_" + GUID + "_" + name} was null."); + InscryptionAPIPlugin.Logger.LogError($"Ensure you are passing a non-null or empty name."); + } + if (type.IsNullOrWhiteSpace()) + { + InscryptionAPIPlugin.Logger.LogError($"Type ({type}) associated with {type + "_" + GUID + "_" + name} was null."); + InscryptionAPIPlugin.Logger.LogError($"Ensure you are passing a non-null or empty type."); + } + if (GUID.IsNullOrWhiteSpace()) + { + InscryptionAPIPlugin.Logger.LogError($"GUID ({GUID}) associated with {type + "_" + GUID + "_" + name} was null."); + InscryptionAPIPlugin.Logger.LogError($"Ensure you are passing a non-null or empty GUID."); + } + } + } + } + + /// + /// A function that gets a Dictionary of all Custom Appearances associated with the passed in Type. + /// + /// A unique identifier in which you want to get a list of textures that are instantiated with. For example CardDecal for a Card's Decal. + /// The results of with the check of x.Key.StartsWith(type). We return in the form of a new containing KVPs from . + public static Dictionary GetCustomAppearanceTypeFromDictionary(string type) + { + return CombinedCustomAppearancesDictionaryPublic.Where(x => x.Key.StartsWith(type)).ToDictionary(x => x.Key, x => x.Value); + } + + #endregion } diff --git a/InscryptionAPI/InscryptionAPI.csproj b/InscryptionAPI/InscryptionAPI.csproj index 27de0776..84e11198 100644 --- a/InscryptionAPI/InscryptionAPI.csproj +++ b/InscryptionAPI/InscryptionAPI.csproj @@ -1,25 +1,62 @@ - - netframework4.7.2 + netframework4.7.2 + win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm64;osx-x64;osx-arm64 + InscryptionAPI + The Core API for the game Inscryption. + 2.24.2 + Cyantist, IngoH, WhistleWind, Chaosyr and Contibutors + true + Latest + InscryptionAPI + full + $(NoWarn);AD0001;CS0612;CS8604;CS0252;CS0618;Harmony003;Publicizer001 enable disable false - latest - true - full + true + false + false + true false true - 2.24.1 - - - - $(NoWarn);AD0001;CS0612;CS8604;CS0252;CS0618;Harmony003;Publicizer001 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,4 +77,20 @@ + + + + + + + + + + + + + + + + diff --git a/InscryptionAPI/InscryptionAPIPlugin.cs b/InscryptionAPI/InscryptionAPIPlugin.cs index fc46d62d..db70334a 100644 --- a/InscryptionAPI/InscryptionAPIPlugin.cs +++ b/InscryptionAPI/InscryptionAPIPlugin.cs @@ -18,6 +18,7 @@ using InscryptionAPI.Totems; using System.Reflection; using System.Runtime.CompilerServices; +using InscryptionAPI.Helpers; [assembly: InternalsVisibleTo("Assembly-CSharp")] [assembly: InternalsVisibleTo("Assembly-CSharp.APIPatcher.mm")] @@ -69,6 +70,7 @@ private void OnEnable() { Logger = base.Logger; Directory = Path.GetDirectoryName(Info.Location); + TextureHelper.InstantiateBaseGameCustomAppearances(); HarmonyInstance.PatchAll(InscryptionAPIPlugin.APIAssembly); } diff --git a/InscryptionAPI/Localizing/LocalizationManager.cs b/InscryptionAPI/Localizing/LocalizationManager.cs index 269104ad..3e61d3c1 100644 --- a/InscryptionAPI/Localizing/LocalizationManager.cs +++ b/InscryptionAPI/Localizing/LocalizationManager.cs @@ -50,7 +50,6 @@ public enum FontReplacementType public static Action OnLanguageLoaded = null; private static List AlreadyLoadedLanguages = new(); - private static bool FontReplacementDataInitialized = false; private static List TemporaryFontReplacements = new(); static LocalizationManager() diff --git a/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj b/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj index 611bf61a..64344fb5 100644 --- a/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj +++ b/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj @@ -1,19 +1,25 @@ - - netframework4.7.2 + netframework4.7.2 + win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm64;osx-x64;osx-arm64 + InscryptionCommunityPatch + The Community Patches For Inscryption which fixes a ton of bugs with the underlying game and adds some new functionality to it. + 2.24.2 + Cyantist, IngoH, WhistleWind, Chaosyr and Contibutors + true + Latest + InscryptionCommunityPatch + full + $(NoWarn);AD0001;CS0612;CS8604;CS0252;CS0618;Harmony003;Publicizer001 enable disable false - latest - true - full + true + false + false + true false - 2.24.0 - - - - $(NoWarn);AD0001;CS0612;CS8604;CS0252;CS0618;Harmony003;Publicizer001 + true @@ -35,4 +41,15 @@ + + + + + + + + + + + From 48a0835662196ceec18c0054ca28a38022e866e6 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Wed, 30 Sep 2026 22:21:21 -0400 Subject: [PATCH 04/28] Update thunderstore.toml * Copy over PDB and XML associated with out DLLs to the Output. * Update BepInEx dependency. --- thunderstore.toml | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/thunderstore.toml b/thunderstore.toml index 7daa74f9..4c6e9042 100644 --- a/thunderstore.toml +++ b/thunderstore.toml @@ -4,13 +4,13 @@ schemaVersion = "0.0.1" [package] namespace = "API_dev" name = "API" -versionNumber = "2.15.2" +versionNumber = "2.24.2" description = "The de-facto standard core API for all Inscryption mods. This lets you create new cards, abilities, challenges, map nodes, starter decks, and more." websiteUrl = "https://github.com/InscryptionModding/InscryptionAPI/" containsNsfwContent = false [package.dependencies] -BepInEx-BepInExPack_Inscryption = "5.4.1902" +BepInEx-BepInExPack_Inscryption = "5.4.2305" BepInEx-MonoMod_Loader_Inscryption = "1.0.0" [build] @@ -22,14 +22,38 @@ outdir = "./build" source = "InscryptionAPI/bin/Release/InscryptionAPI.dll" target = "plugins/InscryptionAPI.dll" +[[build.copy]] +source = "InscryptionAPI/bin/Release/InscryptionAPI.pdb" +target = "plugins/InscryptionAPI.pdb" + +[[build.copy]] +source = "InscryptionAPI/bin/Release/InscryptionAPI.xml" +target = "plugins/InscryptionAPI.xml" + [[build.copy]] source = "APIPatcher/bin/Release/Assembly-CSharp.APIPatcher.mm.dll" target = "monomod/Assembly-CSharp.APIPatcher.mm.dll" +[[build.copy]] +source = "APIPatcher/bin/Release/Assembly-CSharp.APIPatcher.mm.pdb" +target = "monomod/Assembly-CSharp.APIPatcher.mm.pdb" + +[[build.copy]] +source = "APIPatcher/bin/Release/Assembly-CSharp.APIPatcher.mm.xml" +target = "monomod/Assembly-CSharp.APIPatcher.mm.xml" + [[build.copy]] source = "InscryptionCommunityPatch/bin/Release/InscryptionCommunityPatch.dll" target = "plugins/InscryptionCommunityPatch.dll" +[[build.copy]] +source = "InscryptionCommunityPatch/bin/Release/InscryptionCommunityPatch.pdb" +target = "plugins/InscryptionCommunityPatch.pdb" + +[[build.copy]] +source = "InscryptionCommunityPatch/bin/Release/InscryptionCommunityPatch.xml" +target = "plugins/InscryptionCommunityPatch.xml" + [publish] repository = "https://inscryption.thunderstore.io" communities = ["inscryption"] From ce8e0b9c0bae049f2b665d1b97126d82fb8e523a Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Wed, 30 Sep 2026 22:29:58 -0400 Subject: [PATCH 05/28] Update Thunderstore.toml * Copy over License and Changelog in Builds. * Renamed LICENSE to LICENSE.md --- LICENSE => LICENSE.md | 0 thunderstore.toml | 8 ++++++++ 2 files changed, 8 insertions(+) rename LICENSE => LICENSE.md (100%) diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/thunderstore.toml b/thunderstore.toml index 4c6e9042..d3fa3b21 100644 --- a/thunderstore.toml +++ b/thunderstore.toml @@ -54,6 +54,14 @@ target = "plugins/InscryptionCommunityPatch.pdb" source = "InscryptionCommunityPatch/bin/Release/InscryptionCommunityPatch.xml" target = "plugins/InscryptionCommunityPatch.xml" +[[build.copy]] +source = "CHANGELOG.md" +target = "CHANGELOG.md" + +[[build.copy]] +source = "LICENSE.md" +target = "LICENSE.md" + [publish] repository = "https://inscryption.thunderstore.io" communities = ["inscryption"] From 0bd72f896cb4bb01413d612a9f12c42b001d5d73 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 2 Oct 2026 20:31:59 -0400 Subject: [PATCH 06/28] XML Docs Part I, Rename Internal Config Keys * First batch of work on the XML Documentation. * Add a Saftey Check for Instantiating the Base Game Custom Appearences Dict. * Rename Internal Configuration Key Names, namely in Community Patch to reflect their functionality. * Updated Internal Code Versions to 2.24.2 --- APIPatcher/ScriptableObjectLoader.cs | 7 + APIPatcher/Singleton.cs | 13 ++ InscryptionAPI/Costs/CardCostManager.cs | 2 +- InscryptionAPI/InscryptionAPIPlugin.cs | 108 +++++++-- InscryptionAPI/Items/ConsumableItemManager.cs | 4 +- InscryptionAPI/Totems/TotemManager.cs | 8 +- .../Card/ActivatedAbilityHandler3D.cs | 2 +- .../Card/ActivatedAbilityIconFix.cs | 4 +- .../Card/ActivatedAbilityIconInteractable.cs | 2 +- InscryptionCommunityPatch/Card/ArtPatches.cs | 2 +- .../Card/CardCostRender.cs | 10 +- .../Card/MergedSigilOnBottom.cs | 10 +- .../Card/MissingSquirrelTribeIconFix.cs | 2 +- .../Card/Part1CostEmissionMaskRender.cs | 2 +- .../Card/Part2CardCostRender.cs | 2 +- .../Card/StackAbilityIcons.cs | 8 +- .../Act1LatchAbilityFix.cs | 4 +- .../Act2ShapeshifterPatches.cs | 4 +- .../SentryInteractionFixes.cs | 2 +- .../SentryPackMuleFixes.cs | 4 +- .../InscryptionCommunityPatchPlugin.cs | 207 +++++++++++++----- .../PixelTutor/PixelPlayableCardArray.cs | 2 +- .../ResourceManagers/ActOneEnergyDrone.cs | 12 +- .../Sequencers/BuyPeltsSmallTags.cs | 6 +- .../Sequencers/CardStatBoostSequencerPatch.cs | 2 +- .../Sequencers/LeshyResetRedEyes.cs | 2 +- .../Tests/TestCommunityPatches.cs | 2 +- 27 files changed, 305 insertions(+), 128 deletions(-) diff --git a/APIPatcher/ScriptableObjectLoader.cs b/APIPatcher/ScriptableObjectLoader.cs index 3c67a6dc..66c6beab 100644 --- a/APIPatcher/ScriptableObjectLoader.cs +++ b/APIPatcher/ScriptableObjectLoader.cs @@ -3,9 +3,16 @@ namespace APIPatcher; +/// +/// Uses MonoMod to patch Unity's ScriptableObjectLoader to also use our version of the ScriptableObjectLoader seen in the Inscryption API itself. +/// +/// [MonoModPatch("global::ScriptableObjectLoader`1")] internal class patch_ScriptableObjectLoader : ScriptableObjectLoader where T : UnityObject { + /// + /// A List of AllData used within the overarching system, e.g. a List of . + /// new public static List AllData { get diff --git a/APIPatcher/Singleton.cs b/APIPatcher/Singleton.cs index ce178f8a..1291c79f 100644 --- a/APIPatcher/Singleton.cs +++ b/APIPatcher/Singleton.cs @@ -4,9 +4,16 @@ namespace APIPatcher; +/// +/// Uses MonoMod to patch the Singleton for later usability by the Inscryption API. +/// +/// A ManagedBehaviour associated with the Singleton System. [MonoModPatch("global::Singleton`1")] internal class patch_Singleton : Singleton where T : ManagedBehaviour { + /// + /// A simple function used to Find a Specified UnityObject of the specified Type within the Active Scene, if it fails it tosses a Warning. + /// new protected static void FindInstance() { if (m_Instance == null) @@ -21,7 +28,13 @@ internal class patch_Singleton : Singleton where T : ManagedBehaviour } } +/// +/// A simple class object for singletons in correlation with the API. +/// internal static class Singleton { + /// + /// A ManualLogSource specifically for logging issues related to Singletons. + /// internal static readonly ManualLogSource SingletonLogSource = Logger.CreateLogSource("Singleton"); } diff --git a/InscryptionAPI/Costs/CardCostManager.cs b/InscryptionAPI/Costs/CardCostManager.cs index 7af707a3..743ca780 100644 --- a/InscryptionAPI/Costs/CardCostManager.cs +++ b/InscryptionAPI/Costs/CardCostManager.cs @@ -663,7 +663,7 @@ private static void GenerateCustomCostChoices(ref List __result, int while (list.Count > 3) list.RemoveAt(SeededRandom.Range(0, list.Count, randomSeed++)); - if (InscryptionAPIPlugin.configRandomChoiceOrder.Value) + if (InscryptionAPIPlugin.configRandomCostChoiceOrder.Value) list = list.Randomize().ToList(); __result = list; diff --git a/InscryptionAPI/InscryptionAPIPlugin.cs b/InscryptionAPI/InscryptionAPIPlugin.cs index db70334a..d3ea1adb 100644 --- a/InscryptionAPI/InscryptionAPIPlugin.cs +++ b/InscryptionAPI/InscryptionAPIPlugin.cs @@ -19,6 +19,7 @@ using System.Reflection; using System.Runtime.CompilerServices; using InscryptionAPI.Helpers; +using Sirenix.Utilities; [assembly: InternalsVisibleTo("Assembly-CSharp")] [assembly: InternalsVisibleTo("Assembly-CSharp.APIPatcher.mm")] @@ -26,29 +27,65 @@ namespace InscryptionAPI; +/// +/// The Entry Point to the Inscryption API. +/// [BepInPlugin(ModGUID, ModName, ModVer)] [HarmonyPatch] public class InscryptionAPIPlugin : BaseUnityPlugin { + /// + /// The GUID for the Inscryption API, if you depend on this API you'll want to load after it in Awake() or, anywhere before Start(). + /// public const string ModGUID = "cyantist.inscryption.api"; - public const string ModName = "InscryptionAPI"; - public const string ModVer = "2.24.1"; - + /// + /// This is the Inscryption API's Internal Name, prefer identifying this API with the GUID. + /// + internal const string ModName = "InscryptionAPI"; + /// + /// This is the Version of the Inscryption API you are using. + /// + internal const string ModVer = "2.24.2"; + + /// + /// The Inscryption API's Location as a Directory. + /// public static string Directory = ""; + /// + /// The API's Assembly for Internal Reference. + /// internal static Assembly APIAssembly { get; private set; } = null; - internal static ConfigEntry configOverrideArrows; - internal static ConfigEntry configRandomChoiceOrder; - internal static ConfigEntry configHideAct1BossScenery; - internal static ConfigEntry configCustomTotemTopTypes; - internal static ConfigEntry configCustomItemTypes; - + /// + /// The Configuration for Overriding the Arrows within Kaycee's Mod Menu's. + /// + public static ConfigEntry configOverrideArrows; + /// + /// The Configuration for determining whether the Order of Costs in a Cost Choice Node should be Randomized. + /// + public static ConfigEntry configRandomCostChoiceOrder; + /// + /// The Configuration for determining whether the Boss Scenery of Act 1/KCM should be hidden. + /// + public static ConfigEntry configHideAct1BossScenery; + /// + /// This Configuration is used for determining what Totem Top Model should be used in game. + /// + internal static ConfigEntry configCustomTotemTopModelSelection; + /// + /// This Configuration is used for determining what Item Model should be used in game. + /// + internal static ConfigEntry configCustomItemModelSelection; + + /// + /// Prevents API 1.0.0 Versions from Loaing. + /// static InscryptionAPIPlugin() { AppDomain.CurrentDomain.AssemblyResolve += static (_, e) => { - if (e.Name.StartsWith("API, Version=1")) + if (e.Name.StartsWith("API, Version=1") || e.Name.StartsWith("Cardloader, Version=1")) { return APIAssembly ??= typeof(InscryptionAPIPlugin).Assembly; } @@ -56,30 +93,52 @@ static InscryptionAPIPlugin() }; } + /// + /// Our API's Internal Logger. + /// new internal static ManualLogSource Logger; - + /// + /// Our API's Internal Harmony Instance. + /// private readonly Harmony HarmonyInstance = new(ModGUID); + /// + /// An event of resembling the Scriptable Object Loader Load call. + /// public static event Action ScriptableObjectLoaderLoad; + /// + /// A simple internal function that invokes our previously typified Action for Loading the ScriptableObjectLoader. + /// + /// The Type in which to pass to the ScriptableObjectLoader. internal static void InvokeSOLEvent(Type type) { ScriptableObjectLoaderLoad?.Invoke(type); } + /// + /// The following runs when the API is enabled by Unity. + /// private void OnEnable() { Logger = base.Logger; Directory = Path.GetDirectoryName(Info.Location); - TextureHelper.InstantiateBaseGameCustomAppearances(); + if (TextureHelper.BaseGameCustomAppearancesPublic.IsNullOrEmpty()) + TextureHelper.InstantiateBaseGameCustomAppearances(); HarmonyInstance.PatchAll(InscryptionAPIPlugin.APIAssembly); } + /// + /// The following runs when the API is diabled by Unity. + /// private void OnDisable() { HarmonyInstance.UnpatchSelf(); } + /// + /// The following is used to Resync the API's many lists, e.g. , , , , , , , + /// internal static void ResyncAll() { CardManager.SyncCardList(); @@ -92,6 +151,9 @@ internal static void ResyncAll() RuleBookManager.SyncRuleBookList(); } + /// + /// A function we use to check when a plugin is using an Outdated version of the API, if they do we log them with a Warning about it. + /// internal static void CheckForOutdatedPlugins() { string outdatedPlugins = ""; @@ -111,16 +173,22 @@ internal static void CheckForOutdatedPlugins() + outdatedPlugins + "\nThese mods may not work correctly. If problems arise, please update or disable them!"); } + /// + /// This is our API's Initializer, we primarily use it to set the internal APIAssembly and create the Configurations to the Configuration File. + /// private void Awake() { APIAssembly ??= typeof(InscryptionAPIPlugin).Assembly; - configCustomTotemTopTypes = Config.Bind("Totems", "Top Types", TotemManager.TotemTopState.CustomTribes, "If Vanilla, don't change totem tops; if CustomTribes, added custom tribes will use custom totem tops; if AllTribes then all totem tops will use a custom top."); - configCustomItemTypes = Config.Bind("Items", "Types", ConsumableItemManager.ConsumableState.Custom, "If Vanilla, only vanilla items will be used; if Custom, added custom items will use custom models; if All then all items will use a custom model."); + configCustomTotemTopModelSelection = Config.Bind("Totems", "Top Types", TotemManager.TotemTopState.CustomTribes, "If Vanilla, don't change totem tops; if CustomTribes, added custom tribes will use custom totem tops; if AllTribes then all totem tops will use a custom top."); + configCustomItemModelSelection = Config.Bind("Items", "Types", ConsumableItemManager.ConsumableState.Custom, "If Vanilla, only vanilla items will be used; if Custom, added custom items will use custom models; if All then all items will use a custom model."); configOverrideArrows = Config.Bind("Menus", "Override Arrows", false, "When true, forces the challenge screen arrows to appear at the top of the screen instead of the sides."); - configRandomChoiceOrder = Config.Bind("Miscellaneous", "Randomise Cost Choice Order", false, "When true, randomises the order card cost choices are presented in Act 1."); + configRandomCostChoiceOrder = Config.Bind("Miscellaneous", "Randomise Cost Choice Order", false, "When true, randomises the order card cost choices are presented in Act 1."); configHideAct1BossScenery = Config.Bind("Optimization", "Hide Act 1 Scenery", false, "When true bosses will not spawn their scenery. (eg: Prospector's trees) This can improve performance on low-end machines."); } + /// + /// This is the API's second phase of Initialization, ran after all Awake() calls complete. If you need something both after Awake() and before Start() refer to JSONLoader3's Phase System. + /// private void Start() { CheckForOutdatedPlugins(); @@ -131,13 +199,12 @@ private void Start() CardManager.AuditCardList(); PixelCardManager.Initialise(); PeltManager.CreateDialogueEvents(); - //if (!DialogueManager.CustomDialogue.Exists(x => x.DialogueEvent.id == "Hint_NotEnoughSameColourGemsHint")) - //{ - - //} Logger.LogDebug($"Inserted {DialogueManager.CustomDialogue.Count} dialogue event(s)!"); } + /// + /// This patches the Kaycee's Mod Menu to resync all Cards and Abilities when entering the run itself before Kaycee's mod transitions you into the run itself.. + /// [HarmonyPatch(typeof(AscensionMenuScreens), nameof(AscensionMenuScreens.TransitionToGame))] [HarmonyPrefix] private static void SyncCardsAndAbilitiesWhenTransitioningToAscensionGame() @@ -145,6 +212,9 @@ private static void SyncCardsAndAbilitiesWhenTransitioningToAscensionGame() ResyncAll(); } + /// + /// This patches the Main Menu to resync all Cards and Abilities when entering any part of the base game, before the Menu handles the transition. + /// [HarmonyPatch(typeof(MenuController), nameof(MenuController.TransitionToGame))] [HarmonyPrefix] private static void SyncCardsAndAbilitiesWhenTransitioningToGame() diff --git a/InscryptionAPI/Items/ConsumableItemManager.cs b/InscryptionAPI/Items/ConsumableItemManager.cs index a54a17bb..9922bf71 100644 --- a/InscryptionAPI/Items/ConsumableItemManager.cs +++ b/InscryptionAPI/Items/ConsumableItemManager.cs @@ -238,7 +238,7 @@ internal static void Initialize() if (!allFullItemDatas.Exists(x => x.itemData == itemData)) allFullItemDatas.Add(new(itemData)); } - if (InscryptionAPIPlugin.configCustomItemTypes.Value == ConsumableState.Vanilla) + if (InscryptionAPIPlugin.configCustomItemModelSelection.Value == ConsumableState.Vanilla) { // Don't change any items! return; @@ -258,7 +258,7 @@ internal static void Initialize() } // Override vanilla items - if (InscryptionAPIPlugin.configCustomItemTypes.Value == ConsumableState.All) + if (InscryptionAPIPlugin.configCustomItemModelSelection.Value == ConsumableState.All) { // Change all base items to use the fallback model! foreach (ConsumableItemData data in baseConsumableItemsDatas) diff --git a/InscryptionAPI/Totems/TotemManager.cs b/InscryptionAPI/Totems/TotemManager.cs index 12693a05..9a2469c9 100644 --- a/InscryptionAPI/Totems/TotemManager.cs +++ b/InscryptionAPI/Totems/TotemManager.cs @@ -24,7 +24,7 @@ private class ItemsUtil_AllConsumables { public static IEnumerable Transpiler(IEnumerable instructions) { - if (InscryptionAPIPlugin.configCustomTotemTopTypes.Value == TotemTopState.Vanilla) + if (InscryptionAPIPlugin.configCustomTotemTopModelSelection.Value == TotemTopState.Vanilla) return instructions; // === We want to turn this @@ -114,7 +114,7 @@ private static bool Prefix(TotemTopData data, ref GameObject __result) __result = customTribeTotem?.Prefab ?? defaultTotemTop.Prefab; return false; } - else if (InscryptionAPIPlugin.configCustomTotemTopTypes.Value == TotemTopState.AllTribes) + else if (InscryptionAPIPlugin.configCustomTotemTopModelSelection.Value == TotemTopState.AllTribes) { __result = defaultTotemTop.Prefab; return false; @@ -148,7 +148,7 @@ private static bool Prefix(TotemTopData __instance, ref string __result) return false; } } - else if (InscryptionAPIPlugin.configCustomTotemTopTypes.Value == TotemTopState.AllTribes) + else if (InscryptionAPIPlugin.configCustomTotemTopModelSelection.Value == TotemTopState.AllTribes) { // All non-custom tribes will use the fallback model __result = CustomTotemTopID; @@ -308,7 +308,7 @@ private static void InitializeDefaultTotemTop() private static void Initialize() { // Don't change any totems! - if (InscryptionAPIPlugin.configCustomTotemTopTypes.Value == TotemTopState.Vanilla) + if (InscryptionAPIPlugin.configCustomTotemTopModelSelection.Value == TotemTopState.Vanilla) return; if (defaultTotemTop == null) diff --git a/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs b/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs index 71126799..54d0c31b 100644 --- a/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs +++ b/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs @@ -40,7 +40,7 @@ public void UpdateInteractableList(List controllerActiv } }); - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"[Handler3D] Updated interactable list: [{interactables.Join(interactable => $"GO [{interactable.gameObject}] Ability [{interactable.Ability}]")}]"); } diff --git a/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs b/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs index c6289e4f..37e43409 100644 --- a/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs +++ b/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs @@ -30,7 +30,7 @@ private static void FixActivatedAbilitiesOnAnyChange(ref PlayableCard __instance if (abilityHandler3D.SafeIsUnityNull()) { - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"[PlayableCard.OnStatsChanged] Adding activated ability handler to card [{__instance.Info.displayedName}]"); abilityHandler3D = __instance.gameObject.AddComponent(); @@ -38,7 +38,7 @@ private static void FixActivatedAbilitiesOnAnyChange(ref PlayableCard __instance if (!abilityHandler3D.SafeIsUnityNull() && __instance.AbilityIcons.abilityIcons != null) { - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"[PlayableCard.OnStatsChanged] -> Resetting icon list for [{__instance.Info.displayedName}]"); abilityHandler3D.UpdateInteractableList(__instance.AbilityIcons.abilityIcons); diff --git a/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs b/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs index ae6961bd..66c3b3a1 100644 --- a/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs +++ b/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs @@ -33,7 +33,7 @@ private void Start() public void AssignAbility(Ability ability) { - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"Icon was previously {Ability} - asking to change to a {ability}"); Ability = ability; _renderMaterial = GetComponent().material; diff --git a/InscryptionCommunityPatch/Card/ArtPatches.cs b/InscryptionCommunityPatch/Card/ArtPatches.cs index ec5a0482..0c680a75 100644 --- a/InscryptionCommunityPatch/Card/ArtPatches.cs +++ b/InscryptionCommunityPatch/Card/ArtPatches.cs @@ -95,7 +95,7 @@ internal static void PatchCommunityArt() foreach (string name in regularCardsToPatch) CardManager.BaseGameCards.CardByName(name).SetPixelPortrait(TextureHelper.GetImageAsTexture($"{name}_pixel.png", ass)); - if (PatchPlugin.undeadCatEmission.Value) + if (PatchPlugin.configEnforceUndeadCatToHaveARedEmission.Value) { CardManager.BaseGameCards.CardByName("CatUndead") .SetEmissivePortrait(TextureHelper.GetImageAsTexture("CatUndead_emission.png", ass)) diff --git a/InscryptionCommunityPatch/Card/CardCostRender.cs b/InscryptionCommunityPatch/Card/CardCostRender.cs index 1537c96c..2573628a 100644 --- a/InscryptionCommunityPatch/Card/CardCostRender.cs +++ b/InscryptionCommunityPatch/Card/CardCostRender.cs @@ -78,16 +78,16 @@ private static void CreateFullCostSprite(CardDisplayer __instance, CardRenderInf { __instance.costRenderer.sprite = FinalCostSprite(renderInfo.baseInfo, playableCard, TextureHelper.SpriteType.OversizedCostDecal, 28); } - else if (__instance is PixelCardDisplayer pixelDisplay && PatchPlugin.act2CostRender.Value) + else if (__instance is PixelCardDisplayer pixelDisplay && PatchPlugin.configUseAPIAct2CostRender.Value) { - if (PatchPlugin.act2VanillaStyle.Value) + if (PatchPlugin.configDisplayVanillaStyleAct2CostIcons.Value) { - __instance.costRenderer.sprite = Part2CardCostRender.FinalVanillaCostSprite(pixelDisplay, renderInfo.baseInfo, playableCard, !PatchPlugin.rightAct2Cost.Value); + __instance.costRenderer.sprite = Part2CardCostRender.FinalVanillaCostSprite(pixelDisplay, renderInfo.baseInfo, playableCard, !PatchPlugin.configDisplayAct2CostInTheTopRightCorner.Value); } else { __instance.costRenderer.sprite = FinalCostSprite(renderInfo.baseInfo, playableCard, - PatchPlugin.rightAct2Cost.Value ? TextureHelper.SpriteType.Act2CostDecalRight : TextureHelper.SpriteType.Act2CostDecalLeft, 8); + PatchPlugin.configDisplayAct2CostInTheTopRightCorner.Value ? TextureHelper.SpriteType.Act2CostDecalRight : TextureHelper.SpriteType.Act2CostDecalLeft, 8); } } } @@ -100,7 +100,7 @@ private static bool Part1CardCostDisplayerPatch(CardDisplayer __instance, ref Sp { return false; } - if (__instance is PixelCardDisplayer && PatchPlugin.act2CostRender.Value) + if (__instance is PixelCardDisplayer && PatchPlugin.configUseAPIAct2CostRender.Value) { return false; } diff --git a/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs b/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs index 31e30a69..e7710312 100644 --- a/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs +++ b/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs @@ -22,7 +22,7 @@ private static bool DontPlaceCardModIcons_IfShowOnBottom(CardAbilityIcons __inst { // If we are showing card modifications sigils on the bottom, we don't allow the // AppyAbilitiesToIcons method to do anything - if (PatchPlugin.configMergeOnBottom.Value && PatchPlugin.configRemovePatches.Value && iconMat == __instance.emissiveIconMat) + if (PatchPlugin.configMergeSigilsOnBottom.Value && PatchPlugin.configRemoveSigilPatchesFromCards.Value && iconMat == __instance.emissiveIconMat) { foreach (AbilityIconInteractable icon in icons) { icon.gameObject.SetActive(false); @@ -40,9 +40,9 @@ private static void MoveMergeIconsToDefaultGroup_IfShowOnBottom(List de // This is the first time that the default abilities list is used once it has been built // What we want to do is take all of the abilities from the merge group and move them to the default group // if the "show merged icons on bottom" setting is active. - if (PatchPlugin.configMergeOnBottom.Value) { + if (PatchPlugin.configMergeSigilsOnBottom.Value) { defaultAbilities.AddRange(mergeAbilities); - if (PatchPlugin.configRemovePatches.Value) { + if (PatchPlugin.configRemoveSigilPatchesFromCards.Value) { mergeAbilities.Clear(); } } @@ -53,14 +53,14 @@ private static void MoveMergeIconsToDefaultGroup_IfShowOnBottom(List de [HarmonyPostfix] private static void RepositionAndRetextureMergedIcons_IfShowOnBottom(ref CardInfo info, ref AbilityInfo ability, ref AbilityIconInteractable __instance) { - if (PatchPlugin.configMergeOnBottom.Value && info != null && info.Mods.Count > 0) { + if (PatchPlugin.configMergeSigilsOnBottom.Value && info != null && info.Mods.Count > 0) { List MergeSigils = info.Mods.FindAll(x => x.fromCardMerge); if (MergeSigils.Count > 0) { foreach (CardModificationInfo mod in MergeSigils) { // if ability whose icon we're loading came from a card merge mod if (mod.abilities.Contains(ability.ability) && (__instance.name == "AbilityIcon" || __instance.name == "DefaultIcons_1Ability")) { - if (PatchPlugin.configRemovePatches.Value) { + if (PatchPlugin.configRemoveSigilPatchesFromCards.Value) { __instance.SetMaterial(Singleton.Instance.totemIconMat); if (__instance.GetComponentInParent() != null) __instance.GetComponentInParent().enabled = true; diff --git a/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs b/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs index f267a6d6..6b18f521 100644 --- a/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs +++ b/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs @@ -80,7 +80,7 @@ private static bool ShowTribeOnCard(CardInfo info, Tribe tribe) } if (tribe == Tribe.Squirrel) { - return PatchPlugin.configShowSquirrelTribeOnCards.Value; + return PatchPlugin.configCustomSquirrelTribeIconToShowOnCards.Value; } return true; diff --git a/InscryptionCommunityPatch/Card/Part1CostEmissionMaskRender.cs b/InscryptionCommunityPatch/Card/Part1CostEmissionMaskRender.cs index a1e6d639..a1378ed4 100644 --- a/InscryptionCommunityPatch/Card/Part1CostEmissionMaskRender.cs +++ b/InscryptionCommunityPatch/Card/Part1CostEmissionMaskRender.cs @@ -29,7 +29,7 @@ public static SpriteRenderer Verify3DCostEmissionMaskRenderer(CardDisplayer3D ca } else { // disable if config is false ; otherwise toggle based on appearance of emissive portrait - result.gameObject.SetActive(PatchPlugin.configCostMask.Value && emissionEnabled); + result.gameObject.SetActive(PatchPlugin.configDisplayEmissionsUnderCostIcons.Value && emissionEnabled); } return result; diff --git a/InscryptionCommunityPatch/Card/Part2CardCostRender.cs b/InscryptionCommunityPatch/Card/Part2CardCostRender.cs index 5330d53e..403c2b81 100644 --- a/InscryptionCommunityPatch/Card/Part2CardCostRender.cs +++ b/InscryptionCommunityPatch/Card/Part2CardCostRender.cs @@ -27,7 +27,7 @@ public static class Part2CardCostRender public static event Action> UpdateVanillaPlayableCardCost; - public static bool RightAct2Cost => PatchPlugin.rightAct2Cost.Value; + public static bool RightAct2Cost => PatchPlugin.configDisplayAct2CostInTheTopRightCorner.Value; public static Sprite FinalVanillaCostSprite( PixelCardDisplayer display, diff --git a/InscryptionCommunityPatch/Card/StackAbilityIcons.cs b/InscryptionCommunityPatch/Card/StackAbilityIcons.cs index 684847d3..119c2403 100644 --- a/InscryptionCommunityPatch/Card/StackAbilityIcons.cs +++ b/InscryptionCommunityPatch/Card/StackAbilityIcons.cs @@ -54,7 +54,7 @@ public static class StackAbilityIcons private static Sprite GetGBCNumberSprite(int number) { string stackGBC = "stack_gbc.png"; - if (!PatchPlugin.act2StackIconType.Value) + if (!PatchPlugin.configAct2StackIconNumberStyle.Value) stackGBC = "stack_gbc_alt.png"; Texture2D texture = TextureHelper.GetImageAsTexture(stackGBC, typeof(StackAbilityIcons).Assembly); @@ -297,7 +297,7 @@ private static void ClearStackableIcons(ref List __result, CardInfo inf { int preDistinctCount = __result.Count; __result = __result.Distinct().ToList(); - if (PatchPlugin.doubleStackSplit.Value && __result.Count == 1 && preDistinctCount == 2 && AbilitiesUtil.GetInfo(__result[0]).canStack) + if (PatchPlugin.configDisplayStackableSigilsSeparately.Value && __result.Count == 1 && preDistinctCount == 2 && AbilitiesUtil.GetInfo(__result[0]).canStack) { __result.Add(__result[0]); } @@ -340,7 +340,7 @@ private static void AddIconNumber(Ability ability, CardInfo info, PlayableCard c if (count > 1) // we have a stack and need to add an override { - if (PatchPlugin.doubleStackSplit.Value && count == 2 && count == baseAbilities.Count) + if (PatchPlugin.configDisplayStackableSigilsSeparately.Value && count == 2 && count == baseAbilities.Count) __instance.SetIcon(__instance.LoadIcon(info, ai, card != null && card.OpponentCard)); else __instance.SetIcon(PatchTexture(ability, (int)count)); @@ -374,7 +374,7 @@ public static bool RenderPixelAbilityStacks(PixelCardAbilityIcons __instance, Li if (grps.Count > 0 && grps.Count - 1 < abilityIconGroups.Count) // if there are displayable sigils and there are enough icon groups { // if there is only 1 ability and there are two stacks of it, render it twice - if (PatchPlugin.doubleStackSplit.Value && grps.Count == 1 && grps[0].Item2 == 2/* && AbilitiesUtil.GetInfo(grps[0].Item1).canStack*/) + if (PatchPlugin.configDisplayStackableSigilsSeparately.Value && grps.Count == 1 && grps[0].Item2 == 2/* && AbilitiesUtil.GetInfo(grps[0].Item1).canStack*/) { //PatchPlugin.Logger.LogDebug($"Displaying {grps[0].Item1} twice"); grps[0] = new Tuple(grps[0].Item1, 1); diff --git a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act1LatchAbilityFix.cs b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act1LatchAbilityFix.cs index 625325b3..bad566ca 100644 --- a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act1LatchAbilityFix.cs +++ b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act1LatchAbilityFix.cs @@ -78,7 +78,7 @@ private static IEnumerator Postfix(IEnumerator enumerator, Latch __state, bool w List validTargets = BoardManager.Instance.AllSlotsCopy; validTargets.RemoveAll(slot => slot.Card == null || slot.Card.Dead || __state.CardHasLatchMod(slot.Card) || slot.Card == __state.Card); - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) { PatchPlugin.Logger.LogDebug($"[LatchFix] Started death, latch name: [{__state.name}]"); PatchPlugin.Logger.LogDebug("[LatchFix] Count of Valid Targets : " + validTargets.Count); @@ -174,7 +174,7 @@ private static IEnumerator Postfix(IEnumerator enumerator, Latch __state, bool w }; mod.SetExtendedProperty("LatchMod", true); - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"[LatchFix] Selected card name [{selectedSlot.Card.name}]"); selectedSlot.Card.AddTemporaryMod(mod); diff --git a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act2ShapeshifterPatches.cs b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act2ShapeshifterPatches.cs index 2d5cf5ab..8b797f7d 100644 --- a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act2ShapeshifterPatches.cs +++ b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/Act2ShapeshifterPatches.cs @@ -54,13 +54,13 @@ public static List GetIjiraqDisguises() { if (SaveManager.SaveFile.IsPart2) { - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"GetIjiraqDisguises: Act2:{SaveData.Data.collection.CardInfos.Count}"); return new(SaveData.Data.collection.CardInfos); } - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"GetIjiraqDisguises: DeckCount:{RunState.Run.playerDeck.Cards.Count}"); return new(RunState.Run.playerDeck.Cards); diff --git a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryInteractionFixes.cs b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryInteractionFixes.cs index 0c47c001..b7e80421 100644 --- a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryInteractionFixes.cs +++ b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryInteractionFixes.cs @@ -63,7 +63,7 @@ public static IEnumerator NewFireAtOpposingSlot(Sentry instance, PlayableCard ot // Check if the animation is paused then unpause it if (instance.Card.Anim.Anim.speed == 0f) { - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"{instance.Card} is frozen, unpausing animation."); midCombat = true; // indicates that we need to restart the attack animation at the end of the sequence diff --git a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryPackMuleFixes.cs b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryPackMuleFixes.cs index ce02a3c3..9658b7ab 100644 --- a/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryPackMuleFixes.cs +++ b/InscryptionCommunityPatch/Card/Vanilla Ability Patches/SentryPackMuleFixes.cs @@ -28,7 +28,7 @@ private static IEnumerator FixPackNotExisting(IEnumerator enumerator, PackMule _ { if (__instance.pack == null) { - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"{__instance.PlayableCard.name} died before fully resolving on board, instantiating pack."); // Instantiates the pack object if it's null @@ -44,7 +44,7 @@ private static IEnumerator FixPackNotExisting(IEnumerator enumerator, PackMule _ yield return new WaitUntil(() => !Tween.activeTweens.Exists((TweenBase t) => t.targetInstanceID == __instance.PlayableCard.transform.GetInstanceID())); __instance.pack.SetParent(__instance.PlayableCard.transform); - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"Pack has been instantiated. Reality has been saved."); } yield return enumerator; diff --git a/InscryptionCommunityPatch/InscryptionCommunityPatchPlugin.cs b/InscryptionCommunityPatch/InscryptionCommunityPatchPlugin.cs index 2ddf4520..60c134d0 100644 --- a/InscryptionCommunityPatch/InscryptionCommunityPatchPlugin.cs +++ b/InscryptionCommunityPatch/InscryptionCommunityPatchPlugin.cs @@ -14,55 +14,132 @@ namespace InscryptionCommunityPatch; +/// +/// The Entry Point for the Community Patch. +/// [BepInPlugin(ModGUID, ModName, ModVer)] [BepInDependency("cyantist.inscryption.api")] public class PatchPlugin : BaseUnityPlugin { + /// + /// The GUID for the Inscryption Community Patch, if you depend on this set of Patches and their associated code, you'll want to load after it in Awake(). + /// public const string ModGUID = "community.inscryption.patch"; + /// + /// This is the Inscryption Community Patch's Internal Name, prefer identifying the Community Patch with the GUID. + /// public const string ModName = "InscryptionCommunityPatch"; - public const string ModVer = "2.24.0"; - + /// + /// This is the Version of the Inscryption Community Patch you are using. + /// + public const string ModVer = "2.24.2"; + + /// + /// This is the Plugin Instance associated with the Inscryption Community Patch. + /// internal static PatchPlugin Instance; - internal static ConfigEntry configEnergy; - internal static ConfigEntry configDrone; - internal static ConfigEntry configMox; - internal static ConfigEntry configDroneMox; - internal static ConfigEntry configShowSquirrelTribeOnCards; + /// + /// Configure whether Energy should refresh or not. Refresh meaning the per-match removal of the Energy you have acquired. + /// + internal static ConfigEntry configEnergyPerMatchCleanUp; + /// + /// Configure whether the Energy Drone should be enabled or not. + /// + internal static ConfigEntry configEnergyDrone; + /// + /// Configure whether Mox should refresh or not. Refresh meaning the per-match removal of the Mox you have acquired. + /// + internal static ConfigEntry configMoxPerMatchCleanup; + /// + /// Configure whether the Mox Drone should be enabled or not. + /// + internal static ConfigEntry configMoxDrone; + /// + /// Configure whether the Act 3 Drone or Scale Drone should be used within Act 1. + /// + internal static ConfigEntry configUtilizeDefaultDrone; + /// + /// Configure whether the Bones Display is active in Act 3 or not. + /// internal static ConfigEntry configAct3Bones; - - internal static ConfigEntry configCostMask; - internal static ConfigEntry configResetEyes; - internal static ConfigEntry undeadCatEmission; - - internal static ConfigEntry rightAct2Cost; - internal static ConfigEntry act2CostRender; - internal static ConfigEntry act2VanillaStyle; - - internal static ConfigEntry doubleStackSplit; - - internal static ConfigEntry act2StackIconType; - - internal static ConfigEntry configMergeOnBottom; - - internal static ConfigEntry configRemovePatches; - - internal static ConfigEntry configSmallPricetags; - internal static ConfigEntry configMovePricetags; - - internal static ConfigEntry configTestState; - - internal static ConfigEntry configFullDebug; - - internal static ConfigEntry configDefaultDrone; - - internal static ConfigEntry act2TutorCenterRows; - - + /// + /// Configure whether the Custom Squirrel Tribe Icon should be shown on cards. + /// + internal static ConfigEntry configCustomSquirrelTribeIconToShowOnCards; + /// + /// Configure whether to use API's custom Act 2 Cost Rendering system or not for Custom and Hybrid Costs. + /// + internal static ConfigEntry configUseAPIAct2CostRender; + /// + /// Configure whether the Act 2 Cost should be in the Top Left or Top Right corner of the card. + /// + internal static ConfigEntry configDisplayAct2CostInTheTopRightCorner; + /// + /// Configure whether Cost Icons should use the Vanilla Style icons or the Custom Ones. + /// + internal static ConfigEntry configDisplayVanillaStyleAct2CostIcons; + /// + /// Configure the rendering of the Act 2 Stack Icon Number Renders, e.g. Black Outline or Cream Outline. + /// + internal static ConfigEntry configAct2StackIconNumberStyle; + /// + /// Configure whether sigils should be merged on the bottom of a card or not. + /// + internal static ConfigEntry configMergeSigilsOnBottom; + /// + /// Configure whether the actual patch the sigil is fused with is shown or not. If not the sigil icon shows up orange. Requires to be true. + /// + internal static ConfigEntry configRemoveSigilPatchesFromCards; + /// + /// Configure whether the Stackable Sigils should be displayed as seperate icons or not. + /// + internal static ConfigEntry configDisplayStackableSigilsSeparately; + /// + /// Configure whether the Price Tags should be smaller on the cards. + /// + internal static ConfigEntry configDisplaySmallerPriceTags; + /// + /// Configure whether the Price Tags should be displayed on the Right of a card. + /// + internal static ConfigEntry configDisplayPriceTagsOnTheRight; + /// + /// Configure whether card selection rows in the Act 2 Tutor Screen should be centered or not. + /// + internal static ConfigEntry configCenterAct2TutorSelectionRows; + /// + /// Configure whether Emissions should show over or under Cost Icons. + /// + internal static ConfigEntry configDisplayEmissionsUnderCostIcons; + /// + /// Configure whether Leshy's Eye Color should reset after the 8 Bears Fight. + /// + internal static ConfigEntry configResetEyesToNormalAfter8BearsFights; + /// + /// Configure whether Undead Cat's Emission should be forced Red or not. + /// + internal static ConfigEntry configEnforceUndeadCatToHaveARedEmission; + /// + /// Configure whether the Community Patch should display complete Debug Logs or not. + /// + internal static ConfigEntry configDisplayCompleteDebugLogsInConsole; + /// + /// Configure whether the Community Patch should be in Testing Mode or not. + /// + internal static ConfigEntry configCommunityPatchTestingMode; + + /// + /// Our Community Patch's Internal Logger. + /// new internal static ManualLogSource Logger; - + /// + /// Our Community Patch's Internal Harmony Instance. + /// private readonly Harmony HarmonyInstance = new(ModGUID); + /// + /// The following runs when the Community Patch is enabled by Unity. + /// private void OnEnable() { Logger = base.Logger; @@ -70,7 +147,7 @@ private void OnEnable() HarmonyInstance.PatchAll(typeof(PatchPlugin).Assembly); SceneManager.sceneLoaded += this.OnSceneLoaded; - if (configTestState.Value) + if (configCommunityPatchTestingMode.Value) { ExecuteCommunityPatchTests.PrepareForTests(); TestCost.Init(); @@ -80,39 +157,49 @@ private void OnEnable() CommunityArtPatches.PatchCommunityArt(); } + /// + /// The following runs when the Community Patch is diabled by Unity. + /// private void OnDisable() { HarmonyInstance.UnpatchSelf(); } + /// + /// This is our Community Patch's Initializer, we primarily use it to set the internal Instance of the Community Patcher and create the Configurations to the Configuration File. + /// private void Awake() { Instance = this; - configEnergy = Config.Bind("Energy", "Energy Refresh", true, "Max energy increases and energy refreshes at end of turn"); - configDrone = Config.Bind("Energy", "Energy Drone", false, "Drone is visible to display energy (requires Energy Refresh)"); - configDefaultDrone = Config.Bind("Energy", "Default Drone", false, "Drone uses the vanilla model instead of being attached to the scales (requires Energy Drone)"); - configMox = Config.Bind("Mox", "Mox Refresh", true, "Mox refreshes at end of battle"); - configDroneMox = Config.Bind("Mox", "Mox Drone", false, "Drone displays mox (requires Energy Drone and Mox Refresh)"); + configEnergyPerMatchCleanUp = Config.Bind("Energy", "Energy Refresh", true, "Max energy increases and energy refreshes at end of turn"); + configEnergyDrone = Config.Bind("Energy", "Energy Drone", false, "Drone is visible to display energy (requires Energy Refresh)"); + configUtilizeDefaultDrone = Config.Bind("Energy", "Default Drone", false, "Drone uses the vanilla model instead of being attached to the scales (requires Energy Drone)"); + configMoxPerMatchCleanup = Config.Bind("Mox", "Mox Refresh", true, "Mox refreshes at end of battle"); + configMoxDrone = Config.Bind("Mox", "Mox Drone", false, "Drone displays mox (requires Energy Drone and Mox Refresh)"); configAct3Bones = Config.Bind("Bones", "Act 3 Bones", false, "Force bones displayer to be active in Act 3"); - configShowSquirrelTribeOnCards = Config.Bind("Tribes", "Show Squirrel Tribe", false, "Shows the Squirrel tribe icon on cards"); - act2CostRender = Config.Bind("Card Costs", "GBC Cost render", true, "GBC Cards are able to display custom costs and hybrid costs through the API."); - rightAct2Cost = Config.Bind("Card Costs", "GBC Cost On Right", true, "GBC Cards display their costs on the top-right corner. If false, display on the top-left corner"); - act2VanillaStyle = Config.Bind("Card Costs", "GBC Vanilla Render", false, "GBC cards use vanilla sprites when rendering multiple and custom costs."); - configMergeOnBottom = Config.Bind("Sigil Display", "Merge_On_Botom", false, "Makes it so if enabled, merged sigils will display on the bottom of the card instead of on the artwork. In extreme cases, this can cause some visual bugs."); - configRemovePatches = Config.Bind("Sigil Display", "Remove_Patches", false, "Makes it so if enabled, merged sigils will not have a patch behind them anymore and will instead be glowing yellow (only works with Merge_On_Bottom)."); - doubleStackSplit = Config.Bind("Sigil Display", "Vanilla Stacking", false, "If enabled, cards with only two visible sigils will display each separately even if they can stack."); - - configSmallPricetags = Config.Bind("Act 1", "Smaller Pricetags", false, "If enabled, the price tags placed on cards while buying from the Trapper will be scaled down."); - configMovePricetags = Config.Bind("Act 1", "Move Pricetags", false, "If enabled, the price tags placed on cards while buying from the Trapper will be moved to the right."); - act2StackIconType = Config.Bind("Sigil Display", "Act 2 Sigil icon type", true, "If true, stacking icons are a cream outline with a black center. If false, stacking icons are a black outline with a cream center. Act 2"); - act2TutorCenterRows = Config.Bind("Act 2", "Centred Hoarder UI", true, "If true, centres displayed cards in each row during the Hoarder selection sequence."); - configFullDebug = Config.Bind("General", "Full Debug", true, "If true, displays all debug logs in the console."); - configTestState = Config.Bind("General", "Test Mode", false, "Puts the game into test mode. This will cause (among potentially other things) a new run to spawn a number of cards into your opening deck that will demonstrate card behaviors."); - configResetEyes = Config.Bind("Act 1", "Reset Red Eyes", false, "Resets Leshy's eyes to normal if they were turned red due to a boss fight's grizzly bear sequence."); - configCostMask = Config.Bind("Act 1", "Render Costs Above Emission", true, "Applies a mask to card emissions that prevents them from covering play costs when rendering in-game."); - undeadCatEmission = Config.Bind("General", "Undead Cat Emission", false, "If true, Undead Cat will have a forced red emission."); + configCustomSquirrelTribeIconToShowOnCards = Config.Bind("Tribes", "Show Squirrel Tribe", false, "Shows the Squirrel tribe icon on cards"); + configUseAPIAct2CostRender = Config.Bind("Card Costs", "GBC Cost render", true, "GBC Cards are able to display custom costs and hybrid costs through the API."); + configDisplayAct2CostInTheTopRightCorner = Config.Bind("Card Costs", "GBC Cost On Right", true, "GBC Cards display their costs on the top-right corner. If false, display on the top-left corner"); + configDisplayVanillaStyleAct2CostIcons = Config.Bind("Card Costs", "GBC Vanilla Render", false, "GBC cards use vanilla sprites when rendering multiple and custom costs."); + configAct2StackIconNumberStyle = Config.Bind("Sigil Display", "GBC Stack Icon Number Rendering", true, "If true, stacking icons are a cream outline with a black center. If false, stacking icons are a black outline with a cream center. Act 2"); + configMergeSigilsOnBottom = Config.Bind("Sigil Display", "Merge_On_Bottom", false, "Makes it so if enabled, merged sigils will display on the bottom of the card instead of on the artwork. In extreme cases, this can cause some visual bugs."); + configRemoveSigilPatchesFromCards = Config.Bind("Sigil Display", "Remove_Patches", false, "Makes it so if enabled, merged sigils will not have a patch behind them anymore and will instead be glowing yellow (only works with Merge_On_Bottom)."); + configDisplayStackableSigilsSeparately = Config.Bind("Sigil Display", "Vanilla Stacking", false, "If enabled, cards with only two visible sigils will display each separately even if they can stack."); + configDisplaySmallerPriceTags = Config.Bind("Act 1", "Smaller Pricetags", false, "If enabled, the price tags placed on cards while buying from the Trapper will be scaled down."); + configDisplayPriceTagsOnTheRight = Config.Bind("Act 1", "Move Pricetags", false, "If enabled, the price tags placed on cards while buying from the Trapper will be moved to the right."); + configCenterAct2TutorSelectionRows = Config.Bind("Act 2", "Centred Hoarder UI", true, "If true, centers displayed cards in each row during the Hoarder selection sequence."); + configResetEyesToNormalAfter8BearsFights = Config.Bind("Act 1", "Reset Red Eyes", false, "Resets Leshy's eyes to normal if they were turned red due to a boss fight's grizzly bear sequence."); + configDisplayEmissionsUnderCostIcons = Config.Bind("Act 1", "Render Costs Above Emission", true, "Applies a mask to card emissions that prevents them from covering play costs when rendering in-game."); + configEnforceUndeadCatToHaveARedEmission = Config.Bind("General", "Undead Cat Emission", false, "If true, Undead Cat will have a forced red emission."); + configDisplayCompleteDebugLogsInConsole = Config.Bind("General", "Full Debug", true, "If true, displays all debug logs in the console."); + configCommunityPatchTestingMode = Config.Bind("General", "Test Mode", false, "Puts the game into test mode. This will cause (among potentially other things) a new run to spawn a number of cards into your opening deck that will demonstrate card behaviors."); } + /// + /// A simple function that runs when a Scene has Loaded in Unity. + /// + /// The Scene in which we are trying to Load things during. + /// The Mode in which to Load the Scene with. private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { EnergyDrone.TryEnableEnergy(scene.name); diff --git a/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs b/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs index 9a3bc244..55b8669b 100644 --- a/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs +++ b/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs @@ -205,7 +205,7 @@ private float GetXPos(int cardIndex, int cardRowIndex, int cardsToPlace, int car float multiplier = cardIndex - positionInRow; // when there are <7 cards, we need to centre them - if (PatchPlugin.act2TutorCenterRows.Value && cardsLeftToPlace > 0 && cardsLeftToPlace < cardsPerRow) + if (PatchPlugin.configCenterAct2TutorSelectionRows.Value && cardsLeftToPlace > 0 && cardsLeftToPlace < cardsPerRow) { anchor = centreAnchor; multiplier = cardIndex - positionInRow - (cardsLeftToPlace - 1) / 2f; diff --git a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs index 0f7fe52f..c5d604b2 100644 --- a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs +++ b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs @@ -16,11 +16,11 @@ public static class EnergyDrone /// public class EnergyConfigInfo { - public bool ConfigEnergy { get; set; } = PoolHasEnergy || PatchPlugin.configEnergy.Value; - public bool ConfigShowDrone { get; set; } = PoolHasEnergy || PatchPlugin.configDrone.Value; - public bool ConfigDroneMox { get; set; } = PoolHasGems || PatchPlugin.configDroneMox.Value; - public bool ConfigMox { get; set; } = PoolHasGems || PatchPlugin.configMox.Value; - public bool ConfigDefaultDrone { get; set; } = PatchPlugin.configDefaultDrone.Value; + public bool ConfigEnergy { get; set; } = PoolHasEnergy || PatchPlugin.configEnergyPerMatchCleanUp.Value; + public bool ConfigShowDrone { get; set; } = PoolHasEnergy || PatchPlugin.configEnergyDrone.Value; + public bool ConfigDroneMox { get; set; } = PoolHasGems || PatchPlugin.configMoxDrone.Value; + public bool ConfigMox { get; set; } = PoolHasGems || PatchPlugin.configMoxPerMatchCleanup.Value; + public bool ConfigDefaultDrone { get; set; } = PatchPlugin.configUtilizeDefaultDrone.Value; /// /// Controls whether or not the Drone will appear. By default, will appear if there are obtainable Energy or Mox cards in the card pool (or the corresponding config value has been set). @@ -119,7 +119,7 @@ internal static void TryEnableEnergy(string sceneName) private static IEnumerator AwakeDrone() { // pretty sure the drone can't be null in this method, but we'll check just in case - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug($"Awaking ResourceDrone, instance exists? {ResourceDrone.Instance != null}."); yield return new WaitForSeconds(1f); diff --git a/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs b/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs index b74bab35..22c9e533 100644 --- a/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs +++ b/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs @@ -10,17 +10,17 @@ internal class BuyPeltsSmallTags [HarmonyPostfix, HarmonyPatch(typeof(BuyPeltsSequencer), nameof(BuyPeltsSequencer.AddPricetagToCard))] private static void ReducePricetagSize(SelectableCard card) { - if (PatchPlugin.configSmallPricetags.Value || PatchPlugin.configMovePricetags.Value) + if (PatchPlugin.configDisplaySmallerPriceTags.Value || PatchPlugin.configDisplayPriceTagsOnTheRight.Value) { Transform t = card.transform.Find("pricetag"); if (t == null) return; - if (PatchPlugin.configSmallPricetags.Value) + if (PatchPlugin.configDisplaySmallerPriceTags.Value) { t.localScale = new(0.75f, 1f, 0.75f); } - if (PatchPlugin.configMovePricetags.Value) + if (PatchPlugin.configDisplayPriceTagsOnTheRight.Value) { t.localPosition = new(t.localPosition.x * -1, t.localPosition.y, t.localPosition.z); } diff --git a/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs b/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs index ce4eeae2..d12e9021 100644 --- a/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs +++ b/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs @@ -127,7 +127,7 @@ private static IEnumerator NewStatBoostSequence(CardStatBoostSequencer instance, // if there aren't any valid cards, exit the sequence if (instance.GetValidCards(forAttackMod: attackMod).Count == 0) { - if (PatchPlugin.configFullDebug.Value) + if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) PatchPlugin.Logger.LogDebug("Player has no cards that can be boosted at the campfire."); yield return new WaitForSeconds(0.5f); yield return Singleton.Instance.ShowUntilInput("You have no creatures to warm."); diff --git a/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs b/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs index 0e9f940b..613032c2 100644 --- a/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs +++ b/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs @@ -10,7 +10,7 @@ internal class LeshyResetRedEyes [HarmonyPostfix, HarmonyPatch(typeof(TurnManager), nameof(TurnManager.CleanupPhase))] private static IEnumerator ResetLeshyEyes(IEnumerator enumerator, TurnManager __instance) { - if (!PatchPlugin.configResetEyes.Value || !SaveManager.SaveFile.IsPart1 || __instance.opponent == null) + if (!PatchPlugin.configResetEyesToNormalAfter8BearsFights.Value || !SaveManager.SaveFile.IsPart1 || __instance.opponent == null) { yield return enumerator; yield break; diff --git a/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs b/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs index 4745fadf..817bb5c1 100644 --- a/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs +++ b/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs @@ -27,7 +27,7 @@ public static void PrepareForTests() [HarmonyPostfix] private static void StartRunInTestMode(ref AscensionSaveData __instance) { - if (PatchPlugin.configTestState.Value) + if (PatchPlugin.configCommunityPatchTestingMode.Value) { List testAbilityList = new() { Ability.Sharp, Ability.DebuffEnemy, Ability.CreateDams, Ability.DrawRabbits, Ability.Strafe, Ability.Deathtouch, Ability.DoubleStrike, Ability.Reach, Ability.BeesOnHit }; From 45431da2352d426ace26843484ec7446ee37ead1 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 2 Oct 2026 20:33:19 -0400 Subject: [PATCH 07/28] ReInternalize 3 ConfigEntry's --- InscryptionAPI/InscryptionAPIPlugin.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/InscryptionAPI/InscryptionAPIPlugin.cs b/InscryptionAPI/InscryptionAPIPlugin.cs index d3ea1adb..91bdd9b1 100644 --- a/InscryptionAPI/InscryptionAPIPlugin.cs +++ b/InscryptionAPI/InscryptionAPIPlugin.cs @@ -60,15 +60,15 @@ public class InscryptionAPIPlugin : BaseUnityPlugin /// /// The Configuration for Overriding the Arrows within Kaycee's Mod Menu's. /// - public static ConfigEntry configOverrideArrows; + internal static ConfigEntry configOverrideArrows; /// /// The Configuration for determining whether the Order of Costs in a Cost Choice Node should be Randomized. /// - public static ConfigEntry configRandomCostChoiceOrder; + internal static ConfigEntry configRandomCostChoiceOrder; /// /// The Configuration for determining whether the Boss Scenery of Act 1/KCM should be hidden. /// - public static ConfigEntry configHideAct1BossScenery; + internal static ConfigEntry configHideAct1BossScenery; /// /// This Configuration is used for determining what Totem Top Model should be used in game. /// From 8d07b076883bf1702df7f475b99a3543a34e025b Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Sat, 3 Oct 2026 14:57:32 -0400 Subject: [PATCH 08/28] XML Docs Part II, and some Cleanup * Moved `ResourceLookup.cs` to `InscryptionAPI.Helpers`, it was perviously listed there but not actually in the perscribed namespace. E.G. it was `InscryptionAPI.Items` instead. * Changed the `BoardManagerExtensions` to be One-line functions rather than Multi-line. Did similar in `CardSlotExtensions` but with the function params. * Renamed `objectFields` to `ObjectFields` within `CustomFields` under `InscryptionAPI.Helpers` * Add Bool Overrides to the `Metalic`, `Smoothness` and `Height` fields in `MaterialOverride.cs`, along with functions for overriding each of these respective components. * Fixed some XML Docs within `TextureHelper.cs`. * Fixed the `TranspilerHelpers.cs`'s function to use `LogCodeInstructions` rather than the typoed `LogCodeInscryptions`. * Completed Documentation related to the `InscryptionAPI.Helpers` classes. Signed-off-by: Chaosyr --- InscryptionAPI/Helpers/AssetBundleHelper.cs | 42 +++-- InscryptionAPI/Helpers/CustomFields.cs | 34 ++-- .../Extensions/BoardManagerExtensions.cs | 53 ++----- .../Helpers/Extensions/CardSlotExtensions.cs | 30 +--- .../Extensions/GameObjectExtensions.cs | 9 ++ .../Helpers/Extensions/ListExtensions.cs | 34 ++++ InscryptionAPI/Helpers/MaterialOverride.cs | 149 ++++++++++++++++-- InscryptionAPI/Helpers/ResourceLookup.cs | 68 ++++++-- .../Helpers/ResourcesManagerHelpers.cs | 49 +++++- InscryptionAPI/Helpers/TextureHelper.cs | 105 ++++++------ InscryptionAPI/Helpers/TranspilerHelpers.cs | 10 +- InscryptionAPI/Items/ConsumableItemManager.cs | 1 - .../Items/ConsumableItemResource.cs | 1 + InscryptionAPI/Masks/MaskBehaviour.cs | 1 - InscryptionAPI/Masks/MaskManager.cs | 2 +- InscryptionAPI/Masks/Patches.cs | 1 + 16 files changed, 406 insertions(+), 183 deletions(-) diff --git a/InscryptionAPI/Helpers/AssetBundleHelper.cs b/InscryptionAPI/Helpers/AssetBundleHelper.cs index 481daecd..b91a0ff2 100644 --- a/InscryptionAPI/Helpers/AssetBundleHelper.cs +++ b/InscryptionAPI/Helpers/AssetBundleHelper.cs @@ -2,8 +2,19 @@ namespace InscryptionAPI.Helpers; +/// +/// A Helper Set related to the . +/// public static class AssetBundleHelper { + /// + /// A function that attempts to get a Prefab of Type T from the given . + /// + /// The we want to get a Prefab out of. + /// The Name of the specific Prefab we are after. + /// The Fetched Prefab from the , if it fails we return Default(T), e.g. the Null associated with the given Type. + /// The Type in which is associated with the Prefab itself. + /// False if we fail, true if we successfully returned a Prefab associated with Type T. public static bool TryGet(AssetBundle bundle, string prefabName, out T prefab) where T : UnityObject { if (bundle == null) @@ -13,11 +24,8 @@ public static bool TryGet(AssetBundle bundle, string prefabName, out T prefab return false; } - // Get object from bundle prefab = bundle.LoadAsset(prefabName); - - // Unload bundle but don't unload the assets - bundle.Unload(false); + bundle.Unload(false); // Does not unload assets, just the Bundle. if (prefab == null) { @@ -28,6 +36,14 @@ public static bool TryGet(AssetBundle bundle, string prefabName, out T prefab return true; } + /// + /// A function that attempts to get a Prefab of Type T from the given path to the . + /// + /// The path to the + /// The Name of the specific Prefab we are after. + /// The Fetched Prefab from the , if it fails we return Default(T), e.g. the Null associated with the given Type. + /// The Type in which is associated with the Prefab itself. + /// False if we fail, true if we successfully returned a Prefab associated with Type T. public static bool TryGet(string pathToAssetBundle, string prefabName, out T prefab) where T : UnityObject { AssetBundle bundle = AssetBundle.LoadFromFile(pathToAssetBundle); @@ -38,11 +54,8 @@ public static bool TryGet(string pathToAssetBundle, string prefabName, out T return false; } - // Get object from bundle prefab = bundle.LoadAsset(prefabName); - - // Unload bundle but don't unload the assets - bundle.Unload(false); + bundle.Unload(false); // Does not unload assets, just the Bundle. if (prefab == null) { @@ -53,6 +66,14 @@ public static bool TryGet(string pathToAssetBundle, string prefabName, out T return true; } + /// + /// A function that attempts to get a Prefab of Type T from the given Memory associated with the . + /// + /// A array in the form of byte[] representing the Memory associated with a . + /// The Name of the specific Prefab we are after. + /// The Fetched Prefab from the , if it fails we return Default(T), e.g. the Null associated with the given Type. + /// The Type in which is associated with the Prefab itself. + /// False if we fail, true if we successfully returned a Prefab associated with Type T. public static bool TryGet(byte[] resources, string prefabName, out T prefab) where T : UnityObject { AssetBundle bundle = AssetBundle.LoadFromMemory(resources); @@ -63,11 +84,8 @@ public static bool TryGet(byte[] resources, string prefabName, out T prefab) return false; } - // Get object from bundle prefab = bundle.LoadAsset(prefabName); - - // Unload bundle but don't unload the assets - bundle.Unload(false); + bundle.Unload(false); // Does not unload assets, just the Bundle. if (prefab == null) { diff --git a/InscryptionAPI/Helpers/CustomFields.cs b/InscryptionAPI/Helpers/CustomFields.cs index 4091247e..71ac90d5 100644 --- a/InscryptionAPI/Helpers/CustomFields.cs +++ b/InscryptionAPI/Helpers/CustomFields.cs @@ -3,11 +3,15 @@ namespace InscryptionAPI.Helpers; /// -/// Allows for an easy way to add custom fields to an object, or to an entire class. +/// A Helper Object for Custom Fields. /// +/// Allows for an easy way to add custom fields to an object, or to an entire class. public static class CustomFields { - static ConditionalWeakTable> objectFields = new ConditionalWeakTable>(); + /// + /// A ConditionalWeakTable representing our CustomFields System. + /// + static readonly ConditionalWeakTable> ObjectFields = new ConditionalWeakTable>(); /// /// Returns a custom field. @@ -20,7 +24,7 @@ public static T Get(object obj, string field) { if (!HasField(obj, field)) Set(obj, field, default(T)); - objectFields.TryGetValue(obj, out Dictionary fields); + ObjectFields.TryGetValue(obj, out Dictionary fields); return (T)fields[field]; } @@ -31,8 +35,7 @@ public static T Get(object obj, string field) /// The class the static field is stored on. /// The name of the custom field. /// A custom field of type T. If the field is not found, default(T) is returned. - public static T GetStatic(string field) - => Get(typeof(C), field); + public static T GetStatic(string field) => Get(typeof(C), field); /// /// Returns a static custom field. @@ -41,8 +44,7 @@ public static T GetStatic(string field) /// The name of the custom field. /// The type of the class the static field is stored on. /// A custom field of type T. If the field is not found, default(T) is returned. - public static T GetStatic(string field, Type classType) - => Get(classType, field); + public static T GetStatic(string field, Type classType) => Get(classType, field); /// /// Set a custom field. @@ -52,10 +54,10 @@ public static T GetStatic(string field, Type classType) /// The value of the custom field. public static void Set(object obj, string field, object value) { - if (!objectFields.TryGetValue(obj, out Dictionary fields)) + if (!ObjectFields.TryGetValue(obj, out Dictionary fields)) { fields = new Dictionary(); - objectFields.Add(obj, fields); + ObjectFields.Add(obj, fields); } fields[field] = value; @@ -67,8 +69,7 @@ public static void Set(object obj, string field, object value) /// The class which you want to store the static field is stored on. /// The name of the custom field. /// The value of the custom field. - public static void SetStatic(string field, object value) - => Set(typeof(C), field, value); + public static void SetStatic(string field, object value) => Set(typeof(C), field, value); /// /// Set a static custom field. @@ -76,8 +77,7 @@ public static void SetStatic(string field, object value) /// The name of the custom field. /// The value of the custom field. /// The type of the class which you want to store the static field is stored on. - public static void SetStatic(string field, object value, Type classType) - => Set(classType, field, value); + public static void SetStatic(string field, object value, Type classType) => Set(classType, field, value); /// /// Check if an object currently stores a custom field. @@ -87,7 +87,7 @@ public static void SetStatic(string field, object value, Type classType) /// True if the object is storing the custom field. public static bool HasField(object obj, string field) { - if (!objectFields.TryGetValue(obj, out Dictionary fields)) return false; + if (!ObjectFields.TryGetValue(obj, out Dictionary fields)) return false; return fields.ContainsKey(field); } @@ -97,8 +97,7 @@ public static bool HasField(object obj, string field) /// The class which you want to check. /// The name of the static custom field to check for. /// True if the class is storing the static custom field. - public static bool HasStaticField(string field) - => HasField(typeof(C), field); + public static bool HasStaticField(string field) => HasField(typeof(C), field); /// /// Check if a class currently stores a static custom field. @@ -106,6 +105,5 @@ public static bool HasStaticField(string field) /// The name of the static custom field to check for. /// The type of the class which you want to check. /// True if the class is storing the static custom field. - public static bool HasStaticField(string field, Type classType) - => HasField(classType, field); + public static bool HasStaticField(string field, Type classType) => HasField(classType, field); } \ No newline at end of file diff --git a/InscryptionAPI/Helpers/Extensions/BoardManagerExtensions.cs b/InscryptionAPI/Helpers/Extensions/BoardManagerExtensions.cs index 19e94781..45d8ea4f 100644 --- a/InscryptionAPI/Helpers/Extensions/BoardManagerExtensions.cs +++ b/InscryptionAPI/Helpers/Extensions/BoardManagerExtensions.cs @@ -2,6 +2,9 @@ namespace InscryptionAPI.Helpers.Extensions; +/// +/// An extensions class for the Board Manager. +/// public static class BoardManagerExtensions { /// @@ -10,10 +13,7 @@ public static class BoardManagerExtensions /// Manager instance to access. /// The predicate to filter on each card. /// The list of player cards on the board. - public static List GetPlayerCards( - this BoardManager manager, - Predicate filterOnPredicate = null - ) => manager.PlayerSlotsCopy.SelectCards(filterOnPredicate).ToList(); + public static List GetPlayerCards(this BoardManager manager, Predicate filterOnPredicate = null) => manager.PlayerSlotsCopy.SelectCards(filterOnPredicate).ToList(); /// /// Retrieve all opponent cards on the board. @@ -21,10 +21,7 @@ public static List GetPlayerCards( /// Manager instance to access. /// The predicate to filter on each card. /// The list of opponent cards on the board. - public static List GetOpponentCards( - this BoardManager manager, - Predicate filterOnPredicate = null - ) => manager.OpponentSlotsCopy.SelectCards(filterOnPredicate).ToList(); + public static List GetOpponentCards(this BoardManager manager, Predicate filterOnPredicate = null) => manager.OpponentSlotsCopy.SelectCards(filterOnPredicate).ToList(); /// /// Retrieve all player or opponent cards on the board. @@ -33,11 +30,7 @@ public static List GetOpponentCards( /// Whether to retrieve player cards. /// The predicate to filter on each card. /// The list of relevant cards on the board. - public static List GetCards( - this BoardManager manager, - bool getPlayerCards, - Predicate filterOnPredicate = null - ) => manager.GetSlotsCopy(getPlayerCards).SelectCards(filterOnPredicate).ToList(); + public static List GetCards(this BoardManager manager, bool getPlayerCards, Predicate filterOnPredicate = null) => manager.GetSlotsCopy(getPlayerCards).SelectCards(filterOnPredicate).ToList(); /// /// Retrieve all cards on the board that match the predicate, if given. @@ -45,8 +38,7 @@ public static List GetCards( /// Manager instance to access. /// The predicate to filter on each card. /// The list of relevant cards on the board. - public static List GetCards(this BoardManager manager, Predicate filterOnPredicate = null) - => manager.AllSlotsCopy.SelectCards(filterOnPredicate).ToList(); + public static List GetCards(this BoardManager manager, Predicate filterOnPredicate = null) => manager.AllSlotsCopy.SelectCards(filterOnPredicate).ToList(); /// @@ -55,10 +47,7 @@ public static List GetCards(this BoardManager manager, Predicate

Manager instance to access. /// The predicate to filter on each slot. /// The list of player slots with no cards. - public static List GetPlayerOpenSlots( - this BoardManager manager, - Predicate filterOnPredicate = null - ) => manager.PlayerSlotsCopy.SelectOpenSlots(filterOnPredicate).ToList(); + public static List GetPlayerOpenSlots(this BoardManager manager, Predicate filterOnPredicate = null) => manager.PlayerSlotsCopy.SelectOpenSlots(filterOnPredicate).ToList(); ///

/// Retrieve all opponent slots that are not occupied by a card. @@ -66,10 +55,7 @@ public static List GetPlayerOpenSlots( /// Manager instance to access. /// The predicate to filter on each slot. /// The list of opponent slots with no cards. - public static List GetOpponentOpenSlots( - this BoardManager manager, - Predicate filterOnPredicate = null - ) => manager.OpponentSlotsCopy.SelectOpenSlots(filterOnPredicate).ToList(); + public static List GetOpponentOpenSlots(this BoardManager manager, Predicate filterOnPredicate = null) => manager.OpponentSlotsCopy.SelectOpenSlots(filterOnPredicate).ToList(); /// /// Retrieve all slots on the player or opponent's side of the board that are not occupied by a card. @@ -78,11 +64,7 @@ public static List GetOpponentOpenSlots( /// Whether to retrieve player slots. /// The predicate to filter on each slot. /// The list of relevant card slots with no cards. - public static List GetOpenSlots( - this BoardManager manager, - bool getPlayerSlots, - Predicate filterOnPredicate = null - ) => manager.GetSlotsCopy(getPlayerSlots).SelectOpenSlots(filterOnPredicate).ToList(); + public static List GetOpenSlots(this BoardManager manager, bool getPlayerSlots, Predicate filterOnPredicate = null) => manager.GetSlotsCopy(getPlayerSlots).SelectOpenSlots(filterOnPredicate).ToList(); /// /// Retrieve all slots on the board that are not occupied by a card. @@ -90,20 +72,15 @@ public static List GetOpenSlots( /// Manager instance to access. /// The predicate to filter on each slot. /// The list of relevant card slots with no cards. - public static List GetOpenSlots( - this BoardManager manager, - Predicate filterOnPredicate = null - ) => manager.AllSlotsCopy.SelectOpenSlots(filterOnPredicate).ToList(); + public static List GetOpenSlots(this BoardManager manager, Predicate filterOnPredicate = null) => manager.AllSlotsCopy.SelectOpenSlots(filterOnPredicate).ToList(); /// /// Retrieve a copy of the board slots for the player or opponent's side of the board. /// /// Manager instance to access. /// Whether to retrieve PlayerSlotsCopy or OpponentSlotsCopy. - /// The predicate to filter on each slot. /// The list corresponding to the player or opponent's side of the board. - public static List GetSlotsCopy(this BoardManager manager, bool getPlayerSlotsCopy) - => getPlayerSlotsCopy ? manager.PlayerSlotsCopy : manager.OpponentSlotsCopy; + public static List GetSlotsCopy(this BoardManager manager, bool getPlayerSlotsCopy) => getPlayerSlotsCopy ? manager.PlayerSlotsCopy : manager.OpponentSlotsCopy; /// /// Retrieve all player or opponent card slots on the board. @@ -112,9 +89,5 @@ public static List GetSlotsCopy(this BoardManager manager, bool getPla /// Whether to retrieve player card slots. /// The predicate to filter on each card slot. /// The list of relevant card slots on the board. - public static List GetCardSlots( - this BoardManager manager, - bool getPlayerCards, - Predicate filterOnPredicate = null - ) => manager.GetSlotsCopy(getPlayerCards).FindAll(filterOnPredicate); + public static List GetCardSlots(this BoardManager manager, bool getPlayerCards, Predicate filterOnPredicate = null) => manager.GetSlotsCopy(getPlayerCards).FindAll(filterOnPredicate); } \ No newline at end of file diff --git a/InscryptionAPI/Helpers/Extensions/CardSlotExtensions.cs b/InscryptionAPI/Helpers/Extensions/CardSlotExtensions.cs index 3f9996b9..832fb8ba 100644 --- a/InscryptionAPI/Helpers/Extensions/CardSlotExtensions.cs +++ b/InscryptionAPI/Helpers/Extensions/CardSlotExtensions.cs @@ -3,6 +3,9 @@ namespace InscryptionAPI.Helpers.Extensions; +/// +/// An extensions class for the Card Slot. +/// public static class CardSlotExtensions { /// @@ -35,12 +38,7 @@ public static bool HasCard(this CardSlot cardSlot, string cardName) /// Time to transition the card to the slot. The longer the time, the longer it will take to be placed at the slot. /// Whether or not to activate these triggers, in order: cards on board OtherCardAssignedToSlot, this card ResolveOnBoard, cards on board OtherCardResolve. /// The enumeration of the card being placed in the slot. - public static IEnumerator CreateCardInSlot( - this CardSlot slotToSpawnIn, - CardInfo cardInfo, - float transitionLength = 0.1f, - bool resolveTriggers = true - ) + public static IEnumerator CreateCardInSlot(this CardSlot slotToSpawnIn, CardInfo cardInfo, float transitionLength = 0.1f, bool resolveTriggers = true) { yield return BoardManager.Instance.CreateCardInSlot(cardInfo, slotToSpawnIn, transitionLength, resolveTriggers); } @@ -54,13 +52,7 @@ public static IEnumerator CreateCardInSlot( /// An action to do after the assignment has completed. /// Whether or not to activate the 'Trigger.OtherCardAssignedToSlot' for the cards on board. /// The enumeration of the card being placed in the slot. - public static IEnumerator AssignCardToSlot( - this CardSlot slotToSpawnIn, - PlayableCard playableCard, - float transitionDuration = 0.1f, - Action tweenCompleteCallback = null, - bool resolveTriggers = true - ) + public static IEnumerator AssignCardToSlot(this CardSlot slotToSpawnIn, PlayableCard playableCard, float transitionDuration = 0.1f, Action tweenCompleteCallback = null, bool resolveTriggers = true) { yield return BoardManager.Instance.AssignCardToSlot(playableCard, slotToSpawnIn, transitionDuration, tweenCompleteCallback, resolveTriggers); } @@ -74,13 +66,7 @@ public static IEnumerator AssignCardToSlot( /// An action to do after the assignment has completed, but before 'ResolveOnBoard' triggers. /// Whether or not to activate these triggers, in order: cards on board OtherCardAssignedToSlot, this card ResolveOnBoard, cards on board OtherCardResolve. /// The enumeration of the card being placed in the slot. - public static IEnumerator ResolveCardOnBoard( - this CardSlot slotToSpawnIn, - PlayableCard playableCard, - float tweenLength = 0.1f, - Action landOnBoardCallback = null, - bool resolveTriggers = true - ) + public static IEnumerator ResolveCardOnBoard(this CardSlot slotToSpawnIn, PlayableCard playableCard, float tweenLength = 0.1f, Action landOnBoardCallback = null, bool resolveTriggers = true) { yield return BoardManager.Instance.ResolveCardOnBoard(playableCard, slotToSpawnIn, tweenLength, landOnBoardCallback, resolveTriggers); } @@ -128,9 +114,7 @@ public static CardSlot GetAdjacent(this CardSlot cardSlot, bool adjacentOnLeft) /// An IEnumerable of PlayableCard from the CardSlots sequence. public static IEnumerable SelectCards(this IEnumerable slots, Predicate filterOnPredicate = null) { - return slots - .Where(slot => slot.Card && (filterOnPredicate == null || filterOnPredicate.Invoke(slot.Card))) - .Select(slot => slot.Card); + return slots.Where(slot => slot.Card && (filterOnPredicate == null || filterOnPredicate.Invoke(slot.Card))).Select(slot => slot.Card); } /// diff --git a/InscryptionAPI/Helpers/Extensions/GameObjectExtensions.cs b/InscryptionAPI/Helpers/Extensions/GameObjectExtensions.cs index be1629b4..af5eb9c6 100644 --- a/InscryptionAPI/Helpers/Extensions/GameObjectExtensions.cs +++ b/InscryptionAPI/Helpers/Extensions/GameObjectExtensions.cs @@ -2,8 +2,17 @@ namespace InscryptionAPI.Helpers.Extensions; +/// +/// An Extensions Class for the +/// public static class GameObjectExtensions { + /// + /// Finds the Children of a Given + /// + /// The we want to find the children of. + /// The name of the child we are looking for within the children. + /// A with the name being looked for. public static GameObject FindChild(this GameObject parent, string name) { if (parent.name == name) diff --git a/InscryptionAPI/Helpers/Extensions/ListExtensions.cs b/InscryptionAPI/Helpers/Extensions/ListExtensions.cs index f6195781..58810bf5 100644 --- a/InscryptionAPI/Helpers/Extensions/ListExtensions.cs +++ b/InscryptionAPI/Helpers/Extensions/ListExtensions.cs @@ -2,8 +2,17 @@ namespace InscryptionAPI.Helpers.Extensions; +/// +/// An Extensions Class for the . +/// public static class ListExtensions { + /// + /// Removes the First element of the passed . + /// + /// The in which we want to remove the First item of. + /// The type of we are operating on, for example where T is would result in the Type being . + /// Returns the First item of after removing it from the . public static T PopFirst(this List list) { T t = list[0]; @@ -11,6 +20,12 @@ public static T PopFirst(this List list) return t; } + /// + /// Removes the Last element of the passed . + /// + /// The in which we want to remove the Last item of. + /// The type of we are operating on, for example where T is would result in the Type being . + /// Returns the Last item of after removing it from the . public static T PopLast(this List list) { T t = list[list.Count - 1]; @@ -18,6 +33,13 @@ public static T PopLast(this List list) return t; } + /// + /// Repeatedly adds the specified item to a X times. + /// + /// The Item in which we want to repeat. + /// The amount of times we want to repeat it. + /// The type of we are operating on, for example where T is would result in the Type being . + /// A new of the item specified by repeated for the amount of times specified by the parameter. public static List Repeat(this T toRepeat, int times) { List repeated = new(); @@ -31,12 +53,24 @@ public static List Repeat(this T toRepeat, int times) return repeated; } + /// + /// A function used to get a Random item from the . + /// + /// The we are using to get a Random Item from. + /// The type of we are operating on, for example where T is would result in the Type being . + /// A Random element from the passed using public static T GetRandom(this List list) { int index = UnityEngine.Random.Range(0, list.Count); return list[index]; } + /// + /// A function used to get a Seeded Random item from the . + /// + /// The we are using to get a Seeded Random Item from. + /// The type of we are operating on, for example where T is would result in the Type being . + /// A Seeded Random element from the passed using public static T GetSeededRandom(this List list, int seed) { int index = SeededRandom.Range(0, list.Count, seed); diff --git a/InscryptionAPI/Helpers/MaterialOverride.cs b/InscryptionAPI/Helpers/MaterialOverride.cs index 4ad0696d..434984c9 100644 --- a/InscryptionAPI/Helpers/MaterialOverride.cs +++ b/InscryptionAPI/Helpers/MaterialOverride.cs @@ -2,79 +2,200 @@ namespace InscryptionAPI.Helpers; +/// +/// A Helper Object for Materials on an Object. +/// public class MaterialOverride { + /// + /// The Main Texture as a . + /// public Texture2D MainTexture = null; + /// + /// Whether the Main Texture should be Overwritten or not. + /// public bool OverrideMainTexture = false; - + /// + /// The Emission Texture as a . + /// public Texture2D Emission = null; + /// + /// Whether the Emission Texture should be Overwritten or not. + /// public bool OverrideEmission = false; - + /// + /// The Normal Map as a . + /// public Texture2D NormalMap = null; + /// + /// Whether the Normal Map should be Overwritten or not. + /// public bool OverrideNormalMap = false; - + /// + /// The Height Map as a . + /// public Texture2D HeightMap = null; + /// + /// Whether the Height Map should be Overwritten or not. + /// public bool OverrideHeightMap = false; - + /// + /// The Metallic Map as a . + /// public Texture2D MetallicMap = null; + /// + /// Whether the Metallic Map should be Overwritten or not. + /// public bool OverrideMetallicMap = false; - + /// + /// The Occlusion Map as a . + /// public Texture2D OcclusionMap = null; + /// + /// Whether the Occlusion Map should be Overwritten or not. + /// public bool OverrideOcclusionMap = false; - + /// + /// The Detail Mask as a . + /// public Texture2D DetailMask = null; + /// + /// Whether the Detail Mask should be Overwritten or not. + /// public bool OverrideDetailMask = false; - + /// + /// The Metallic Surface Property. How Metallic should the Material be? + /// public float? Metallic = null; + /// + /// Whether the Metallic Value should be Overwritten or not. + /// + public bool OverrideMetallic = false; + /// + /// The Surface Smoothness Property. How Smooth should the Material be? + /// public float? Smoothness = null; + /// + /// Whether the Smoothness Value should be Overwritten or not. + /// + public bool OverrideSmoothness = false; + /// + /// The Displacement Height Property. How displaced should the Material be compared to the Model it is applied to? + /// public float? Height = null; - + /// + /// Whether the Height Value should be Overwritten or not. + /// + public bool OverrideHeight = false; + + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. public MaterialOverride ChangeMainTexture(Texture2D tex) { MainTexture = tex; OverrideMainTexture = true; return this; } - + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. public MaterialOverride ChangeEmission(Texture2D tex) { Emission = tex; OverrideEmission = true; return this; } - + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. public MaterialOverride ChangeNormalMap(Texture2D tex) { NormalMap = tex; OverrideNormalMap = true; return this; } - + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. public MaterialOverride ChangeHeightMap(Texture2D tex) { HeightMap = tex; OverrideHeightMap = true; return this; } - + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. public MaterialOverride ChangeMetallicMap(Texture2D tex) { MetallicMap = tex; OverrideMetallicMap = true; return this; } - + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. public MaterialOverride ChangeOcclusionMap(Texture2D tex) { OcclusionMap = tex; OverrideOcclusionMap = true; return this; } - + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. public MaterialOverride ChangeDetailMask(Texture2D tex) { DetailMask = tex; OverrideMainTexture = true; return this; } + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. + public MaterialOverride ChangeMetallic(float metallic) + { + Metallic = metallic; + OverrideMetallic = true; + return this; + } + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. + public MaterialOverride ChangeSmoothness(float smoothness) + { + Smoothness = smoothness; + OverrideSmoothness = true; + return this; + } + /// + /// A function for changing the of a . + /// + /// The in which to use to replace . + /// An Overwritten and set to true. + public MaterialOverride ChangeHeight(float height) + { + Height = height; + OverrideHeight = true; + return this; + } } diff --git a/InscryptionAPI/Helpers/ResourceLookup.cs b/InscryptionAPI/Helpers/ResourceLookup.cs index d7422530..65da8c8d 100644 --- a/InscryptionAPI/Helpers/ResourceLookup.cs +++ b/InscryptionAPI/Helpers/ResourceLookup.cs @@ -1,17 +1,31 @@ -using InscryptionAPI.Helpers; -using UnityEngine; +using UnityEngine; -namespace InscryptionAPI.Items; +namespace InscryptionAPI.Helpers; /// -/// Define how an asset should be retrieved so we can fetch it at any time. +/// A Helper Object for ResourceLookup. /// +/// Define how an asset should be retrieved so we can fetch it at any time. public class ResourceLookup : ICloneable { + /// + /// The Path to the Resource. + /// public string ResourcePath { get; private set; } + /// + /// The Resources BankID. + /// public string ResourceBankID { get; private set; } + /// + /// The Prefab associated with the Lookup. + /// public GameObject Prefab { get; private set; } + /// + /// Gets a Prefab from the passed Path and Prefab Name. + /// + /// The Path to the in which to search for the Prefab. + /// The Name of the Prefab we are searching for in the . public void FromAssetBundle(string assetBundlePath, string assetBundlePrefabName) { if (AssetBundleHelper.TryGet(assetBundlePath, assetBundlePrefabName, out GameObject go)) @@ -19,7 +33,11 @@ public void FromAssetBundle(string assetBundlePath, string assetBundlePrefabName Prefab = go; } } - + /// + /// Gets a Prefab from the passed and Prefab Name. + /// + /// The in which to search for the Prefab. + /// The Name of the Prefab we are searching for in the . public void FromAssetBundle(AssetBundle assetBundle, string assetBundlePrefabName) { if (AssetBundleHelper.TryGet(assetBundle, assetBundlePrefabName, out GameObject go)) @@ -27,7 +45,12 @@ public void FromAssetBundle(AssetBundle assetBundle, string assetBundlePrefabNam Prefab = go; } } - + /// + /// Gets a Prefab from the passed DLL based Path and Prefab Name. + /// + /// The Path to the Asset Bundle within the DLL Assembly. + /// The Name of the Prefab we are searching for in the . + /// public void FromAssetBundleInAssembly(string assetBundlePath, string assetBundlePrefabName) { byte[] resourceBytes = TextureHelper.GetResourceBytes(assetBundlePath, typeof(T).Assembly); @@ -36,22 +59,37 @@ public void FromAssetBundleInAssembly(string assetBundlePath, string assetBun Prefab = go; } } - + + /// + /// Sets the to the ResourcePath passed in. + /// + /// The Path to the Resource. public void FromResources(string resourcePath) { this.ResourcePath = resourcePath; } - + /// + /// Sets the to the ResourceBankID passed in. + /// + /// The ResourceBankID. public void FromResourceBank(string resourceBankID) { this.ResourceBankID = resourceBankID; } - + /// + /// Sets the to the Prefab passed in. + /// + /// The Prefab itself. public void FromPrefab(GameObject prefab) { this.Prefab = prefab; } + /// + /// Gets the UnityObject Representative of the Prefab. + /// + /// A representative of the Prefab. + /// A if successful, a Null if we failed to get the Type from the Prefab, and a Default(T) if the ResourceLookup failed. public virtual T Get() where T : UnityObject { if (!string.IsNullOrEmpty(ResourcePath)) @@ -83,14 +121,22 @@ public virtual T Get() where T : UnityObject return default(T); } + /// + /// Turns the ResourceLookup Object into a String. + /// + /// A String of the ResourceLookup Object. public override string ToString() { return $"ResourceLookup(ResourcePath:{ResourcePath}, ResourceBankID:{ResourceBankID}, Prefab:{Prefab})"; } + /// + /// Clones the Object into a Shallow Copy of the current ResourceLookup. + /// + /// A Cloned Object representing the ResourceLookup. public object Clone() { - ResourceLookup cardInfo = (ResourceLookup)base.MemberwiseClone(); - return cardInfo; + ResourceLookup resourceLookup = (ResourceLookup)base.MemberwiseClone(); + return resourceLookup; } } \ No newline at end of file diff --git a/InscryptionAPI/Helpers/ResourcesManagerHelpers.cs b/InscryptionAPI/Helpers/ResourcesManagerHelpers.cs index c872e039..4a2be356 100644 --- a/InscryptionAPI/Helpers/ResourcesManagerHelpers.cs +++ b/InscryptionAPI/Helpers/ResourcesManagerHelpers.cs @@ -7,13 +7,16 @@ namespace InscryptionAPI.Helpers; +/// +/// A Helper Set related to the . +/// public static class ResourcesManagerHelpers { /// /// Removes a given amount of energy cells, which determines how much energy a player has available at the start of a turn. /// Affected by 'ResourcesManager.preventNextEnergyLoss'. /// - /// The ResourcesManager Instance. + /// The current . /// How many energy cells to close. Gets capped to the current number of open energy cells. public static IEnumerator RemoveMaxEnergy(this ResourcesManager instance, int amount) { @@ -24,7 +27,7 @@ public static IEnumerator RemoveMaxEnergy(this ResourcesManager instance, int am /// A variant of RemoveMaxEnergy that can bypass ResourcesManager.PreventNextEnergyLoss. /// Affected by 'ResourcesManager.preventNextEnergyLoss'. /// - /// The ResourcesManager Instance. + /// The current . /// How many energy cells to close. Gets capped to the current number of open energy cells. public static IEnumerator RemoveMaxEnergy(this ResourcesManager instance, int amount, bool preventable) { @@ -44,6 +47,12 @@ public static IEnumerator RemoveMaxEnergy(this ResourcesManager instance, int am yield return instance.ShowRemoveMaxEnergy(numToClose); } + /// + /// A used to show removal of Max Energy. + /// + /// The current . + /// The amount of lost Max Energy. + /// The Depleted Energy Counter from removing the specified amount of max energy. public static IEnumerator ShowRemoveMaxEnergy(this ResourcesManager instance, int amount) { PixelResourcesManager pixelManager = instance as PixelResourcesManager; @@ -64,6 +73,13 @@ public static IEnumerator ShowRemoveMaxEnergy(this ResourcesManager instance, in yield return new WaitForSeconds(0.05f); } } + + /// + /// Gets the Amount of Gems of the passed . + /// + /// The current . + /// The we want to get the count of. + /// The Count of Gems associated with the passed . public static int GemsOfType(this ResourcesManager instance, GemType gem) { return instance.gems.Count(x => x == gem); @@ -82,6 +98,13 @@ public static int GemCount(bool playerGems, GemType gemToCheck) else return OpponentGemsManager.Instance.GemsOfType(gemToCheck); } + + /// + /// A bool used to determine whether the Owner has Gems of the specified 's. + /// + /// Whether the Check should be based on the Opponent or Player. + /// The 's in which to check if the Opponent has. + /// The result of if the Check is for the Player, otherwise the result of . public static bool OwnerHasGems(bool playerGems, params GemType[] gems) { if (playerGems) @@ -89,6 +112,12 @@ public static bool OwnerHasGems(bool playerGems, params GemType[] gems) else return OpponentHasGems(gems); } + + /// + /// A bool used to determine whether the Opponent has Gems of the specified 's. + /// + /// The 's in which to check if the Opponent has. + /// A true if the Opponent has all specified 's, a false if not. public static bool OpponentHasGems(params GemType[] gems) { if (OpponentGemsManager.Instance == null) @@ -101,6 +130,12 @@ public static bool OpponentHasGems(params GemType[] gems) } return true; } + + /// + /// A bool used to determine whether the Player has Gems of the specified 's. + /// + /// The 's in which to check if the Player has. + /// A true if the Player has all specified 's, a false if not. public static bool PlayerHasGems(params GemType[] gems) { foreach (GemType gem in gems) @@ -112,11 +147,21 @@ public static bool PlayerHasGems(params GemType[] gems) } } +/// +/// A Patch Class used to Get the Empty Battery Sprite in the GBC section. +/// [HarmonyPatch(typeof(PixelResourcesManager), nameof(PixelResourcesManager.Start))] public static class GetEmptyBatterySprite { + /// + /// The Empty Battery Sprite. + /// public static Sprite emptyBatterySprite = null; + /// + /// A function used to Get and set the . + /// + /// The Instance of the Object, in this case . [HarmonyPostfix] private static void GetSprite(PixelResourcesManager __instance) { diff --git a/InscryptionAPI/Helpers/TextureHelper.cs b/InscryptionAPI/Helpers/TextureHelper.cs index 0502a611..383bd1fc 100644 --- a/InscryptionAPI/Helpers/TextureHelper.cs +++ b/InscryptionAPI/Helpers/TextureHelper.cs @@ -8,13 +8,14 @@ namespace InscryptionAPI.Helpers; /// -/// This class contains a number of helper methods for managing textures. +/// A Helper Set related to the and . /// +/// This class contains a number of helper methods for managing textures. [HarmonyPatch] public static class TextureHelper { /// - /// Thie is used to indicate what type of sprite you wish to create so that the appropriate size and pivot point can be determined. + /// This is used to indicate what type of sprite you wish to create so that the appropriate size and pivot point can be determined. /// public enum SpriteType : int { @@ -22,76 +23,74 @@ public enum SpriteType : int /// A card's portrait art in Act 1 or Act 3. /// CardPortrait = 0, - /// /// A card's portrait art in Act 2. /// PixelPortrait = 1, - /// /// An ability icon (sigil) in Act 2. /// PixelAbilityIcon = 2, - /// /// A special stat icon in Act 2. /// PixelStatIcon = 3, - /// /// A challenge skull displayed on the challenge UI during the setup of a Kaycee's Mod run. /// ChallengeIcon = 4, - /// /// The texture that displays the card's cost in Act 1. /// CostDecal = 5, - /// /// The large decal used to display multiple/hybrid card costs in Act 1. /// OversizedCostDecal = 6, - /// /// The decal used to display card costs in Act 2, on the top-left of the card. /// Act2CostDecalLeft = 7, - /// /// The decal used to display card costs in Act 2, on the top-right of the card. /// Act2CostDecalRight = 8, - /// /// The starter deck icon displayed on the challenge UI during the setup on a Kaycee's Mod run. /// StarterDeckIcon = 9, - /// /// The decal used by the API in Act 2, comprising the entire card's dimensions. /// PixelDecal = 10, - /// /// An activated ability icon (sigil) in Act 2. /// PixelActivatedAbilityIcon = 11, - /// /// The texture for a button in Act 2 (same kind of button used for the hammer and activated sigils). /// PixelStandardButton = 12, - + /// + /// The texture for the Act 2 cost when it's on the Left. + /// Act2CostVanillaLeft = 13, - + /// + /// The texture for a Act 2 cost when it's on the right. + /// Act2CostVanillaRight = 14 }; - + /// + /// The Default Pivot to use across most Sprites. + /// private static Vector2 DEFAULT_PIVOT = new(0.5f, 0.5f); - + /// + /// A Dictionary of , representing an Emission Mapping. + /// private static readonly Dictionary emissionMap = new(); - + /// + /// A Dictionary of , used to define the Rectangular Area for a given Sprite Type. + /// private static readonly Dictionary SPRITE_RECTS = new() { { SpriteType.CardPortrait, new Rect(0f, 0f, 114f, 94f) }, @@ -107,10 +106,12 @@ public enum SpriteType : int { SpriteType.PixelDecal, new Rect(0f, 0f, 42f, 56f) }, { SpriteType.PixelActivatedAbilityIcon, new Rect(0f, 0f, 22f, 10f) }, { SpriteType.PixelStandardButton, new Rect(0f, 0f, 26f, 17f) }, - { SpriteType.Act2CostVanillaLeft, new Rect(0f, 0f, 48f, 28f) }, // vanilla costs should have a creme border on the left and right so we don't need padding + { SpriteType.Act2CostVanillaLeft, new Rect(0f, 0f, 48f, 28f) }, { SpriteType.Act2CostVanillaRight, new Rect(0f, 0f, 48f, 28f) } }; - + /// + /// A Dictionary of , used to define the Pivot Point for a given Sprite Type. + /// private static readonly Dictionary SPRITE_PIVOTS = new() { { SpriteType.CardPortrait, DEFAULT_PIVOT }, @@ -252,6 +253,11 @@ public static void RegisterEmissionForSprite(this Sprite regularSprite, Sprite e emissionMap[regularSprite] = emissionSprite; } + /// + /// A Function used to Get the Emission from the Card Portrait at first through the , and if that fails, from the . + /// + /// The Card Portrait . + /// An Emission associated with the passed Card Portrait public static Sprite GetEmissionSprite(this Sprite sprite) { if (sprite == null) @@ -260,7 +266,6 @@ public static Sprite GetEmissionSprite(this Sprite sprite) if (emissionMap.TryGetValue(sprite, out Sprite emission)) return emission; - string text = sprite.name + "_emission"; emission = ResourceBank.Get("Art/Cards/Portraits/" + text); if (emission != null) @@ -315,6 +320,12 @@ public static void TryReuseEmission(CardInfo info, Sprite alternatePortrait) emissionMap[alternatePortrait] = emissionMap[info.portraitTex]; } + /// + /// A patch to to allow for usage of Custom Emissions instead. + /// + /// The Card Portrait . + /// The returned result in this case the Emission associated with the Card Portrait within , if not found it lets vanilla handle it normally. + /// A false if the contains an Emission correlated with the Card Portrait , otherwise false to let the game handle it. [HarmonyPatch(typeof(CardDisplayer3D), nameof(CardDisplayer3D.GetEmissivePortrait))] [HarmonyPrefix] private static bool GetCustomEmission(Sprite mainPortrait, ref Sprite __result) @@ -330,9 +341,9 @@ private static bool GetCustomEmission(Sprite mainPortrait, ref Sprite __result) /// /// Reads the contents of an image file in an assembly and returns it as a byte array. /// - /// The name of the art file stored as a resource in the assembly. + /// The name of the art file stored as a resource in the assembly. /// The assembly to pull the art from. - /// The contents of the file in pathCardArt as a byte array. + /// The contents of the file in filename as a byte array. public static byte[] GetResourceBytes(string filename, Assembly target) { string lowerKey = $".{filename.ToLowerInvariant()}"; @@ -354,14 +365,6 @@ public static byte[] GetResourceBytes(string filename, Assembly target) /// /// Combines multiple textures into one, using a tiled approach. /// - /// - /// This helper has a very specific purpose. The pixels in baseTexture will be iteratively replaced with the pixels - /// in the pieces array. The X position for the i-th texture will be - /// xOffset + xStep * i. The Y position for the i-th texture will be - /// yOffset + yStep * (pieces.Count - i - 1). - /// - /// **Note**: baseTexture will be modified in-place! - /// /// The individual textures to combine into the base texture. /// The background texture for the combined texture. /// Used to set the position for individual textures. @@ -369,6 +372,14 @@ public static byte[] GetResourceBytes(string filename, Assembly target) /// Used to set the position for individual textures. /// Used to set the position for individual textures. /// The modified texture (the same Texture references as baseTexture). + /// + /// This helper has a very specific purpose. The pixels in will be iteratively replaced with the pixels + /// in the array. The X position for the i-th texture will be + /// + * i. The Y position for the i-th texture will be + /// + * (.Count - i - 1). + /// + /// Note: will be modified in-place! + /// public static Texture2D CombineTextures(List pieces, Texture2D baseTexture, int xStep = 0, int yStep = 0, int xOffset = 0, int yOffset = 0) { if (pieces != null) @@ -387,42 +398,18 @@ public static Texture2D CombineTextures(List pieces, Texture2D baseTe /// Creates an identical copy of a given texture /// /// The texture to copy. + /// This code originates from public static Texture2D DuplicateTexture(Texture2D texture) { - // https://support.unity.com/hc/en-us/articles/206486626-How-can-I-get-pixels-from-unreadable-textures- - // Create a temporary RenderTexture of the same size as the texture - - RenderTexture tmp = RenderTexture.GetTemporary( - texture.width, - texture.height, - 0, - RenderTextureFormat.Default, - RenderTextureReadWrite.Linear); - - - // Blit the pixels on texture to the RenderTexture + RenderTexture tmp = RenderTexture.GetTemporary(texture.width, texture.height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Linear); Graphics.Blit(texture, tmp); - - // Backup the currently set RenderTexture RenderTexture previous = RenderTexture.active; - - // Set the current RenderTexture to the temporary one we created RenderTexture.active = tmp; - - // Create a new readable Texture2D to copy the pixels to it - Texture2D myTexture2D = new(texture.width, texture.height); - - // Copy the pixels from the RenderTexture to the new Texture myTexture2D.ReadPixels(new Rect(0, 0, tmp.width, tmp.height), 0, 0); myTexture2D.Apply(); - - // Reset the active RenderTexture RenderTexture.active = previous; - - // Release the temporary RenderTexture RenderTexture.ReleaseTemporary(tmp); - return myTexture2D; } @@ -525,4 +512,4 @@ public static Dictionary GetCustomAppearanceTypeFromDictionar } #endregion -} +} \ No newline at end of file diff --git a/InscryptionAPI/Helpers/TranspilerHelpers.cs b/InscryptionAPI/Helpers/TranspilerHelpers.cs index 10a1f563..cf0b1b05 100644 --- a/InscryptionAPI/Helpers/TranspilerHelpers.cs +++ b/InscryptionAPI/Helpers/TranspilerHelpers.cs @@ -2,9 +2,17 @@ namespace InscryptionAPI.Helpers; +/// +/// A Helper Set related to the Transpiler. +/// public static class TranspilerHelpers { - public static void LogCodeInscryptions(this List codes, string prefix = null) + /// + /// A function used to log OpCode Intructions. + /// + /// The List of OpCodes to Log. + /// An Optional Prefix to help indicate where the Logs Originate, or what the OpCodes relate to. + public static void LogCodeInstructions(this List codes, string prefix = null) { string p = prefix ?? ""; for (int i = 0; i < codes.Count; i++) diff --git a/InscryptionAPI/Items/ConsumableItemManager.cs b/InscryptionAPI/Items/ConsumableItemManager.cs index 9922bf71..83bd5b16 100644 --- a/InscryptionAPI/Items/ConsumableItemManager.cs +++ b/InscryptionAPI/Items/ConsumableItemManager.cs @@ -10,7 +10,6 @@ namespace InscryptionAPI.Items; - public static class ConsumableItemManager { public class FullConsumableItemData diff --git a/InscryptionAPI/Items/ConsumableItemResource.cs b/InscryptionAPI/Items/ConsumableItemResource.cs index 56f58bfa..14489c10 100644 --- a/InscryptionAPI/Items/ConsumableItemResource.cs +++ b/InscryptionAPI/Items/ConsumableItemResource.cs @@ -1,4 +1,5 @@ using DiskCardGame; +using InscryptionAPI.Helpers; using UnityEngine; namespace InscryptionAPI.Items; diff --git a/InscryptionAPI/Masks/MaskBehaviour.cs b/InscryptionAPI/Masks/MaskBehaviour.cs index ce8fe5db..38f9a072 100644 --- a/InscryptionAPI/Masks/MaskBehaviour.cs +++ b/InscryptionAPI/Masks/MaskBehaviour.cs @@ -101,7 +101,6 @@ protected virtual void OverrideSmoothnessValue(MaterialOverride materialOverride protected virtual void OverrideMetallic(MaterialOverride materialOverride, Material material) { - material.SetFloat("_Metallic", materialOverride.Metallic.Value); } diff --git a/InscryptionAPI/Masks/MaskManager.cs b/InscryptionAPI/Masks/MaskManager.cs index 285d344b..d9700b66 100644 --- a/InscryptionAPI/Masks/MaskManager.cs +++ b/InscryptionAPI/Masks/MaskManager.cs @@ -83,7 +83,7 @@ public static CustomMask Override(string guid, string name, LeshyAnimationContro /// /// GUID of your mod. /// Name of the mask. - /// The mask we want to add so we cna tell leshy to put on that specific mask. + /// The mask we want to add so we can tell leshy to put on that specific mask. /// The model the mask will use. /// . /// . diff --git a/InscryptionAPI/Masks/Patches.cs b/InscryptionAPI/Masks/Patches.cs index bb419dc1..82087a8f 100644 --- a/InscryptionAPI/Masks/Patches.cs +++ b/InscryptionAPI/Masks/Patches.cs @@ -1,5 +1,6 @@ using DiskCardGame; using HarmonyLib; +using InscryptionAPI.Helpers; using InscryptionAPI.Items; using UnityEngine; From d2f115b67b42e37804443b9f19e3e977cc81d5bc Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Sat, 3 Oct 2026 21:14:52 -0400 Subject: [PATCH 09/28] Add Debug Logging related to `GenerateTradeCardsWithCostTier`. * Puts `SteelTrapDeathPatch.cs` under the `InscryptionAPI.Card.Patches` Namespace. * Adds a Patch that Injects Debug Logging related to `GenerateTradeCardsWithCostTier` issues. * Adds a Configuration for enabling the Logging. * Adds Debug Logging for the Entiere `CardLoader.LearnedCards` List. Signed-off-by: Chaosyr --- ...rdsWithCostTierWithOptionalDebugLogging.cs | 206 ++++++++++++++ .../Card/Patches/SteelTrapDeathPatch.cs | 2 +- InscryptionAPI/InscryptionAPIPlugin.cs | 267 ++++++++++++++++++ 3 files changed, 474 insertions(+), 1 deletion(-) create mode 100644 InscryptionAPI/Card/Patches/PatchGenerateTradeCardsWithCostTierWithOptionalDebugLogging.cs diff --git a/InscryptionAPI/Card/Patches/PatchGenerateTradeCardsWithCostTierWithOptionalDebugLogging.cs b/InscryptionAPI/Card/Patches/PatchGenerateTradeCardsWithCostTierWithOptionalDebugLogging.cs new file mode 100644 index 00000000..c26a2734 --- /dev/null +++ b/InscryptionAPI/Card/Patches/PatchGenerateTradeCardsWithCostTierWithOptionalDebugLogging.cs @@ -0,0 +1,206 @@ +using DiskCardGame; +using HarmonyLib; +using InscryptionAPI.Guid; +using UnityEngine; + +namespace InscryptionAPI.Card.Patches; + +/// +/// A Patch in which injects Loggers and Validation Check Logging into 'GenerateTradeCardsWithCostTier' before it runs to try and debug errors related to it. +/// +[HarmonyPatch(typeof(TradeCardsForPelts), "GenerateTradeCardsWithCostTier")] +internal static class PatchGenerateTradeCardsWithCostTierWithOptionalDebugLogging +{ + /// + /// Makes our system Log 'GenerateTradeCardsWithCostTier' related issues. + /// + /// The Number Of Cards to Generate. + /// The Tier of Cards that should be Generated. + /// The RandomSeed associated with the Generation. + [HarmonyPrefix] + private static void Prefix(int numCards, int tier, int randomSeed) + { + try + { + LogGenerateTradeCardsWithCostTierState(numCards, tier, randomSeed); + } + catch (Exception ex) + { + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogError($"[TradeCardsForPelts Debug] Prefix logging failed. " + $"The original GenerateTradeCardsWithCostTier method will still run. " + $"Exception: {ex}"); + } + } + } + + /// + /// A function use to Log relevant info and checks for 'GenerateTradeCardsWithCostTier'. + /// + /// The Number Of Cards to Generate. + /// The Tier of Cards that should be Generated. + /// The RandomSeed associated with the Generation. + private static void LogGenerateTradeCardsWithCostTierState(int numCards, int requestedTier, int randomSeed) + { + bool flag = requestedTier > 0; + int effectiveTier = Mathf.Max(1, requestedTier); + + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogDebug($"===== GenerateTradeCardsWithCostTier pre-run ===== " + $"numCards={numCards}, " + $"requestedTier={requestedTier}, " + $"effectiveTier={effectiveTier}, " + $"randomSeed={randomSeed}, " + $"flag={flag}"); + } + List learnedCards = CardLoader.LearnedCards; + + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogDebug($"[TradeCardsForPelts Debug] LearnedCards count before vanilla filtering: {learnedCards.Count}"); + } + for (int index = 0; index < learnedCards.Count; index++) + { + CardInfo card = learnedCards[index]; + + if (card == null) + { + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogError($"[TradeCardsForPelts Debug] NULL CardInfo in CardLoader.LearnedCards " + $"at index={index}."); + } + continue; + } + + CardTemple temple; + int costTier; + + try + { + temple = card.temple; + costTier = card.CostTier; + } + catch (Exception ex) + { + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogError($"[TradeCardsForPelts Debug] Failed while evaluating vanilla outer predicate | " + $"index={index} | " + $"card={GetCardName(card)} | " + $"exception={ex}"); + } + continue; + } + + if (temple != CardTemple.Nature || costTier != effectiveTier) + continue; + + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogDebug($"[TradeCardsForPelts Debug] Vanilla ability-filter candidate | " + $"index={index} | " + $"card={GetCardName(card)} | " + $"temple={temple} | " + $"costTier={costTier} | " + $"baseAbilities=[{FormatAbilities(card.abilities)}] | " + $"mods={card.mods?.Count ?? 0}"); + } + List effectiveAbilities; + + try + { + effectiveAbilities = card.Abilities; + } + catch (Exception ex) + { + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogError($"[TradeCardsForPelts Debug] card.Abilities threw while evaluating the " + $"same property vanilla will use | " + $"index={index} | " + $"card={GetCardName(card)} | " + $"exception={ex}"); + } + continue; + } + + if (effectiveAbilities == null) + { + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogError($"[TradeCardsForPelts Debug] NULL effective CardInfo.Abilities list | " + $"index={index} | " + $"card={GetCardName(card)} | " + $"tier={effectiveTier} | " + $"mods={card.mods?.Count ?? 0}"); + } + continue; + } + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogDebug($"[TradeCardsForPelts Debug] Effective abilities | " + $"index={index} | " + $"card={GetCardName(card)} | " + $"abilities=[{FormatAbilities(effectiveAbilities)}]"); + } + for (int abilityIndex = 0; abilityIndex < effectiveAbilities.Count; abilityIndex++) + { + Ability ability = effectiveAbilities[abilityIndex]; + string abilityName = GetGuidAndKey(ability); + + AbilityInfo abilityInfo; + + try + { + abilityInfo = AbilitiesUtil.GetInfo(ability); + } + catch (Exception ex) + { + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogError($"[TradeCardsForPelts Debug] AbilitiesUtil.GetInfo threw | " + $"card={GetCardName(card)} | " + $"tier={effectiveTier} | " + $"abilityIndex={abilityIndex} | " + $"ability={abilityName} | " + $"rawValue={(int)ability} | " + $"exception={ex}"); + } + continue; + } + + if (abilityInfo == null) + { + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogError($"[TradeCardsForPelts Debug] VANILLA NRE CANDIDATE: " + $"AbilitiesUtil.GetInfo returned null | " + $"card={GetCardName(card)} | " + $"tier={effectiveTier} | " + $"abilityIndex={abilityIndex} | " + $"ability={abilityName} | " + $"rawValue={(int)ability} | " + $"baseAbilities=[{FormatAbilities(card.abilities)}] | " + $"effectiveAbilities=[{FormatAbilities(effectiveAbilities)}] | " + $"mods={card.mods?.Count ?? 0} | " + $"vanillaExpression=!AbilitiesUtil.GetInfo(a).opponentUsable"); + } + continue; + } + + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogDebug($"[TradeCardsForPelts Debug] Ability lookup OK | " + $"card={GetCardName(card)} | " + $"tier={effectiveTier} | " + + $"abilityIndex={abilityIndex} | " + $"ability={abilityName} | " + $"rawValue={(int)ability} | " + $"opponentUsable={abilityInfo.opponentUsable}"); + } + } + } + if (InscryptionAPI.InscryptionAPIPlugin.configEnableTraderCostTierBugDebugLogging.Value) + { + InscryptionAPI.InscryptionAPIPlugin.Logger.LogDebug("===== End GenerateTradeCardsWithCostTier pre-run ====="); + } + } + + /// + /// Formats the Passed Abilities as a String. + /// + /// The Abilities to cast into the String. + /// A Formatted Abilities String. + private static string FormatAbilities(IEnumerable abilities) + { + if (abilities == null) + return "null"; + + return string.Join(", ", abilities.Select(GetGuidAndKey)); + } + + /// + /// Gets a GUID and Key associated with a Ability from the passed in Ability Value. + /// + /// The Ability we want to get the String Name of. + /// A String representing the Ability either via the GUID system or the Enum System. + private static string GetGuidAndKey(Ability ability) + { + if (GuidManager.TryGetGuidAndKeyEnumValue(ability, out string guid, out string key)) + return $"{guid}_{key}"; + + return ability.ToString(); + } + + /// + /// Gets the Card Name and DisplayName of the passed in Card. + /// + /// The Card to get the Name of. + /// A string of the Card's Name and DisplayName. + private static string GetCardName(CardInfo card) + { + if (card == null) + return "null"; + + string internalName = string.IsNullOrEmpty(card.name) ? "null" : card.name; + string displayedName = string.IsNullOrEmpty(card.DisplayedNameEnglish) + ? "null" + : card.DisplayedNameEnglish; + + return $"{internalName} ({displayedName})"; + } +} \ No newline at end of file diff --git a/InscryptionAPI/Card/Patches/SteelTrapDeathPatch.cs b/InscryptionAPI/Card/Patches/SteelTrapDeathPatch.cs index db541bb5..0bdb1f1f 100644 --- a/InscryptionAPI/Card/Patches/SteelTrapDeathPatch.cs +++ b/InscryptionAPI/Card/Patches/SteelTrapDeathPatch.cs @@ -5,7 +5,7 @@ using MonoMod.Cil; using UnityEngine; -namespace InscryptionAPI.Card; +namespace InscryptionAPI.Card.Patches; /// /// Patches the Steal Trap Death system to drop a differed pelt on the case the opposing card has the "SteelTrapPelt" extended property. diff --git a/InscryptionAPI/InscryptionAPIPlugin.cs b/InscryptionAPI/InscryptionAPIPlugin.cs index 91bdd9b1..18d645f7 100644 --- a/InscryptionAPI/InscryptionAPIPlugin.cs +++ b/InscryptionAPI/InscryptionAPIPlugin.cs @@ -18,6 +18,7 @@ using InscryptionAPI.Totems; using System.Reflection; using System.Runtime.CompilerServices; +using InscryptionAPI.Guid; using InscryptionAPI.Helpers; using Sirenix.Utilities; @@ -77,6 +78,10 @@ public class InscryptionAPIPlugin : BaseUnityPlugin /// This Configuration is used for determining what Item Model should be used in game. /// internal static ConfigEntry configCustomItemModelSelection; + /// + /// This Configuration is used for determining whether we should Log Debugging for the TraderCostTier Bug. + /// + internal static ConfigEntry configEnableTraderCostTierBugDebugLogging; /// /// Prevents API 1.0.0 Versions from Loaing. @@ -184,6 +189,7 @@ private void Awake() configOverrideArrows = Config.Bind("Menus", "Override Arrows", false, "When true, forces the challenge screen arrows to appear at the top of the screen instead of the sides."); configRandomCostChoiceOrder = Config.Bind("Miscellaneous", "Randomise Cost Choice Order", false, "When true, randomises the order card cost choices are presented in Act 1."); configHideAct1BossScenery = Config.Bind("Optimization", "Hide Act 1 Scenery", false, "When true bosses will not spawn their scenery. (eg: Prospector's trees) This can improve performance on low-end machines."); + configEnableTraderCostTierBugDebugLogging = Config.Bind("Zebugging", "Enable Logging for Info related to the 'GenerateTradeCardsWithCostTier' method", false, "May be of use for debugging issues related to 'GenerateTradeCardsWithCostTier', by how much no clue. Set this to True to enable the Logging."); } /// @@ -200,6 +206,267 @@ private void Start() PixelCardManager.Initialise(); PeltManager.CreateDialogueEvents(); Logger.LogDebug($"Inserted {DialogueManager.CustomDialogue.Count} dialogue event(s)!"); + DebugLoggingForGenerateTradeCardsWithCostTier(); + } + + /// + /// A Function in which Logs some Debug related to 'GenerateTradeCardsWithCostTier'. There is more related Logging, this is just the Start of it. + /// + private void DebugLoggingForGenerateTradeCardsWithCostTier() + { + foreach (CardInfo info in CardLoader.LearnedCards) + { + if (configEnableTraderCostTierBugDebugLogging.Value) + { + if (info == null) + { + Logger.LogError("CardLoader.LearnedCards contains a null CardInfo."); + continue; + } + + Logger.LogDebug($"===== CardInfo: {info.displayedName ?? info.name ?? "null"} ====="); + + Logger.LogDebug($"name: {info.name ?? "null"}"); + Logger.LogDebug($"displayedName: {info.displayedName ?? "null"}"); + Logger.LogDebug($"displayedNameLocId: {info.displayedNameLocId}"); + Logger.LogDebug($"description: {info.description ?? "null"}"); + + Logger.LogDebug($"baseAttack: {info.baseAttack}"); + Logger.LogDebug($"baseHealth: {info.baseHealth}"); + + Logger.LogDebug($"cost: {info.cost}"); + Logger.LogDebug($"bonesCost: {info.bonesCost}"); + Logger.LogDebug($"energyCost: {info.energyCost}"); + Logger.LogDebug($"gemsCost: {string.Join(", ", info.gemsCost?.Select(x => GetGuidAndKey(x)) ?? Enumerable.Empty())}"); + + Logger.LogDebug($"cardComplexity: {info.cardComplexity}"); + Logger.LogDebug($"temple: {info.temple}"); + Logger.LogDebug($"onePerDeck: {info.onePerDeck}"); + Logger.LogDebug($"hideAttackAndHealth: {info.hideAttackAndHealth}"); + + Logger.LogDebug($"metaCategories: {string.Join(", ", info.metaCategories?.Select(x => GetGuidAndKey(x)) ?? Enumerable.Empty())}"); + Logger.LogDebug($"tribes: {string.Join(", ", info.tribes?.Select(x => GetGuidAndKey(x)) ?? Enumerable.Empty())}"); + Logger.LogDebug($"traits: {string.Join(", ", info.traits?.Select(x => GetGuidAndKey(x)) ?? Enumerable.Empty())}"); + + Logger.LogDebug($"abilities: {string.Join(", ", info.abilities?.Select(x => GetGuidAndKey(x)) ?? Enumerable.Empty())}"); + Logger.LogDebug($"ascensionAbilities: {string.Join(", ", info.ascensionAbilities?.Select(x => GetGuidAndKey(x)) ?? Enumerable.Empty())}"); + Logger.LogDebug($"specialAbilities: {string.Join(", ", info.specialAbilities?.Select(x => GetGuidAndKey(x)) ?? Enumerable.Empty())}"); + + LogAbilityInfos(info, "abilities", info.abilities); + LogAbilityInfos(info, "ascensionAbilities", info.ascensionAbilities); + + Logger.LogDebug($"evolveParams: {GetEvolveParams(info.evolveParams)}"); + Logger.LogDebug($"defaultEvolutionName: {info.defaultEvolutionName ?? "null"}"); + + Logger.LogDebug($"tailParams: {GetTailParams(info.tailParams)}"); + Logger.LogDebug($"iceCubeParams: {GetIceCubeParams(info.iceCubeParams)}"); + + Logger.LogDebug($"flipPortraitForStrafe: {info.flipPortraitForStrafe}"); + + Logger.LogDebug($"specialStatIcon: {info.specialStatIcon}"); + Logger.LogDebug($"boon: {info.boon}"); + + Logger.LogDebug($"mods: {info.mods?.Count ?? 0}"); + Logger.LogDebug($"temporaryDecals: {info.temporaryDecals?.Count ?? 0}"); + Logger.LogDebug($"get_decals: {info.get_decals?.Count ?? 0}"); + + Logger.LogDebug($"Calculated Attack: {info.Attack}"); + Logger.LogDebug($"Calculated Health: {info.Health}"); + Logger.LogDebug($"Calculated BloodCost: {info.BloodCost}"); + Logger.LogDebug($"Calculated BonesCost: {info.BonesCost}"); + Logger.LogDebug($"Calculated EnergyCost: {info.EnergyCost}"); + Logger.LogDebug($"Calculated Gemified: {info.Gemified}"); + Logger.LogDebug($"Calculated CostTier: {info.CostTier}"); + Logger.LogDebug($"Calculated Sacrificable: {info.Sacrificable}"); + Logger.LogDebug($"Calculated PowerLevel: {info.PowerLevel}"); + Logger.LogDebug($"Calculated NumAbilities: {info.NumAbilities}"); + + Logger.LogDebug($"===== End CardInfo: {info.displayedName ?? info.name ?? "null"} ====="); + } + } + LogTradeCardAbilityInfoIssues(); + } + + /// + /// Gets a GUID and Key associated with a Type of Enum from the passed in Enum Value. + /// + /// The Enum we want to get the String Name of. + /// The Enum Type. + /// A String representing the Enum either via the GUID system or the Enum System. + private string GetGuidAndKey(T value) where T : System.Enum + { + if (GuidManager.TryGetGuidAndKeyEnumValue(value, out string guid, out string key)) + return $"{guid}_{key}"; + + return value.ToString(); + } + + /// + /// Gets the String Name and DisplayName from a CardInfo. + /// + /// The Card we want to get the DisplayName of. + /// The Card Name and DisplayName of the passed in Card as a String. + private string GetCardName(CardInfo card) + { + if (card == null) + return "null"; + + return $"{card.name} ({card.DisplayedNameEnglish})"; + } + + /// + /// Gets the String version of the . + /// + /// The we want to turn into a String. + /// The in the form of a String. + private string GetEvolveParams(EvolveParams evolveParams) + { + if (evolveParams == null) + return "null"; + + return $"turnsToEvolve={evolveParams.turnsToEvolve}, evolution={GetCardName(evolveParams.evolution)}"; + } + + /// + /// Gets the String version of the . + /// + /// The we want to turn into a String. + /// The in the form of a String. + private string GetTailParams(TailParams tailParams) + { + if (tailParams == null) + return "null"; + + return $"tail={GetCardName(tailParams.tail)}, tailLostPortrait={(tailParams.tailLostPortrait != null ? tailParams.tailLostPortrait.name : "null")}"; + } + + /// + /// Gets the String version of the . + /// + /// The we want to turn into a String. + /// The in the form of a String. + private string GetIceCubeParams(IceCubeParams iceCubeParams) + { + if (iceCubeParams == null) + return "null"; + + return $"creatureWithin={GetCardName(iceCubeParams.creatureWithin)}"; + } + + /// + /// A function that allows us to Log Ability Infos. + /// + /// The Card in which bears the AbilityInfos. + /// The Source of the AbilityInfos. + /// The List of Abilities in which we want to Log. + private void LogAbilityInfos(CardInfo card, string source, IEnumerable abilities) + { + if (abilities == null) + { + Logger.LogDebug($"{source} AbilityInfo validation: null"); + return; + } + + foreach (Ability ability in abilities) + { + AbilityInfo abilityInfo = AbilitiesUtil.GetInfo(ability); + string abilityId = GetGuidAndKey(ability); + + if (abilityInfo == null) + { + Logger.LogError($"MISSING AbilityInfo | " + $"card={GetCardName(card)} | " + $"source={source} | " + $"ability={abilityId} | " + $"rawValue={(int)ability}"); + continue; + } + + Logger.LogDebug($"AbilityInfo | " + $"card={GetCardName(card)} | " + $"source={source} | " + $"ability={abilityId} | " + $"rawValue={(int)ability} | " + $"opponentUsable={abilityInfo.opponentUsable} | " + $"passive={abilityInfo.passive} | " + $"activated={abilityInfo.activated} | " + $"powerLevel={abilityInfo.powerLevel} | " + $"canStack={abilityInfo.canStack} | " + $"conduit={abilityInfo.conduit} | " + $"conduitCell={abilityInfo.conduitCell} | " + $"keywordAbility={abilityInfo.keywordAbility} | " + $"rulebookName={abilityInfo.rulebookName ?? "null"}"); + } + } + + /// + /// A function we can run at Startup to try and Validate any Trade Issues that may arise from 'GenerateTradeCardsWithCostTier'. Logging is enabled via 'configEnableTraderCostTierBugDebugLogging'. + /// + private void LogTradeCardAbilityInfoIssues() + { + List learnedCards = CardLoader.LearnedCards; + + if (configEnableTraderCostTierBugDebugLogging.Value) + { + Logger.LogDebug($"Learned card count: {learnedCards.Count}"); + } + + foreach (CardInfo card in learnedCards) + { + if (card.temple != CardTemple.Nature) + continue; + + int costTier; + + try + { + costTier = card.CostTier; + } + catch (Exception ex) + { + if (configEnableTraderCostTierBugDebugLogging.Value) + { + Logger.LogError($"Could not calculate CostTier | " + $"card={GetCardName(card)} | " + $"exception={ex}"); + } + continue; + } + + if (configEnableTraderCostTierBugDebugLogging.Value) + { + Logger.LogDebug($"Trade candidate | " + $"card={GetCardName(card)} | " + $"tier={costTier} | " + $"bloodCost={card.BloodCost} | " + $"bonesCost={card.BonesCost} | " + $"energyCost={card.EnergyCost} | " + $"abilitiesNull={card.abilities == null}"); + } + + if (card.abilities == null) + { + if (configEnableTraderCostTierBugDebugLogging.Value) + { + Logger.LogError($"NULL abilities list | " + $"card={GetCardName(card)} | " + $"tier={costTier}"); + } + continue; + } + + if (card.abilities.Count == 0) + { + if (configEnableTraderCostTierBugDebugLogging.Value) + { + Logger.LogDebug($"Trade candidate has no abilities | " + $"card={GetCardName(card)} | " + $"tier={costTier}"); + } + continue; + } + + foreach (Ability ability in card.abilities) + { + if (configEnableTraderCostTierBugDebugLogging.Value) + { + string abilityId = GetGuidAndKey(ability); + AbilityInfo abilityInfo; + + try + { + abilityInfo = AbilitiesUtil.GetInfo(ability); + } + catch (Exception ex) + { + Logger.LogError($"AbilitiesUtil.GetInfo threw | " + $"card={GetCardName(card)} | " + $"tier={costTier} | " + $"ability={abilityId} | " + $"rawValue={(int)ability} | " + + $"exception={ex}"); + continue; + } + + if (abilityInfo == null) + { + Logger.LogError($"TRADE CRASH CANDIDATE: Missing AbilityInfo | " + $"card={GetCardName(card)} | " + $"tier={costTier} | " + $"ability={abilityId} | " + + $"rawValue={(int)ability} | " + $"reason=AbilitiesUtil.GetInfo returned null; " + $"vanilla code will dereference .opponentUsable"); + continue; + } + + Logger.LogDebug($"Trade ability OK | " + $"card={GetCardName(card)} | " + $"tier={costTier} | " + $"ability={abilityId} | " + $"rawValue={(int)ability} | " + + $"opponentUsable={abilityInfo.opponentUsable}"); + } + } + } } /// From ce2a6b1589e7d9c28a7a4769ee157dafa751fd80 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Sat, 3 Oct 2026 21:24:45 -0400 Subject: [PATCH 10/28] Attempt to fix the Description of configEnableTraderCostTierBugDebugLogging --- InscryptionAPI/InscryptionAPIPlugin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InscryptionAPI/InscryptionAPIPlugin.cs b/InscryptionAPI/InscryptionAPIPlugin.cs index 18d645f7..125419dc 100644 --- a/InscryptionAPI/InscryptionAPIPlugin.cs +++ b/InscryptionAPI/InscryptionAPIPlugin.cs @@ -189,7 +189,7 @@ private void Awake() configOverrideArrows = Config.Bind("Menus", "Override Arrows", false, "When true, forces the challenge screen arrows to appear at the top of the screen instead of the sides."); configRandomCostChoiceOrder = Config.Bind("Miscellaneous", "Randomise Cost Choice Order", false, "When true, randomises the order card cost choices are presented in Act 1."); configHideAct1BossScenery = Config.Bind("Optimization", "Hide Act 1 Scenery", false, "When true bosses will not spawn their scenery. (eg: Prospector's trees) This can improve performance on low-end machines."); - configEnableTraderCostTierBugDebugLogging = Config.Bind("Zebugging", "Enable Logging for Info related to the 'GenerateTradeCardsWithCostTier' method", false, "May be of use for debugging issues related to 'GenerateTradeCardsWithCostTier', by how much no clue. Set this to True to enable the Logging."); + configEnableTraderCostTierBugDebugLogging = Config.Bind("Zebugging", "Enable Logging for Info related to the \'GenerateTradeCardsWithCostTier\' method", false, "May be of use for debugging issues related to 'GenerateTradeCardsWithCostTier', by how much no clue. Set this to True to enable the Logging."); } /// From d8d11607e55082dd059ce309d1f7b91a5ba0d59a Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Sat, 3 Oct 2026 21:29:21 -0400 Subject: [PATCH 11/28] Correctly Fix Key. --- InscryptionAPI/InscryptionAPIPlugin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InscryptionAPI/InscryptionAPIPlugin.cs b/InscryptionAPI/InscryptionAPIPlugin.cs index 125419dc..cfb540b3 100644 --- a/InscryptionAPI/InscryptionAPIPlugin.cs +++ b/InscryptionAPI/InscryptionAPIPlugin.cs @@ -189,7 +189,7 @@ private void Awake() configOverrideArrows = Config.Bind("Menus", "Override Arrows", false, "When true, forces the challenge screen arrows to appear at the top of the screen instead of the sides."); configRandomCostChoiceOrder = Config.Bind("Miscellaneous", "Randomise Cost Choice Order", false, "When true, randomises the order card cost choices are presented in Act 1."); configHideAct1BossScenery = Config.Bind("Optimization", "Hide Act 1 Scenery", false, "When true bosses will not spawn their scenery. (eg: Prospector's trees) This can improve performance on low-end machines."); - configEnableTraderCostTierBugDebugLogging = Config.Bind("Zebugging", "Enable Logging for Info related to the \'GenerateTradeCardsWithCostTier\' method", false, "May be of use for debugging issues related to 'GenerateTradeCardsWithCostTier', by how much no clue. Set this to True to enable the Logging."); + configEnableTraderCostTierBugDebugLogging = Config.Bind("Zebugging", "Enable Logging for Info related to the GenerateTradeCardsWithCostTier method", false, "May be of use for debugging issues related to 'GenerateTradeCardsWithCostTier', by how much no clue. Set this to True to enable the Logging."); } /// From cbe00db831f50e9734520dcf767f4d42f8f179a7 Mon Sep 17 00:00:00 2001 From: chytridi05 <3904269375@qq.com> Date: Fri, 30 Oct 2026 11:20:46 +0800 Subject: [PATCH 12/28] Add queued background override to pixel appearances (#340) add a method interface in class PixelCardBahaviours, which allows you to override queued background of pixel cards by @chytridi05 --- InscryptionAPI/PixelCard/PixelCardBehaviours.cs | 1 + InscryptionAPI/PixelCard/PixelCardManager.cs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/InscryptionAPI/PixelCard/PixelCardBehaviours.cs b/InscryptionAPI/PixelCard/PixelCardBehaviours.cs index ad8a5856..f09b6c4e 100644 --- a/InscryptionAPI/PixelCard/PixelCardBehaviours.cs +++ b/InscryptionAPI/PixelCard/PixelCardBehaviours.cs @@ -11,6 +11,7 @@ public override void ApplyAppearance() { } public virtual Sprite PixelAppearance() { return null; } public virtual Sprite OverridePixelPortrait() { return null; } public virtual Sprite OverrideBackground() { return null; } + public virtual Sprite OverrideQueuedBackground() { return null; } public virtual void OnAppearanceApplied() { } } diff --git a/InscryptionAPI/PixelCard/PixelCardManager.cs b/InscryptionAPI/PixelCard/PixelCardManager.cs index dc40ce00..e209745c 100644 --- a/InscryptionAPI/PixelCard/PixelCardManager.cs +++ b/InscryptionAPI/PixelCard/PixelCardManager.cs @@ -91,8 +91,9 @@ private static void DecalPatches(PixelCardDisplayer __instance, PlayableCard pla private static void AddDecalToCard(in PixelCardDisplayer instance, PlayableCard playableCard) { - Transform cardElements = instance?.gameObject?.transform?.Find("CardElements"); - if (cardElements == null) + Transform cardElements = instance?.cardElements?.transform; + Transform queuedCardElements = instance?.queuedCardElements?.transform; + if (cardElements == null || queuedCardElements == null) return; List existingDecals = new(); @@ -139,6 +140,15 @@ private static void AddDecalToCard(in PixelCardDisplayer instance, PlayableCard Sprite overridePortrait = pixelBehav.OverridePixelPortrait(); if (overridePortrait != null) instance.SetPortrait(overridePortrait); + // override queued background + Sprite overrideQueuedBackground = pixelBehav.OverrideQueuedBackground(); + if (overrideQueuedBackground != null) + { + Transform queuedBackground = queuedCardElements.Find("QueuedBackground"); + SpriteRenderer component = queuedBackground?.GetComponent(); + if (component != null) + component.sprite = overrideQueuedBackground; + } } UnityObject.Destroy(behav); } From 908b1a8ee1c99a862edfffd079f0de1ee554ae75 Mon Sep 17 00:00:00 2001 From: WhistleWind <69230920+HumabHatterZed@users.noreply.github.com> Date: Fri, 30 Oct 2026 04:01:39 -0700 Subject: [PATCH 13/28] Add way to easily patch and modify the default bone gain when a player's card dies (#341) Adds a new class `DefaultBoneGainOnDeath` and methods `DefaultBoneGainOnDeath.ShouldDoDefaultBoneGain` and `DefaultBoneGainOnDeeath.DoDefaultBoneGain` to the API that basically expose specific parts of the PlayableCard.Die method's code. These allow modders to patch and modify the default bone gain within the PlayableCard.Die method without needing to patch ResourcesManager.AddBone directly. --------- Co-authored-by: Chaosyr --- CHANGELOG.md | 10 +- InscryptionAPI/Card/DefaultBoneGainOnDeath.cs | 135 ++++++++++++++++++ InscryptionAPI/InscryptionAPI.csproj | 2 +- .../InscryptionCommunityPatch.csproj | 22 +-- 4 files changed, 153 insertions(+), 16 deletions(-) create mode 100644 InscryptionAPI/Card/DefaultBoneGainOnDeath.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index a68919c9..238714d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,13 @@ - This comes with 5 new Dictionaries `BaseGameCustomAppearances` (Internal), `BaseGameCustomAppearancesPublic`, `ModdedCustomAppearancesDictionary` (Internal), `ModdedCustomAppearancesDictionaryPublic`, `CombinedCustomAppearancesDictionaryPublic`. - This system is stored under the `TextureHelper` class. * Improved In-Code Documentation via XML Comments. +* Added a way to easily patch and modify the default bone gain when a player's card dies. +* Added the following class: `DefaultBoneGainOnDeath` and the following methods within that class: `DefaultBoneGainOnDeath.ShouldDoDefaultBoneGain` and `DefaultBoneGainOnDeeath.DoDefaultBoneGain` # 2.24.1 -* Added Extensions for setting the IconTexture of a Starter Deck. -* Added 2 Alternate Constructors for making a StarterDeck with a Display Name different from its Internal Name. -* Added Getters and Setters for Starter Deck Unlock Level. +- Added Extensions for setting the IconTexture of a Starter Deck. +- Added 2 Alternate Constructors for making a StarterDeck with a Display Name different from its Internal Name. +- Added Getters and Setters for Starter Deck Unlock Level. # 2.24.0 - Fixed Part2CardCostRender.UpdatePlayableCardCost not being invoked @@ -792,4 +794,4 @@ - Custom cards are added via the **CustomCard** constructor rather than through the **AddCard** method. # v1.1 -- Hooked into a much more sensible method to load the cards into the card pool. \ No newline at end of file +- Hooked into a much more sensible method to load the cards into the card pool. diff --git a/InscryptionAPI/Card/DefaultBoneGainOnDeath.cs b/InscryptionAPI/Card/DefaultBoneGainOnDeath.cs new file mode 100644 index 00000000..fc40bb0b --- /dev/null +++ b/InscryptionAPI/Card/DefaultBoneGainOnDeath.cs @@ -0,0 +1,135 @@ +using DiskCardGame; +using HarmonyLib; +using System.Collections; +using System.Reflection; +using System.Reflection.Emit; + +namespace InscryptionAPI.Card; + +/// +/// Class for handling exposing the bone-on-death behaviour present in the vanilla PlayableCard.Die method. +/// Allows for modifying the default behaviour through Harmony patches. +/// +[HarmonyPatch] +public class DefaultBoneGainOnDeath { + // this method does not need XML documentation since it's purely internal to make the other two methods work. + // I also don't want to explain how transpilers work. + [HarmonyTranspiler] + [HarmonyPatch(typeof(PlayableCard), nameof(PlayableCard.Die), MethodType.Enumerator)] + private static IEnumerable InsertBoneMethodHook(IEnumerable instructions) + { + // === We want to turn this + + // if (!HasAbility(Ability.QuadrupleBones) && slotBeforeDeath.IsPlayerSlot) { + // yield return Singleton.Instance.AddBones(1, slotBeforeDeath); + // } + + // === Into this + + // if (ShouldDoDefaultBoneGain(base.Card, slotBeforeDeath) { + // yield return DoDefaultBoneGain(base.Card, slotBeforeDeath, 1); + // } + + // === + List codes = new(instructions); + + for (int i = 0; i < codes.Count; i++) { + // there are two instances where this is true, but we only care about the first instance + // the second instance will be ignored + if (codes[i].opcode == OpCodes.Ldc_I4_S && codes[i].operand.ToString() == "12") { + /* + * // if (!playableCard.HasAbility(Ability.QuadrupleBones) && 5__2.IsPlayerSlot) + * ldloc.1 + * ldc.i4.s 12 + * call instance bool DiskCardGame.PlayableCard::HasAbility(valuetype DiskCardGame.Ability) + * brtrue.s IL_022f + * + * ldarg.0 + * ldfld class DiskCardGame.CardSlot DiskCardGame.PlayableCard/'d__98'::'5__2' + * callvirt instance bool DiskCardGame.CardSlot::get_IsPlayerSlot() + * brfalse.s IL_022f + * + * = + * + * // if (ShouldDoDefaultBoneGain(playableCard, 5__2) + * ldloc.1 + * ldarg.0 + * ldfld class DiskCardGame.CardSlot DiskCardGame.PlayableCard/'d__98'::'5__2' + * callvirt ShouldDo... + * brfalse.s IL_022f + */ + MethodInfo validationMethod = AccessTools.Method( + typeof(DefaultBoneGainOnDeath), nameof(ShouldDoDefaultBoneGain), + new Type[] { typeof(PlayableCard), typeof(CardSlot) }); + + codes.RemoveAt(i); + codes.RemoveAt(i); + codes.RemoveAt(i); + i += 2; + codes[i] = new CodeInstruction(OpCodes.Callvirt, validationMethod); + + /* + * // <>2__current = Singleton.Instance.AddBones(1, 5__2); + * ldarg.0 + * call !0 class Singleton`1::get_Instance() + * ldc.i4.1 + * ldarg.0 + * ldfld class DiskCardGame.CardSlot DiskCardGame.PlayableCard/'d__98'::'5__2' + * callvirt instance class [netstandard]System.Collections.IEnumerator DiskCardGame.ResourcesManager::AddBones(int32, class DiskCardGame.CardSlot) + * stfld object DiskCardGame.PlayableCard/'d__98'::'<>2__current' + * + * = + * + * // <>2__current = DoDefaultBoneGain(playableCard, slotBeforeDeath, 1); + * ldarg.0 + * ldloc.1 + * ldarg.0 + * ldfld class DiskCardGame.CardSlot DiskCardGame.PlayableCard/'d__98'::'5__2' + * ldc.i4.1 + * callvirt DoDefaultBoneGain + * stfld object DiskCardGame.PlayableCard/'d__98'::'<>2__current' + */ + + MethodInfo executionMethod = AccessTools.Method( + typeof(DefaultBoneGainOnDeath), nameof(DoDefaultBoneGain), + new Type[] { typeof(PlayableCard), typeof(CardSlot), typeof(int) }); + + i += 3; + codes[i] = new CodeInstruction(OpCodes.Ldloc_1); + i++; + + // since codes are taken from the top of the stack, we need to move the ldc.i4.1 to be AFTER we call slotBeforeDeath + codes.RemoveAt(i); + + i += 2; + + codes.Insert(i, new CodeInstruction(OpCodes.Ldc_I4_1)); + i++; + + codes[i] = new CodeInstruction(OpCodes.Callvirt, executionMethod); + break; + } + } + + return codes; + } + + /// + /// Simple boolean check that by default replicates the vanilla check for whether a card should award a Bone on death. + /// + /// The PlayableCard that has died. + /// The CardSlot of card. + /// True if card should give a Bone (calls DoDefaultBoneGain). + public static bool ShouldDoDefaultBoneGain(PlayableCard card, CardSlot slotBeforeDeath) { + return slotBeforeDeath.IsPlayerSlot && !card.HasAbility(Ability.QuadrupleBones); + } + /// + /// A simple call to ResourcesManager.AddBones, intended to give modders some more flexibility over the default death behaviour of player cards giving 1 Bone. + /// + /// The PlayableCard that has died. + /// The CardSlot of card. + /// How many Bones to drop whenever a player's card dies (default is 1). + public static IEnumerator DoDefaultBoneGain(PlayableCard card, CardSlot slotBeforeDeath, int amount) { + yield return Singleton.Instance.AddBones(amount, slotBeforeDeath); + } +} diff --git a/InscryptionAPI/InscryptionAPI.csproj b/InscryptionAPI/InscryptionAPI.csproj index 84e11198..268c4a87 100644 --- a/InscryptionAPI/InscryptionAPI.csproj +++ b/InscryptionAPI/InscryptionAPI.csproj @@ -58,7 +58,7 @@ - + diff --git a/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj b/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj index 64344fb5..ba313073 100644 --- a/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj +++ b/InscryptionCommunityPatch/InscryptionCommunityPatch.csproj @@ -21,24 +21,24 @@ false true - + - + - + - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + From 21949ee0c18a9f3c33ac6aa0238da97fc0bd4467 Mon Sep 17 00:00:00 2001 From: WhistleWind <69230920+HumabHatterZed@users.noreply.github.com> Date: Tue, 10 Nov 2026 15:55:13 -0800 Subject: [PATCH 14/28] Add some missing XML and minor cost fix (#342) * Add XML for the ReduceGemifiesX methods * Add XML * Privatise patches in internal patch class * Add missing XML * Add some XML * More XML * Replace call to card.Info.BloodCost to card.BloodCost() * Typo Fix --------- Co-authored-by: Chaosyr --- InscryptionAPI/Card/CardExtensionsCosts.cs | 13 +- InscryptionAPI/Card/CardManager.cs | 139 +++++++++++++++++- .../Card/CardModificationInfoManager.cs | 7 + InscryptionAPI/Card/CostProperties.cs | 50 ++++++- InscryptionAPI/Costs/CardCostManager.cs | 64 +++++++- 5 files changed, 256 insertions(+), 17 deletions(-) diff --git a/InscryptionAPI/Card/CardExtensionsCosts.cs b/InscryptionAPI/Card/CardExtensionsCosts.cs index 3e452018..36ea9330 100644 --- a/InscryptionAPI/Card/CardExtensionsCosts.cs +++ b/InscryptionAPI/Card/CardExtensionsCosts.cs @@ -31,7 +31,7 @@ public static PlayableCard GetPlayableCard(this CardInfo cardInfo) /// public static int BloodCost(this PlayableCard card) { - //Debug.Log($"{card != null} {card?.Info != null} [{card?.GetType()}] {(card as DiskCardGame.Card)?.Info != null}"); + //InscryptionAPIPlugin.Logger.LogInfo($"{card != null} {card?.Info != null} [{card?.GetType()}] {(card as DiskCardGame.Card)?.Info != null}"); if (card != null && card.Info != null) { int originalBloodCost = CostProperties.CostProperties.OriginalBloodCost(card.Info); @@ -42,6 +42,7 @@ public static int BloodCost(this PlayableCard card) foreach (CardModificationInfo mod in card.TemporaryMods) originalBloodCost += mod.bloodCostAdjustment; + //InscryptionAPIPlugin.Logger.LogInfo(originalBloodCost); return originalBloodCost; } @@ -105,11 +106,21 @@ public static List GemsCost(this PlayableCard card) return gemsCost; } + /// + /// Checks if the given PlayableCard is gemified in either its CardInfo or TemporaryMods. + /// + /// True if the PlayableCard is gemified. public static bool IsGemified(this PlayableCard card) => card.Info.Gemified || card.TemporaryMods.Exists((CardModificationInfo x) => x.gemify); + /// + /// Determines if the given PlayableCard's owner possesses a blue gem. Works for the opponent and player. + /// public static bool OwnerHasBlueGem(this PlayableCard card) { return card.OpponentCard ? OpponentGemsManager.Instance.HasGem(GemType.Blue) : ResourcesManager.Instance.HasGem(GemType.Blue); } + /// + /// Whether or not the given PlayableCard is affected by a blue gem and should have its cost reduced. + /// public static bool IsUsingBlueGem(this PlayableCard card) => card.IsGemified() && card.OwnerHasBlueGem(); /// diff --git a/InscryptionAPI/Card/CardManager.cs b/InscryptionAPI/Card/CardManager.cs index b4de2a81..cad99a63 100644 --- a/InscryptionAPI/Card/CardManager.cs +++ b/InscryptionAPI/Card/CardManager.cs @@ -13,6 +13,9 @@ namespace InscryptionAPI.Card; +/// +/// Class for managing adding, retrieving, tracking custom cards added via the API. +/// [HarmonyPatch] public static class CardManager { @@ -21,14 +24,50 @@ private class CardExt // Needs to be defined first so the implicit static constr public readonly Dictionary TypeMap = new(); public readonly Dictionary StringMap = new(); } + /// + /// Class for storing the data for custom portrait Sprites added via the API. + /// + /// + /// Only tracks custom API portraits like sacrificable steel trap, etc. + /// public class CardAltPortraits { + /// + /// Portrait sprite used when calling GetAlternatePortrait in Act 2. + /// public Sprite PixelAlternatePortrait = null; + /// + /// Portrait sprite used when the Steel Trap sigil is triggered. + /// + /// + /// Example: Leaping Trap + /// public Sprite SteelTrapPortrait = null; + /// + /// Portrait sprite used when the Steel Trap sigil is triggered in Act 2. + /// public Sprite PixelSteelTrapPortrait = null; + /// + /// Portrait sprite used when a card's shield breaks. + /// + /// + /// Example: Mud Turtle + /// public Sprite BrokenShieldPortrait = null; + /// + /// Portrait sprite used when a card's shield breaks in Act 2. + /// public Sprite PixelBrokenShieldPortrait = null; + /// + /// Portrait sprite used when a card on the board can be chosen as a sacrifice. + /// + /// + /// Example: Squirrel + /// public Sprite SacrificablePortrait = null; + /// + /// Portrait sprite used when a card on the board can be chosen as a sacrifice in Act 2. + /// public Sprite PixelSacrificablePortrait = null; } private static readonly ConditionalWeakTable CardExtensionProperties = new(); @@ -55,14 +94,16 @@ private static IEnumerable GetBaseGameCards() foreach (CardInfo card in Resources.LoadAll("Data/Cards")) { card.SetBaseGameCard(true); - if (card.name == "Squirrel" || card.name == "AquaSquirrel" || card.name == "Rabbit") + if (card.name == "Squirrel" || card.name == "AquaSquirrel" || card.name == "Rabbit") { card.SetAffectedByTidalLock(); - else if (card.name == "SkeletonParrot") + } + else if (card.name == "SkeletonParrot") { card.AddTribes(Tribe.Bird); - else if (card.name == "MudTurtle") + } + else if (card.name == "MudTurtle") { card.SetBrokenShieldPortrait(card.alternatePortrait); - - yield return card; + } + yield return card; } } @@ -200,7 +241,6 @@ static CardManager() /// /// A copy of all cards in the card pool. /// - /// . public static List AllCardsCopy { get; private set; } = BaseGameCards.ToList(); /// @@ -292,47 +332,130 @@ public static CardInfo New(string modPrefix, string name, string displayName, in } } + /// + /// Retrieves the dictionary of card extended properties associated with the given CardInfo. + /// + /// The CardInfo whose extended properties we wish to retrieve. + /// The extension property dictionary for the given CardInfo. Creates and returns an empty dictionary if none exists. public static Dictionary GetCardExtensionTable(this CardInfo card) => CardExtensionProperties.GetOrCreateValue(card).StringMap; internal static CardAltPortraits GetAltPortraits(this CardInfo card) => CardAlternatePortraits.GetOrCreateValue(card); + /// + /// Retrieves the Sprite for the CardInfo's alternate portrait in Act 2 if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the pixel alternate portrait or null if it doesn't exist. + /// + /// Pixel alternate portraits are added through the API; they are not a vanilla feature. + /// public static Sprite PixelAlternatePortrait(this CardInfo card) { return card.GetAltPortraits().PixelAlternatePortrait; } + /// + /// Retrieves the Sprite for the CardInfo's portrait used when Steel Trap activates if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the Steel Trap portrait or null if it doesn't exist. + /// + /// Steel Trap portraits are added through the API; they are not a vanilla feature. + /// public static Sprite SteelTrapPortrait(this CardInfo card) { return card.GetAltPortraits().SteelTrapPortrait; } + /// + /// Retrieves the Sprite for the CardInfo's portrait emission used when Steel Trap activates if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the Steel Trap portrait emission or null if it doesn't exist. + /// + /// Steel Trap portraits are added through the API; they are not a vanilla feature. + /// public static Sprite EmissiveSteelTrapPortrait(this CardInfo card) { return card.GetAltPortraits().SteelTrapPortrait.GetEmissionSprite(); } + /// + /// Retrieves the Sprite for the CardInfo's Act 2 portrait used when Steel Trap activates if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the pixel Steel Trap portrait or null if it doesn't exist. + /// + /// Pixel Steel Trap portraits are added through the API; they are not a vanilla feature. + /// public static Sprite PixelSteelTrapPortrait(this CardInfo card) { return card.GetAltPortraits().PixelSteelTrapPortrait; } - + /// + /// Retrieves the Sprite for the CardInfo's portrait used when a card's shield breaks if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the broken shield portrait or null if it doesn't exist. + /// + /// Broken shield portraits are added through the API; they are not a vanilla feature. + /// public static Sprite BrokenShieldPortrait(this CardInfo card) { return card.GetAltPortraits().BrokenShieldPortrait; } + /// + /// Retrieves the Sprite for the CardInfo's portrait emission used when a card's shield breaks if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the broken shield portrait emission or null if it doesn't exist. + /// + /// Broken shield portraits are added through the API; they are not a vanilla feature. + /// public static Sprite EmissiveBrokenShieldPortrait(this CardInfo card) { return card.GetAltPortraits().BrokenShieldPortrait.GetEmissionSprite(); } + /// + /// Retrieves the Sprite for the CardInfo's Act 2 portrait used when a card's shield breaks if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the pixel broken shield portrait or null if it doesn't exist. + /// + /// Pixel broken shield portraits are added through the API; they are not a vanilla feature. + /// public static Sprite PixelBrokenShieldPortrait(this CardInfo card) { return card.GetAltPortraits().PixelBrokenShieldPortrait; } - + /// + /// Retrieves the Sprite for the CardInfo's portrait used when a card on the board can be sacrificed if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the sacrificable portrait or null if it doesn't exist. + /// + /// Sacrificable portraits are added through the API; they are not a vanilla feature. + /// public static Sprite SacrificablePortrait(this CardInfo card) { return card.GetAltPortraits().SacrificablePortrait; } + /// + /// Retrieves the Sprite for the CardInfo's portrait emission used when a card on the board can be sacrificed if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the sacrificable portrait emission or null if it doesn't exist. + /// + /// Sacrificable portraits are added through the API; they are not a vanilla feature. + /// public static Sprite EmissiveSacrificablePortrait(this CardInfo card) { return card.GetAltPortraits().SacrificablePortrait.GetEmissionSprite(); } + /// + /// Retrieves the Sprite for the CardInfo's Act 2 portrait used when a card on the board can be sacrificed if it exists. + /// + /// The CardInfo whose portrait we're retrieving. + /// The Sprite for the pixel sacrificable portrait or null if it doesn't exist. + /// + /// Pixel sacrificable portraits are added through the API; they are not a vanilla feature. + /// public static Sprite PixelSacrificablePortrait(this CardInfo card) { return card.GetAltPortraits().PixelSacrificablePortrait; diff --git a/InscryptionAPI/Card/CardModificationInfoManager.cs b/InscryptionAPI/Card/CardModificationInfoManager.cs index 765adb38..abcf0641 100644 --- a/InscryptionAPI/Card/CardModificationInfoManager.cs +++ b/InscryptionAPI/Card/CardModificationInfoManager.cs @@ -6,6 +6,10 @@ namespace InscryptionAPI.Card; +/// +/// Class for managing special CardModificationInfos. +/// These include persistent extended properties and custom costs. +/// [HarmonyPatch] public static class CardModificationInfoManager { @@ -69,6 +73,9 @@ internal static Dictionary GetCardModExtensionTable(this CardMod return exp.StringMap; } + /// + /// Re-executes events and rebuilds the special CardModificationInfo pool. + /// public static void SyncCardMods() { // Re-add persistent properties diff --git a/InscryptionAPI/Card/CostProperties.cs b/InscryptionAPI/Card/CostProperties.cs index d6f2d662..877d85e4 100644 --- a/InscryptionAPI/Card/CostProperties.cs +++ b/InscryptionAPI/Card/CostProperties.cs @@ -131,18 +131,58 @@ public static List ImprovedGemsCost(CardInfo instance) [HarmonyReversePatch, HarmonyPatch(typeof(CardInfo), nameof(CardInfo.EnergyCost), MethodType.Getter), MethodImpl(MethodImplOptions.NoInlining)] public static int OriginalEnergyCost(CardInfo __instance) { return 0; } + /// + /// Determines whether or not Gemified should reduce the blood cost on a multicost card. + /// + /// The gemified PlayableCard we're checking. + /// The PlayableCard's blood cost. Defaults to using the CardInfo's blood cost if null. + /// True if Gemified should reduce the blood cost by 1. + /// + /// Used for multicost cards to determine which cost Gemified should affect. + /// Priority from first choice to last: Energy, Bones, Mox, Blood + /// public static bool ReduceGemifiedBlood(PlayableCard card, int? bloodCost = null) { return (bloodCost ?? OriginalBloodCost(card.Info)) > 0 && !ReduceGemifiedEnergy(card) && !ReduceGemifiedBones(card) && !ReduceGemifiedMox(card); } + /// + /// Determines whether or not Gemified should reduce the gems cost on a multicost card. + /// + /// The gemified PlayableCard we're checking. + /// The PlayableCard's gems cost. Defaults to using the CardInfo's gems cost if null. + /// True if Gemified should reduce the gems cost by 1. + /// + /// Used for multicost cards to determine which cost Gemified should affect. + /// Priority from first choice to last: Energy, Bones, Mox, Blood + /// public static bool ReduceGemifiedMox(PlayableCard card, List gemsCost = null) { return (gemsCost?.Count ?? ImprovedGemsCost(card.Info).Count) > 0 && !ReduceGemifiedBones(card) && !ReduceGemifiedEnergy(card); } + /// + /// Determines whether or not Gemified should reduce the bone cost on a multicost card. + /// + /// The gemified PlayableCard we're checking. + /// The PlayableCard's bone cost. Defaults to using the CardInfo's bone cost if null. + /// True if Gemified should reduce the bone cost by 1. + /// + /// Used for multicost cards to determine which cost Gemified should affect. + /// Priority from first choice to last: Energy, Bones, Mox, Blood + /// public static bool ReduceGemifiedBones(PlayableCard card, int? bonesCost = null) { return (bonesCost ?? OriginalBonesCost(card.Info)) > 0 && !ReduceGemifiedEnergy(card); } + /// + /// Determines whether or not Gemified should reduce the energy cost on a multicost card. + /// + /// The gemified PlayableCard we're checking. + /// The PlayableCard's energy cost. Defaults to using the CardInfo's energy cost if null. + /// True if Gemified should reduce the energy cost by 1. + /// + /// Used for multicost cards to determine which cost Gemified should affect. + /// Priority from first choice to last: Energy, Bones, Mox, Blood + /// public static bool ReduceGemifiedEnergy(PlayableCard card, int? energyCost = null) { return (energyCost ?? OriginalEnergyCost(card.Info)) > 0; @@ -153,7 +193,7 @@ public static bool ReduceGemifiedEnergy(PlayableCard card, int? energyCost = nul internal static class ChangeCardCostGetter { [HarmonyPatch(typeof(CardInfo), nameof(CardInfo.BloodCost), MethodType.Getter), HarmonyPrefix] - public static bool BloodCost(CardInfo __instance, ref int __result) + private static bool BloodCost(CardInfo __instance, ref int __result) { PlayableCard card = __instance.GetPlayableCard(); //Debug.Log($"{card != null}"); @@ -162,7 +202,7 @@ public static bool BloodCost(CardInfo __instance, ref int __result) } [HarmonyPatch(typeof(CardInfo), nameof(CardInfo.BonesCost), MethodType.Getter), HarmonyPrefix] - public static bool BoneCost(CardInfo __instance, ref int __result) + private static bool BoneCost(CardInfo __instance, ref int __result) { PlayableCard card = __instance.GetPlayableCard(); if (card == null) @@ -173,7 +213,7 @@ public static bool BoneCost(CardInfo __instance, ref int __result) } [HarmonyPatch(typeof(CardInfo), nameof(CardInfo.GemsCost), MethodType.Getter), HarmonyPrefix] - public static bool GemsCost(CardInfo __instance, ref List __result) + private static bool GemsCost(CardInfo __instance, ref List __result) { PlayableCard card = __instance.GetPlayableCard(); __result = card?.GemsCost() ?? CostProperties.ImprovedGemsCost(__instance); @@ -181,7 +221,7 @@ public static bool GemsCost(CardInfo __instance, ref List __result) } [HarmonyPatch(typeof(CardInfo), nameof(CardInfo.EnergyCost), MethodType.Getter), HarmonyPrefix] - public static bool EnergyCost(CardInfo __instance, ref int __result) + private static bool EnergyCost(CardInfo __instance, ref int __result) { PlayableCard card = __instance.GetPlayableCard(); __result = card?.EnergyCost ?? CostProperties.OriginalEnergyCost(__instance); @@ -189,7 +229,7 @@ public static bool EnergyCost(CardInfo __instance, ref int __result) } [HarmonyPatch(typeof(PlayableCard), nameof(PlayableCard.EnergyCost), MethodType.Getter), HarmonyPrefix] - public static bool DisableVanillaEnergyCost(PlayableCard __instance, ref int __result) + private static bool DisableVanillaEnergyCost(PlayableCard __instance, ref int __result) { // patch this to follow the same pattern as the other cost methods int energyCost = CostProperties.OriginalEnergyCost(__instance.Info); diff --git a/InscryptionAPI/Costs/CardCostManager.cs b/InscryptionAPI/Costs/CardCostManager.cs index 743ca780..901ccf4b 100644 --- a/InscryptionAPI/Costs/CardCostManager.cs +++ b/InscryptionAPI/Costs/CardCostManager.cs @@ -2,8 +2,10 @@ using GBC; using HarmonyLib; using InscryptionAPI.Card; +using InscryptionAPI.Card.CostProperties; using InscryptionAPI.Dialogue; using InscryptionAPI.Guid; +using InscryptionAPI.Helpers; using Sirenix.Utilities; using System.Collections; using System.Collections.ObjectModel; @@ -13,6 +15,9 @@ namespace InscryptionAPI.CardCosts; +/// +/// Class for managing custom card costs. +/// [HarmonyPatch] public static class CardCostManager { @@ -91,6 +96,11 @@ public class FullCardCost /// public Func GetRewardBackTexture = null; + /// + /// Texture used if this card can show up in a card cost choice node. + /// + /// + /// public Texture RewardBackTexture(int amount) { if (GetRewardBackTexture == null) @@ -183,6 +193,10 @@ public FullCardCost(string modGUID, string costName, Type costBehaviour, TypeManager.Add(costName, costBehaviour); } + /// + /// Creates a deep clone of this FullCardCost. + /// + /// A new clone of this FullCardCost. public FullCardCost Clone() { FullCardCost retval = new( @@ -202,18 +216,29 @@ static CardCostManager() SyncCustomCostList(); }; } - + /// + /// A list of all card costs registered with the API. + /// public static List AllCustomCosts { get; private set; } = new(); internal readonly static ObservableCollection NewCosts = new(); + /// + /// This event runs every time the card card list is resynced. By adding listeners to this event, you can modify card costs that have been added to the list after your mod was loaded. + /// public static event Func, List> ModifyCustomCostList; // you don't have the [colour] gem for that. // no [colour] gem on the table? then you can't play it. // you need at least one [colour] gem on the board in order to play that [card] // play the required [colour] gem... then you can play that. + /// + /// The Hint used to tell the player when they cannot play a card that costs multiple gems of the same colour. + /// public static HintsHandler.Hint notEnoughSameColourGemsHint = new("Hint_NotEnoughSameColourGemsHint", 2); + /// + /// The DialogueEvent that is played when a player cannot play a card that costs multiple gems of the same colour. + /// public static DialogueEvent notEnoghSameColourGemsEvent = DialogueManager.GenerateEvent( InscryptionAPIPlugin.ModGUID, "Hint_NotEnoughSameColourGemsHint", new() { "You don't have enough [v:1] gems for that." }, @@ -223,16 +248,37 @@ static CardCostManager() new() { "You need more [v:1] gems on the board in order to play that [v:0]."}, new() { "Play the required [v:1] gems... then you can play that." } }); + /// + /// Re-executes events and rebuilds the card cost pool. + /// public static void SyncCustomCostList() { AllCustomCosts = NewCosts.Select(a => a.Clone()).ToList(); AllCustomCosts = ModifyCustomCostList?.Invoke(AllCustomCosts) ?? AllCustomCosts; } + /// + /// Retrieves the FullCardCost object associated with the given CustomCardCost class Type. + /// + /// Collection of FullCardCost objects to search through. + /// Type of the CustomCardCost to find the FUllCardCost object of. + /// The FullCardCost associated with the given Type, or null if it cannot be found. + /// + /// Intended to be used with the AllCustomCosts getter as a way of searching through all card costs added by the API. + /// public static FullCardCost CostByBehaviour(this IEnumerable customCosts, Type costBehaviour) { return customCosts.FirstOrDefault(x => x.CostBehaviour == costBehaviour); } + /// + /// Registers a new custom card cost with the API. + /// + /// The GUID of the mod adding this card cost. + /// The internal name of this card cost. + /// The type of the CustomCardCost class for this card cost. + /// The function used to determine what texture to display on cards with this cost. + /// The function used to determine what pixel texture to display on cards with this cost. + /// The FullCardCost object containing the new custom card cost's data. public static FullCardCost Register(string modGUID, string costName, Type costBehaviour, Func getCostTexture, Func getPixelCostTexture) { @@ -518,7 +564,19 @@ private static bool MultipleSameColourMoxSupport(PlayableCard card) private static IEnumerable FixDialogueSoftlock(IEnumerable instructions) { List codes = new(instructions); - //codes.LogCodeInscryptions(); + //codes.LogCodeInstructions(); + + // this part's for fixing blood cost nonsense I encountered when dealing with duplicate CardInfos + // it just changes the call from card.Info.BloodCost to card.BloodCost() + // and avoiding the janky dynamic cost find playablecard nonsenseseses + int bloodCostIdx = codes.FindIndex(x => x.opcode == OpCodes.Callvirt && x.operand.ToString() == "Int32 get_BloodCost()"); + if (bloodCostIdx > 0) { + bloodCostIdx--; + codes.RemoveRange(bloodCostIdx, 4); + MethodInfo playableCardBloodCost = AccessTools.Method(typeof(CardExtensions), nameof(CardExtensions.BloodCost), + new Type[] { typeof(PlayableCard) }); + codes.Insert(bloodCostIdx, new CodeInstruction(OpCodes.Callvirt, playableCardBloodCost)); + } int methodIndex = codes.FindIndex(x => x.opcode == OpCodes.Callvirt && x.operand.ToString() == "System.Collections.IEnumerator PlayCardOnSlot(DiskCardGame.PlayableCard, DiskCardGame.CardSlot)"); if (methodIndex > 0) @@ -820,4 +878,4 @@ public virtual IEnumerator OnPlayed(int cardCost, PlayableCard playableCard) { yield break; } -} \ No newline at end of file +} From a2ca935926c4528a8386beae475a10f165405c59 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Tue, 10 Nov 2026 20:33:11 -0500 Subject: [PATCH 15/28] Add XML Comments to the GUID Module of the API. --- InscryptionAPI/Guid/CustomTypePatches.cs | 43 ++++++++++++++++++++++++ InscryptionAPI/Guid/GuidManager.cs | 39 +++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/InscryptionAPI/Guid/CustomTypePatches.cs b/InscryptionAPI/Guid/CustomTypePatches.cs index 8fb865f3..941bc97f 100644 --- a/InscryptionAPI/Guid/CustomTypePatches.cs +++ b/InscryptionAPI/Guid/CustomTypePatches.cs @@ -8,11 +8,22 @@ namespace InscryptionAPI.Guid; +/// +/// This is the Manager for Custom Type's related to our GUID System. +/// [HarmonyPatch] public static class TypeManager { + /// + /// This is an Internal Dictionary of Type Related Cache. + /// private static readonly Dictionary TypeCache = new(); + /// + /// Use this to add a custom type to the Cache, if another type is passed with the same key, the old value is overwritten. + /// + /// The Key associated with the Custom Type. + /// The Custom Type the Key should be associated with. internal static void Add(string key, Type value) { if (TypeCache.ContainsKey(key)) @@ -26,6 +37,11 @@ internal static void Add(string key, Type value) TypeCache.Add(key, value); } + /// + /// Use this exclusively for replacing a Custom Type that is in the Cache. + /// + /// The Key you want to replace the Custom Type of. + /// The New Type acting as the Custom Type's replacement. internal static void Replace(string key, Type value) { if (TypeCache.ContainsKey(key)) @@ -34,8 +50,16 @@ internal static void Replace(string key, Type value) Add(key, value); } + /// + /// This is a Internal Dictionary of ModId's passed in by other mods. + /// private static readonly Dictionary ModIds = new(); + /// + /// This is a function that gets the Mod ID of a Passed Assembly. + /// + /// The Assembly to get the Mod ID of. + /// The Mod ID of the requested Assembly. private static string GetModIdFromAssembly(Assembly assembly) { if (ModIds.ContainsKey(assembly.FullName)) @@ -57,6 +81,11 @@ private static string GetModIdFromAssembly(Assembly assembly) return default; } + /// + /// Gets the Mod ID from an Assembly Calling the API. + /// + /// The Assembly Calling the API. + /// The Mod ID of the Assembly Calling the API. public static string GetModIdFromCallstack(Assembly callingAssembly) { string cacheVal = GetModIdFromAssembly(callingAssembly); @@ -74,11 +103,25 @@ public static string GetModIdFromCallstack(Assembly callingAssembly) return default; } + /// + /// Used to get the Original Type from a Namespace and a known Type Name. + /// + /// The Namespace associated with the Type. + /// The Type's Name. + /// The Type that was originally used by the given Namespace with that Type's Name. + /// If this is thrown The Patch was unsuccessful. [HarmonyReversePatch(HarmonyReversePatchType.Original)] [HarmonyPatch(typeof(CustomType), nameof(CustomType.GetType), new Type[] { typeof(string), typeof(string) })] [MethodImpl(MethodImplOptions.NoInlining)] public static Type OriginalGetType(string nameSpace, string typeName) { throw new NotImplementedException(); } + /// + /// This Patch implements our custom version of , for Getting our Custom Types. + /// + /// The Namespace associated with the Type. + /// The Type's Name. + /// The Return Value of the Type. + /// The Custom Type associated with the Namespace and given Name for the Type. [HarmonyPatch(typeof(CustomType), nameof(CustomType.GetType), new Type[] { typeof(string), typeof(string) })] [HarmonyPrefix] private static bool GetCustomType(string nameSpace, string typeName, ref Type __result) diff --git a/InscryptionAPI/Guid/GuidManager.cs b/InscryptionAPI/Guid/GuidManager.cs index 199857ee..26053b65 100644 --- a/InscryptionAPI/Guid/GuidManager.cs +++ b/InscryptionAPI/Guid/GuidManager.cs @@ -2,21 +2,47 @@ namespace InscryptionAPI.Guid; +/// +/// This class is the GUID Manager used throughout the API. +/// public static class GuidManager { + /// + /// Gets the fully qualified name of GUID_Value. + /// + /// The GUID or Identifier associated with the given Mod. + /// The Value being paired with the GUID. + /// The Fully Qualified name in the form of GUID_Value public static string GetFullyQualifiedName(string guid, string value) { return $"{guid}_{value}"; } + /// + /// A mapper of Int to Type in the form of a Dictionary. + /// private static readonly Dictionary reverseMapper = new(); + /// + /// Serves as a Lock within + /// private static readonly object lockObject = new object(); + /// + /// The Start Index for our GUID's. + /// public const int START_INDEX = 1000; + /// + /// The Maximum Data Value for the API after all Enum's have been passed. + /// public const string MAX_DATA = "maximumStoredValueForEnum"; + /// + /// Gets the Enum Type associated with a passed Integer. + /// + /// The Specific Number associated with the Type we are after from the . + /// The Type associated with the passed Number. public static Type GetEnumType(int number) { reverseMapper.TryGetValue(number, out var res); @@ -48,6 +74,11 @@ unsafe public static List GetValues() where T : unmanaged, System.Enum return itemList; } + /// + /// Gets the Enum Value with the passed GUID and Value. + /// + /// If successful returns the Enum Value + /// Thrown when our GUID system does not support the associated Type. unsafe public static T GetEnumValue(string guid, string value) where T : unmanaged, System.Enum { if (sizeof(T) != sizeof(int)) @@ -75,6 +106,14 @@ unsafe public static T GetEnumValue(string guid, string value) where T : unma return *(T*)&enumValue; } + /// + /// Attempts to get the GUID and Key associated with an Enum Value's Name. + /// + /// The Value we want to get the GUID and Key from. + /// The GUID found to be associated with the Value. + /// The Key found to be associated with the Passed in Value. + /// The Type of the Enum. + /// If True the GUID and Key associated with the Value were found successfully and are valid for use. public static bool TryGetGuidAndKeyEnumValue(T value, out string guid, out string key) where T : System.Enum { string prefix = $"{typeof(T).Name}"; From b8cf619befe3e449e7ecbb521ffe90435014f314 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Tue, 10 Nov 2026 21:03:54 -0500 Subject: [PATCH 16/28] Add XML Docs to the Tests Module of the Community Patch. --- InscryptionCommunityPatch/Tests/DebugCards.cs | 3 + InscryptionCommunityPatch/Tests/TestBoons.cs | 13 ++++ .../Tests/TestCommunityPatches.cs | 13 ++++ InscryptionCommunityPatch/Tests/TestCost.cs | 65 ++++++++++++++++++- 4 files changed, 93 insertions(+), 1 deletion(-) diff --git a/InscryptionCommunityPatch/Tests/DebugCards.cs b/InscryptionCommunityPatch/Tests/DebugCards.cs index fa89916a..1df18b48 100644 --- a/InscryptionCommunityPatch/Tests/DebugCards.cs +++ b/InscryptionCommunityPatch/Tests/DebugCards.cs @@ -4,6 +4,9 @@ namespace InscryptionCommunityPatch.Tests; +/// +/// This class adds some Debug Cards for testing the Steel Trap Death Patch in the Main API's functionality. +/// public class DebugCards { /// diff --git a/InscryptionCommunityPatch/Tests/TestBoons.cs b/InscryptionCommunityPatch/Tests/TestBoons.cs index 3a41d4fc..55c2f216 100644 --- a/InscryptionCommunityPatch/Tests/TestBoons.cs +++ b/InscryptionCommunityPatch/Tests/TestBoons.cs @@ -4,13 +4,26 @@ namespace InscryptionCommunityPatch.Tests; +/// +/// This is a test related to Boons. +/// public class SacrificeSquirrels : BoonBehaviour { + /// + /// This makes the Boon respond specifically when resolving a card other than itself being a Squirrel. + /// + /// The being resolved. + /// True when the Card Being Resolved other than itself is a Squirrel. public override bool RespondsToOtherCardResolve(PlayableCard otherCard) { return otherCard.Info.name.ToLowerInvariant().Equals("squirrel"); } + /// + /// This triggers when returns True. When it triggers it gives the cards the Unkillable Sigil after playing the Boon's Animation, then Render's the card. + /// + /// The being resolved. + /// The updated and rerendered with the Unkillable Sigil. public override IEnumerator OnOtherCardResolve(PlayableCard otherCard) { yield return this.PlayBoonAnimation(); diff --git a/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs b/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs index 817bb5c1..3703805d 100644 --- a/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs +++ b/InscryptionCommunityPatch/Tests/TestCommunityPatches.cs @@ -6,11 +6,20 @@ namespace InscryptionCommunityPatch.Tests; +/// +/// The home of the Community Patch's Tests/ +/// [HarmonyPatch] public static class ExecuteCommunityPatchTests { + /// + /// The Boon associated with our Test Boon described in . + /// public static BoonData.Type TestBoon; + /// + /// This function prepares our Tests. + /// public static void PrepareForTests() { AbilityManager.BaseGameAbilities.AbilityByID(Ability.Sharp).Info.canStack = true; @@ -23,6 +32,10 @@ public static void PrepareForTests() Resources.Load("art/cards/boons/boonportraits/boon_startinggoat"), false, true, true); } + /// + /// This function patches in our Tests at the start of a New Ascension Run. + /// + /// [HarmonyPatch(typeof(AscensionSaveData), nameof(AscensionSaveData.NewRun))] [HarmonyPostfix] private static void StartRunInTestMode(ref AscensionSaveData __instance) diff --git a/InscryptionCommunityPatch/Tests/TestCost.cs b/InscryptionCommunityPatch/Tests/TestCost.cs index c0b2b896..336197a8 100644 --- a/InscryptionCommunityPatch/Tests/TestCost.cs +++ b/InscryptionCommunityPatch/Tests/TestCost.cs @@ -8,9 +8,18 @@ namespace InscryptionCommunityPatch.Tests; +/// +/// This function defines our Testing Cost. +/// public class TestCost : CustomCardCost { + /// + /// The Name of the Custom Cost. + /// public override string CostName => "TestCost"; + /// + /// This function initializes our Test Cost. + /// public static void Init() { PatchPlugin.Logger.LogDebug("Adding TestCost"); @@ -21,24 +30,60 @@ public static void Init() .SetFoundAtChoiceNodes(true, TextureHelper.GetImageAsTexture("testCost.png", typeof(TestCost).Assembly)); } + /// + /// This defines the Cost Tier associated with the Amount of the Cost. + /// + /// The amount of the Test Cost. + /// A of amount/2. public static int CostTier(int amount) { return Mathf.FloorToInt(amount / 2f); } + + /// + /// A bool determining whether a can be played with the current amount of the cost. + /// + /// The Amount of a Cost the Player currently has. + /// The Card the Player is trying to play. + /// The Player's current Hand. + /// True if the Amount of the Cost is <= 2. public static bool CanBePlayed(int amount, CardInfo card, List hand) { return amount <= 2; } + + /// + /// A Function used to get the Cost's Texture within 3D Act's. + /// + /// The Cost Amount of the Card. + /// The of the Card. + /// The variant of the Card. + /// A application of the 3D Act Variant EnergyCost associated with the passed in Cost Amount. public static Texture2D Texture3D(int cardCost, CardInfo cardInfo, PlayableCard playableCard) { Texture2D tex = TextureHelper.GetImageAsTexture($"energy_cost_{Mathf.Min(7, cardCost)}.png", typeof(PatchPlugin).Assembly); return ReverseColours(tex); } + + /// + /// A Function used to get the Cost's Texture within 2D Act's. + /// + /// The Cost Amount of the Card. + /// The of the Card. + /// The variant of the Card. + /// A application of the 2D Act Variant EnergyCost associated with the passed in Cost Amount. + /// public static Texture2D TexturePixel(int cardCost, CardInfo info, PlayableCard playableCard) { Texture2D tex = Part2CardCostRender.CombineIconAndCount(cardCost, TextureHelper.GetImageAsTexture($"pixel_energy.png", typeof(PatchPlugin).Assembly)); return ReverseColours(tex); } + + /// + /// A function used to Reverse the Colours of a Sprite. + /// + /// The Texture in which to reverse the Colours of. + /// A Colour Reversed version of the Passed Texture. private static Texture2D ReverseColours(Texture2D texToReverse) { for (int x = 0; x < texToReverse.width; x++) @@ -57,16 +102,34 @@ private static Texture2D ReverseColours(Texture2D texToReverse) return texToReverse; } + /// + /// A Bool determining whether the Card's Cost was satisfied or not. + /// + /// The Card's Cost. + /// The Card in which is attempting to be played. + /// True if the Cost was satisified and false otherwise. public override bool CostSatisfied(int cardCost, PlayableCard card) { return cardCost <= (Singleton.Instance.PlayerEnergy - card.EnergyCost); } - + + /// + /// The Hint said when the Cost was not Satisfied. + /// + /// The Card's Cost. + /// The Card in which is attempting to be played. + /// The String of the Hint to be said when the Card's Cost is not Satisfied. public override string CostUnsatisfiedHint(int cardCost, PlayableCard card) { return "Eat your greens aby. " + card.Info.DisplayedNameLocalized; } + /// + /// Depletes the Card's Cost from our Custom Cost's Cost Pool. + /// + /// The Card's Cost + /// The Card in which is attempting to be played. + /// The Card's Cost depleted from the Custom Cost's pool. public override IEnumerator OnPlayed(int cardCost, PlayableCard card) { if (cardCost > 0) From 212ff8a221bfde8adceff85cf7cd5c719320d83d Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Thu, 12 Nov 2026 21:02:29 -0500 Subject: [PATCH 17/28] Add XML Docs to the Community Patch Sequencers Module --- .../Sequencers/BuyPeltsSmallTags.cs | 3 +++ .../Sequencers/CardCostChoiceNodePatch.cs | 11 ++++++++++- .../Sequencers/CardStatBoostSequencerPatch.cs | 3 +++ .../Sequencers/LeshyResetRedEyes.cs | 4 ++++ .../Sequencers/PackRatNodeBackgroundFix.cs | 4 +++- .../Sequencers/TradeableTalkingCardFix.cs | 15 +++++++++++++++ 6 files changed, 38 insertions(+), 2 deletions(-) diff --git a/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs b/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs index 22c9e533..aa61fff4 100644 --- a/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs +++ b/InscryptionCommunityPatch/Sequencers/BuyPeltsSmallTags.cs @@ -4,6 +4,9 @@ namespace InscryptionCommunityPatch.Sequencers; +/// +/// Patches in Smaller Price tags and a moved Price tag when either the and are true respectively. +/// [HarmonyPatch] internal class BuyPeltsSmallTags { diff --git a/InscryptionCommunityPatch/Sequencers/CardCostChoiceNodePatch.cs b/InscryptionCommunityPatch/Sequencers/CardCostChoiceNodePatch.cs index 2451696b..6eb2266e 100644 --- a/InscryptionCommunityPatch/Sequencers/CardCostChoiceNodePatch.cs +++ b/InscryptionCommunityPatch/Sequencers/CardCostChoiceNodePatch.cs @@ -5,6 +5,9 @@ namespace InscryptionCommunityPatch.Sequencers; +/// +/// Patches in Our Cost Card Backs into the function for Energy and Mox costs. +/// [HarmonyPatch] internal static class ChoiceNodePatch { @@ -21,5 +24,11 @@ private static void CardSingleChoicesSequencer_GetCardbackTexture(ref Texture __ break; } } - public static string MoxTextureName(int index) => "moxCost" + (index switch { 1 => "Green", 2 => "Orange", 3 => "Blue", _ => "" }) + ".png"; + + /// + /// Handles getting the correct Mox Texture Name for usage in the patch. + /// + /// 1 -> Green, 2 -> Orange, 3 -> Blue, otherwise -> Empty + /// A string texture name in the form of moxCost{Color}.png + private static string MoxTextureName(int index) => "moxCost" + (index switch { 1 => "Green", 2 => "Orange", 3 => "Blue", _ => "" }) + ".png"; } \ No newline at end of file diff --git a/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs b/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs index d12e9021..701f4736 100644 --- a/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs +++ b/InscryptionCommunityPatch/Sequencers/CardStatBoostSequencerPatch.cs @@ -7,6 +7,9 @@ namespace InscryptionCommunityPatch.Sequencers; +/// +/// This patches in a conditional check as to whether or not the card has Boostable Stats or not. +/// [HarmonyPatch] internal class CardStatBoostSequencerPatch { diff --git a/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs b/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs index 613032c2..14abbca9 100644 --- a/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs +++ b/InscryptionCommunityPatch/Sequencers/LeshyResetRedEyes.cs @@ -4,6 +4,10 @@ namespace InscryptionCommunityPatch.Sequencers; +/// +/// This patch applies when is set to true. +/// When set to true after the boss has been beat, it resets their eyes back to normal rather than remaining red. +/// [HarmonyPatch] internal class LeshyResetRedEyes { diff --git a/InscryptionCommunityPatch/Sequencers/PackRatNodeBackgroundFix.cs b/InscryptionCommunityPatch/Sequencers/PackRatNodeBackgroundFix.cs index 0cdd0a8f..d68724a8 100644 --- a/InscryptionCommunityPatch/Sequencers/PackRatNodeBackgroundFix.cs +++ b/InscryptionCommunityPatch/Sequencers/PackRatNodeBackgroundFix.cs @@ -4,7 +4,9 @@ namespace InscryptionCommunityPatch.Sequencers; -// 'fixes' the pack rat card not being rare +/// +/// Corrects the Pack Rat Card to be a Rare Card. +/// [HarmonyPatch] internal class PackRatNodeBackgroundFix { diff --git a/InscryptionCommunityPatch/Sequencers/TradeableTalkingCardFix.cs b/InscryptionCommunityPatch/Sequencers/TradeableTalkingCardFix.cs index 9dadc5ff..deaeb1db 100644 --- a/InscryptionCommunityPatch/Sequencers/TradeableTalkingCardFix.cs +++ b/InscryptionCommunityPatch/Sequencers/TradeableTalkingCardFix.cs @@ -6,9 +6,19 @@ namespace InscryptionCommunityPatch.Sequencers; +/// +/// This patch fixes Tradable Talking Card related Issues. +/// [HarmonyPatch] public class TradeableTalkingCardFix { + /// + /// Patches the to allow for better handling regarding the Trade of Talking Cards. + /// + /// The Class Instance associated with the function e.g. . + /// The slot the card was found in. + /// The card being traded for. + /// This only returns our patched variant if the card is a talking card, otherwise it uses vanilla handling. [HarmonyPrefix, HarmonyPatch(typeof(TradeCardsForPelts), nameof(TradeCardsForPelts.OnTradableSelected))] private static bool OnTalkingCardSelected(TradeCardsForPelts __instance, HighlightedInteractable slot, PlayableCard card) { @@ -42,6 +52,11 @@ private static bool OnTalkingCardSelected(TradeCardsForPelts __instance, Highlig return false; } + /// + /// Handles the View associated with a trade specific to Talking Cards. + /// + /// The card in which is being given to the player. + /// The card added to hand, then a switch back to the trading pool. public static IEnumerator TradeForTalkingCard(PlayableCard card) { yield return Singleton.Instance.AddCardToHand(CardSpawner.SpawnPlayableCard(card.Info), new Vector3(0f, 0.5f, -3f), 0f); From 2b62c399885c14216209cd7cb871c76f883bd4b8 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 08:49:38 -0500 Subject: [PATCH 18/28] Implement XML Docs for ResourceManagers Module of Community Patch --- .../ResourceManagers/ActOneEnergyDrone.cs | 51 +++++++++++++++++-- .../ActThreeBonesDisplayer.cs | 29 ++++++++++- 2 files changed, 73 insertions(+), 7 deletions(-) diff --git a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs index c5d604b2..12c59926 100644 --- a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs +++ b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs @@ -8,6 +8,9 @@ namespace InscryptionCommunityPatch.ResourceManagers; +/// +/// This patch handles information related to the Drone Configuration for Act 1. +/// [HarmonyPatch] public static class EnergyDrone { @@ -16,10 +19,25 @@ public static class EnergyDrone /// public class EnergyConfigInfo { - public bool ConfigEnergy { get; set; } = PoolHasEnergy || PatchPlugin.configEnergyPerMatchCleanUp.Value; + /// + /// Whether or not the Energy Drone should be shown. + /// public bool ConfigShowDrone { get; set; } = PoolHasEnergy || PatchPlugin.configEnergyDrone.Value; + /// + /// Whether or not the Energy Drone should be refreshed per match. + /// + public bool ConfigEnergy { get; set; } = PoolHasEnergy || PatchPlugin.configEnergyPerMatchCleanUp.Value; + /// + /// Whether or not the Mox Drone should be shown. + /// public bool ConfigDroneMox { get; set; } = PoolHasGems || PatchPlugin.configMoxDrone.Value; + /// + /// Whether or not the Mox Drone should be refreshed per match. + /// public bool ConfigMox { get; set; } = PoolHasGems || PatchPlugin.configMoxPerMatchCleanup.Value; + /// + /// Whether or not the Default Drone should be used. + /// public bool ConfigDefaultDrone { get; set; } = PatchPlugin.configUtilizeDefaultDrone.Value; /// @@ -38,7 +56,12 @@ public class EnergyConfigInfo { CardTemple.Tech, new() }, { CardTemple.Wizard, new() } }; - + + /// + /// Validator used to ensure a Scene can have the Drone or not. + /// + /// The scene we are checking. + /// True if the scene can have the drone, false otherwise. public static bool SceneCanHaveEnergyDrone(string sceneName) { string activeSceneName = sceneName.ToLowerInvariant(); @@ -48,6 +71,9 @@ public static bool SceneCanHaveEnergyDrone(string sceneName) return activeSceneName.Contains("magnificus") || activeSceneName.Contains("grimora"); } + /// + /// Determines whether the current Scene can have the Drone or not. Verified via . + /// public static bool CurrentSceneCanHaveEnergyDrone { get @@ -61,7 +87,7 @@ public static bool CurrentSceneCanHaveEnergyDrone } /// - /// Returns the EnergyConfigInfo object corresponding to the current Act. + /// Returns the object corresponding to the current Act. /// public static EnergyConfigInfo GetEnergyConfig() { @@ -78,14 +104,26 @@ public static EnergyConfigInfo GetEnergyConfig() } /// - /// The EnergyConfigInfo for the current Act. + /// The for the current Act. /// private static EnergyConfigInfo EnergyConfig => GetEnergyConfig(); + /// + /// Used to determine whether the current Card Pool has Energy or not. + /// public static bool PoolHasEnergy { get; private set; } + /// + /// Used to determine whether the current Card Pool has Mox or not. + /// public static bool PoolHasGems { get; private set; } - private static bool CardIsVisible(this CardInfo info, CardTemple targetTemple) + /// + /// Determines whether or not a card is a part of the and if they have the meta categories needed in order for them to show up. + /// + /// The of the card we are checking. + /// The temple in which we are targetting. Options are Nature -> Act 1, Undead -> Grimora, Wizard -> Magnificus. + /// True if the Card is part of one of the temples we are after, and if the card has any of the meta categories needed to show up in the given act, otherwise false. + public static bool CardIsVisible(this CardInfo info, CardTemple targetTemple) { // if the CardInfo can't appear in this part of the game - Act 1 = Nature, Grimora = Undead, Magnificus = Wizard if (info.temple != targetTemple) @@ -132,6 +170,7 @@ private static IEnumerator AwakeDrone() else AttachDroneToScale(); } + private static void AttachDroneToScale() { try @@ -189,6 +228,7 @@ private static bool Act1ResourceDrone_SetOnBoard(ResourceDrone __instance, bool return false; } + [HarmonyPrefix, HarmonyPatch(typeof(ResourceDrone), nameof(ResourceDrone.UpdateCellAndGemColors))] private static bool DisableUpdateWhenNull() { @@ -196,6 +236,7 @@ private static bool DisableUpdateWhenNull() return false; return true; } + [HarmonyPatch(typeof(Part1ResourcesManager), nameof(Part1ResourcesManager.CleanUp))] [HarmonyPrefix] private static void Part1ResourcesManager_CleanUp(Part1ResourcesManager __instance) diff --git a/InscryptionCommunityPatch/ResourceManagers/ActThreeBonesDisplayer.cs b/InscryptionCommunityPatch/ResourceManagers/ActThreeBonesDisplayer.cs index 0d962fb1..467ece78 100644 --- a/InscryptionCommunityPatch/ResourceManagers/ActThreeBonesDisplayer.cs +++ b/InscryptionCommunityPatch/ResourceManagers/ActThreeBonesDisplayer.cs @@ -10,13 +10,33 @@ namespace InscryptionCommunityPatch.ResourceManagers; +/// +/// This patch handles adding the Bones Displayer to the Drone. +/// [HarmonyPatch] public static class Act3BonesDisplayer { + /// + /// A bool determining whether the Bones Displayer should be forced to active. + /// public static bool ForceBonesDisplayActive { get; set; } = false; + /// + /// A bool determining whether the Bones Displayer is active, namely when any one of the following are true; + ///
+ /// - + ///
+ /// - + ///
+ /// - + ///
public static bool DisplayAct3Bones => ForceBonesDisplayActive || PoolHasBones || PatchPlugin.configAct3Bones.Value; + /// + /// Determines whether or not a card is a part of the Tech Temple, and whether it has a Meta Category that can show in Act 3. + /// + /// The of the card we are checking. + /// True if the card is a part of the Technology temple, and if the card has any of the meta categories needed to show up in the given act, otherwise false. private static bool CardIsVisible(this CardInfo info) { if (info.temple != CardTemple.Tech) @@ -24,12 +44,17 @@ private static bool CardIsVisible(this CardInfo info) // Now we check metacategories // If the card's metacategories are set such that it can't actually appear, don't count it - return info.metaCategories.Exists((CardMetaCategory x) => - x == CardMetaCategory.ChoiceNode || x == CardMetaCategory.Part3Random || x == CardMetaCategory.Rare); + return info.metaCategories.Exists((CardMetaCategory x) => x == CardMetaCategory.ChoiceNode || x == CardMetaCategory.Part3Random || x == CardMetaCategory.Rare); } + /// + /// Determines whether the Card Pool has any cards that cost Bones, verified with . + /// public static bool PoolHasBones => CardManager.AllCardsCopy.Any(ci => ci.BonesCost > 0 && ci.CardIsVisible()); + /// + /// Determines whether the current Scene can have the Bones Displayer or not. + /// public static bool SceneCanHaveBonesDisplayer { get From 61ef9a36a24394c7b0ed4ffc067bbf59bc24a740 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 09:09:41 -0500 Subject: [PATCH 19/28] Implement XML Docs for the PixelTutor Module in Community Patch --- .../PixelTutor/Act2TutorFix.cs | 4 ++- .../PixelTutor/PixelPlayableCardArray.cs | 31 ++++++++++++++++--- .../ResourceManagers/ActOneEnergyDrone.cs | 2 +- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs b/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs index e7960847..bb59dbc5 100644 --- a/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs +++ b/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs @@ -7,7 +7,9 @@ namespace InscryptionCommunityPatch.PixelTutor; -// fixes Tutor to work in Act 2 +/// +/// Patches in our Act 2 related UI, that way it doesn't break when used in Act 2. +/// [HarmonyPatch] public static class Act2TutorFix { diff --git a/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs b/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs index 55b8669b..4381b350 100644 --- a/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs +++ b/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs @@ -9,10 +9,19 @@ namespace InscryptionCommunityPatch.PixelTutor; +/// +/// Handles the UI related to the Act 2 patched in by . +/// public class PixelPlayableCardArray : ManagedBehaviour { + /// + /// The Selected Card, by default null. + /// public PixelPlayableCard selectedCard = null; + /// + /// The Cards to Display when is triggered in Act 2, by default an empty list. + /// public readonly List displayedCards = new(); private PixelPlayableCard gameObjectReference = null; @@ -34,8 +43,14 @@ public class PixelPlayableCardArray : ManagedBehaviour private GamepadGridControl gamepadGrid; - public IEnumerator DisplayUntilCancelled(List cards, - Func cancelCondition, Action cardsPlacedCallback = null) + /// + /// An used to make the Act 2 display show until it's cancelled, e.g. by a card being selected.. + /// + /// The cards available for selection. + /// The condition needed to cancel the screen showing when would be triggered. + /// The callback for when the card(s) has/have been placed. + /// The Act 2 screen shown in game. + public IEnumerator DisplayUntilCancelled(List cards, Func cancelCondition, Action cardsPlacedCallback = null) { //Debug.Log($"{cards.Exists(x => x == null)}"); cards.RemoveAll(x => x == null); @@ -58,9 +73,15 @@ public IEnumerator DisplayUntilCancelled(List cards, CleanUpButtons(); } - public IEnumerator SelectPixelCardFrom( - List cards, Action cardSelectedCallback, - Func cancelCondition = null, bool forPositiveEffect = true) + /// + /// An used to determine the selection for when the Act 2 is triggered. + /// + /// The cards we want to show. + /// The call back for when a Card has been selected. + /// The condition by which to cancel the Selection screen. + /// Whether the special ability should use a Positive Effect when the card is shown in selection. + /// A selection screen of cards to be selected from. + public IEnumerator SelectPixelCardFrom(List cards, Action cardSelectedCallback, Func cancelCondition = null, bool forPositiveEffect = true) { //Debug.Log($"{cards.Exists(x => x == null)}"); cards.RemoveAll(x => x == null); diff --git a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs index 12c59926..a88ad553 100644 --- a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs +++ b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs @@ -118,7 +118,7 @@ public static EnergyConfigInfo GetEnergyConfig() public static bool PoolHasGems { get; private set; } /// - /// Determines whether or not a card is a part of the and if they have the meta categories needed in order for them to show up. + /// Determines whether or not a card is a part of the targetted temple passed in through targetTemple, and if they have the meta categories needed in order for them to show up. /// /// The of the card we are checking. /// The temple in which we are targetting. Options are Nature -> Act 1, Undead -> Grimora, Wizard -> Magnificus. From 06d88b0179c40f72106875bbc450e3af2d5d40e9 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 09:44:19 -0500 Subject: [PATCH 20/28] Implement XML Docs to a chunk of the Card Module of the Community Patch --- .../Card/ActivatedAbilityHandler3D.cs | 17 +++++++ .../Card/ActivatedAbilityIconFix.cs | 13 +++-- .../Card/ActivatedAbilityIconInteractable.cs | 51 ++++++++++++++++--- .../Card/AdditionalIcons.cs | 16 +++++- InscryptionCommunityPatch/Card/ArtPatches.cs | 16 ++++++ .../Card/CardCostRender.cs | 10 +++- .../Card/GiantCardEmissionAspectFix.cs | 2 +- .../Card/MergedSigilOnBottom.cs | 3 ++ .../Card/MissingSquirrelTribeIconFix.cs | 3 ++ .../Card/SacrificeTokensFix.cs | 9 +++- .../Card/StackAbilityIcons.cs | 5 ++ .../Card/TempModDecalsFix.cs | 6 ++- .../Card/TempModPixelSigilsFix.cs | 10 +++- .../ResourceManagers/ActOneEnergyDrone.cs | 2 +- 14 files changed, 145 insertions(+), 18 deletions(-) diff --git a/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs b/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs index 54d0c31b..8ba48712 100644 --- a/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs +++ b/InscryptionCommunityPatch/Card/ActivatedAbilityHandler3D.cs @@ -3,17 +3,34 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Fixes the Activated Ability handler in 3D Environments. +/// public class ActivatedAbilityHandler3D : ManagedBehaviour { + /// + /// The current Icon Group of . + /// public List currentIconGroup; + /// + /// The current Interactable Group of . + /// public List interactables = new(); + /// + /// A function used to add an Interactable to . + /// + /// The Interactable that we want to add. public void AddInteractable(ActivatedAbilityIconInteractable interactable) { interactables.Add(interactable); } + /// + /// Updates the List of to the passed in List. + /// + /// The list of Interactable used to replace the current list. public void UpdateInteractableList(List controllerActiveIcons) { interactables.Clear(); diff --git a/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs b/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs index 37e43409..df4d2558 100644 --- a/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs +++ b/InscryptionCommunityPatch/Card/ActivatedAbilityIconFix.cs @@ -4,13 +4,20 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Fixes related to Activated Ability Icons. +/// [HarmonyPatch] public static class ActivatedAbilityIconFix { - public static bool HasActivatedAbility(this PlayableCard card) + /// + /// A bool determining whether or not a card has an Activated Ability. + /// + /// The in which we want to see if it has a Activated Ability or not. + /// True if the card has an Activated Ability, false otherwise. + private static bool HasActivatedAbility(this PlayableCard card) { - return card.Info.Abilities.Exists(elem => AbilitiesUtil.GetInfo(elem).activated) - || card.temporaryMods.Exists(elem => elem.abilities.Exists(elem2 => AbilitiesUtil.GetInfo(elem2).activated)); + return card.Info.Abilities.Exists(elem => AbilitiesUtil.GetInfo(elem).activated) || card.temporaryMods.Exists(elem => elem.abilities.Exists(elem2 => AbilitiesUtil.GetInfo(elem2).activated)); } diff --git a/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs b/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs index 66c3b3a1..c803add9 100644 --- a/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs +++ b/InscryptionCommunityPatch/Card/ActivatedAbilityIconInteractable.cs @@ -3,12 +3,24 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Fixes related to how Activated Ability Interactable's are rendered on cards. +/// public class ActivatedAbilityIconInteractable : MainInputInteractable { private Material _renderMaterial; - private Color _originalColor; - private readonly Color _enterColor = new(.7f, .7f, .7f, .7f); - private readonly Color _selectedColor = new(.4f, .4f, .4f, .4f); + /// + /// The Original Interactable Color. + /// + public Color _originalColor; + /// + /// The Color used when the region is entered: ARGB: 178, 178, 178, 178 + /// + public readonly Color _enterColor = new(.7f, .7f, .7f, .7f); + /// + /// The Color used when the region is selected: ARGB: 102, 102, 102, 102 + /// + public readonly Color _selectedColor = new(.4f, .4f, .4f, .4f); private PlayableCard _playableCard; @@ -27,10 +39,20 @@ private void Start() private bool IsValidPlayableCard => _playableCard && _playableCard.OnBoard && !_playableCard.OpponentCard; + /// + /// Whether or not an Ability has been assigned, this is done by checking if the Ability is greater than . + /// public bool AbilityAssigned => Ability > Ability.None; + /// + /// The Ability associated with the Activated Ability. + /// public Ability Ability { get; private set; } + /// + /// Assigns our new interactable to the passed in Ability. + /// + /// The ability we want to update the Interactable of. public void AssignAbility(Ability ability) { if (PatchPlugin.configDisplayCompleteDebugLogsInConsole.Value) @@ -55,15 +77,30 @@ private void OnButtonPressed() } } + /// + /// Set's the color of the Rendering Material related to the Activated Ability. + /// + /// public void SetColor(Color color) => _renderMaterial.color = color; + /// + /// Set's the color to using when the cursor enters the region. + /// public override void OnCursorEnter() => SetColor(_enterColor); - + /// + /// Set's the color to using when the cursor exits the region. + /// public override void OnCursorExit() => SetColor(_originalColor); - + /// + /// Set's the color to using when the cursor selects the region. + /// public override void OnCursorSelectStart() => SetColor(_selectedColor); - + /// + /// Set's the color to using when the cursor unselects the region. + /// public override void OnCursorSelectEnd() => SetColor(_originalColor); - + /// + /// Set's the color to using when the cursor drags the region. + /// public override void OnCursorDrag() => SetColor(_originalColor); } \ No newline at end of file diff --git a/InscryptionCommunityPatch/Card/AdditionalIcons.cs b/InscryptionCommunityPatch/Card/AdditionalIcons.cs index a80c0507..e480e769 100644 --- a/InscryptionCommunityPatch/Card/AdditionalIcons.cs +++ b/InscryptionCommunityPatch/Card/AdditionalIcons.cs @@ -5,8 +5,11 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Modifies how cards are rendered so up to 8 sigils can be displayed on a card. +/// [HarmonyPatch] -internal class RenderAdditionalSigils // Modifies how cards are rendered so up to 8 sigils can be displayed on a card +internal class RenderAdditionalSigils { private static Vector3 LocalScaleBase3D => SaveManager.SaveFile.IsPart1 ? new(0.2175f, 0.145f, 1f) : new(0.3f, 0.3f, 0.75f); @@ -21,6 +24,7 @@ private static GameObject NewIconGroup(CardAbilityIcons controller, Transform pa return newIconGroup; } + private static List NewIcons(GameObject newIconGroup, int slotNum, float act1ScaleMult = 1f) { List icons = new(); @@ -75,6 +79,7 @@ private static void AddQuadrupleIconSlotToCard(CardAbilityIcons controller, Tran icons[2].localPosition = new Vector3(-0.12f, -0.077f, 0f); icons[3].localPosition = new Vector3(0.12f, -0.077f, 0f); } + private static void AddQuintupleIconSlotToCard(CardAbilityIcons controller, Transform abilityIconParent) { GameObject iconGroup5 = NewIconGroup(controller, abilityIconParent, 5); @@ -98,6 +103,7 @@ private static void AddQuintupleIconSlotToCard(CardAbilityIcons controller, Tran icons[4].localPosition = new Vector3(0f, -0.125f, 0f); } } + private static void AddSextupleIconSlotToCard(CardAbilityIcons controller, Transform abilityIconParent) { GameObject iconGroup6 = NewIconGroup(controller, abilityIconParent, 6); @@ -116,6 +122,7 @@ private static void AddSextupleIconSlotToCard(CardAbilityIcons controller, Trans icons[5].localPosition = new Vector3(0.14f, -0.125f, 0f); } } + private static void AddSeptupleIconSlotToCard(CardAbilityIcons controller, Transform abilityIconParent) { GameObject iconGroup7 = NewIconGroup(controller, abilityIconParent, 7); @@ -139,6 +146,7 @@ private static void AddSeptupleIconSlotToCard(CardAbilityIcons controller, Trans icons[6].localPosition = new Vector3(0.28f, -0.125f, 0f); } } + private static void AddOctupleIconSlotToCard(CardAbilityIcons controller, Transform abilityIconParent) { GameObject iconGroup8 = NewIconGroup(controller, abilityIconParent, 8); @@ -201,6 +209,7 @@ private static GameObject NewPixelIconGroup(PixelCardAbilityIcons controller, Tr return newIconGroup; } + private static List NewPixelIcons(GameObject newIconGroup, string newIconName, float scaleMult = 1f) { List icons = new(); @@ -235,6 +244,7 @@ private static void AddTriplePixelicon(PixelCardAbilityIcons controller, Transfo icons[1].localPosition = new Vector3(0f, 0f, 0f); icons[2].localPosition = new Vector3(0.12f, 0f, 0f); } + private static void AddQuadruplePixelIcon(PixelCardAbilityIcons controller, Transform pixelParent) { GameObject pixelIconGroup4 = NewPixelIconGroup(controller, pixelParent, 4); @@ -249,6 +259,7 @@ private static void AddQuadruplePixelIcon(PixelCardAbilityIcons controller, Tran icons[2].localPosition = new Vector3(-0.08f, -0.06f, 0f); icons[3].localPosition = new Vector3(0.07f, -0.06f, 0f); } + private static void AddQuintuplePixelIcon(PixelCardAbilityIcons controller, Transform pixelParent) { GameObject pixelIconGroup5 = NewPixelIconGroup(controller, pixelParent, 5); @@ -265,6 +276,7 @@ private static void AddQuintuplePixelIcon(PixelCardAbilityIcons controller, Tran icons[3].localPosition = new Vector3(-0.08f, -0.06f, 0f); icons[4].localPosition = new Vector3(0.07f, -0.06f, 0f); } + private static void AddSextuplePixelIcon(PixelCardAbilityIcons controller, Transform pixelParent) { GameObject pixelIconGroup6 = NewPixelIconGroup(controller, pixelParent, 6); @@ -277,6 +289,7 @@ private static void AddSextuplePixelIcon(PixelCardAbilityIcons controller, Trans icons[4].localPosition = new Vector3(0f, -0.04f, 0f); icons[5].localPosition = new Vector3(0.12f, -0.04f, 0f); } + private static void AddSeptuplePixelIcon(PixelCardAbilityIcons controller, Transform pixelParent) { GameObject pixelIconGroup7 = NewPixelIconGroup(controller, pixelParent, 7); @@ -297,6 +310,7 @@ private static void AddSeptuplePixelIcon(PixelCardAbilityIcons controller, Trans icons[5].localPosition = new Vector3(0f, -0.04f, 0f); icons[6].localPosition = new Vector3(0.08f, -0.04f, 0f); } + private static void AddOctuplePixelIcon(PixelCardAbilityIcons controller, Transform pixelParent) { GameObject pixelIconGroup8 = NewPixelIconGroup(controller, pixelParent, 8); diff --git a/InscryptionCommunityPatch/Card/ArtPatches.cs b/InscryptionCommunityPatch/Card/ArtPatches.cs index 0c680a75..d11e63b4 100644 --- a/InscryptionCommunityPatch/Card/ArtPatches.cs +++ b/InscryptionCommunityPatch/Card/ArtPatches.cs @@ -4,8 +4,14 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Patches in our custom Icons for Sigils, and Cards that are missing Icons. +/// internal static class CommunityArtPatches { + /// + /// The 3D Act Icons to Patch in. + /// internal static readonly List regularIconsToPatch = new() { Ability.ActivatedDealDamage, @@ -29,6 +35,9 @@ internal static class CommunityArtPatches Ability.SquirrelStrafe }; + /// + /// The 2D Act Art Icons to Patch in. + /// internal static readonly List gbcIconsToPatch = new() { Ability.ConduitSpawnGems, @@ -62,6 +71,10 @@ internal static class CommunityArtPatches Ability.SquirrelOrbit, Ability.DrawVesselOnHit }; + + /// + /// The 3D Act Card's to Patch the Artwork of. + /// internal static readonly List regularCardsToPatch = new() { "Ant", @@ -83,6 +96,9 @@ internal static class CommunityArtPatches "Tail_Insect", }; + /// + /// Handles Patching in the Community Patches artwork. + /// internal static void PatchCommunityArt() { System.Reflection.Assembly ass = typeof(CommunityArtPatches).Assembly; diff --git a/InscryptionCommunityPatch/Card/CardCostRender.cs b/InscryptionCommunityPatch/Card/CardCostRender.cs index 2573628a..5085de31 100644 --- a/InscryptionCommunityPatch/Card/CardCostRender.cs +++ b/InscryptionCommunityPatch/Card/CardCostRender.cs @@ -8,6 +8,9 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Fixes the Rendering related to a Card's Cost. +/// [HarmonyPatch] public static class CardCostRender { @@ -32,10 +35,15 @@ public static Texture2D GetTextureByName(string key) AssembledTextures.Add(key, texture); return texture; } - + /// /// Creates a sprite that combines all of a card's play costs. /// + /// The in which to get the Card's Cost from. + /// The in which to get the Card's Cost from. + /// The type of Sprite we are trying to combine. + /// The amount of spacing to use when combing a Card's Cost in the Vertical. + /// A Combined Cost Sprite that is Vertically stacked. public static Sprite FinalCostSprite(CardInfo cardInfo, PlayableCard playableCard, TextureHelper.SpriteType spriteType, int yStep) { Texture2D baseTexture; diff --git a/InscryptionCommunityPatch/Card/GiantCardEmissionAspectFix.cs b/InscryptionCommunityPatch/Card/GiantCardEmissionAspectFix.cs index eb41d873..f3f1da7c 100644 --- a/InscryptionCommunityPatch/Card/GiantCardEmissionAspectFix.cs +++ b/InscryptionCommunityPatch/Card/GiantCardEmissionAspectFix.cs @@ -9,7 +9,7 @@ namespace InscryptionCommunityPatch.Card; [HarmonyPatch] internal class GiantCardEmissionAspectFix { /// - /// Changes the emissioner render camera's aspect ratio for Giant cards so emission texture don't appear stretched. + /// Changes the emission render camera's aspect ratio for Giant cards so emission texture don't appear stretched. /// Aspect number taken from the base texture renderer's aspect ratio. /// [HarmonyPostfix, HarmonyPatch(typeof(CardRenderCamera), nameof(CardRenderCamera.TryCreateCameraForLiveRender))] diff --git a/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs b/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs index e7710312..23a44a2b 100644 --- a/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs +++ b/InscryptionCommunityPatch/Card/MergedSigilOnBottom.cs @@ -4,6 +4,9 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Makes it so that Merged Sigils are shown on the Bottom of the Card. +/// [HarmonyPatch] public class MergedSigilOnBottom { diff --git a/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs b/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs index 6b18f521..b8df2eb3 100644 --- a/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs +++ b/InscryptionCommunityPatch/Card/MissingSquirrelTribeIconFix.cs @@ -7,6 +7,9 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Patches in the Missing Squirrel Tribe Icon. +/// [HarmonyPatch] public class MissingSquirrelTribeIconFix { diff --git a/InscryptionCommunityPatch/Card/SacrificeTokensFix.cs b/InscryptionCommunityPatch/Card/SacrificeTokensFix.cs index 409e5396..139dcdc5 100644 --- a/InscryptionCommunityPatch/Card/SacrificeTokensFix.cs +++ b/InscryptionCommunityPatch/Card/SacrificeTokensFix.cs @@ -4,9 +4,14 @@ namespace InscryptionCommunityPatch.Card; -public static class SacrificeTokensFix // Allows blood costs over 4 to work properly +/// +/// Allows blood costs over 4 to work properly +/// +public static class SacrificeTokensFix { - // modders can access this to change increase/decrease the amount of tokens added + /// + /// Modders can access this to change increase/decrease the amount of tokens added + /// public static int amountOfNewTokens = 20; [HarmonyPatch(typeof(BoardManager3D), nameof(BoardManager3D.Start))] diff --git a/InscryptionCommunityPatch/Card/StackAbilityIcons.cs b/InscryptionCommunityPatch/Card/StackAbilityIcons.cs index 119c2403..17650cde 100644 --- a/InscryptionCommunityPatch/Card/StackAbilityIcons.cs +++ b/InscryptionCommunityPatch/Card/StackAbilityIcons.cs @@ -7,6 +7,9 @@ namespace InscryptionCommunityPatch.Card; +/// +/// Adds Handling for Stacking Abilities of the same type. +/// [HarmonyPatch] public static class StackAbilityIcons { @@ -25,6 +28,7 @@ public static class StackAbilityIcons TextureHelper.GetImageAsTexture("Stack_8.png", typeof(StackAbilityIcons).Assembly), TextureHelper.GetImageAsTexture("Stack_9.png", typeof(StackAbilityIcons).Assembly) }; + private static readonly Texture2D[] MEDIUM_NUMBER_TEXTURES = new Texture2D[] { TextureHelper.GetImageAsTexture("Stack_0_med.png", typeof(StackAbilityIcons).Assembly), @@ -38,6 +42,7 @@ public static class StackAbilityIcons TextureHelper.GetImageAsTexture("Stack_8_med.png", typeof(StackAbilityIcons).Assembly), TextureHelper.GetImageAsTexture("Stack_9_med.png", typeof(StackAbilityIcons).Assembly) }; + private static readonly Sprite[] GBC_NUMBER_SPRITES = new Sprite[] { GetGBCNumberSprite(1), diff --git a/InscryptionCommunityPatch/Card/TempModDecalsFix.cs b/InscryptionCommunityPatch/Card/TempModDecalsFix.cs index 8fb0cc47..5f17ae5d 100644 --- a/InscryptionCommunityPatch/Card/TempModDecalsFix.cs +++ b/InscryptionCommunityPatch/Card/TempModDecalsFix.cs @@ -7,7 +7,9 @@ namespace InscryptionCommunityPatch.Card; -// Lets you add and remove decals via temporary mods +/// +/// Lets you add and remove decals via temporary mods +/// [HarmonyPatch] internal class TempModDecalsFix { @@ -22,6 +24,7 @@ private static void RemoveTemporaryModsWithDecals(PlayableCard __instance, CardM if (cardModificationInfo != null) __instance.Info.Mods.Remove(cardModificationInfo); } + [HarmonyPatch(typeof(PlayableCard), nameof(PlayableCard.AddTemporaryMod))] [HarmonyTranspiler] private static IEnumerable AddTemporaryDecalsWithDecals(IEnumerable instructions) @@ -50,6 +53,7 @@ private static IEnumerable AddTemporaryDecalsWithDecals(IEnumer return codes; } + private static void AddDecalIdsToMods(PlayableCard card, CardModificationInfo tempMod) { // only interested in adding decals, thank you very much diff --git a/InscryptionCommunityPatch/Card/TempModPixelSigilsFix.cs b/InscryptionCommunityPatch/Card/TempModPixelSigilsFix.cs index fe23143d..e66f7ea8 100644 --- a/InscryptionCommunityPatch/Card/TempModPixelSigilsFix.cs +++ b/InscryptionCommunityPatch/Card/TempModPixelSigilsFix.cs @@ -6,7 +6,9 @@ namespace InscryptionCommunityPatch.Card; -// Lets you add and remove decals via temporary mods +/// +/// Lets you add and remove decals via temporary mods +/// [HarmonyPatch] public class TempModPixelSigilsFix { @@ -30,6 +32,12 @@ private static IEnumerable AddTemporaryMods(IEnumerable + /// This is used to Handle the Render of Temporary Sigils to the Card. + ///
+ /// The of the Card we are trying to apply the temporary sigils to. + /// The in which we want to apply the temporary sigils to. + /// A list of Temporary Abilities after handling the rendering of them. public static List RenderTemporarySigils(CardInfo info, PlayableCard card) { if (card == null) diff --git a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs index a88ad553..1c6a45f3 100644 --- a/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs +++ b/InscryptionCommunityPatch/ResourceManagers/ActOneEnergyDrone.cs @@ -118,7 +118,7 @@ public static EnergyConfigInfo GetEnergyConfig() public static bool PoolHasGems { get; private set; } /// - /// Determines whether or not a card is a part of the targetted temple passed in through targetTemple, and if they have the meta categories needed in order for them to show up. + /// Determines whether or not a card is a part of the targeted temple passed in through targetTemple, and if they have the meta categories needed in order for them to show up. /// /// The of the card we are checking. /// The temple in which we are targetting. Options are Nature -> Act 1, Undead -> Grimora, Wizard -> Magnificus. From b25351333b3336052f37a9ebc291449938d02cec Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 09:58:39 -0500 Subject: [PATCH 21/28] Finish PixelTutor Module XML Docs --- .../PixelTutor/Act2TutorFix.cs | 6 ++++ .../PixelTutor/PixelPlayableCardArray.cs | 34 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs b/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs index bb59dbc5..28e5b4bc 100644 --- a/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs +++ b/InscryptionCommunityPatch/PixelTutor/Act2TutorFix.cs @@ -89,6 +89,12 @@ private static IEnumerator PixelTutorSequence(IEnumerator enumerator, Deck __ins yield return Singleton.Instance.SpawnCardToHand(selectedCard); } + /// + /// An called when selecting a card through the Ability in Act 2. + /// + /// The current instance of the . + /// The call back used when a Card is Selected. + /// The callback passed in triggered when a card is selected. public static IEnumerator ChoosePixelCard(Deck instance, Action cardSelectedCallback) { PixelPlayableCard selectedCard = null; diff --git a/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs b/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs index 4381b350..7441b81a 100644 --- a/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs +++ b/InscryptionCommunityPatch/PixelTutor/PixelPlayableCardArray.cs @@ -143,6 +143,7 @@ public IEnumerator SelectPixelCardFrom(List cards, Action cards, bool deckReview, bool forPositiveEffect) { if (forwardButton == null) @@ -177,6 +178,7 @@ private void InitialiseButtons(List cards, bool deckReview, bool forPo backButton.gameObject.SetActive(false); EnableButtons(false); } + private void CleanUpButtons() { if (forwardButton.gameObject.activeSelf) @@ -185,17 +187,20 @@ private void CleanUpButtons() backButton.gameObject.SetActive(false); } } + private void EnableButtons(bool enable) { forwardButton.SetEnabled(enable); backButton.SetEnabled(enable); } + private void OnChangePage(bool forwards, List cards, bool deckReview, bool forPositiveEffect) { EnableButtons(false); SetCardsEnabled(enabled: false); base.StartCoroutine(ChangePage(forwards, cards, deckReview, forPositiveEffect)); } + private IEnumerator ChangePage(bool forwards, List cards, bool deckReview, bool forPositiveEffect) { yield return CleanUpCards(); @@ -209,6 +214,15 @@ private IEnumerator ChangePage(bool forwards, List cards, bool deckRev SetCardsEnabled(enabled: true); EnableButtons(true); } + + /// + /// A function used to get the card's position. + /// + /// The Index of the card we are after within the row of cards. + /// The amount of cards to place in the row of cards. + /// The number of rows on the screen. + /// The amount of cards placed in the row of cards. + /// protected Vector3 GetCardPosition(int cardIndex, int cardsToPlace, int numRows, int cardsPerRow) { int cardRowIndex = Mathf.FloorToInt(cardIndex / cardsPerRow); @@ -217,6 +231,7 @@ protected Vector3 GetCardPosition(int cardIndex, int cardsToPlace, int numRows, float zPos = 0f + 0.01f * cardRowIndex; return new Vector3(xPos, yPos, zPos); } + private float GetXPos(int cardIndex, int cardRowIndex, int cardsToPlace, int cardsPerRow) { float cardGap = 0.41f; @@ -234,6 +249,11 @@ private float GetXPos(int cardIndex, int cardRowIndex, int cardsToPlace, int car return anchor + cardGap * multiplier; } + + /// + /// An used to Clean Up the card's in the screen. + /// + /// The cleaned up menu and a switch back to the Board context. protected IEnumerator CleanUpCards() { List list = new(displayedCards); @@ -252,6 +272,15 @@ protected IEnumerator CleanUpCards() SetBoardEnabled(true); } + /// + /// An related to the spawning and placement of card's to the screen. + /// + /// The List of to place into the Menu. + /// The Number of Rows alloted to the Menu. + /// The Index of the current Selection Screen's pages. + /// Whether or not after this was triggered we should go to the Deck for review. + /// Whether the special ability should use a Positive Effect when the card is shown in selection. + /// The readied screen of cards to show in our selection. protected IEnumerator SpawnAndPlaceCards(List cards, int numRows, int pageIndex, bool isDeckReview = false, bool forPositiveEffect = true) { if (numRows < 1) { @@ -287,6 +316,11 @@ protected IEnumerator SpawnAndPlaceCards(List cards, int numRows, int } } + /// + /// Handles the tweening of a card to the specified position. + /// + /// The Card Transform we want to tween. + /// The Vector3 related to where the Card is located. protected void TweenInCard(Transform cardTransform, Vector3 cardPos) { cardTransform.localPosition = cardPos; From 30da297b2eef60d09e516d99f28140e3bea26e92 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 10:17:48 -0500 Subject: [PATCH 22/28] Update Changelog (+Formatting) --- CHANGELOG.md | 1189 +++++++++++++++++++++++++------------------------- 1 file changed, 606 insertions(+), 583 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 238714d5..45b26996 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,794 +4,817 @@ * Removed `_specialSequencer` from `SpecialSequenceManager` as it was unused. * Removed `FontReplacementDataInitialized` from `LocalizationManager` as it was unused. * Added new Support for Custom Appearances. - - Image Handling is to be handled by the mods using the API. - - We now provide a storage of Base Game Decals that mods can reference without needing to instantiate their own. - - This comes with 5 new Dictionaries `BaseGameCustomAppearances` (Internal), `BaseGameCustomAppearancesPublic`, `ModdedCustomAppearancesDictionary` (Internal), `ModdedCustomAppearancesDictionaryPublic`, `CombinedCustomAppearancesDictionaryPublic`. - - This system is stored under the `TextureHelper` class. + * Image Handling is to be handled by the mods using the API. + * We now provide a storage of Base Game Decals that mods can reference without needing to instantiate their own. + * This comes with 5 new Dictionaries `BaseGameCustomAppearances` (Internal), `BaseGameCustomAppearancesPublic`, `ModdedCustomAppearancesDictionary` (Internal), `ModdedCustomAppearancesDictionaryPublic`, `CombinedCustomAppearancesDictionaryPublic`. + * This system is stored under the `TextureHelper` class. * Improved In-Code Documentation via XML Comments. * Added a way to easily patch and modify the default bone gain when a player's card dies. * Added the following class: `DefaultBoneGainOnDeath` and the following methods within that class: `DefaultBoneGainOnDeath.ShouldDoDefaultBoneGain` and `DefaultBoneGainOnDeeath.DoDefaultBoneGain` +* Privatized several Internal Functions. +* Rename and Reorder configs internally for clarity as to what they are for. +* Clean up Code formatting. +* Fix casing of some variables. +* Implement new Material Overrides to `MaterialOverride` related to changing `Metallic`, `Smoothness` and `Height` for consistency. # 2.24.1 -- Added Extensions for setting the IconTexture of a Starter Deck. -- Added 2 Alternate Constructors for making a StarterDeck with a Display Name different from its Internal Name. -- Added Getters and Setters for Starter Deck Unlock Level. +* Added Extensions for setting the IconTexture of a Starter Deck. +* Added 2 Alternate Constructors for making a StarterDeck with a Display Name different from its Internal Name. +* Added Getters and Setters for Starter Deck Unlock Level. # 2.24.0 -- Fixed Part2CardCostRender.UpdatePlayableCardCost not being invoked -- Fixed Part2CardCostRender.UpdateVanillaPlayableCardCost not being invoked -- Fixed SetEmissiveSacrificablePortrait functions which used to refer to SteelTrapPortrait instead of SacrificablePortrait -- Updated API and community patch target frameworks to `netframework4.7.2` (closer to the Runtime netframework.) -- Updated community patch plugin's mod version to match the API's -- Updated list of API contributors -- Added ability to set custom card given by Steel Trap sigil (cr. Snowi and SpecialAPI) -- Added `GetSteelTrapPelt` and `SetSteelTrapPelt` card extensions -- Added debug mode cards for testing custom Steel Trap pelts -- Added functions to set 'TailLostPortrait' emission sprites -- Added functions for setting 'TailLostPortrait' from a Sprite object -- Added NoWarn property to API and community patch projects for AD0001, CS0612, CS0618, Publicizer001 +* Fixed Part2CardCostRender.UpdatePlayableCardCost not being invoked +* Fixed Part2CardCostRender.UpdateVanillaPlayableCardCost not being invoked +* Fixed SetEmissiveSacrificablePortrait functions which used to refer to SteelTrapPortrait instead of SacrificablePortrait +* Updated API and community patch target frameworks to `netframework4.7.2` (closer to the Runtime netframework.) +* Updated community patch plugin's mod version to match the API's +* Updated list of API contributors +* Added ability to set custom card given by Steel Trap sigil (cr. Snowi and SpecialAPI) +* Added `GetSteelTrapPelt` and `SetSteelTrapPelt` card extensions +* Added debug mode cards for testing custom Steel Trap pelts +* Added functions to set 'TailLostPortrait' emission sprites +* Added functions for setting 'TailLostPortrait' from a Sprite object +* Added NoWarn property to API and community patch projects for AD0001, CS0612, CS0618, Publicizer001 # 2.23.7 -- Fixed log spam due to inverted condition in CardExtensions.GemsCost +* Fixed log spam due to inverted condition in CardExtensions.GemsCost # 2.23.6 -- Fixed card modifications added to a card's base ice cube card via CardInfo.SetIceCube being ignored -- Fixed PlayableCard.CanPlay not consistently accounting for temporary mod cost adjustments -- Fixed dynamic play costs not consistently updating -- Added additional methods for adding specific types of resources to the ResourceBank -- Added CardSlot.ClearSlotModification extension method -- Added additional FullAbility helper extension methods for setting act-specific rulebook categories +* Fixed card modifications added to a card's base ice cube card via CardInfo.SetIceCube being ignored +* Fixed PlayableCard.CanPlay not consistently accounting for temporary mod cost adjustments +* Fixed dynamic play costs not consistently updating +* Added additional methods for adding specific types of resources to the ResourceBank +* Added CardSlot.ClearSlotModification extension method +* Added additional FullAbility helper extension methods for setting act-specific rulebook categories # 2.23.5 -- Fixed cards appearing as blank outside Act 1 -- Added extension methods for FullAbility that mirror AbilityInfo extension methods +* Fixed cards appearing as blank outside Act 1 +* Added extension methods for FullAbility that mirror AbilityInfo extension methods # 2.23.4 -- Fixed GemsDraw only considering the player's slots when determining how many cards to draw -- Fixed Act 2 Tutor sequence softlocking when there are no cards to display -- Fixed Act 2 Tutor sequence not displaying cards when you have less than 7 cards remaining in your deck -- Fixed Gemify reducing multiple card costs at once for multicost cards - now only affects 1 as intended -- Fixed emission textures appearing stretched on Giant cards -- Added Gems Cost support for ExtendedActivatedAbilityBehaviour class -- Added extension AbilityManager.FullAbility.FlipYIfOpponent -- Added config option to prevent Act 1 card emissions from rendering above the play costs +* Fixed GemsDraw only considering the player's slots when determining how many cards to draw +* Fixed Act 2 Tutor sequence softlocking when there are no cards to display +* Fixed Act 2 Tutor sequence not displaying cards when you have less than 7 cards remaining in your deck +* Fixed Gemify reducing multiple card costs at once for multicost cards + * Now only affects 1 as intended +* Fixed emission textures appearing stretched on Giant cards +* Added Gems Cost support for ExtendedActivatedAbilityBehaviour class +* Added extension AbilityManager.FullAbility.FlipYIfOpponent +* Added config option to prevent Act 1 card emissions from rendering above the play costs # 2.23.3 -- Fixed custom deck exhaust sequence not performing the requisite checks -- Added 'CanAppearRandomly' bool and associated extension method for custom regions -- All custom regions added through the API are now included in AllRegionsCopy and NewRegions (if addToPool was false then it won't be encounterable in-game like normal) +* Fixed custom deck exhaust sequence not performing the requisite checks +* Added 'CanAppearRandomly' bool and associated extension method for custom regions +* All custom regions added through the API are now included in AllRegionsCopy and NewRegions (if addToPool was false then it won't be encounterable in-game like normal) # 2.23.2 -- Fixed error when trying to create cards that evolve/transform in 4 or more turns -- Fixed Fledgling and Transformer sigil appearing as black boxes when a card evolves/transform in 4 or more turns -- Fixed Part2VanillaCardCost event not being invoked -- Added 'UpdatePlayableCardCosts' event to community patch's Part1CardCostRender and Part2CardCostRender classes -- Added extension methods for PlayableCard and CardInfo: ProvidesBlueGem, ProvidesGreenGem, ProvidesOrangeGem -- Evolve and Transformer icons now support cards that evolve in 4 or more turns -- Wiki: added articles 'Other Features' and 'Triggers and the Order of Operations' -- Wiki: modified starting section of 'Custom Triggers' article -- Documentation: fixed description for IPostCardGettingAttacked stating it triggers before CardGettingAttacked +* Fixed error when trying to create cards that evolve/transform in 4 or more turns +* Fixed Fledgling and Transformer sigil appearing as black boxes when a card evolves/transform in 4 or more turns +* Fixed Part2VanillaCardCost event not being invoked +* Added 'UpdatePlayableCardCosts' event to community patch's Part1CardCostRender and Part2CardCostRender classes +* Added extension methods for PlayableCard and CardInfo: ProvidesBlueGem, ProvidesGreenGem, ProvidesOrangeGem +* Evolve and Transformer icons now support cards that evolve in 4 or more turns +* Wiki: added articles 'Other Features' and 'Triggers and the Order of Operations' +* Wiki: modified starting section of 'Custom Triggers' article +* Documentation: fixed description for IPostCardGettingAttacked stating it triggers before CardGettingAttacked # 2.23.1 -- Fixed non-CardModificationInfo shields not breaking -- Fixed ShieldGeneratorItem not correclty updating visuals -- Fixed DamageShieldBehaviours not initialising before being called -- Added CardInfo.GetAbilityStacks() -- Changed how DamageShieldBehaviour.ResetShield works to be more inline with how vanilla shields work -- Removed some shield-reset-related patches +* Fixed non-CardModificationInfo shields not breaking +* Fixed ShieldGeneratorItem not correclty updating visuals +* Fixed DamageShieldBehaviours not initialising before being called +* Added CardInfo.GetAbilityStacks() +* Changed how DamageShieldBehaviour.ResetShield works to be more inline with how vanilla shields work +* Removed some shield-reset-related patches # 2.23.0 -- Added 'GBC Vanilla Render' config to community patches (false by default) - makes GBC cards render with vanilla cost sprites -- Added 'Vanilla Stacking' config to community patches (false by default) - renders cards with only two (stacking) sigils as they appear in vanilla, eg Spore Mice and Sporedigger -- Added PostCardGettingAttacked custom trigger -- Added BoardManager.GetCards and BoardManager.GetOpenSlots overloads that retrieve from the entire board -- Fixed incorrect rulebook icon scaling in Act 3 -- Fixed rulebook-related null errors when playing during Magnificus' Act -- Fixed slot modification rulebook pages not appearing correctly during Magnificus' Act -- Fixed cards shield sigils not rendering correctly -- DamageShieldBehaviour class now has 'initialised' boolean field -- Highest displayable bone cost value in Act 1 raised from 13+ to 15+ -- Minor tweaks to blood and bone cost icons -- Rewrote SlotAttackSlotPatches transpilers to be cleaner +* Added 'GBC Vanilla Render' config to community patches (false by default) + * Makes GBC cards render with vanilla cost sprites +* Added 'Vanilla Stacking' config to community patches (false by default) + * Renders cards with only two (stacking) sigils as they appear in vanilla, eg Spore Mice and Sporedigger +* Added PostCardGettingAttacked custom trigger +* Added BoardManager.GetCards and BoardManager.GetOpenSlots overloads that retrieve from the entire board +* Fixed incorrect rulebook icon scaling in Act 3 +* Fixed rulebook-related null errors when playing during Magnificus' Act +* Fixed slot modification rulebook pages not appearing correctly during Magnificus' Act +* Fixed cards shield sigils not rendering correctly +* DamageShieldBehaviour class now has 'initialised' boolean field +* Highest displayable bone cost value in Act 1 raised from 13+ to 15+ +* Minor tweaks to blood and bone cost icons +* Rewrote SlotAttackSlotPatches transpilers to be cleaner # 2.22.3 -- Fixed pelt names when a user goes to the trader with modded cards, Examples shown below. +* Fixed pelt names when a user goes to the trader with modded cards, Examples shown below. -- Fixed index error when loading custom challenges -- Publicised ConsumableItemData.SetPrefabModelType +* Fixed index error when loading custom challenges +* Publicised ConsumableItemData.SetPrefabModelType # 2.22.2 -- Added GetEnergyConfig method to community patch's EnergyDrone class - retrieves the current Act's EnergyConfigInfo -- CommunityPatches: Added community config to move pelt price tags to the right of the card -- Experimental: Changed gemified to only reduce a single cost on a card, with priority of Energy > Bones > Gems > Blood -- Fixed positioning errors caused by having multiple custom boss challenge icons -- EnergyConfigInfo's fields can now be modified when initialising a new instance -- Updated installation guide on the ReadMe to match the wiki, added link to wiki. +* Added GetEnergyConfig method to community patch's EnergyDrone class + * Retrieves the current Act's EnergyConfigInfo +* CommunityPatches: Added community config to move pelt price tags to the right of the card +* Experimental: Changed gemified to only reduce a single cost on a card, with priority of Energy > Bones > Gems > Blood +* Fixed positioning errors caused by having multiple custom boss challenge icons +* EnergyConfigInfo's fields can now be modified when initialising a new instance +* Updated installation guide on the ReadMe to match the wiki, added link to wiki. # 2.22.1 -- Added IShieldPreventedDamage and IShieldPreventedDamageInHand ability triggers and interfaces -- Added TriggerBreakShield, wraps BreakShield in an IEnumerator for additional customisation by modders -- Added ICustomExhaustSequence trigger interface for modifying the draw pile exhaustion effect - use with Opponents -- Fixed board slots being uninteractable if a slot effect with a rulebook interactable was reset -- Removed debug logging related to rulebook redirect coordinates +* Added IShieldPreventedDamage and IShieldPreventedDamageInHand ability triggers and interfaces +* Added TriggerBreakShield, wraps BreakShield in an IEnumerator for additional customisation by modders +* Added ICustomExhaustSequence trigger interface for modifying the draw pile exhaustion effect + * Use with Opponents +* Fixed board slots being uninteractable if a slot effect with a rulebook interactable was reset +* Removed debug logging related to rulebook redirect coordinates # 2.22.0 -- Added FullBoon objects for each vanilla Boon -- Added 'AllFullBoons' list to BoonManager -- Added support for boons and items appearing in multiple acts' rulebooks -- Added RuleBookRedirectManager and support for rulebook text redirects/page links -- Added additional methods to RuleBookManager: ItemShouldBeAdded, BoonShouldBeAdded, SlotModShouldBeAdded, GetUnformattedPageId -- Added GetFullBoon and GetFullConsumableItemData extension methods -- Added extension methods for adding text redirects to abilities, stat icons, items, boons, slot modifications, and rulebook pages -- Added ModificationType.SetSharedRulebook - used for slot modifications that should share their rulebook entry with other slot modifications -- Added support for multiple rulebook sprites for slot modifications (SetRulebookP03Sprite, SetRulebookGrimoraSprite, SetRulebookMagnificusSprite) -- Added RuleBookController.Instance.OpenToCustomPage -- Added CustomDiskTalkingCard abstract class -- Added TalkingCardManager.NewDisk and TalkingCardManager.CreateDisk -- Fixed RuleBook construction patches having lower patch priority than intended -- Fixed slot modification interactable being enabled when no rulebook entry exists -- Fixed slot modification rulebook pages not working in Act 3 -- Fixed rulebook sprites being smaller than normal after flipping to a slot modification rulebook page -- Fixed DiskTalkingCards created through the API not correctly working under certain conditions -- Moved ConsumableItemManager patches to a separate ConsumableItemPatches class -- Modified implementation of rulebook fill page logic to let modders patch the API logic - - Patch 'RuleBookManagerPatches.FillPage' to do this -- Tweaked how custom rulebook pages are added and detected -- Wiki: Tweaked page for adding custom rulebook sections -- Wiki: Added section on adding text redirects +* Added FullBoon objects for each vanilla Boon +* Added 'AllFullBoons' list to BoonManager +* Added support for boons and items appearing in multiple acts' rulebooks +* Added RuleBookRedirectManager and support for rulebook text redirects/page links +* Added additional methods to RuleBookManager: ItemShouldBeAdded, BoonShouldBeAdded, SlotModShouldBeAdded, GetUnformattedPageId +* Added GetFullBoon and GetFullConsumableItemData extension methods +* Added extension methods for adding text redirects to abilities, stat icons, items, boons, slot modifications, and rulebook pages +* Added ModificationType.SetSharedRulebook + * Used for slot modifications that should share their rulebook entry with other slot modifications +* Added support for multiple rulebook sprites for slot modifications (SetRulebookP03Sprite, SetRulebookGrimoraSprite, SetRulebookMagnificusSprite) +* Added RuleBookController.Instance.OpenToCustomPage +* Added CustomDiskTalkingCard abstract class +* Added TalkingCardManager.NewDisk and TalkingCardManager.CreateDisk +* Fixed RuleBook construction patches having lower patch priority than intended +* Fixed slot modification interactable being enabled when no rulebook entry exists +* Fixed slot modification rulebook pages not working in Act 3 +* Fixed rulebook sprites being smaller than normal after flipping to a slot modification rulebook page +* Fixed DiskTalkingCards created through the API not correctly working under certain conditions +* Moved ConsumableItemManager patches to a separate ConsumableItemPatches class +* Modified implementation of rulebook fill page logic to let modders patch the API logic + * Patch 'RuleBookManagerPatches.FillPage' to do this +* Tweaked how custom rulebook pages are added and detected +* Wiki: Tweaked page for adding custom rulebook sections +* Wiki: Added section on adding text redirects # 2.21.1 -- Fixed RuleBookManager not syncing when playing with no custom rulebook sections +* Fixed RuleBookManager not syncing when playing with no custom rulebook sections # 2.21.0 -- Fixed ability stacks not rendering -- Fixed rendering error when displaying a card with tribes outside of Act 1 -- Fixed ResetShields not re-setting lostShield to false under certain conditions -- Fixed RemoveMaxEnergy not working as intended -- Fixed custom AudioClips not loading correctly on Mac OSX -- Added RuleBookManager for adding custom rulebook sections (see wiki for more info) -- Added AllModificationInfos, AllModificationTypes, and modification syncing to SlotModificationManager -- Added additional functionality to SlotModificationManager - Infos now store name and GUID -- Added rulebook entry support for slot modifications - use extension method .SetRulebook() when adding your slot modification -- Added more shield-related extensions -- Added some AbilityInfo-related extensions -- Added ShieldManager.AllShieldAbilities and ShieldManager.AllShieldInfos for easier tracking of custom shield abilities -- Added config to the community patches to add a forced red emission to Undead Cat -- Modified Obsolete warning for Helpers.CustomLine to point to Dialogue.CustomLine +* Fixed ability stacks not rendering +* Fixed rendering error when displaying a card with tribes outside of Act 1 +* Fixed ResetShields not re-setting lostShield to false under certain conditions +* Fixed RemoveMaxEnergy not working as intended +* Fixed custom AudioClips not loading correctly on Mac OSX +* Added RuleBookManager for adding custom rulebook sections (see wiki for more info) +* Added AllModificationInfos, AllModificationTypes, and modification syncing to SlotModificationManager +* Added additional functionality to SlotModificationManager + * Infos now store name and GUID +* Added rulebook entry support for slot modifications + * Use extension method .SetRulebook() when adding your slot modification +* Added more shield-related extensions +* Added some AbilityInfo-related extensions +* Added ShieldManager.AllShieldAbilities and ShieldManager.AllShieldInfos for easier tracking of custom shield abilities +* Added config to the community patches to add a forced red emission to Undead Cat +* Modified Obsolete warning for Helpers.CustomLine to point to Dialogue.CustomLine # 2.20.0 -- Updated wiki sections for Adding Map Nodes, and Conditional Map Nodes; moved Special Sequencers section to Opponents -- Fixed issues related to challlenge icon sorting when a boss icon is present -- Fixed TalkingCardManager not properly configuring talking cards in Part 3on the page -- Fixed extension properties for CardModificationInfos saved to the save file not consistently loading -- Fixed cards not shaking when losing a shield -- Fixed ShieldManager.BreakShield not being called when a shielded card takes damage -- Added SlotModificationManager for adding behaviour to card slots; see wiki for more info -- Added SaveFileExtensions class -- Added support for cards costing multiple of the same colour Mox -- Added debugging to GetCustomCardCosts method; please let the API folks know if you receive any warnings/errors marked by '[GetCustomCardCosts]' -- Added StatIconInfo.SetRulebookInfo and StatIconInfo.SetAppliesToStats -- Added NodeData.SelectionCondition's ChallengeIsActive and NumChallengesOfTypeActive -- Added PlayableCard.GetShieldCount<\T>() for getting a specific shield ability's NumShield value -- Added new config to the community patches to reduce the size of the price tags during the Buy Pelts sequence -- Added CardModificationInfo.AddNegateAbilities extension method -- Removed leftover debugging related to boss challenge icons and custom costs -- P03 Face Card Displayer can now show card costs other than energy -- Publiciser warnings from the API and Community Patches no longer appear in the console -- SaveFile.CurrentDeck now returns gbcData.deck in Act 2 -- DeathShieldLatch can longer target cards with an active shield -- Cards with a broken shield return to their default portrait when regaining their shield -- Shield abilities now use NumShields to determine visual sigil stacking -- CardModificationInfo.SetNameReplacement now accepts null value for the name replacement +* Updated wiki sections for Adding Map Nodes, and Conditional Map Nodes; moved Special Sequencers section to Opponents +* Fixed issues related to challlenge icon sorting when a boss icon is present +* Fixed TalkingCardManager not properly configuring talking cards in Part 3on the page +* Fixed extension properties for CardModificationInfos saved to the save file not consistently loading +* Fixed cards not shaking when losing a shield +* Fixed ShieldManager.BreakShield not being called when a shielded card takes damage +* Added SlotModificationManager for adding behaviour to card slots; see wiki for more info +* Added SaveFileExtensions class +* Added support for cards costing multiple of the same colour Mox +* Added debugging to GetCustomCardCosts method; please let the API folks know if you receive any warnings/errors marked by '[GetCustomCardCosts]' +* Added StatIconInfo.SetRulebookInfo and StatIconInfo.SetAppliesToStats +* Added NodeData.SelectionCondition's ChallengeIsActive and NumChallengesOfTypeActive +* Added PlayableCard.GetShieldCount<\T>() for getting a specific shield ability's NumShield value +* Added new config to the community patches to reduce the size of the price tags during the Buy Pelts sequence +* Added CardModificationInfo.AddNegateAbilities extension method +* Removed leftover debugging related to boss challenge icons and custom costs +* P03 Face Card Displayer can now show card costs other than energy +* Publiciser warnings from the API and Community Patches no longer appear in the console +* SaveFile.CurrentDeck now returns gbcData.deck in Act 2 +* DeathShieldLatch can longer target cards with an active shield +* Cards with a broken shield return to their default portrait when regaining their shield +* Shield abilities now use NumShields to determine visual sigil stacking +* CardModificationInfo.SetNameReplacement now accepts null value for the name replacement # 2.19.5 -- Fixed pixel Bones cost icons not appearing when the cost is greater than vanilla amounts -- Fixed interaction where a Gemified card that gives a blue gem doesn't spend the correct resource amount when played -- Fixed active challenges desyncing from the icons when returning to the select challenges screen from a custom screen -- Added pixel icon to Aquasquirrel (courtesy of Zepht) -- Added GetCustomCostAmount extension methods for automatically accounting for whether a custom cost can be negative -- Added support for making custom challenges that use the Final Boss challenge's icon format (occupying the whole column) -- AscensionChallengePaginator's leftArrow and rightArrow fields are now AscensionMenuInteractables -- Changed method name of GenBaseGameChallengs to GenBaseGameChallenges -- Changed Act 1 energy cost choice cardback to match the cost's icon colour -- Changed TestCost.OnPlayed to no longer trigger on negative values -- CustomCardCost.OnPlayed no longer triggers for custom costs with a value of 0 (negative values can still occur) -- Challenges no longer show dependencies/incompatibilies when viewed in the pause menu and end screen +* Fixed pixel Bones cost icons not appearing when the cost is greater than vanilla amounts +* Fixed interaction where a Gemified card that gives a blue gem doesn't spend the correct resource amount when played +* Fixed active challenges desyncing from the icons when returning to the select challenges screen from a custom screen +* Added pixel icon to Aquasquirrel (courtesy of Zepht) +* Added GetCustomCostAmount extension methods for automatically accounting for whether a custom cost can be negative +* Added support for making custom challenges that use the Final Boss challenge's icon format (occupying the whole column) +* AscensionChallengePaginator's leftArrow and rightArrow fields are now AscensionMenuInteractables +* Changed method name of GenBaseGameChallengs to GenBaseGameChallenges +* Changed Act 1 energy cost choice cardback to match the cost's icon colour +* Changed TestCost.OnPlayed to no longer trigger on negative values +* CustomCardCost.OnPlayed no longer triggers for custom costs with a value of 0 (negative values can still occur) +* Challenges no longer show dependencies/incompatibilies when viewed in the pause menu and end screen # 2.19.4 -- Fixed error when retrieving custom card costs from a card with no custom card costs -- Fixed cards with custom card costs using the pixel cost icons in some circumstances -- Fixed modifications to base Pelt choice amounts not being reflected in-game -- Fixed latched sigils not appearing in Act 3 -- Added config to randomise cost choice order -- Added additional functionality to FullCardCost - see wiki and documentation for more info -- Added TestCost class to community patches - can be added to the game by enabling "Test Mode" in the configs -- Added extension methods for setting and getting a custom card cost using the CustomCardCost class instance -- Custom costs now support cost tiers and checking CanBePlayedByTurn2WithHand -- Custom costs' textures now differentiate whether they're from Acts 1, 2, or 3 when storing them post-assemblage -- Card choices when trading Pelts are now positioned correctly for amounts non-divisible by 4 -- Modified Act 1 latch patch logic -- Publicised a number of TradePeltSequence patch methods -- Refactored some TradePeltSequence patches -- Reverted undocumented changes to some SniperFix parameter names in previous version +* Fixed error when retrieving custom card costs from a card with no custom card costs +* Fixed cards with custom card costs using the pixel cost icons in some circumstances +* Fixed modifications to base Pelt choice amounts not being reflected in-game +* Fixed latched sigils not appearing in Act 3 +* Added config to randomise cost choice order +* Added additional functionality to FullCardCost + * See wiki and documentation for more info +* Added TestCost class to community patches + * Can be added to the game by enabling "Test Mode" in the configs +* Added extension methods for setting and getting a custom card cost using the CustomCardCost class instance +* Custom costs now support cost tiers and checking CanBePlayedByTurn2WithHand +* Custom costs' textures now differentiate whether they're from Acts 1, 2, or 3 when storing them post-assemblage +* Card choices when trading Pelts are now positioned correctly for amounts non-divisible by 4 +* Modified Act 1 latch patch logic +* Publicised a number of TradePeltSequence patch methods +* Refactored some TradePeltSequence patches +* Reverted undocumented changes to some SniperFix parameter names in previous version # 2.19.3 -- Fixed index error related to Totem sigils -- Fixed index error related to opponent sniper targeting -- Fixed Shield Latch sigil not displaying the first latched sigil -- Added config to community patches to reset Leshy's eye colour after triggering the grizzly bear sequence during boss fights +* Fixed index error related to Totem sigils +* Fixed index error related to opponent sniper targeting +* Fixed Shield Latch sigil not displaying the first latched sigil +* Added config to community patches to reset Leshy's eye colour after triggering the grizzly bear sequence during boss fights # 2.19.2 -- Fixed activated abilities not being interactable in Act 3 -- Fixed cards with costs above vanilla defaults not displaying -- Added debug logs to AddCustomTribesToList (used to add custom Tribes to the list of obtainable Totem tops) +* Fixed activated abilities not being interactable in Act 3 +* Fixed cards with costs above vanilla defaults not displaying +* Added debug logs to AddCustomTribesToList (used to add custom Tribes to the list of obtainable Totem tops) # 2.19.1 -- Fixed API not retrieving pixel card costs above 5 +* Fixed API not retrieving pixel card costs above 5 # 2.19.0 -- Fixed decals added via temporary mods not being cleared from the base card -- Fixed merged and totem sigils being uninteractable if the icon has been flipped vertically -- Fixed pixel Shapeshifter patch not correctly patching DisguiseOutOfBattle -- Fixed temporary decal mods not being removed in Act 1 -- Fixed softlock in Part 1 during the boon-gaining sequence -- Fixed all copies of a custom challenge becoming activated/deactivated when the page is reloaded -- Fixed Sentry ability softlocking when the base card dies before all Sentry stacks are triggered -- Fixed softlock when talking card dialogue cannot be parsed in certain conditions -- Added public method GetIjiraqDisguises to pixel Shapeshifter patch for easier modification of Shapeshifter for modders -- Added variant of PeltManager.New -- Added variant of PlayableCard.AllAbilities that accounts for negated abilities in TemporaryMods -- Added support for creating custom card costs using new class CustomCardCost; see wiki for more information -- Added ability to remove gems costs from a card using CardModificationInfos -- Added a number of extension methods for CardModificationInfos (RemoveGemsCost, SetCustomCostId, etc) -- Added helpers for getting TextBox.Style from CardInfo.temple or the chosen ambition -- Rewrote CardModificationInfoManager's id system for setting persistent extended properties in a CardModificationInfo's singletonId -- Rewrote pixel Shapeshifter patch to RevealInBattle to hopefully prevent errors in Act 1 -- PeltManager.New now throws an error when getCardChoices is null -- Changed LogLevel of dialogue event insertion message from Info to Debug -- API death cards now use the clean singleton id when creating the death card info mod -- Temporary decal mods are now removed from Act 2 cards instead of being cleared -- Opponent snipers will now target a random slot if there are no opposing cards (previously only targeted the opposing slot) +* Fixed decals added via temporary mods not being cleared from the base card +* Fixed merged and totem sigils being uninteractable if the icon has been flipped vertically +* Fixed pixel Shapeshifter patch not correctly patching DisguiseOutOfBattle +* Fixed temporary decal mods not being removed in Act 1 +* Fixed softlock in Part 1 during the boon-gaining sequence +* Fixed all copies of a custom challenge becoming activated/deactivated when the page is reloaded +* Fixed Sentry ability softlocking when the base card dies before all Sentry stacks are triggered +* Fixed softlock when talking card dialogue cannot be parsed in certain conditions +* Added public method GetIjiraqDisguises to pixel Shapeshifter patch for easier modification of Shapeshifter for modders +* Added variant of PeltManager.New +* Added variant of PlayableCard.AllAbilities that accounts for negated abilities in TemporaryMods +* Added support for creating custom card costs using new class CustomCardCost; see wiki for more information +* Added ability to remove gems costs from a card using CardModificationInfos +* Added a number of extension methods for CardModificationInfos (RemoveGemsCost, SetCustomCostId, etc) +* Added helpers for getting TextBox.Style from CardInfo.temple or the chosen ambition +* Rewrote CardModificationInfoManager's id system for setting persistent extended properties in a CardModificationInfo's singletonId +* Rewrote pixel Shapeshifter patch to RevealInBattle to hopefully prevent errors in Act 1 +* PeltManager.New now throws an error when getCardChoices is null +* Changed LogLevel of dialogue event insertion message from Info to Debug +* API death cards now use the clean singleton id when creating the death card info mod +* Temporary decal mods are now removed from Act 2 cards instead of being cleared +* Opponent snipers will now target a random slot if there are no opposing cards (previously only targeted the opposing slot) # 2.18.7 -- Fixed softlock during Act 1's final boss cabin/boons sequence -- Fixed startup errors relating to ShieldManager transpilers -- Fixed resource drone not showing up outside of Act 3 -- Fixed latched sigils not visually disappearing when using RemoveTemporaryMod to remove a latch CardModInfo -- Fixed stack sigil icons not correctly replacing the '1' in stackable sigil icons with the appropriate stack number -- Fixed Act 2 Tutor sequence displaying the wrong number of cards above the max of 42 -- Fixed temporary mods not correctly updating a card's shield count above 1 -- Added extension methods PlayableCard.AllCardModificationInfos(), PlayableCard.RemoveCardModificationInfo() -- Added SpriteType 'PixelStandardButton' -- CustomTriggerFinder now caches the list of non-card triggers before iteration -- ActivatedDamageShieldBehaviour now inherits from DamageShieldBehaviour instead of ActivateAbilityBehaviour -- ActivatedDamageShieldBehaviour now implements the logic from ExtendedActivatedAbilityBehaviour -- Mud Turtle now has a broken shield portrait (identical to its alternate portrait, which is unchanged) -- CardTriggerHandler.RemoveAbility now only destroys the AbilityBehaviour if triggeredAbilities no longer contains the corresponding Ability -- Act 2 Tutor now supports multiple pages of cards +* Fixed softlock during Act 1's final boss cabin/boons sequence +* Fixed startup errors relating to ShieldManager transpilers +* Fixed resource drone not showing up outside of Act 3 +* Fixed latched sigils not visually disappearing when using RemoveTemporaryMod to remove a latch CardModInfo +* Fixed stack sigil icons not correctly replacing the '1' in stackable sigil icons with the appropriate stack number +* Fixed Act 2 Tutor sequence displaying the wrong number of cards above the max of 42 +* Fixed temporary mods not correctly updating a card's shield count above 1 +* Added extension methods PlayableCard.AllCardModificationInfos(), PlayableCard.RemoveCardModificationInfo() +* Added SpriteType 'PixelStandardButton' +* CustomTriggerFinder now caches the list of non-card triggers before iteration +* ActivatedDamageShieldBehaviour now inherits from DamageShieldBehaviour instead of ActivateAbilityBehaviour +* ActivatedDamageShieldBehaviour now implements the logic from ExtendedActivatedAbilityBehaviour +* Mud Turtle now has a broken shield portrait (identical to its alternate portrait, which is unchanged) +* CardTriggerHandler.RemoveAbility now only destroys the AbilityBehaviour if triggeredAbilities no longer contains the corresponding Ability +* Act 2 Tutor now supports multiple pages of cards # 2.18.6 -- Fixed Royal fight softlocking if config option 'Hide Act 1 Scenery' is set to true -- Fixed activated custom challenges not remaining activated when returning to the challenge screen -- Fixed TransformIntoCardInHand and TransformIntoCardAboveHand not checking for TriggersOncePerStack -- Added missing null checks to ResourceDrone patches -- Added pixel icon to Transformer -- Transformer sigil icon will now display the number of turns till evolution if it's greater than 1 -- Transformer and Fledgling sigils now correctly update their display when evolving into another card with the Fledgling/Transformer sigil -- Certain shield-giving effects no longer reset shields to prevent incorrect shield totals -- Improved the 'Custom Card Costs' section of the wiki +* Fixed Royal fight softlocking if config option 'Hide Act 1 Scenery' is set to true +* Fixed activated custom challenges not remaining activated when returning to the challenge screen +* Fixed TransformIntoCardInHand and TransformIntoCardAboveHand not checking for TriggersOncePerStack +* Added missing null checks to ResourceDrone patches +* Added pixel icon to Transformer +* Transformer sigil icon will now display the number of turns till evolution if it's greater than 1 +* Transformer and Fledgling sigils now correctly update their display when evolving into another card with the Fledgling/Transformer sigil +* Certain shield-giving effects no longer reset shields to prevent incorrect shield totals +* Improved the 'Custom Card Costs' section of the wiki # 2.18.5 -- Fixed DrawCopyOnDeath creating warnings in the console -- Fixed talking cards locking the camera view when obtained during the Trapper boss's final phase -- Fixed ResourceDrone softlocking during Leshy's goodbye sequence if ConfigDefaultDrone is false -- Added missing null checks -- Added PlayableCard.GetStatIconHealthBuffs() -- Added PlayableCard.TransformIntoCardAboveHand() - variant of TransformIntoCardInHand that incorporates MoveCardAboveHand -- Added FullAbility.SetExtendedProperty for setting an AbilityInfo's custom property during ability creation -- Reverted change to resource drone preventing it from being parented to the scale outside of Act 1 -- Improved visual fix for the full pack Pack Rat sequence +* Fixed DrawCopyOnDeath creating warnings in the console +* Fixed talking cards locking the camera view when obtained during the Trapper boss's final phase +* Fixed ResourceDrone softlocking during Leshy's goodbye sequence if ConfigDefaultDrone is false +* Added missing null checks +* Added PlayableCard.GetStatIconHealthBuffs() +* Added PlayableCard.TransformIntoCardAboveHand() + * Variant of TransformIntoCardInHand that incorporates MoveCardAboveHand +* Added FullAbility.SetExtendedProperty for setting an AbilityInfo's custom property during ability creation +* Reverted change to resource drone preventing it from being parented to the scale outside of Act 1 +* Improved visual fix for the full pack Pack Rat sequence # 2.18.4 -- Fixed Sniper sigil targeting the wrong side of the board -- Fixed placeholder tribe choice icons being placed incorrectly -- Auto-gen tribe choice texture is now only created if the tribe can be found in tribe choices +* Fixed Sniper sigil targeting the wrong side of the board +* Fixed placeholder tribe choice icons being placed incorrectly +* Auto-gen tribe choice texture is now only created if the tribe can be found in tribe choices # 2.18.3 -- Fixed resource drone behaving incorrectly outside of Act 1 -- Added null checks to various custom triggers -- Added more extension methods for CardInfo and AbilityInfo -- Added PlayableCard extension methods: AddShieldCount(Ability), AddShieldCount\() and AddShieldCount(Ability), RemoveShieldCount\() - - These affect the internal numShields field, and do NOT add or remove ability stacks -- Added alternate portrait 'SacrificablePortrait' for when a card can be sacrificed in Act 1 or Act 2 (part of the SetShaking method) -- Added methods for getting the emissive portraits for extra alt portraits (EmissiveSteelTrapPortrait(), EmissiveBrokenShieldPortrait(), etc.) -- Expanded SniperFix sniper logic with additional methods for easier patching and modification: - - DoSniperLogic() - controls whether to use player or opponent sniper logic - - DoAttackTargetSlotsLogic() - controls attack logic for each target slot - - GetValidTargets() - returns the list of card slot the player and opponent can target - - PlayerTargetSelectedCallback() - called when the player selects a valid target - - PlayerSlotCursorEnterCallback() - called when the player's cursor enters a slot - - OpponentSelectTarget() - returns a card slot for the opponent to target and attack -- Revamped the wiki to (hopefully) make it easier to navigate and read through +* Fixed resource drone behaving incorrectly outside of Act 1 +* Added null checks to various custom triggers +* Added more extension methods for CardInfo and AbilityInfo +* Added PlayableCard extension methods: AddShieldCount(Ability), AddShieldCount\() and AddShieldCount(Ability), RemoveShieldCount\() + * These affect the internal numShields field, and do NOT add or remove ability stacks +* Added alternate portrait 'SacrificablePortrait' for when a card can be sacrificed in Act 1 or Act 2 (part of the SetShaking method) +* Added methods for getting the emissive portraits for extra alt portraits (EmissiveSteelTrapPortrait(), EmissiveBrokenShieldPortrait(), etc.) +* Expanded SniperFix sniper logic with additional methods for easier patching and modification: + * DoSniperLogic() + * Controls whether to use player or opponent sniper logic + * DoAttackTargetSlotsLogic() + * Controls attack logic for each target slot + * GetValidTargets() + * Returns the list of card slot the player and opponent can target + * PlayerTargetSelectedCallback() + * Called when the player selects a valid target + * PlayerSlotCursorEnterCallback() + * Called when the player's cursor enters a slot + * OpponentSelectTarget() + * Returns a card slot for the opponent to target and attack +* Revamped the wiki to (hopefully) make it easier to navigate and read through # 2.18.2 -- Fixed abilities marked TriggersOncePerStack not actually triggering once per stack on evolution -- Fixed CardManager.Remove not actually removing cards -- Fixed mods on card clones being lost during card sync -- Added extension methods for setting the emissions for SteelTrap and BrokenShield alt portraits -- Added Config to disable boss scenery for optimization purposes -- Exposed EncounterManager.NewEncounters so JSONLoader may replace existing Encounters -- Refactored Act 1 energy drone movement logic, added support for 'immediate' bool (Default Drone must be true) -- Act 1 energy drone game object is now named 'Part1ResourceDrone' -- Act 1 energy drone is now correctly synced with the scale when Default Drone config is false +* Fixed abilities marked TriggersOncePerStack not actually triggering once per stack on evolution +* Fixed CardManager.Remove not actually removing cards +* Fixed mods on card clones being lost during card sync +* Added extension methods for setting the emissions for SteelTrap and BrokenShield alt portraits +* Added Config to disable boss scenery for optimization purposes +* Exposed EncounterManager.NewEncounters so JSONLoader may replace existing Encounters +* Refactored Act 1 energy drone movement logic, added support for 'immediate' bool (Default Drone must be true) +* Act 1 energy drone game object is now named 'Part1ResourceDrone' +* Act 1 energy drone is now correctly synced with the scale when Default Drone config is false # 2.18.1 -- Fixed BoxCollider null reference during Act 3 Build-A-Card-Sequencer -- Fixed Act 3 bone displayer screen changing to static whenever P03 changes their face -- Added TryGetGuidAndKeyEnumValue for getting the mod GUID and key from enum value -- Custom regions now store their mod GUID +* Fixed BoxCollider null reference during Act 3 Build-A-Card-Sequencer +* Fixed Act 3 bone displayer screen changing to static whenever P03 changes their face +* Added TryGetGuidAndKeyEnumValue for getting the mod GUID and key from enum value +* Custom regions now store their mod GUID # 2.18.0 -- Fixed SetPixelAbilityIcon() not accepting 22x10 textures for activated abilities -- Fixed IModifyDamageTaken priority sorting being reversed -- Fixed null errors in TakeDamage and custom trigger calls -- Added extension methods for getting emission portraits, setting animated portrait -- Added CustomFields helper for associating data with objects or classes -- Added IModifyDirectDamage, IOnTurnEndInQueue custom triggers -- Custom Tribes now store their name and GUID +* Fixed SetPixelAbilityIcon() not accepting 22x10 textures for activated abilities +* Fixed IModifyDamageTaken priority sorting being reversed +* Fixed null errors in TakeDamage and custom trigger calls +* Added extension methods for getting emission portraits, setting animated portrait +* Added CustomFields helper for associating data with objects or classes +* Added IModifyDirectDamage, IOnTurnEndInQueue custom triggers +* Custom Tribes now store their name and GUID # 2.17.0 -- Fixed card extension GetAbilityStacks() being able to return a negative value; minimum value is now capped at 0 -- Added ability interfaces IModifyDamageTaken, IPreTakeDamage, which trigger at the start of PlayableCard.TakeDamage -- Added PlayableCard extension method ResetShield(Ability) for only resetting shields belonging to a certain ability -- Added ShieldManager class and changed how shields are managed in the game's logic -- Added abstract classes DamageShieldBehaviour and ActivatedDamageShieldBehaviour -- Added support for adding alternate portraits for SteelTrap activation and broken shields -- Added portrait setters SetSteelTrapPortrait(), SetBrokenShieldPortrait(), SetPixelSteelTrapPortrait(), SetPixelBrokenShieldPortrait() -- Added support for adding new language translations -- Added AbilityInfo extension method SetHideSingleStacks(), affecting how stacking sigils are affected by being hidden (see wiki) -- DeathShield ability now has a custom AbilityBehaviour attached to it -- DeathShield ability is no longer passive, and can stack -- TakeDamage trigger now requires damage to be above 0 to activate -- Cards can no longer lose shields from attacks that deal 0 damage -- Damage dealt to cards can no longer go below 0 -- Updated the wiki with sections on the additions -- Zombie Parrot is now part of the Avian tribe +* Fixed card extension GetAbilityStacks() being able to return a negative value; minimum value is now capped at 0 +* Added ability interfaces IModifyDamageTaken, IPreTakeDamage, which trigger at the start of PlayableCard.TakeDamage +* Added PlayableCard extension method ResetShield(Ability) for only resetting shields belonging to a certain ability +* Added ShieldManager class and changed how shields are managed in the game's logic +* Added abstract classes DamageShieldBehaviour and ActivatedDamageShieldBehaviour +* Added support for adding alternate portraits for SteelTrap activation and broken shields +* Added portrait setters SetSteelTrapPortrait(), SetBrokenShieldPortrait(), SetPixelSteelTrapPortrait(), SetPixelBrokenShieldPortrait() +* Added support for adding new language translations +* Added AbilityInfo extension method SetHideSingleStacks(), affecting how stacking sigils are affected by being hidden (see wiki) +* DeathShield ability now has a custom AbilityBehaviour attached to it +* DeathShield ability is no longer passive, and can stack +* TakeDamage trigger now requires damage to be above 0 to activate +* Cards can no longer lose shields from attacks that deal 0 damage +* Damage dealt to cards can no longer go below 0 +* Updated the wiki with sections on the additions +* Zombie Parrot is now part of the Avian tribe # 2.16.1 -- Gem Shield sigil now visually applies the Armoured sigil to cards in Act 1 +* Gem Shield sigil now visually applies the Armoured sigil to cards in Act 1 # 2.16.0 -- Added interface IGetAttackingSlots for altering the order cards attack in, see the wiki for more information -- Added out-of-turn (cards attacking outside of their owner's turn) damage support -- Added PlayableCard extension method GetAbilityStacks() -- Added PlayableCard extension method TransformIntoCardInHand() -- Moved SlotAttackSlotFixes and SelfAttackDamagePatch from community patches to the API, renamed to SlotAttackSlotPatches and DoCombatPhasePatches respectively -- Made community patch method RandomAbilityPatches.GetRandomAbility public +* Added interface IGetAttackingSlots for altering the order cards attack in, see the wiki for more information +* Added out-of-turn (cards attacking outside of their owner's turn) damage support +* Added PlayableCard extension method GetAbilityStacks() +* Added PlayableCard extension method TransformIntoCardInHand() +* Moved SlotAttackSlotFixes and SelfAttackDamagePatch from community patches to the API, renamed to SlotAttackSlotPatches and DoCombatPhasePatches respectively +* Made community patch method RandomAbilityPatches.GetRandomAbility public # 2.15.2 -- Fixed cards not evolving correctly if the Fledgling sigil was obtained via card mods (card merge, totem, etc.) -- Moved the Squirrel Orbit community patch into the main API -- Added SetTransformCardId(), GetTransformerCardId() for controlling the Transformer evolution separate of the standard evolution -- Transformer sigil will now also check for a card's API-set TransformerCardId if no card mod is found -- Transformer sigil now also adjusts Blood and Bone costs when transforming -- Transformer sigil now correctly works for cards without a defined evolution/transformation +* Fixed cards not evolving correctly if the Fledgling sigil was obtained via card mods (card merge, totem, etc.) +* Moved the Squirrel Orbit community patch into the main API +* Added SetTransformCardId(), GetTransformerCardId() for controlling the Transformer evolution separate of the standard evolution +* Transformer sigil will now also check for a card's API-set TransformerCardId if no card mod is found +* Transformer sigil now also adjusts Blood and Bone costs when transforming +* Transformer sigil now correctly works for cards without a defined evolution/transformation # 2.15.1 -- Fixed Transformer sigil disappearing upon transformation in certain scenarios -- Fixed Act 3 Bone Display checking the wrong card cost, resulting in the display always appearing -- Fixed Act 3 Bone Display null error in certain Acts +* Fixed Transformer sigil disappearing upon transformation in certain scenarios +* Fixed Act 3 Bone Display checking the wrong card cost, resulting in the display always appearing +* Fixed Act 3 Bone Display null error in certain Acts # 2.15.0 -- Fixed friend cards created by G0LLY not having any mods -- Reverted previous change to cloned CardInfos -- Tweaked RandomAbilityPatches to hopefully prevent obtaining sigils already possessed by the card -- Added cost display support for Act 3 -- Added bone counter for Act 3 +* Fixed friend cards created by G0LLY not having any mods +* Reverted previous change to cloned CardInfos +* Tweaked RandomAbilityPatches to hopefully prevent obtaining sigils already possessed by the card +* Added cost display support for Act 3 +* Added bone counter for Act 3 # 2.14.5 -- Cloned CardInfos now only copy over Gemify mods, unless they possess BountyHunterInfo/DeathCardInfo/BuildACardInfo -- Fixed certain card mods duplicating when the card evolve -- Added ResourcesManager.RemoveMaxEnergy, ResourcesManager.ShowRemoveMaxEnergy extension methods +* Cloned CardInfos now only copy over Gemify mods, unless they possess BountyHunterInfo/DeathCardInfo/BuildACardInfo +* Fixed certain card mods duplicating when the card evolve +* Added ResourcesManager.RemoveMaxEnergy, ResourcesManager.ShowRemoveMaxEnergy extension methods # 2.14.4 -- Fixed the first energy cell remaining closed in Act 1 when battle starts -- Added new field to PeltManager.PeltData 'peltTierName' used when trading pelts -- Added extension method PeltData.SetTierName -- The Trader will now speak the correct name of custom pelts when trading with them -- Added DialogueManager.GenerateTraderPeltsEvent for creating custom dialogue events spoken by the Trader when trading a custom pelt -- Added DialogueManager.GenerateRegionIntroEvent for creating the dialogue event played upon entering a custom region +* Fixed the first energy cell remaining closed in Act 1 when battle starts +* Added new field to PeltManager.PeltData 'peltTierName' used when trading pelts +* Added extension method PeltData.SetTierName +* The Trader will now speak the correct name of custom pelts when trading with them +* Added DialogueManager.GenerateTraderPeltsEvent for creating custom dialogue events spoken by the Trader when trading a custom pelt +* Added DialogueManager.GenerateRegionIntroEvent for creating the dialogue event played upon entering a custom region # 2.14.3 -- Fixed Act 2 bug relating to stackable sigils and activated sigils in the deck display menu -- Fixed dynamic costs still not working in Act 2 -- Fixed dynamic gem costs checking ResourcesManager instead of OpponentGemsManager for opponent cards -- Fixed dynamic costs not checking for owned blue gems -- Fixed dynamic costs not updating energy display correctly -- Changed dynamic costs to patch SetInfo instead of Awake -- Re-added dynamic cost error messages for when the card or card info is null -- Added ResourcesManager.Instance.GemsOfType(GemType) to check for owned gems of the specified type +* Fixed Act 2 bug relating to stackable sigils and activated sigils in the deck display menu +* Fixed dynamic costs still not working in Act 2 +* Fixed dynamic gem costs checking ResourcesManager instead of OpponentGemsManager for opponent cards +* Fixed dynamic costs not checking for owned blue gems +* Fixed dynamic costs not updating energy display correctly +* Changed dynamic costs to patch SetInfo instead of Awake +* Re-added dynamic cost error messages for when the card or card info is null +* Added ResourcesManager.Instance.GemsOfType(GemType) to check for owned gems of the specified type # 2.14.2 -- Fixed Overclock patch not checking for the correct Acts -- Fixed appearance behaviour's Card field always returning null in Act 2 -- Added OverridePixelPortrait virtual method to PixelAppearanceBehaviour to allow for changing card portraits in Act 2 -- Added CardInfo.SetPixelAlternatePortrait() and Cardinfo.GetPixelAlternatePortrait() for storing alternate pixel portraits -- Re-added SetTerrain method without optional bool parameter -- SwitchToAlternatePortrait and SwitchToDefaultPortrait now work in Act 2 using the above system -- Removed cost-related error spam in Act 2 +* Fixed Overclock patch not checking for the correct Acts +* Fixed appearance behaviour's Card field always returning null in Act 2 +* Added OverridePixelPortrait virtual method to PixelAppearanceBehaviour to allow for changing card portraits in Act 2 +* Added CardInfo.SetPixelAlternatePortrait() and Cardinfo.GetPixelAlternatePortrait() for storing alternate pixel portraits +* Re-added SetTerrain method without optional bool parameter +* SwitchToAlternatePortrait and SwitchToDefaultPortrait now work in Act 2 using the above system +* Removed cost-related error spam in Act 2 # 2.14.1 -- Custom tribes are now given a placeholder reward cardback if one isn't provided -- Fixed visual error when flipping a custom tribe choice for a tribe without a custom cardback -- Fixed pixel stat icons not hiding the underlying stat number -- Fixed ChooseTarget null exception -- Fixed opponent cards with mods not being created properly (eg Bounty Hunters) -- Fixed being able to ring the bell in Part 2 during the Tutor sequence -- Fixed GBC packs not checking for onePerDeck when selecting possible cards -- Fixed decals added via temporary mods not clearing from cards in Act 2 -- Changed what vanilla abilities are marked as Act2Modular (see the Part2ModularAbilities file for the full list) -- Removed leftover debug info during start-up -- Added CardInfo.SetCardTemple() -- Added CardModInfo extension methods SetTemporaryDecal and IsTemporaryDecal (primarily for internal use, maybe you'll find a use for it) -- Added GBCPackManager.ModifyGBCPacks function for altering what cards can be found in GBC card packs +* Custom tribes are now given a placeholder reward cardback if one isn't provided +* Fixed visual error when flipping a custom tribe choice for a tribe without a custom cardback +* Fixed pixel stat icons not hiding the underlying stat number +* Fixed ChooseTarget null exception +* Fixed opponent cards with mods not being created properly (eg Bounty Hunters) +* Fixed being able to ring the bell in Part 2 during the Tutor sequence +* Fixed GBC packs not checking for onePerDeck when selecting possible cards +* Fixed decals added via temporary mods not clearing from cards in Act 2 +* Changed what vanilla abilities are marked as Act2Modular (see the Part2ModularAbilities file for the full list) +* Removed leftover debug info during start-up +* Added CardInfo.SetCardTemple() +* Added CardModInfo extension methods SetTemporaryDecal and IsTemporaryDecal (primarily for internal use, maybe you'll find a use for it) +* Added GBCPackManager.ModifyGBCPacks function for altering what cards can be found in GBC card packs # 2.14.0 -- Fixed Sniper duplicating attacks from sigils like Double Strike -- Fixed interaction between Waterborne and Fledgling in Act 2 -- Fixed Cuckoo sigil softlocking in Act 2 when making a Raven Egg -- Fixed sigils added via temporary mods not displaying in Act 2 -- Fixed hiddenAbilities not affecting sigil display in Act 2 -- Fixed Handy sigil visual bug outside of Act 2 -- Fixed Shapeshifter special ability in Act 2 -- Added pixel sprites for Raven Egg and Cuckoo/Broken Egg -- Added ResourceBankManager.AddDecal(), PlayableCard.AddTemporaryMods(), CardModificationInfo.AddDecalIds -- Added AbilityInfo.SetPixelIcon(string pathToArt), CardInfo.RemoveAppearances(), CardInfo.SetDefaultEvolutionName() -- Added DialogueManager.PlayDialogueEventSafe - combines TextDisplayer.PlayDialogueEvent and DialogueHandler.PlayDialogueHandler for multi-act support -- Added support for directly loading AudioClips via the GramophoneManager -- Added support for adding decals to pixel cards via DecalIds -- Added pixel portrait for Ijiraq -- Added support for changing costs midbattle using CardModificationInfos or a HarmonyPatch -- Changed TranspilerHelpers.LogCodeInscryptions to also function as an extension method for List -- FullSpecialTriggeredAbility now stores the ability name and mod GUID -- Temporary mods can now be used to add decals to a card -- CardRenderInfo.OverrideAbilityIcon now works for Act 2 sigils -- CardInfo.SetTerrain() now has optional parameter 'useTerrainLayout', defaulting to true -- Made method used to add stacks to pixel sigils public -- Updated the wiki +* Fixed Sniper duplicating attacks from sigils like Double Strike +* Fixed interaction between Waterborne and Fledgling in Act 2 +* Fixed Cuckoo sigil softlocking in Act 2 when making a Raven Egg +* Fixed sigils added via temporary mods not displaying in Act 2 +* Fixed hiddenAbilities not affecting sigil display in Act 2 +* Fixed Handy sigil visual bug outside of Act 2 +* Fixed Shapeshifter special ability in Act 2 +* Added pixel sprites for Raven Egg and Cuckoo/Broken Egg +* Added ResourceBankManager.AddDecal(), PlayableCard.AddTemporaryMods(), CardModificationInfo.AddDecalIds +* Added AbilityInfo.SetPixelIcon(string pathToArt), CardInfo.RemoveAppearances(), CardInfo.SetDefaultEvolutionName() +* Added DialogueManager.PlayDialogueEventSafe + * Combines TextDisplayer.PlayDialogueEvent and DialogueHandler.PlayDialogueHandler for multi-act support +* Added support for directly loading AudioClips via the GramophoneManager +* Added support for adding decals to pixel cards via DecalIds +* Added pixel portrait for Ijiraq +* Added support for changing costs midbattle using CardModificationInfos or a HarmonyPatch +* Changed TranspilerHelpers.LogCodeInscryptions to also function as an extension method for List +* FullSpecialTriggeredAbility now stores the ability name and mod GUID +* Temporary mods can now be used to add decals to a card +* CardRenderInfo.OverrideAbilityIcon now works for Act 2 sigils +* CardInfo.SetTerrain() now has optional parameter 'useTerrainLayout', defaulting to true +* Made method used to add stacks to pixel sigils public +* Updated the wiki # 2.13.3 -- Fixed null error when opening card packs in Act 2 -- Fixed pixel cards with activated sigils showing the activated sigil icon twice (does not fix the button obscuring sigils) -- Added new helper class GemsManagerHelpers with helper methods: OpponentHasGems, PlayerHasGems -- Changed how Act 2 descriptions are altered to prevent conflicts -- True Scholar now correctly requires a Blue Gem to be owned prior to use +* Fixed null error when opening card packs in Act 2 +* Fixed pixel cards with activated sigils showing the activated sigil icon twice (does not fix the button obscuring sigils) +* Added new helper class GemsManagerHelpers with helper methods: OpponentHasGems, PlayerHasGems +* Changed how Act 2 descriptions are altered to prevent conflicts +* True Scholar now correctly requires a Blue Gem to be owned prior to use # 2.13.2 -- Fixed Hoarder sigil breaking when used by opponents in Act 2 -- Fixed Hodag special ability not working in Act 2 -- Fixed cards marked as AffectedByTidalLock not being killed by Tidal Lock when it's on a giant card -- Added card extension methods SetAffectedByTidalLock and HasAlternatePortrait -- Added ability extension method SetPart2Ability -- Added AbilityCardMetaCategory AbilityManager.Part2Modular -- Added pixel portraits for Empty Vessel and its Gemified variants, Ant, Bee, Dam, Chime, and the Tail cards -- Amorphous sigil now works in Act 2 -- Vessel Printer sigil now works in Act 2 -- Trinket Bearer sigil is now disabled in Act 2 -- Hidden abilities are now properly hidden in Act 2 -- Fledgling sigil now properly shows the required (up to the number 3) in Act 2 -- Fledgling sigil's rulebook description now updates to show the selected card's actual number of required turns -- Squirrel, Aqua Squirrel, and Rabbit are now marked as AffectedByTidalLock -- SteelTrap sigil no longer changes a card's portrait to the closed trap; will now switch to an alternate portrait if it exists +* Fixed Hoarder sigil breaking when used by opponents in Act 2 +* Fixed Hodag special ability not working in Act 2 +* Fixed cards marked as AffectedByTidalLock not being killed by Tidal Lock when it's on a giant card +* Added card extension methods SetAffectedByTidalLock and HasAlternatePortrait +* Added ability extension method SetPart2Ability +* Added AbilityCardMetaCategory AbilityManager.Part2Modular +* Added pixel portraits for Empty Vessel and its Gemified variants, Ant, Bee, Dam, Chime, and the Tail cards +* Amorphous sigil now works in Act 2 +* Vessel Printer sigil now works in Act 2 +* Trinket Bearer sigil is now disabled in Act 2 +* Hidden abilities are now properly hidden in Act 2 +* Fledgling sigil now properly shows the required (up to the number 3) in Act 2 +* Fledgling sigil's rulebook description now updates to show the selected card's actual number of required turns +* Squirrel, Aqua Squirrel, and Rabbit are now marked as AffectedByTidalLock +* SteelTrap sigil no longer changes a card's portrait to the closed trap; will now switch to an alternate portrait if it exists # 2.13.1 -- Fixed custom items falling through reality -- Added card extension method IsAffectedByTidalLock -- Mental Gemnastics sigil now works in Act 1 -- Tidal Lock sigil now works for non-Moon cards +* Fixed custom items falling through reality +* Added card extension method IsAffectedByTidalLock +* Mental Gemnastics sigil now works in Act 1 +* Tidal Lock sigil now works for non-Moon cards # 2.13.0 -- Fixed DontDestroyOnLoad warnings when using custom items -- Fixed weird spacing for Mox cost textures in Act 1 -- Fixed player death cards not inheriting Energy, Mox, or custom costs -- Fixed the hint dialogue for insufficient Energy in Act 1 being the wrong colour -- Fixed ExtendedActivatedAbilityBehaviour discarding negative activation cost modifiers -- Fixed Sniper not accounting for custom sigils that modify attack slots -- Fixed Tutor not working in Act 2 -- Added more extension methods to BoardManager -- Added new card extensions SetGemify and SetGemsCost(params GemType[]) -- Added catch-all cost textures for when Blood or Bones go above 13 -- Added CardModificationInfoManager and DeathCardManager -- Added extended property support and extensions for CardModificationInfo -- Added Blood activation cost support to ExtendedActivatedAbilityBehaviour -- ExtendedActivatedAbilityBehaviour now calls PostActivate() if a card dies from paying the Health cost -- Leshy now recognises death cards with multiple costs in his dialogue -- Leshy will now let you create death cards with up to 8 sigils -- Minor adjustments to some cost textures -- Rearranged order of Mox cost textures to align with order of Mox on the Gem Module -- Removed empty cost textures for Blood, Bones, Energy, Mox from the community patches -- Sniper patch's methods are now public +* Fixed DontDestroyOnLoad warnings when using custom items +* Fixed weird spacing for Mox cost textures in Act 1 +* Fixed player death cards not inheriting Energy, Mox, or custom costs +* Fixed the hint dialogue for insufficient Energy in Act 1 being the wrong colour +* Fixed ExtendedActivatedAbilityBehaviour discarding negative activation cost modifiers +* Fixed Sniper not accounting for custom sigils that modify attack slots +* Fixed Tutor not working in Act 2 +* Added more extension methods to BoardManager +* Added new card extensions SetGemify and SetGemsCost(params GemType[]) +* Added catch-all cost textures for when Blood or Bones go above 13 +* Added CardModificationInfoManager and DeathCardManager +* Added extended property support and extensions for CardModificationInfo +* Added Blood activation cost support to ExtendedActivatedAbilityBehaviour +* ExtendedActivatedAbilityBehaviour now calls PostActivate() if a card dies from paying the Health cost +* Leshy now recognises death cards with multiple costs in his dialogue +* Leshy will now let you create death cards with up to 8 sigils +* Minor adjustments to some cost textures +* Rearranged order of Mox cost textures to align with order of Mox on the Gem Module +* Removed empty cost textures for Blood, Bones, Energy, Mox from the community patches +* Sniper patch's methods are now public # 2.12.0 -- Fixed ExtendedActivatedAbilityBehaviour's Health cost not subtracting Health correctly -- Fixed softlock in Act 1 during death card creation -- Fixed custom cards that start Gemified not working as intended when obtained in-game -- Potentially fixed softlock when making terrain for a region -- Added further checks to challenge icon-related patch to prevent softlocks -- Added decal, appearance behaviour, and Gemified card support for Act 2 cards -- Added Singleton for keeping track of opponent gems -- Added new helper method for creating Sprites from resource files in an assembly -- Added new SpriteType for creating pixel card decals -- Gemified visuals now work correctly for Act 3 opponents -- Cost choice node now offers each Mox colour individually -- Added new config "Default Drone" to change the model and position of the Energy Drone -- Amorphous sigil now activates when used by opponents or obtained via evolution/temp mod -- Owned Mox in Act 1 now updates when a card is hooked by the Angler or via the Hook item +* Fixed ExtendedActivatedAbilityBehaviour's Health cost not subtracting Health correctly +* Fixed softlock in Act 1 during death card creation +* Fixed custom cards that start Gemified not working as intended when obtained in-game +* Potentially fixed softlock when making terrain for a region +* Added further checks to challenge icon-related patch to prevent softlocks +* Added decal, appearance behaviour, and Gemified card support for Act 2 cards +* Added Singleton for keeping track of opponent gems +* Added new helper method for creating Sprites from resource files in an assembly +* Added new SpriteType for creating pixel card decals +* Gemified visuals now work correctly for Act 3 opponents +* Cost choice node now offers each Mox colour individually +* Added new config "Default Drone" to change the model and position of the Energy Drone +* Amorphous sigil now activates when used by opponents or obtained via evolution/temp mod +* Owned Mox in Act 1 now updates when a card is hooked by the Angler or via the Hook item # 2.11.2 -- Fixed starter deck custom unlocks not working -- Fixed card icons not being properly centred for starter decks with 4+ cards -- Cards in Acts 2 and 3 can now display up to 8 sigils -- Blood tokens in Act 3 now appear to the side of the board instead of on it -- Blood tokens now stack on each other when there are more than 4 +* Fixed starter deck custom unlocks not working +* Fixed card icons not being properly centred for starter decks with 4+ cards +* Cards in Acts 2 and 3 can now display up to 8 sigils +* Blood tokens in Act 3 now appear to the side of the board instead of on it +* Blood tokens now stack on each other when there are more than 4 # 2.11.1 -- Fixed regions in Act 1 being out of order -- Fixed the console message concerning custom dialogue events not giving the right amount +* Fixed regions in Act 1 being out of order +* Fixed the console message concerning custom dialogue events not giving the right amount # 2.11.0 -- Refactored how regions are handled by the API to prevent duplicate bosses -- Refactored how bosses are selected to prevent duplicates being encountered -- Changed when modded Ascension data is cleared to allow for editing it post-clear -- Added more descriptive error logs for some commonly encountered errors -- Added config option to reduce the amount of debug info shown in the console -- Added methods to aid in creating encounter turn plans -- Added more methods for interacting with lists, new debug method to aid in making transpilers -- Added ExtendedActivatedAbilityBehaviour class; allows for dynamic costs and Health costs -- Fixed SetOnePerDeck() and SetHideStats() being inaccessible -- Fixed AddCardBlueprint() not setting the replacement card correctly +* Refactored how regions are handled by the API to prevent duplicate bosses +* Refactored how bosses are selected to prevent duplicates being encountered +* Changed when modded Ascension data is cleared to allow for editing it post-clear +* Added more descriptive error logs for some commonly encountered errors +* Added config option to reduce the amount of debug info shown in the console +* Added methods to aid in creating encounter turn plans +* Added more methods for interacting with lists, new debug method to aid in making transpilers +* Added ExtendedActivatedAbilityBehaviour class; allows for dynamic costs and Health costs +* Fixed SetOnePerDeck() and SetHideStats() being inaccessible +* Fixed AddCardBlueprint() not setting the replacement card correctly # 2.10.0 -- Completely revamped PeltManager to be more user friendly (Mod breaking) -- Added LocalizationManager for more language support with mods -- Added helper method for custom pelts to change cards trader -- Pelts offered by Trapper capped at 8. -- Pelts offered by Trapper are now randomized if more than 8 -- Fixed soft lock at trader when having more pelts than cards to offer -- Fixed the campfire fix breaking the normal sequence -- Fixed HasCardMetaCategory returning the inverse of its intended value -- Fixed stackable sigils not showing numbers above 9 +* Completely revamped PeltManager to be more user friendly (Mod breaking) +* Added LocalizationManager for more language support with mods +* Added helper method for custom pelts to change cards trader +* Pelts offered by Trapper capped at 8. +* Pelts offered by Trapper are now randomized if more than 8 +* Fixed soft lock at trader when having more pelts than cards to offer +* Fixed the campfire fix breaking the normal sequence +* Fixed HasCardMetaCategory returning the inverse of its intended value +* Fixed stackable sigils not showing numbers above 9 # 2.9.1 -- Fixed the campfire fix breaking the normal sequence +* Fixed the campfire fix breaking the normal sequence # 2.9.0 -- Added talking card support! -- Moved the "CustomLine" struct outside of the Dialogue.Helpers class. -- Fixed tribe choice node being able to offer vanilla tribes with no cards -- Fixed totem choice node being able to offer tops for vanilla tribes with no cards -- Added fallbacks for tribal choice node if there are less than 3 chooseable tribes -- Added fallback to campfire node if you don't have any cards that can be buffed -- Fixed 'outdated plugins' warning showing up when it shouldn't, tweaked message slightly +* Added talking card support! +* Moved the "CustomLine" struct outside of the Dialogue.Helpers class. +* Fixed tribe choice node being able to offer vanilla tribes with no cards +* Fixed totem choice node being able to offer tops for vanilla tribes with no cards +* Added fallbacks for tribal choice node if there are less than 3 chooseable tribes +* Added fallback to campfire node if you don't have any cards that can be buffed +* Fixed 'outdated plugins' warning showing up when it shouldn't, tweaked message slightly # 2.8.1 -- Added CardInfo extensions for checking CardMetaCategories, cause why not -- Added DialogueManager for custom dialogue for regions and Custom Color support -- Added ResourceBankManager for custom resources. Avoids doing this for every mod -- Deprecated DialogueEventGenerator (Moved to Dialogue Manager) -- Fixed repeating bosses on regions that have multiple boss possibilities -- Fixed custom props not having a renderer on the top parent and breaking loading regions -- Fixed arrows on the challenges select screen being offscreen at certain resolutions -- Fixed tribe choice node being able to offer custom tribes with no cards -- Fixed being able to get custom totem tops for tribes with no cards +* Added CardInfo extensions for checking CardMetaCategories, cause why not +* Added DialogueManager for custom dialogue for regions and Custom Color support +* Added ResourceBankManager for custom resources. Avoids doing this for every mod +* Deprecated DialogueEventGenerator (Moved to Dialogue Manager) +* Fixed repeating bosses on regions that have multiple boss possibilities +* Fixed custom props not having a renderer on the top parent and breaking loading regions +* Fixed arrows on the challenges select screen being offscreen at certain resolutions +* Fixed tribe choice node being able to offer custom tribes with no cards +* Fixed being able to get custom totem tops for tribes with no cards # 2.8.0 -- Added support for custom masks -- Fixed sometimes items use the wrong behaviour -- Added more resource and asset bundle helpers +* Added support for custom masks +* Fixed sometimes items use the wrong behaviour +* Added more resource and asset bundle helpers # 2.7.4 -- Fixed latch fix modifying the base info -- Fixed stackable abilities activating twice when they shouldn't +* Fixed latch fix modifying the base info +* Fixed stackable abilities activating twice when they shouldn't # 2.7.3 -- Fixed sniper fix not accounting for cards with Repulsive ability -- Fixed latch abilities not working in Act 2 -- Added ExtendedProperties for abilities -- Added new ability setter SetTriggersOncePerStack for controlling the behaviour of stackable abilities after a card evolves -- Added new helper methods for creating cards: SetOnePerDeck, SetHideStats -- Added new helper methods for abilities: SetCanStack, SetTriggersOncePerStack, SetActivated, SetPassive, SetConduit, SetConduitCell -- Added new remover methods for cards: RemoveAbilities, RemoveAbilitiesSingle, RemoveTraits, RemoveTribes +* Fixed sniper fix not accounting for cards with Repulsive ability +* Fixed latch abilities not working in Act 2 +* Added ExtendedProperties for abilities +* Added new ability setter SetTriggersOncePerStack for controlling the behaviour of stackable abilities after a card evolves +* Added new helper methods for creating cards: SetOnePerDeck, SetHideStats +* Added new helper methods for abilities: SetCanStack, SetTriggersOncePerStack, SetActivated, SetPassive, SetConduit, SetConduitCell +* Added new remover methods for cards: RemoveAbilities, RemoveAbilitiesSingle, RemoveTraits, RemoveTribes # v2.7.2 -- Added `CanActivateOutsideBattles` extension method to ConsumableItemData so they can be used outside of battles. -- Added Missing Tribe Icon fallback texture for totem tops when a tribe has no icon -- Changed TotemManager to accept a `CompositeTotemPiece` type for custom behaviour other than always a custom icon -- Fixed lag when entering gain consumable item map node -- Fixed crash when using custom consumable items -- Fixed hard lock when getting totem top that doesn't have an icon -- Fixed Pack Rat card object not having the correct background during the item node sequence -- Fixed Latch abilities removing stat boosts when latching a card -- Fixed latched abilities not properly rendering in some acts +* Added `CanActivateOutsideBattles` extension method to ConsumableItemData so they can be used outside of battles. +* Added Missing Tribe Icon fallback texture for totem tops when a tribe has no icon +* Changed TotemManager to accept a `CompositeTotemPiece` type for custom behaviour other than always a custom icon +* Fixed lag when entering gain consumable item map node +* Fixed crash when using custom consumable items +* Fixed hard lock when getting totem top that doesn't have an icon +* Fixed Pack Rat card object not having the correct background during the item node sequence +* Fixed Latch abilities removing stat boosts when latching a card +* Fixed latched abilities not properly rendering in some acts # v2.7.1 -- Changed Pelt Manager to no longer have an interface for future safety! (NOTE This will break all mods with custom pelts!) -- Added Squirrel tribe art (Thanks Drift!) -- Fixed Green Gem stat icon showing as a black square in act 1 -- Fixed Green Gem stat icon not appearing in rulebook -- Fixed Squirrel totem top causing NMA when using custom totem tops -- Fixed being unable to play cards with a Blood cost above 4 via sacrifices +* Changed Pelt Manager to no longer have an interface for future safety! (NOTE This will break all mods with custom pelts!) +* Added Squirrel tribe art (Thanks Drift!) +* Fixed Green Gem stat icon showing as a black square in act 1 +* Fixed Green Gem stat icon not appearing in rulebook +* Fixed Squirrel totem top causing NMA when using custom totem tops +* Fixed being unable to play cards with a Blood cost above 4 via sacrifices # v2.7.0 -- Added support for custom pelts -- Added support for converting audio files to AudioClip objects -- Added support for adding custom tracks to the Gramophone -- Added support for adding custom audio files -- Warning message for outdated plugins now lists the outdated plugins -- Energy Drone now tweens with the scales, kinda -- Fixed visual bug where energy cells didn't start closed in successive battles +* Added support for custom pelts +* Added support for converting audio files to AudioClip objects +* Added support for adding custom tracks to the Gramophone +* Added support for adding custom audio files +* Warning message for outdated plugins now lists the outdated plugins +* Energy Drone now tweens with the scales, kinda +* Fixed visual bug where energy cells didn't start closed in successive battles # v2.6.0 -- Added support for custom consumable items using a choice of a few models -- Added support for custom consumable card in a bottle items -- Added support for custom consumable items with a custom model -- Added more helper extensions for checking abilities, traits, special abilities -- Fixed null instances in Act 2 spamming the console with warnings +* Added support for custom consumable items using a choice of a few models +* Added support for custom consumable card in a bottle items +* Added support for custom consumable items with a custom model +* Added more helper extensions for checking abilities, traits, special abilities +* Fixed null instances in Act 2 spamming the console with warnings # v2.5.3 -- Added support for custom card unlock requirements -- Fixed non-giant cards with Omni Strike not directly attacking their opposing slot when there are no opposing cards -- Fixed cards attacking their own side of the board during combat not adding damage to the correct side of the scale -- Fixed an issue where a challenge would go missing if you had more than 14 installed +* Added support for custom card unlock requirements +* Fixed non-giant cards with Omni Strike not directly attacking their opposing slot when there are no opposing cards +* Fixed cards attacking their own side of the board during combat not adding damage to the correct side of the scale +* Fixed an issue where a challenge would go missing if you had more than 14 installed # v2.5.2 -- Fixed the sentry fix overriding patches to SlotAttackSlot +* Fixed the sentry fix overriding patches to SlotAttackSlot # v2.5.1 -- Reverted part of the sentry fix that was causing problems -- Made it easier to override the default totem head +* Reverted part of the sentry fix that was causing problems +* Made it easier to override the default totem head # v2.5.0 -- Added support for custom totem heads -- Custom Tribes now appear as a totem in the Wood Carver nodes -- Fixes for Sentry ability in Act 1 relating to PackMule, Loose Tail, and enemy totems -- Fixed stacked ability icons causing issues when trying to render numbers on some sigil icons -- Fixed Latches not working in Act 1 +* Added support for custom totem heads +* Custom Tribes now appear as a totem in the Wood Carver nodes +* Fixes for Sentry ability in Act 1 relating to PackMule, Loose Tail, and enemy totems +* Fixed stacked ability icons causing issues when trying to render numbers on some sigil icons +* Fixed Latches not working in Act 1 # v2.4.2 -- Switched to debug version +* Switched to debug version # v2.4.1 -- Fixed Sentry ability not working properly in Act for players or opponents +* Fixed Sentry ability not working properly in Act for players or opponents # v2.4.0 -- Reworked challenges -- Fixed gemified opponent cards not working properly -- Fixed stat icons in Act 3 +* Reworked challenges +* Fixed gemified opponent cards not working properly +* Fixed stat icons in Act 3 # v2.3.0 -- Fixed orange gem not counting towards passive attack -- Fixed PackMule special ability not working on the player's side -- Fixed Mox cost choice node not working -- Fixed boon rulebook and removal -- Fixed tribe choice nodes -- Fixed error caused by passing null when assigning a custom tail portrait -- Improved activated ability fix -- Improved some extensions and attack buffs -- Fixes for starter decks -- Fixes for custom regions, more customisation when creating one -- Added more extensions -- Fixed stat icon rendering for Act 3 +* Fixed orange gem not counting towards passive attack +* Fixed PackMule special ability not working on the player's side +* Fixed Mox cost choice node not working +* Fixed boon rulebook and removal +* Fixed tribe choice nodes +* Fixed error caused by passing null when assigning a custom tail portrait +* Improved activated ability fix +* Improved some extensions and attack buffs +* Fixes for starter decks +* Fixes for custom regions, more customisation when creating one +* Added more extensions +* Fixed stat icon rendering for Act 3 # v2.2.0 -- Added an interface that triggers when cards are facedown -- Updated custom artwork for GBC numbers -- Fixed flipped icons spamming the log with warnings -- Fixed Tribe API breaking mods that use CardbackTexture -- Added custom combat triggers -- Added more custom extensions -- Fixed Latch abilities in Act 1 -- Fixed extension methods for setting custom flipped portrait affecting the wrong card -- Fixed optimisation issues caused by passive attack bufs -- Fixed activated sigils -- Added node manager for custom nodes -- Fixed cards getting buffs after the game ends +* Added an interface that triggers when cards are facedown +* Updated custom artwork for GBC numbers +* Fixed flipped icons spamming the log with warnings +* Fixed Tribe API breaking mods that use CardbackTexture +* Added custom combat triggers +* Added more custom extensions +* Fixed Latch abilities in Act 1 +* Fixed extension methods for setting custom flipped portrait affecting the wrong card +* Fixed optimisation issues caused by passive attack bufs +* Fixed activated sigils +* Added node manager for custom nodes +* Fixed cards getting buffs after the game ends # v2.1.0 -- Fixed blurry portraits when playing on low graphics settings +* Fixed blurry portraits when playing on low graphics settings # v2.0.3 -- Added support for custom tribes and boons -- Added config option to opt of custom cost renders for Act 2 cards -- Refactored and added documentation for CardExtensions +* Added support for custom tribes and boons +* Added config option to opt of custom cost renders for Act 2 cards +* Refactored and added documentation for CardExtensions # v2.0.2 -- Improved the process of creating stat icons to automatically register and add the corresponding special ability -- Added log warnings for improperly registered cards +* Improved the process of creating stat icons to automatically register and add the corresponding special ability +* Added log warnings for improperly registered cards # v2.0.1 -- Bugfix for SaveData +* Bugfix for SaveData # v2.0 -- Rewritten to use base game objects +* Rewritten to use base game objects # v1.13.0 -- Added support for custom card backgrounds, dialogs, encounters and talking cards -- Fixes to abilities loading and stackable custom abilities +* Added support for custom card backgrounds, dialogs, encounters and talking cards +* Fixes to abilities loading and stackable custom abilities # v1.12.1 -- Bugfix so CustomCard doesn't wipe ability information. +* Bugfix so CustomCard doesn't wipe ability information. # v1.12 -- Fixes params. -- Adds feature for special abilities and special stat icons. -- Added support for emissions. +* Fixes params. +* Adds feature for special abilities and special stat icons. +* Added support for emissions. # v1.11 -- Added support for more identifiers +* Added support for more identifiers # v1.10.1 -- Fix for abilities which do not have identifier. +* Fix for abilities which do not have identifier. # v1.10 -- Added ability identifiers. +* Added ability identifiers. # v1.9.1 -- Added support for mox. -- Forced ability texture to point filter. +* Added support for mox. +* Forced ability texture to point filter. # v1.9 -- Added config options for energy. +* Added config options for energy. # v1.8.2 -- Fixed appearanceBehaviour (again). +* Fixed appearanceBehaviour (again). # v1.8.1 -- Fix pixelTex dimensions. +* Fix pixelTex dimensions. # v1.8 ## Not compatible with v1.7.2 -- Changes to using TypeMapper. +* Changes to using TypeMapper. # v1.7.2 -- Fixed error when not adding any abilities. +* Fixed error when not adding any abilities. # v1.7.1 -- Fixed appearance behaviours not loading properly. +* Fixed appearance behaviours not loading properly. # v1.7 -- Added support for custom abilities! +* Added support for custom abilities! # v1.6 -- Changed textures to point filter to reduce blur. +* Changed textures to point filter to reduce blur. # v1.5.2 -- Enabled fix for evolveParams and some other disabled options. +* Enabled fix for evolveParams and some other disabled options. # v1.5.1 -- Fix to accessing private instance for regions. +* Fix to accessing private instance for regions. # v1.5 ## Not compatible with v1.4 -- Changed all references to API including guid. +* Changed all references to API including guid. # v1.4 -- Set up support for customising and adding regions. +* Set up support for customising and adding regions. # v1.3 -- Set up project to work as a library for other plugins to use. +* Set up project to work as a library for other plugins to use. # v1.2.1.1 -- Fixed previous patch. +* Fixed previous patch. # v1.2.1 -- Fixed cards not being inserted into the card pool on chapter select. +* Fixed cards not being inserted into the card pool on chapter select. # v1.2 ## Not compatible with v1.1 -- Added customising default cards through CustomCard. -- Custom cards are added via the **CustomCard** constructor rather than through the **AddCard** method. +* Added customising default cards through CustomCard. +* Custom cards are added via the **CustomCard** constructor rather than through the **AddCard** method. # v1.1 -- Hooked into a much more sensible method to load the cards into the card pool. +* Hooked into a much more sensible method to load the cards into the card pool. From 74b5ec102f97a62f20100486a8e86ff8e7cdf407 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 10:25:38 -0500 Subject: [PATCH 23/28] Add a few more items to the Changelog, and update BIE --- CHANGELOG.md | 5 +++++ thunderstore.toml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45b26996..4994339a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,11 @@ * Clean up Code formatting. * Fix casing of some variables. * Implement new Material Overrides to `MaterialOverride` related to changing `Metallic`, `Smoothness` and `Height` for consistency. +* Add `OverrideQueuedBackground` to the `PixelCardBehaviours`. + * This is used for overriding the Queued Background of a card. +* Upgraded the API's `.csproj`'s, and TCLI Build system. +* Publicized the `_originalColor`, `_enterColor`, and `_selectedColor` used within `ActivatedAbilityIconInteractable` of the Community Patch. +* Update the API to use Latest BepInEx. # 2.24.1 * Added Extensions for setting the IconTexture of a Starter Deck. diff --git a/thunderstore.toml b/thunderstore.toml index d3fa3b21..db325240 100644 --- a/thunderstore.toml +++ b/thunderstore.toml @@ -10,7 +10,7 @@ websiteUrl = "https://github.com/InscryptionModding/InscryptionAPI/" containsNsfwContent = false [package.dependencies] -BepInEx-BepInExPack_Inscryption = "5.4.2305" +BepInEx-BepInExPack_Inscryption = "5.4.2306" BepInEx-MonoMod_Loader_Inscryption = "1.0.0" [build] From d96ee1bd87ff27c0cc0538cea4e6034ed6cae85e Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 12:42:31 -0500 Subject: [PATCH 24/28] Integrate TS-Build Support This is mainly useful for when it comes to publishing the packages, and bug fixing issues when installing via mod man and stuff. It does not automatically publish the package just prepares it for Thunderstore and GitHub Releases. --- .github/workflows/ts-build.yml | 34 ++ .gitignore | 6 +- .run/TS-Build InscryptionAPI.run.xml | 14 + APIPatcher/APIPatcher.csproj | 1 + InscryptionAPI/InscryptionAPI.csproj | 33 +- InscryptionAPI/TS-Build.bat | 360 ++++++++++++++++++ .../!!INSTALLATION!!.md | 92 +++++ .../Thunderstore-Package-Elements/icon.png | Bin 0 -> 2011 bytes 8 files changed, 531 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/ts-build.yml create mode 100644 .run/TS-Build InscryptionAPI.run.xml create mode 100644 InscryptionAPI/TS-Build.bat create mode 100644 InscryptionAPI/Thunderstore-Package-Elements/!!INSTALLATION!!.md create mode 100644 InscryptionAPI/Thunderstore-Package-Elements/icon.png diff --git a/.github/workflows/ts-build.yml b/.github/workflows/ts-build.yml new file mode 100644 index 00000000..5f368da3 --- /dev/null +++ b/.github/workflows/ts-build.yml @@ -0,0 +1,34 @@ + +name: TS-Build + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + build: + name: Run TS-Build + runs-on: windows-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 10.0.x + + - name: Run TS-Build Script + shell: cmd + run: call InscryptionAPI\TS-Build.bat + + - name: Send Artifacts to GitHub Workflow for Later Use. + uses: actions/upload-artifact@v4 + with: + name: InscryptionAPI-Thunderstore-${{ github.run_number }} + path: InscryptionAPI/GITHUB RELEASE/NET/*.zip + if-no-files-found: error + retention-days: 30 diff --git a/.gitignore b/.gitignore index dbfec368..5bac3001 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,8 @@ bin/ .vscode/ *.user build/ - +InscryptionAPI/GITHUB RELEASE/ +InscryptionAPI/GITHUB PRERELEASE/ +InscryptionAPI/Thunderstore-Package-Elements/monomod/Assembly-CSharp.APIPatcher.mm.dll +InscryptionAPI/Thunderstore-Package-Elements/monomod/Assembly-CSharp.APIPatcher.mm.pdb +InscryptionAPI/Thunderstore-Package-Elements/monomod/Assembly-CSharp.APIPatcher.mm.xml \ No newline at end of file diff --git a/.run/TS-Build InscryptionAPI.run.xml b/.run/TS-Build InscryptionAPI.run.xml new file mode 100644 index 00000000..ab052550 --- /dev/null +++ b/.run/TS-Build InscryptionAPI.run.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/APIPatcher/APIPatcher.csproj b/APIPatcher/APIPatcher.csproj index 2cb804d3..bd589d91 100644 --- a/APIPatcher/APIPatcher.csproj +++ b/APIPatcher/APIPatcher.csproj @@ -21,6 +21,7 @@ true false true + ..\InscryptionAPI\Thunderstore-Package-Elements\monomod\ diff --git a/InscryptionAPI/InscryptionAPI.csproj b/InscryptionAPI/InscryptionAPI.csproj index 268c4a87..e543a49e 100644 --- a/InscryptionAPI/InscryptionAPI.csproj +++ b/InscryptionAPI/InscryptionAPI.csproj @@ -23,6 +23,12 @@ + + + + TalkingCardGenericPrefab + + @@ -59,14 +65,6 @@ - - - - - TalkingCardGenericPrefab - - - all @@ -93,4 +91,23 @@ + + + + + "../InscryptionCommunityPatch/InscryptionCommunityPatch.csproj" + + Thunderstore-Package-Elements + plugins + ..\CHANGELOG.md + ..\README.md + ..\LICENSE.md + Release + + API + 2.24.2 + https://github.com/InscryptionModding/InscryptionAPI/ + The de-facto standard core API for all Inscryption mods. This lets you create new cards, abilities, challenges, map nodes, starter decks, and more. + BepInEx-BepInExPack_Inscryption-5.4.2306;BepInEx-MonoMod_Loader_Inscryption-1.0.0 + diff --git a/InscryptionAPI/TS-Build.bat b/InscryptionAPI/TS-Build.bat new file mode 100644 index 00000000..a4e1ba62 --- /dev/null +++ b/InscryptionAPI/TS-Build.bat @@ -0,0 +1,360 @@ +@echo off +SETLOCAL ENABLEDELAYEDEXPANSION + +REM ------------------------------- +REM THIS SCRIPT IS PROVIDED BY CHAOSYR +REM THIS IS LICENSED UNDER SML-1.0.0 +REM IT CAN BE FOUND HERE: https://stoatgames.icu/license-repository/licenses/sml-1-0-0/#content +REM IF YOU REUSE THIS FOR YOUR PROJECT, THIS COMMENT BLOCK MUST REMAIN IN TACT FOR LEGAL REASONS!! +REM ------------------------------- + +REM ------------------------------- +REM Config +REM ------------------------------- +set "PrimaryCSProj=%~dp0InscryptionAPI.CSProj" + +if not exist "%PrimaryCSProj%" ( + echo ERROR: Project file not found: "%PrimaryCSProj%" + exit /b 1 +) + +REM ------------------------------- +REM Read Secondary CSProj's +REM ------------------------------- +set "SCPRJs=" +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "line=!line:;= !" + for %%B in (!line!) do set "SCPRJs=!SCPRJs! %%B" +) +set "SCPRJs=!SCPRJs:~1!" + +REM ------------------------------- +REM Read TargetFrameworks +REM ------------------------------- +set "TFs=" +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "line=!line:;= !" + for %%B in (!line!) do set "TFs=!TFs! %%B" +) +set "TFs=!TFs:~1!" + +REM ------------------------------- +REM Read RuntimeIdentifiers +REM ------------------------------- +set "RIDs=" +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "line=!line:;= !" + for %%B in (!line!) do set "RIDs=!RIDs! %%B" +) +set "RIDs=!RIDs:~1!" + +REM ------------------------------- +REM Read Copy Locations +REM ------------------------------- +set "CLs=" +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "line=!line:;= !" + for %%B in (!line!) do set "CLs=!CLs! %%B" +) +set "CLs=!CLs:~1!" + +REM ------------------------------- +REM Read Dependency Locations +REM ------------------------------- +set "DPLs=" +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "line=!line:;= !" + for %%B in (!line!) do set "DPLs=!DPLs! %%B" +) +set "DPLs=!DPLs:~1!" + +REM ------------------------------- +REM Read Build Locations +REM ------------------------------- +set "BPLs=" +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "line=!line:;= !" + for %%B in (!line!) do set "BPLs=!BPLs! %%B" +) +set "BPLs=!BPLs:~1!" + +REM ------------------------------- +REM Read Markdown File Locations +REM ------------------------------- +set "CHANGELOG=" +set "README=" +set "LICENSE=" + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "CHANGELOG=!line!" +) + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "README=!line!" +) + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "LICENSE=!line!" +) + +REM ------------------------------- +REM Read Release Mode +REM ------------------------------- + +set "RELEASEMODE=" +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "RELEASEMODE=!line!" +) + +if "!RELEASEMODE!"=="" set "RELEASEMODE=Debug" + +if /I "!RELEASEMODE!"=="Release" ( + set "OUTPUT_DIR=%~dp0GITHUB RELEASE" +) else ( + if /I "!RELEASEMODE!"=="Debug" ( + set "OUTPUT_DIR=%~dp0GITHUB PRERELEASE" + ) else ( + set "RELEASEMODE=Debug" + set "OUTPUT_DIR=%~dp0GITHUB PRERELEASE" + ) +) + +REM Normalize full path +for %%I in ("%OUTPUT_DIR%") do set "OUTPUT_DIR=%%~fI" + +REM ------------------------------- +REM Clean output root safely +REM ------------------------------- +if exist "%OUTPUT_DIR%" rd /s /q "%OUTPUT_DIR%" +mkdir "%OUTPUT_DIR%" + +mkdir "%OUTPUT_DIR%\NET" + +set "TMP_ROOT=%OUTPUT_DIR%\_tmp" +mkdir "%TMP_ROOT%" + +set "MANIFEST_ROOT=%OUTPUT_DIR%\_manifest" +mkdir "%MANIFEST_ROOT%" + +REM ------------------------------- +REM Tell User the Settings +REM ------------------------------- + +if "!TFs!"=="~1" set "TFs=net6.0" +if "!RIDs!"=="~1" set "RIDs=win-x64" +if "!CLs!"=="~1" set "CLs=Thunderstore-Package-Elements" +if "!DPLs!"=="~1" set "DPLs=exclude" +if "!BPLs!"=="~1" set "BPLs=root" + +echo CONFIGURATION +echo SecondaryCSProjs: !SCPRJs! +echo TargetFrameworks: !TFs! +echo RuntimeIdentifiers: !RIDs! +echo CopyLocations: !CLs! +echo DependencyLocations: !DPLs! +echo CHANGELOGCopyLocation: !CHANGELOG! +echo READMECopyLocation: !README! +echo LICENSECopyLocation: !LICENSE! +echo BuildOutputLocations: !BPLs! +echo ReleaseMode: !RELEASEMODE! + +REM ------------------------------- +REM Fetch Manifest Properties +REM ------------------------------- +set "NAME=" +set "VERSION=" +set "WEBSITEURL=" +set "DESCRIPTION=" +set "DEPENDENCIES=" + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "NAME=!line!" +) + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "VERSION=!line!" +) + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "WEBSITEURL=!line!" +) + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "DESCRIPTION=!line!" +) + +for /f "usebackq tokens=*" %%A in (`type "%PrimaryCSProj%" ^| findstr ""`) do ( + set "line=%%A" + set "line=!line:=!" + set "line=!line:=!" + set "line=!line:;= !" + for %%B in (!line!) do set "DEPENDENCIES=!DEPENDENCIES! %%B" +) +set "DEPENDENCIES=!DEPENDENCIES:~1!" + +if "!DEPENDENCIES!"=="~1" set "DEPENDENCIES=" + +set "DEPENDENCYCOUNT=0" + +for %%D in (!DEPENDENCIES!) do ( + set /a DEPENDENCYCOUNT+=1 +) + +echo MANIFEST PROPERTIES +echo NAME: !NAME! +echo VERSION: !VERSION! +echo WEBSITEURL: !WEBSITEURL! +echo DESCRIPTION: !DESCRIPTION! +echo DEPENDENCIES: !DEPENDENCIES! +echo DEPENDENCYCOUNT: !DEPENDENCYCOUNT! + +REM ------------------------------- +REM Build Manifest File +REM ------------------------------- + +set "OUT=%MANIFEST_ROOT%\manifest.json" + +( + echo { + echo "name": "!NAME!", + echo "version_number": "!VERSION!", + echo "website_url": "!WEBSITEURL!", + echo "description": "!DESCRIPTION!", + echo "dependencies": [ +) > "!OUT!" + +if "!DEPENDENCYCOUNT!"=="0" ( + echo No Dependencies Skipping +) else ( + set "INDEX=0" + + for %%D in (!DEPENDENCIES!) do ( + set /a INDEX+=1 + + if "!INDEX!"=="!DEPENDENCYCOUNT!" ( + echo "%%D" + ) else ( + echo "%%D", + ) + ) >> "!OUT!" +) + +( + echo ] + echo } +) >> "!OUT!" + +REM ------------------------------- +REM Build Loop +REM ------------------------------- +for %%F in (!TFs!) do ( + for %%R in (!RIDs!) do ( + + set "TF_NAME=%%F" + set "RID_FLAT=%%R" + set "OUT=!TMP_ROOT!\!TF_NAME!-!RID_FLAT!" + + if exist "!OUT!" rd /s /q "!OUT!" + mkdir "!OUT!" + if "!BPLs!" == "root" ( + echo Told to Export to root Location we are not making any Directories. Skipping. + ) else ( + for %%B in (!BPLs!) do ( + mkdir "!OUT!\%%B" + ) + ) + + if "!BPLs!"=="root" ( + echo Publishing NET: %%F / %%R + dotnet publish "%PrimaryCSProj%" -c "!RELEASEMODE!" -f "%%F" -r "%%R" -o "!OUT!" || echo Failed %%F/%%R + for %%P in (!SCPRJs!) do ( + echo Publishing NET: %%P + dotnet publish %%P -c "!RELEASEMODE!" -f "%%F" -r "%%R" -o "!OUT!" || echo Failed %%F/%%R + ) + ) else ( + for %%B in (!BPLs!) do ( + echo Publishing NET: %%F / %%R + dotnet publish "%PrimaryCSProj%" -c "!RELEASEMODE!" -f "%%F" -r "%%R" -o "!OUT!\%%B" || echo Failed %%F/%%R + for %%P in (!SCPRJs!) do ( + echo Publishing NET: %%P + dotnet publish %%P -c "!RELEASEMODE!" -f "%%F" -r "%%R" -o "!OUT!\%%B" || echo Failed %%F/%%R + ) + ) + ) + copy /Y "%~dp0!CHANGELOG!" "!OUT!" + copy /Y "%~dp0!README!" "!OUT!" + copy /Y "%~dp0!LICENSE!" "!OUT!" + copy /Y "%MANIFEST_ROOT%\manifest.json" "!OUT!" + if "!DPLs!"=="exclude" ( + echo Told to Exclude on Dependency Locations as the field became a Empty field. Skipping. + ) else ( + mkdir "!OUT!\plugins" + mkdir "!OUT!\plugins\Dependencies" + for %%L in (!DPLs!) do ( + xcopy /E /I /Y "%%L" "!OUT!\plugins\Dependencies" + ) + ) + for %%L in (!CLs!) do ( + xcopy /E /I /Y "%%L" "!OUT!" + ) + set "ZIP_OUT=%OUTPUT_DIR%\NET\!TF_NAME!-!RID_FLAT!-!RELEASEMODE!.zip" + + powershell -NoProfile -Command ^ "Compress-Archive -Path '!OUT!\*' -DestinationPath '!ZIP_OUT!' -Force" + + rd /s /q "!OUT!" + ) +) + +REM ------------------------------- +REM Remove temp root completely +REM ------------------------------- +rd /s /q "%TMP_ROOT%" +rd /s /q "%MANIFEST_ROOT%" + +echo. +echo Build completed! Artifacts in: +echo %OUTPUT_DIR% + +ENDLOCAL \ No newline at end of file diff --git a/InscryptionAPI/Thunderstore-Package-Elements/!!INSTALLATION!!.md b/InscryptionAPI/Thunderstore-Package-Elements/!!INSTALLATION!!.md new file mode 100644 index 00000000..7e84e697 --- /dev/null +++ b/InscryptionAPI/Thunderstore-Package-Elements/!!INSTALLATION!!.md @@ -0,0 +1,92 @@ +## Getting Started: Installation +___ +To begin, we'll go over how to install BepInEx, the framework all Inscryption mods use. This is a necessary step to playing modded Inscryption, so be sure to follow this carefully. + +**FOR LINUX AND STEAMDECK:** Ensure that the game is set to run using `Proton` in he game settings on steam. Should be a setting like this: `Change launch behaviour` -> `Proton`. + +### Installing with a Mod Manager +1. Download and install [Thunderstore Mod Manager](https://www.overwolf.com/app/Thunderstore-Thunderstore_Mod_Manager), [Gale](https://thunderstore.io/c/inscryption/p/Kesomannen/GaleModManager/) or [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/). +2. Click the **Install with Mod Manager** button on the top of [BepInEx's](https://thunderstore.io/c/inscryption/p/BepInEx/BepInExPack_Inscryption/) page. +3. Run the game via the mod manager. + +If you have issues with Mod Managers head to one of these discords; + +* **Thunderstore Support Discord:** [Here](https://discord.gg/Fbz54kQAxg) +* **R2ModMan Support Discord:** [Here](https://discord.gg/R85wjqa4WN) +* **Gale Mod Manager Support Discord:** [Here](https://discord.gg/sfuWXRfeTt) + +### Installing Manually +1. Install [BepInEx](https://thunderstore.io/package/download/BepInEx/BepInExPack_Inscryption/5.4.2305/) by pressing `Manual Download` and extract the contents into a folder. **Do not extract into the game folder!** +2. Move the contents of the `BepInExPack_Inscryption` folder into the game folder (where the game executable is; usually found here: `C:\Program Files (x86)\Steam\steamapps\common\Inscryption`). +3. Run the game. If everything was done correctly, you will see the BepInEx console appear on your desktop. Close the game after it finishes loading. +4. Install [MonoModLoader](https://inscryption.thunderstore.io/package/BepInEx/MonoMod_Loader_Inscryption/) and extract the contents into a folder. +5. Move the contents of the `patchers` folder into `BepInEx/patchers` (If any of the mentioned BepInEx folders don't exist, just create them). +6. Install [Inscryption API](https://inscryption.thunderstore.io/package/API_dev/API/) and extract the contents into a folder. +7. Move the contents of the `plugins` folder into `BepInEx/plugins` and the contents of the `monomod` folder into the `BepInEx/monomod` folder. +8. Run the game again. If everything runs correctly, a message will appear in the console telling you that the API was loaded. +9. For any additional mods create a new subfolder, it can be called anything and extract the zips archive into it and if there is a `BepInEx` folder within the zip instead drop the contents of that folder into the `BepInEx` root for the modding instance. EX; + ``` + BepInEx // These go within the BepInEx root folder + |-- config + |-- patchers + |-- plugins + |-- monomod + |-- core + plugins // Files within go into the created plugin subfolder that was created for the mod + |-- Art + |-- Scripts + |-- MyMod.dll + manifest.json // Ignorable, but if kept, goes in plugin subfolder + README.md // Ignorable, but if kept, goes in plugin subfolder + CHANGELOG.md // Ignorable, but if kept, goes in plugin subfolder + icon.png // Ignorable, but if kept, goes in plugin subfolder + ``` +10. Run the game once more and everything should be correct and working. + +### Installing Manually (XBOX Game-Pass) +1. Install [BepInEx](https://thunderstore.io/package/download/BepInEx/BepInExPack_Inscryption/5.4.2305/) by pressing `Manual Download` and extract the contents into a folder. **Do not extract into the game folder!** +2. Move the contents of the `BepInExPack_Inscryption` folder into the game folder (where the game executable is; usually found here: `C:\XboxGames\Inscryption\Content`). +3. Install the following package: [XboxSilencio](https://thunderstore.io/c/inscryption/p/CORE_API_TEAM/GamepassSilencio/), this is a package which aims to solve frictions with XBOX Gamepass specific installations, such as HueyFS related errors. +4. Run the game. If everything was done correctly, you will see the BepInEx console appear on your desktop. Close the game after it finishes loading. +5. Install [MonoModLoader](https://inscryption.thunderstore.io/package/BepInEx/MonoMod_Loader_Inscryption/) and extract the contents into a folder. +6. Move the contents of the `patchers` folder into `BepInEx/patchers` (If any of the mentioned BepInEx folders don't exist, just create them). +7. Install [Inscryption API](https://inscryption.thunderstore.io/package/API_dev/API/) and extract the contents into a folder. +8. Move the contents of the `plugins` folder into `BepInEx/plugins` and the contents of the `monomod` folder into the `BepInEx/monomod` folder. +9. Run the game again. If everything runs correctly, a message will appear in the console telling you that the API was loaded. +10. For any additional mods create a new subfolder, it can be called anything and extract the zips archive into it and if there is a `BepInEx` folder within the zip instead drop the contents of that folder into the `BepInEx` root for the modding instance. EX; + ``` + BepInEx // These go within the BepInEx root folder + |-- config + |-- patchers + |-- plugins + |-- monomod + |-- core + plugins // Files within go into the created plugin subfolder that was created for the mod + |-- Art + |-- Scripts + |-- MyMod.dll + manifest.json // Ignorable, but if kept, goes in plugin subfolder + README.md // Ignorable, but if kept, goes in plugin subfolder + CHANGELOG.md // Ignorable, but if kept, goes in plugin subfolder + icon.png // Ignorable, but if kept, goes in plugin subfolder + ``` +11. Run the game once more and everything should be correct and working. + +### Installing on the Steam Deck +1. Download [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/) on the Steam Deck's Desktop Mode and open it from its download using its `AppImage` file. +2. Download the mods you plan on using and their dependencies. +3. Go to the setting of the profile you are using for the mods and click `Browse Profile Folder`. +4. Copy the BepInEx folder, then go to Steam and open Inscryption's Properties menu +5. Go to `Installed Files` click `Browse` to open the folder containing Inscryption's local files; paste the BepInEx folder there. +6. Enter Gaming Mode and check 'Force the use of a specific Steam Play compatibility tool' in the Properties menu under `Compatibility`. +7. Go to the launch parameters and enter `WINEDLLOVERRIDES="winhttp.dll=n,b" %command%`. +8. Open Inscryption. If everything was done correctly, you should see a console appear on your screen. + +### Mac & Linux +1. Follow the steps here first: +2. Next do steps 4-10 of the Manual Installation +3. Your game should be setup for inscryption modding now + +If you have any issues with Mac/Linux, Steam Deck, or Manual head over to the discord for this game: + +* **Inscryption Modding Discord:** [Here](https://discord.gg/ZQPvfKEpwM) \ No newline at end of file diff --git a/InscryptionAPI/Thunderstore-Package-Elements/icon.png b/InscryptionAPI/Thunderstore-Package-Elements/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..06e4d5eaccbcaa24cf1d622ae5128303c81eb47a GIT binary patch literal 2011 zcmb7Fc~nzp7Jun0sfCDGEksB#9H%1|26zL4f`wo};sOD6R7w;=4ohT}r6EY*i9lEc za*ocC8I~Yu>2WY1g@h$YBw}JnL5MB22?S&_MivpF?DIlf$1{J-IrIMczI*TQ-uvDA z`|kJh{QZ2k8k!pd0I>Ba+3O?#ppY#J*a9L;RPDLbdMWXw&tZVygVQ3y#}S^so&a#a z*l3kzfXJ5qCr*2RWVqd%?DlR&G5NX^(H*bIYutG4#b6MQA4f#vh+7WGVwiN&@6^U0 zAJCw%?M1Yo#*+gR5e(vI+==?!`WOrVpEw-#@;se#VM?V<7;XM6D?k$yzPuLvtMQYo zRbE(Me@oU6GaOic_apyZXR@kq-W1O1o-~K&HgGN}Mh{Ff{>PTJG_Y+idUb`f16)tM zGVU|ctXeqU$R4V*5U#kVw$p38eS?k8Ojob)11%kg7h01$yi^hQx-;7<3k0)22Q=1e zb@`+em2>x*ekUAB9^-PfZ6erZ^jsU5G$ne{xn+dL*OO7tU~JXrPZ zpig&fp&;Z=!B6$~f}}lFF4O^KXINGjYP<`*W4LF?Hp2E8CbjO3GZ?+t z>#eE27fH)on03Ec`z6`Nw`DDQIZC&mpJ6b2EPC+jop5@d^YTk#jWAxh7_Gt&M6F&& zpH?q)x89fAu#?8Vd#|T%7(VNls$w<#(hjEZ3!}vVdR+%akP;M>^eoQtY|10Jtx4OR zs%{$dZA{pGi*bI=`O@{+(&Tnu>gbg^@!Bu*O~VV)_~$R|URI%LR~q_0)-^a8kFYhk zUPt1Ool_5r&9geJD)$L>kJ(ADOGo?94!eB@uFkKX3l(R)=_vU1l=h}a#kHslR5!1{ z5lTBHAU*xz_83U)#>6bi7z;U+QLOcKTgX6dc_66R&D&#J%@5x9I&T@zZWy5G2My za9X|qTRHXCyt0;*dSFWnsa3bbRGu@L63$7Y4H;{Z&dnz`d!Vg#h<7J8qzFq~Pe*f& zw04vSYNpq7#^Cnx^7|8ZvSJUSE1G<^0td>JY@ZulK$xU;kDLxK(P0O4NgJWpL(Ixf zy1AFK*uq~a*cm2qrE%t_&Gsdljcw+5$+OJb^yL?z`m-Bo<@F>M=IMnsBs4Vq40gmR zcg5!j7@#a$U_749a=T4OI2;&RKZV-?ifqtaN}nl6H3J*XCU2zxO;4|@dN+6@nXH$dF0i)}%=-Vnxbj46@35z_{Kd~BZFkx(H=WJ6RYziD z{7sQ$Nf@N=={(dJQguowrH$oC?@oap*K?}ibddVFvav2Kb+S6;X!zG=o5HZz9!x=3%So-VZ zd{ogs#cuF6bDn+R0|;*b7KWC^&gLMEY{0JtTaG>g-hNYpFrw<)7>E2Y4so2{O!$7D zX|Jse5{vK?#VGkV^GtHa*N46*NZ;c%R%?tmicB1+P|?Fk75zou3QaFCE_qmNZI5$Arn|%{4QuXMgwhw-4~f@mtcy|89^Nd(AUBj^ zpbU(^C8#*h-C%+06%O-6H9NO~acB=ZvKT2#hKxjs5TUDNX6HC0ZV#5i5hLq8TM|4g zjs$ty$s`Xg`gLxjH7WRGn#xu~JPaW_XS0XaYgGY5jKR+Xk@cN^ND{PQI+PQe%dCbDkCpDLgM9-k|^_-xId%MdEgR#tEYZgjR(`$ bmOWl|vBW3d_%$OxRN$z$pBMjdNanu*6E4vp literal 0 HcmV?d00001 From b92d33f06a14022397b0aa9a028aa221c0c4faa8 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 13:05:20 -0500 Subject: [PATCH 25/28] Fix TOML to new Build Location for APIPatcher --- thunderstore.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/thunderstore.toml b/thunderstore.toml index db325240..186e2477 100644 --- a/thunderstore.toml +++ b/thunderstore.toml @@ -31,15 +31,15 @@ source = "InscryptionAPI/bin/Release/InscryptionAPI.xml" target = "plugins/InscryptionAPI.xml" [[build.copy]] -source = "APIPatcher/bin/Release/Assembly-CSharp.APIPatcher.mm.dll" +source = "InscryptionAPI/Thunderstore-Package-Elements/monomod/Assembly-CSharp.APIPatcher.mm.dll" target = "monomod/Assembly-CSharp.APIPatcher.mm.dll" [[build.copy]] -source = "APIPatcher/bin/Release/Assembly-CSharp.APIPatcher.mm.pdb" +source = "InscryptionAPI/Thunderstore-Package-Elements/monomod/Assembly-CSharp.APIPatcher.mm.pdb" target = "monomod/Assembly-CSharp.APIPatcher.mm.pdb" [[build.copy]] -source = "APIPatcher/bin/Release/Assembly-CSharp.APIPatcher.mm.xml" +source = "InscryptionAPI/Thunderstore-Package-Elements/monomod/Assembly-CSharp.APIPatcher.mm.xml" target = "monomod/Assembly-CSharp.APIPatcher.mm.xml" [[build.copy]] From 3cb4a5d08a366f2b9d8b3d17d5cad1aca3745f19 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Fri, 13 Nov 2026 16:11:27 -0500 Subject: [PATCH 26/28] Upgrade Documentation Workflow --- .github/workflows/documentation.yml | 30 ++++++++++++----------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index c4287704..9f88e69b 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -5,40 +5,35 @@ on: branches: - main +permissions: + contents: write + jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v6 with: - dotnet-version: 6.0.x + dotnet-version: '10.0.x' - name: Restore Project run: dotnet restore - - name: Add Mono Repository - run: | - sudo apt install gnupg ca-certificates - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF - echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list - sudo apt update - - - name: Install Mono - run: sudo apt install mono-runtime mono-devel msbuild - - name: Install DocFX run: | - curl -LJ https://github.com/dotnet/docfx/releases/download/v2.59.0/docfx.zip -o docfx.zip + curl -LJ https://github.com/dotnet/docfx/releases/download/v2.81.0/docfx-linux-x64-v2.81.0.zip -o docfx.zip unzip -d docfx/ docfx.zip + chmod +x docfx/docfx - name: Generate documentation - run: mono docfx/docfx.exe docs/docfx.json + run: ./docfx/docfx docs/docfx.json - - uses: actions/checkout@v3 + - name: Checkout gh-pages + uses: actions/checkout@v4 with: ref: gh-pages path: gh-pages @@ -50,11 +45,10 @@ jobs: cp -R ../docs/_site/* . - name: Push update - continue-on-error: true run: | cd gh-pages git config user.name github-actions git config user.email github-actions@github.com git add . - git commit -a -m "Generated from ${{ github.event.head_commit.id }}" + git commit -a -m "Generated from ${{ github.event.head_commit.id }}" || echo "No changes needed" git push From 44be5c0b7061c6a9a4e1a9ef75c309a45585cfe0 Mon Sep 17 00:00:00 2001 From: Chaosyr Date: Sat, 14 Nov 2026 10:03:27 -0500 Subject: [PATCH 27/28] Update Wiki Styling (#345) * Update Styling * Remove Styles folder from `api_wiki` * Fix Style and implement Community Patch and APIPatcher to Docs * remove arbitrary exclusions for CSProj * Replace code block font to match * Update toc.yml * Update main.css * Update main.css * Update main.css * Update main.css * Update main.css * Update main.css * Remove unneeded Partials folder carried over from DarkFX Copy * Typo fix and Prettify class.header.tmpl.partial * Fix up inheritence related look * Update main.css * Update main.css * Update main.css * Update main.css * Update Table Implementation to DL * Undo Table Changes Gonna look back into this with a fresh state of mind tommarrow * Pop off API Patcher from Docs * Move the class header partial under api_wiki and delete inheritence template * Experiment with disabling darkfx * part 2 * fix css * switch to min-height * Update Templates * Some fixing * 2col params, and fields table * CSS Cleaning and quick fix * Inline code background * Underscore the page heading * Underscore H3 Headers * Fix borders * Update main.css * Conditionalize H3 Headers * Overhaul Index.md * Conditionalize H1 * Make Wiki be named Wiki --- docs/api/index.md | 6 +- docs/community/.gitignore | 5 + docs/community/index.md | 4 + docs/docfx.json | 33 +- docs/filter.yml | 6 - docs/index.md | 278 ++++++++++- .../partials/class.header.tmpl.partial | 232 +++++++++ .../api_wiki/partials/class.tmpl.partial | 246 +++++++++ .../api_wiki/public/fonts/dpcomic.ttf | Bin 0 -> 13432 bytes docs/template/api_wiki/public/main.css | 137 +++++ docs/template/api_wiki/public/main.js | 17 + .../darkfx/partials/affix.tmpl.partial | 40 -- .../darkfx/partials/footer.tmpl.partial | 29 -- .../darkfx/partials/head.tmpl.partial | 20 - docs/template/darkfx/styles/main.css | 470 ------------------ docs/template/darkfx/styles/toggle-theme.js | 35 -- .../partials/class.header.tmpl.partial | 104 ---- docs/toc.yml | 9 +- 18 files changed, 946 insertions(+), 725 deletions(-) create mode 100644 docs/community/.gitignore create mode 100644 docs/community/index.md create mode 100644 docs/template/api_wiki/partials/class.header.tmpl.partial create mode 100644 docs/template/api_wiki/partials/class.tmpl.partial create mode 100644 docs/template/api_wiki/public/fonts/dpcomic.ttf create mode 100644 docs/template/api_wiki/public/main.css create mode 100644 docs/template/api_wiki/public/main.js delete mode 100644 docs/template/darkfx/partials/affix.tmpl.partial delete mode 100644 docs/template/darkfx/partials/footer.tmpl.partial delete mode 100644 docs/template/darkfx/partials/head.tmpl.partial delete mode 100644 docs/template/darkfx/styles/main.css delete mode 100644 docs/template/darkfx/styles/toggle-theme.js delete mode 100644 docs/template/no_inherited_members/partials/class.header.tmpl.partial diff --git a/docs/api/index.md b/docs/api/index.md index de6708af..0d4a8c88 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -1,4 +1,4 @@ -# API Documentation -Hello, and welcome to the documentation section of the Inscryption API! +# Inscryption API Documentation +Hello, and welcome to the documentation section for the Inscryption API! -This section documents the various classes and members of the API, providing information on what they do. \ No newline at end of file +This section documents the various classes and members of the Inscryption API, providing information on what they do. \ No newline at end of file diff --git a/docs/community/.gitignore b/docs/community/.gitignore new file mode 100644 index 00000000..e8079a3b --- /dev/null +++ b/docs/community/.gitignore @@ -0,0 +1,5 @@ +############### +# temp file # +############### +*.yml +.manifest diff --git a/docs/community/index.md b/docs/community/index.md new file mode 100644 index 00000000..f79961e0 --- /dev/null +++ b/docs/community/index.md @@ -0,0 +1,4 @@ +# Inscryption Community Patch Documentation +Hello, and welcome to the documentation section for the Inscryption Community Patch! + +This section documents the various classes and members of the Inscryption Community Patch, providing information on what they do. \ No newline at end of file diff --git a/docs/docfx.json b/docs/docfx.json index 9e8a1497..0875132e 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -3,13 +3,22 @@ { "src": [ { - "files": ["**/*.csproj"], - "exclude": ["**/bin/**", "**/obj/**"], + "files": ["InscryptionAPI/InscryptionAPI.csproj"], "src": "../" } ], "dest": "api", "filter": "filter.yml" + }, + { + "src": [ + { + "files": ["InscryptionCommunityPatch/InscryptionCommunityPatch.csproj"], + "src": "../" + } + ], + "dest": "community", + "filter": "filter.yml" } ], "build": { @@ -18,17 +27,30 @@ "files": ["README.md"] }, { - "files": ["LICENSE"], + "files": ["LICENSE.md"], "src": "../" }, { "files": ["images/**", "logo.svg", "favicon.ico"] + }, + { + "files": ["**"], + "src": "../InscryptionAPI/Assets", + "dest": "resources/api/assets" + }, + { + "files": ["**"], + "src": "../InscryptionCommunityPatch/Assets", + "dest": "resources/community/assets" } ], "content": [ { "files": ["api/**.yml", "api/index.md"] }, + { + "files": ["community/**.yml", "community/index.md"] + }, { "files": ["wiki/toc.yml", "wiki/**.md"] }, @@ -43,7 +65,7 @@ ], "globalMetadata": { "_appTitle": "InscryptionAPI", - "_appName": "Inscryption Modding API", + "_appName": "Inscryption Modding Wiki", "_appLogoPath": "images/logo.svg", "_appFaviconPath": "images/favicon.ico", "_disableBreadcrumb": true, @@ -65,8 +87,7 @@ "template": [ "default", "modern", - "template/darkfx", - "template/no_inherited_members" + "template/api_wiki" ] } } diff --git a/docs/filter.yml b/docs/filter.yml index ec615f88..288010f9 100644 --- a/docs/filter.yml +++ b/docs/filter.yml @@ -4,12 +4,6 @@ apiRules: uid: System.ComponentModel.EditorBrowsableAttribute ctorArguments: - System.ComponentModel.EditorBrowsableState.Never - - exclude: - uidRegex: ^APIPatcher - - exclude: - uidRegex: ^APIPlugin - - exclude: - uidRegex: ^InscryptionCommunityPatch attributeRules: - exclude: uidRegex: ^System\.ComponentModel\.Design$ diff --git a/docs/index.md b/docs/index.md index 4795094f..bab34934 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,19 +1,275 @@ +# Inscryption API Wiki +--- +Hey there, and welcome to the Inscryption Modding and API Wiki. This is your one stop hub for all things related to the API. The following are some quick links: + +* [Inscryption API Documentation](api/index.md) +* [Inscryption Community Patch Documentation](community/index.md) +* [Inscryption Modding Wiki](wiki/index.md) + +Some other links you may find extremely valuable are as follows: +* [Inscryption Modding Discord](https://discord.gg/QrJEF5Denm) +* [Thunderstore Package](https://thunderstore.io/c/inscryption/p/API_dev/API/) +* [GitHub Repository](https://github.com/InscryptionModding/InscryptionAPI) + +How can you contribute to the wiki? Well for starters you can find the Wiki end of our setup [here](https://github.com/InscryptionModding/InscryptionAPI/tree/main/docs), the only relevant part of this setup you may need to interact with is `wiki` or any `index.md` files. The rest of it leave untouched unless you ***know*** what you are doing. Once you have a markdown file open its straight forward editing as long as you know how Markdown works. + +___ + ## Inscryption API + +This plugin is a BepInEx plugin made for Inscryption as an API. This is the de-facto standard API for Inscryption modders. + +It can currently create and modify: +- Cards +- Abilities +- Appearance behaviours +- Stat Icons +- Challenges +- Starter Decks +- Regions +- Encounters +- Totem Tops +- Consumable Items +- Gramophone Tracks +- Slot Modifications +- Talking Cards +- Custom Costs +- Custom Rulebook Pages +- Rulebook Redirects/Hyperlinks +- And much more! + +Additionally, a number of quality-of-life patches from the community are included with each release. + +___ + +## Getting Started: Installation +--- +To begin, we'll go over how to install BepInEx, the framework all Inscryption mods use. This is a necessary step to playing modded Inscryption, so be sure to follow this carefully. + +**FOR LINUX AND STEAMDECK:** Ensure that the game is set to run using `Proton` in he game settings on steam. Should be a setting like this: `Change launch behaviour` -> `Proton`. + +### Installing with a Mod Manager +1. Download and install [Thunderstore Mod Manager](https://www.overwolf.com/app/Thunderstore-Thunderstore_Mod_Manager), [Gale](https://thunderstore.io/c/inscryption/p/Kesomannen/GaleModManager/), [Pulsar](https://pulsarmods.com/) or [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/). +2. Click the **Install with Mod Manager** button on the top of [BepInEx's](https://thunderstore.io/c/inscryption/p/BepInEx/BepInExPack_Inscryption/) page. +3. Run the game via the mod manager. + +If you have issues with Mod Managers head to one of these discords; + +* **Thunderstore Support Discord:** [Here](https://discord.gg/Fbz54kQAxg) +* **R2ModMan Support Discord:** [Here](https://discord.gg/R85wjqa4WN) +* **Gale Mod Manager Support Discord:** [Here](https://discord.gg/sfuWXRfeTt) + +### Installing Manually +1. Install [BepInEx](https://thunderstore.io/package/download/BepInEx/BepInExPack_Inscryption/5.4.2305/) by pressing `Manual Download` and extract the contents into a folder. **Do not extract into the game folder!** +2. Move the contents of the `BepInExPack_Inscryption` folder into the game folder (where the game executable is; usually found here: `C:\Program Files (x86)\Steam\steamapps\common\Inscryption`). +3. Run the game. If everything was done correctly, you will see the BepInEx console appear on your desktop. Close the game after it finishes loading. +4. Install [MonoModLoader](https://inscryption.thunderstore.io/package/BepInEx/MonoMod_Loader_Inscryption/) and extract the contents into a folder. +5. Move the contents of the `patchers` folder into `BepInEx/patchers` (If any of the mentioned BepInEx folders don't exist, just create them). +6. Install [Inscryption API](https://inscryption.thunderstore.io/package/API_dev/API/) and extract the contents into a folder. +7. Move the contents of the `plugins` folder into `BepInEx/plugins` and the contents of the `monomod` folder into the `BepInEx/monomod` folder. +8. Run the game again. If everything runs correctly, a message will appear in the console telling you that the API was loaded. +9. For any additional mods create a new subfolder, it can be called anything and extract the zips archive into it and if there is a `BepInEx` folder within the zip instead drop the contents of that folder into the `BepInEx` root for the modding instance. EX; + ``` + BepInEx // These go within the BepInEx root folder + |-- config + |-- patchers + |-- plugins + |-- monomod + |-- core + plugins // Files within go into the created plugin subfolder that was created for the mod + |-- Art + |-- Scripts + |-- MyMod.dll + manifest.json // Ignorable, but if kept, goes in plugin subfolder + README.md // Ignorable, but if kept, goes in plugin subfolder + CHANGELOG.md // Ignorable, but if kept, goes in plugin subfolder + icon.png // Ignorable, but if kept, goes in plugin subfolder + ``` +10. Run the game once more and everything should be correct and working. + +### Installing Manually (XBOX Game-Pass) +1. Install [BepInEx](https://thunderstore.io/package/download/BepInEx/BepInExPack_Inscryption/5.4.2305/) by pressing `Manual Download` and extract the contents into a folder. **Do not extract into the game folder!** +2. Move the contents of the `BepInExPack_Inscryption` folder into the game folder (where the game executable is; usually found here: `C:\XboxGames\Inscryption\Content`). +3. Install the following package: [XboxSilencio](https://thunderstore.io/c/inscryption/p/CORE_API_TEAM/GamepassSilencio/), this is a package which aims to solve frictions with XBOX Gamepass specific installations, such as HueyFS related errors. +4. Run the game. If everything was done correctly, you will see the BepInEx console appear on your desktop. Close the game after it finishes loading. +5. Install [MonoModLoader](https://inscryption.thunderstore.io/package/BepInEx/MonoMod_Loader_Inscryption/) and extract the contents into a folder. +6. Move the contents of the `patchers` folder into `BepInEx/patchers` (If any of the mentioned BepInEx folders don't exist, just create them). +7. Install [Inscryption API](https://inscryption.thunderstore.io/package/API_dev/API/) and extract the contents into a folder. +8. Move the contents of the `plugins` folder into `BepInEx/plugins` and the contents of the `monomod` folder into the `BepInEx/monomod` folder. +9. Run the game again. If everything runs correctly, a message will appear in the console telling you that the API was loaded. +10. For any additional mods create a new subfolder, it can be called anything and extract the zips archive into it and if there is a `BepInEx` folder within the zip instead drop the contents of that folder into the `BepInEx` root for the modding instance. EX; + ``` + BepInEx // These go within the BepInEx root folder + |-- config + |-- patchers + |-- plugins + |-- monomod + |-- core + plugins // Files within go into the created plugin subfolder that was created for the mod + |-- Art + |-- Scripts + |-- MyMod.dll + manifest.json // Ignorable, but if kept, goes in plugin subfolder + README.md // Ignorable, but if kept, goes in plugin subfolder + CHANGELOG.md // Ignorable, but if kept, goes in plugin subfolder + icon.png // Ignorable, but if kept, goes in plugin subfolder + ``` +11. Run the game once more and everything should be correct and working. + +### Installing on the Steam Deck +1. Download [r2modman](https://thunderstore.io/c/inscryption/p/ebkr/r2modman/) on the Steam Deck's Desktop Mode and open it from its download using its `AppImage` file. +2. Download the mods you plan on using and their dependencies. +3. Go to the setting of the profile you are using for the mods and click `Browse Profile Folder`. +4. Copy the BepInEx folder, then go to Steam and open Inscryption's Properties menu +5. Go to `Installed Files` click `Browse` to open the folder containing Inscryption's local files; paste the BepInEx folder there. +6. Enter Gaming Mode and check 'Force the use of a specific Steam Play compatibility tool' in the Properties menu under `Compatibility`. +7. Go to the launch parameters and enter `WINEDLLOVERRIDES="winhttp.dll=n,b" %command%`. +8. Open Inscryption. If everything was done correctly, you should see a console appear on your screen. + +### Mac & Linux +1. Follow the steps here first: +2. Next do steps 4-10 of the Manual Installation +3. Your game should be setup for inscryption modding now + +If you have any issues with Mac/Linux, Steam Deck, or Manual head over to the discord for this game: + +* **Inscryption Modding Discord:** [Here](https://discord.gg/ZQPvfKEpwM) + +## Getting Started: Modding --- -Welcome to the site of the Inscryption Modding API! -You can find the wiki and API documentation here. +Modding Inscryption requires a knowledge of coding in C#, and in many cases an understanding of how to patch the game using HarmonyPatch. + +If you're unfamiliar with any of this, or just want to create cards and sigils, you can use [JSONLoader](https://inscryption.thunderstore.io/package/MADH95Mods/JSONCardLoader/). + +### Modding with JSONLoader +JSONLoader is a versatile mod that provides a more beginner-friendly way of creating new cards and abilities for Inscryption using JSON syntax, which is much simpler than C#. + +JSONLoader's documentation can be found [here](https://github.com/MADH95/JSONLoader). + +A video tutorial covering how to use JSONLoader in a basic form can be found [here](https://www.youtube.com/watch?v=grTSkpI4U7g). + +### Modding with C# +To begin modding with C#, you will need to create a new C# project using a code editor. +We recommend and assume you're using Microsoft's Visual Studio. + +Your project's target framework needs to be `netstandard2.0`. + +Once your project's created, go to `Project > Manage NuGet Packages`. +Click the dropdown menu for 'Package source' and check that 'BepInEx' and 'nuget' is there. + +If BepInEx or nuget aren't an available source, we need to add them. +To add a new package source, click on the gear icon next to the package source selector, then click the large green plus-sign. + +To add BepInEx, change the name to 'BepInEx' and the source link to 'https://nuget.bepinex.dev/v3/index.json'. +To add nuget, change the name to 'nuget' and the source link to 'https://nuget.windows10ce.com/nuget/v3/index.json'. -## Some Links +Change the package source to 'All' then click 'Browse'. +We want to install the following packages (**Make sure the version numbers match!**): +- BepInEx.Analyzers v1.0.8 +- BepInEx.Core v5.4.19 +- HarmonyX v2.9.0 +- Inscryption.GameLibs v1.9.0-r.0 +- UnityEngine.Modules v2019.4.24 + +You will also need to add the API as a reference. +There are a couple ways to do this, detailed below; whichever way you choose to do this, you'll also need to need to reference `InscryptionAPI.dll`, which should be in your BepInEx plugins folder; copy this path for future use. + +To do so, go to your 'BepInEx/plugins' folder and copy the folder path. +Then, navigate to `Project > Add Project Reference` and click 'Browse'. +Copy the folder path and add 'InscryptionAPI.dll' as a reference. +You can do this for other mods' .dll files if you want to reference them as a mod dependency (a separate mod that your mod relies on to work). + +An alternative method to adding the API (and other mods) as a reference is to use NuGet packages by adding 'https://nuget.bepinex.dev/v3/index.json' as a package source, and then adding 'API_dev-API' as a reference. + +With all this, you are now ready to begin creating your mod! +Some resources are provided below for you to use, including an example mod to look at for examples. +Otherwise, continue reading this wiki. + +### Modding Resources [Inscryption Modding Discord](https://discord.gg/QrJEF5Denm) -[Thunderstore Page](https://inscryption.thunderstore.io/package/API_dev/API/) +[BepInEx documentation](https://docs.bepinex.dev/) + +[Harmony patching article](https://harmony.pardeike.net/articles/patching.html) + +[Example Mod using C#](https://github.com/debugman18/InscryptionExampleMod) + +[Vanilla and Modded Enumerations](https://github.com/SaxbyMod/SabyModEnums) + +An example mod utilising this plugin can be found [here](https://github.com/debugman18/InscryptionExampleMod), +and the modding wiki and documentation can be found [here](https://inscryptionmodding.github.io/InscryptionAPI/wiki/index.html). + +___ + +## Modded Save File +With this API installed, an additional 'modded save file' will be created by the game. This file will be found in the 'BepInEx' subdirectory, and contains all save data created by mods that use this API. This file will not automatically be synced to the cloud by Steam. + +___ + +## Community Patches +The following patches from the Inscryption modding community have been included in this package to improve the overall quality-of-life for modding and compatibility. + +### SigilArtPatch by MADH95Mods +Fixes the art for abilities that previously only appeared in Act 2 so they appear correctly in Act 1 and Act 3 + +### Conduit Attack Fix by MADH95Mods +Fixes the behavior of conduits so they function correctly in Act 1. + +### Activated Sigil Fix by MADH95Mods +Allows activated sigils to work correctly in Act 1 and Act 3 by clicking the sigil icon on the card. + +### AnthonysLatchFix by AnthonyPython +Fixes latch sigils to work in Act 1 + +### Sigil Art Fix by Memez4Life +Allows up to 8 sigils to be displayed on cards and adds the option to display merged sigil stamps at the bottom of the card instead of over the artwork (see the config files for more information). + +### Visually Stackable Sigils by divisionbyz0rro +Combines multiple instances of the same sigil on a single card into a single sigil with a number to free up space on the card. + +### Cost Render Fix by Void Slime +Displays hybrid cost cards correctly and makes energy and mox show up on act 1 cards + +### Cost Choice Node fix by Void Slime +If energy/mox cards are in the Act 1 pool, energy and mox card choice nodes will be added to the cost choice node in Act 1. + +### Sniper Sigil Fix by SpecialAPI +Displays targets for attacks made with the sniper sigil in Act 1. + +### Act 1 Sentry Fixes by WhistleWind +Fixes a number of bugs caused by the Sentry ability being used in Act 1. + +### Multi-Act Sigil Compatibility Fixes by WhistleWind +Fixes a number of sigils to be usable in all Acts. Sigils include: Mental Gemnastics, Tidal Lock, Hoarder, Vessel Printer, Amorphous, Handy. + +### Fledgling Sigil Fixes by WhistleWind +Fixes Fledgling in Act 2 to show the correct number of turns until a card evolves, up to 3. Also changes its description to show the correct number of turns. + +### OverridePixelAbilityIcons by WhistleWind +Fixes the OverrideAbilityIcon method to work in Act 2. + +### Temporary Mod Fixes by WhistleWind +- Fixes issues related to using temporary mods in Act 2 or to add custom decals + +___ + +## Contribution + +### How can you help? +Use the plugin and report bugs you find! Ping us on the [Inscryption Modding Discord](https://discord.gg/QrJEF5Denm) server in the api channel with what you find. + +### But really, I want to help develop this mod! +Great! We're more than happy to accept help. Either make a pull request to the API's [GitHub page](https://github.com/InscryptionModding/InscryptionAPI) or come join us over in the [Inscryption Modding Discord](https://discord.gg/QrJEF5Denm). + +### Can I donate? +Donations are totally not needed, this is a passion project before anything else. -[GitHub Repository](https://github.com/InscryptionModding/InscryptionAPI) +___ -## Credits -Original version by cyantist. +## Contributors +Original version by cyantist -API 2.0 Contributors: +Contributors and builders of API 2.0: - BobbyShmurner - divisionbyz0rro - Eri @@ -25,4 +281,8 @@ API 2.0 Contributors: - SpecialAPI - Void Slime - WhistleWind -- Windows10CE \ No newline at end of file +- Windows10CE +- Keks307 +- Creator/Chaosyr/SaxbyMod/The Stoat Lord/ThinCreator3483 +- stillrinny +- R3b00t3d-kawaii \ No newline at end of file diff --git a/docs/template/api_wiki/partials/class.header.tmpl.partial b/docs/template/api_wiki/partials/class.header.tmpl.partial new file mode 100644 index 00000000..be8f4aed --- /dev/null +++ b/docs/template/api_wiki/partials/class.header.tmpl.partial @@ -0,0 +1,232 @@ +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + +

+ {{>partials/title}} + {{#sourceurl}}{{/sourceurl}} +

+ +
+
{{__global.namespace}}
{{{namespace.specName.0.value}}}
+ {{#assemblies.0}}
{{__global.assembly}}
{{assemblies.0}}.dll
{{/assemblies.0}} +
+ +
{{{summary}}}
+
{{{conceptual}}}
+ +{{#inClass}} +
+
{{__global.inheritance}}
+ +
+ {{#inheritance}} +
+ {{{specName.0.value}}} +
+ {{/inheritance}} + +
+ {{name.0.value}} +
+ + {{#derivedClasses}} +
+ {{{specName.0.value}}} +
+ {{/derivedClasses}} +
+
+{{/inClass}} + +{{#implements.0}} +
+
{{__global.implements}}
+{{/implements.0}} + +{{#implements}} +
+ {{{specName.0.value}}} +
+{{/implements}} + +{{#implements.0}} +
+{{/implements.0}} + +{{#syntax.content.0.value}} +
+ {{__global.syntax}} +
+ +
+
{{syntax.content.0.value}}
+
+{{/syntax.content.0.value}} + +{{#syntax.parameters.0}} +
+ {{__global.parameters}} +
+ + + + + + + + + + +{{/syntax.parameters.0}} + +{{#syntax.parameters}} + + + + +{{/syntax.parameters}} + +{{#syntax.parameters.0}} + +
{{__global.name}}{{__global.description}}
+
+ {{{type.specName.0.value}}} +
+
+ {{{id}}} +
+
{{{description}}}
+{{/syntax.parameters.0}} + +{{#syntax.return}} +
+ {{__global.returns}} +
+ + + + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/syntax.return}} + +{{#syntax.typeParameters.0}} +
+ {{__global.typeParameters}} +
+ + + + + + + + + + +{{/syntax.typeParameters.0}} + +{{#syntax.typeParameters}} + + + + +{{/syntax.typeParameters}} + +{{#syntax.typeParameters.0}} + +
{{__global.name}}{{__global.description}}
+ {{{id}}} + {{{description}}}
+{{/syntax.typeParameters.0}} + +{{#inheritedMembers.0}} +
+
{{__global.inheritedMembers}}
+
+{{/inheritedMembers.0}} +{{#inheritedMembers}} +
+ {{#definition}} + + {{/definition}} + {{^definition}} + + {{/definition}} +
+{{/inheritedMembers}} +{{#inheritedMembers.0}} +
+
+{{/inheritedMembers.0}} + +{{#extensionMethods.0}} +
+
{{__global.extensionMethods}}
+
+{{/extensionMethods.0}} +{{#extensionMethods}} +
+ {{#definition}} + + {{/definition}} + {{^definition}} + + {{/definition}} +
+{{/extensionMethods}} +{{#extensionMethods.0}} +
+
+{{/extensionMethods.0}} + +{{#isEnum}} +{{#children}} +

{{>partials/classSubtitle}}

+ + + + + + + + + + + {{#children}} + + + + + {{/children}} + +
{{__global.name}}{{__global.description}}
+ {{syntax.content.0.value}} + + {{{summary}}} + {{#remarks}}{{{remarks}}}{{/remarks}} +
+ +{{/children}} +{{/isEnum}} + +{{#example.0}} +

{{__global.examples}}

+{{/example.0}} +{{#example}} +{{{.}}} +{{/example}} + +{{#remarks}} +

{{__global.remarks}}

+
{{{remarks}}}
+{{/remarks}} \ No newline at end of file diff --git a/docs/template/api_wiki/partials/class.tmpl.partial b/docs/template/api_wiki/partials/class.tmpl.partial new file mode 100644 index 00000000..723686d8 --- /dev/null +++ b/docs/template/api_wiki/partials/class.tmpl.partial @@ -0,0 +1,246 @@ +{{!Licensed to the .NET Foundation under one or more agreements by the .NET Foundation. The .NET Foundation licenses this file to you under the MIT license.}} + +{{>partials/class.header}} + +{{#children}} + +{{^_splitReference}} +

{{>partials/classSubtitle}}

+{{/_splitReference}} + +{{#children}} + +{{#overload}} + +{{/overload}} + +

+ {{name.0.value}} + {{#sourceurl}}{{/sourceurl}} +

+ +
{{{summary}}}
+
{{{conceptual}}}
+ +{{#syntax}} +
+
{{syntax.content.0.value}}
+
+ +{{#syntax.parameters.0}} +

{{__global.parameters}}

+ + + + + + + + + + +{{/syntax.parameters.0}} + +{{#syntax.parameters}} + + + + +{{/syntax.parameters}} + +{{#syntax.parameters.0}} + +
{{__global.name}}{{__global.description}}
+
+ {{{type.specName.0.value}}} +
+
+ {{{id}}} +
+
{{{description}}}
+{{/syntax.parameters.0}} + +{{#syntax.return}} +

{{__global.returns}}

+ + + + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/syntax.return}} + +{{#syntax.typeParameters.0}} +

{{__global.typeParameters}}

+ + + + + + + + + + +{{/syntax.typeParameters.0}} + +{{#syntax.typeParameters}} + + + + +{{/syntax.typeParameters}} + +{{#syntax.typeParameters.0}} + +
{{__global.name}}{{__global.description}}
+ {{{id}}} + {{{description}}}
+{{/syntax.typeParameters.0}} + +{{#fieldValue}} +

{{__global.fieldValue}}

+ + + + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/fieldValue}} + +{{#propertyValue}} +

{{__global.returns}}

+ + + + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/propertyValue}} + +{{#eventType}} +

{{__global.eventType}}

+ + + + + + + + + + + + + + + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/eventType}} + +{{/syntax}} + +{{#example.0}} +

{{__global.examples}}

+{{/example.0}} +{{#example}} +{{{.}}} +{{/example}} + +{{#remarks}} +

{{__global.remarks}}

+
{{{remarks}}}
+{{/remarks}} + +{{#exceptions.0}} +

{{__global.exceptions}}

+ + + + + + + + + + +{{/exceptions.0}} + +{{#exceptions}} + + + + +{{/exceptions}} + +{{#exceptions.0}} + +
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
+{{/exceptions.0}} + +{{#seealso.0}} +
+
{{__global.seealso}}
+
+{{/seealso.0}} +{{#seealso}} + {{#isCref}} +
{{{type.specName.0.value}}}
+ {{/isCref}} + {{^isCref}} +
{{{url}}}
+ {{/isCref}} +{{/seealso}} +{{#seealso.0}} +
+
+{{/seealso.0}} + +{{/children}} +{{/children}} + +{{#seealso.0}} +

{{__global.seealso}}

+
+{{/seealso.0}} +{{#seealso}} + {{#isCref}} +
{{{type.specName.0.value}}}
+ {{/isCref}} + {{^isCref}} +
{{{url}}}
+ {{/isCref}} +{{/seealso}} +{{#seealso.0}} +
+{{/seealso.0}} \ No newline at end of file diff --git a/docs/template/api_wiki/public/fonts/dpcomic.ttf b/docs/template/api_wiki/public/fonts/dpcomic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3707903dda7bc602c516d5efb3e47a212fb0f3e0 GIT binary patch literal 13432 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 W{o;7nhdln>+W&oqNBn=B%l{8!Gy|^y literal 0 HcmV?d00001 diff --git a/docs/template/api_wiki/public/main.css b/docs/template/api_wiki/public/main.css new file mode 100644 index 00000000..b31e1abb --- /dev/null +++ b/docs/template/api_wiki/public/main.css @@ -0,0 +1,137 @@ +@font-face { + font-family: 'DPComic'; + src: url('fonts/dpcomic.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +:root { + --bs-font-sans-serif: 'DPComic', system-ui, -apple-system, sans-serif; + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-font-monospace: 'DPComic', system-ui, -apple-system, sans-serif; + --page-gutter: clamp(1rem, 4vw, 5rem); +} + +* { + border-width: 4px !important; +} + +b, strong { + font-weight: normal; +} + +code { + font-size: 18px !important; +} + +:not(pre) > code { + background-color: var(--bs-tertiary-bg, #e9ecef); + padding: 0.15em 0.35em; + border-radius: 4px; +} + +.container, .container-fluid, .container-xxl { + width: 100%; + max-width: 100%; + padding-right: var(--page-gutter); + padding-left: var(--page-gutter); + margin-right: auto; + margin-left: auto; +} + +.container { + max-width: 100%; +} + +body > header, body[data-layout="landing"] > header { + min-height: 90px; +} + +body > footer, body[data-layout="landing"] > footer { + min-height: 90px; + display: flex; + align-items: stretch; +} + +.navbar { + --bs-navbar-brand-margin-end: 2.5rem; + --bs-navbar-brand-font-size: 1.5rem; +} + +#logo { + padding-right: 1.5rem; +} + +.content { + font-size: 20px !important; +} + +.toc ul { + font-size: 20px !important; +} + +.affix { + font-size: 20px; +} + +body[data-yaml-mime="ManagedReference"] article h2.section, +body[data-yaml-mime="ApiPage"] article h2.section { + margin-top: 1rem; +} + +.inheritance { + margin-bottom: 1rem; +} + +.inheritance h5 { + margin-bottom: 0.35rem; +} + +.inheritance-tree { + border-top: 1px solid currentColor; + padding-top: 0.35rem; +} + +.inheritance-level { + line-height: 1.4; + padding-left: calc(var(--inheritance-level, 0) * 1.25rem); +} + +.inheritance-level::before { + content: "↳ "; + opacity: 0.75; +} + +.api-parameters, .api-returns, .api-type-parameters, .api-exceptions, .api-fields { + width: 100%; + border-collapse: collapse; + margin-bottom: 1rem; +} + +.api-parameters th, .api-returns th, .api-type-parameters th, .api-exceptions th, .api-fields th, +.api-parameters td, .api-returns td, .api-type-parameters td, .api-exceptions td, .api-fields td { + padding: 0.5rem 0.75rem; + border: 1px solid var(--bs-border-color, #444); + text-align: left; +} + +html.api-documentation h1, +html.api-documentation .h1, +html.community-documentation h1, +html.community-documentation .h1 { + border-bottom: 1px solid currentColor; + padding-bottom: 0.35rem; +} + +html.api-documentation h3, +html.api-documentation .h3, +html.community-documentation h3, +html.community-documentation .h3 { + border-bottom: 1px solid currentColor; + padding-bottom: 0.35rem; +} + +a.active { + font-style: italic; + text-decoration: underline; +} \ No newline at end of file diff --git a/docs/template/api_wiki/public/main.js b/docs/template/api_wiki/public/main.js new file mode 100644 index 00000000..688fe3ef --- /dev/null +++ b/docs/template/api_wiki/public/main.js @@ -0,0 +1,17 @@ +export default { + defaultTheme: 'dark' +} + +const docUrl = document.querySelector('meta[name="docfx:docurl"]')?.content || ''; + +if (docUrl.includes('/docs/api/')) { + document.documentElement.classList.add('api-documentation'); +} + +if (docUrl.includes('/docs/community/')) { + document.documentElement.classList.add('community-documentation'); +} + +if (docUrl.includes('/docs/wiki/')) { + document.documentElement.classList.add('wiki-documentation'); +} \ No newline at end of file diff --git a/docs/template/darkfx/partials/affix.tmpl.partial b/docs/template/darkfx/partials/affix.tmpl.partial deleted file mode 100644 index 11caeb3d..00000000 --- a/docs/template/darkfx/partials/affix.tmpl.partial +++ /dev/null @@ -1,40 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - - diff --git a/docs/template/darkfx/partials/footer.tmpl.partial b/docs/template/darkfx/partials/footer.tmpl.partial deleted file mode 100644 index a9da7c3b..00000000 --- a/docs/template/darkfx/partials/footer.tmpl.partial +++ /dev/null @@ -1,29 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - -
-
- - -
\ No newline at end of file diff --git a/docs/template/darkfx/partials/head.tmpl.partial b/docs/template/darkfx/partials/head.tmpl.partial deleted file mode 100644 index 83fc5f91..00000000 --- a/docs/template/darkfx/partials/head.tmpl.partial +++ /dev/null @@ -1,20 +0,0 @@ -{{!Copyright (c) Oscar Vasquez. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - - - - - {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} - - - - {{#_description}}{{/_description}} - - - - - - - {{#_noindex}}{{/_noindex}} - {{#_enableSearch}}{{/_enableSearch}} - {{#_enableNewTab}}{{/_enableNewTab}} - \ No newline at end of file diff --git a/docs/template/darkfx/styles/main.css b/docs/template/darkfx/styles/main.css deleted file mode 100644 index 078adc77..00000000 --- a/docs/template/darkfx/styles/main.css +++ /dev/null @@ -1,470 +0,0 @@ -:root, body.dark-theme { - --color-foreground: #ccd5dc; - --color-navbar: #66666d; - --color-breadcrumb: #999; - --color-underline: #ddd; - --color-toc-hover: #fff; - --color-background: #2d2d30; - --color-background-subnav: #333337; - --color-background-dark: #1e1e1e; - --color-background-table-alt: #212123; - --color-background-quote: #69696e; -} - -body.light-theme { - --color-foreground: #171717; - --color-breadcrumb: #4a4a4a; - --color-toc-hover: #4c4c4c; - --color-background: #ffffff; - --color-background-subnav: #f5f5f5; - --color-background-dark: #ddd; - --color-background-table-alt: #f9f9f9; -} - -body { - color: var(--color-foreground); - line-height: 1.5; - font-size: 14px; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - word-wrap: break-word; - background-color: var(--color-background); -} - -.btn.focus, .btn:focus, .btn:hover { - color: var(--color-foreground); -} - -h1 { - font-weight: 600; - font-size: 32px; -} - -h2 { - font-weight: 600; - font-size: 24px; - line-height: 1.8; -} - -h3 { - font-weight: 600; - font-size: 20px; - line-height: 1.8; -} - -h5 { - font-size: 14px; - padding: 10px 0px; -} - -article h1, article h2, article h3, article h4 { - margin-top: 35px; - margin-bottom: 15px; -} - -article h4 { - padding-bottom: 8px; - border-bottom: 2px solid var(--color-underline); -} - -.navbar-brand>img { - color: var(--color-background); -} - -.navbar { - border: none; -} - -.subnav { - border-top: 1px solid var(--color-underline); - background-color: var(--color-background-subnav); -} - -.sidenav, .fixed_header, .toc { - background-color: var(--color-background); -} - -.navbar-inverse { - background-color: var(--color-background-dark); - z-index: 100; -} - -.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-text { - color: var(--color-navbar); - background-color: var(--color-background-dark); - border-bottom: 3px solid transparent; - padding-bottom: 12px; -} - -.navbar-inverse .navbar-nav>li>a:focus, .navbar-inverse .navbar-nav>li>a:hover { - color: var(--color-foreground); - background-color: var(--color-background-dark); - border-bottom: 3px solid var(--color-background-subnav); - transition: all ease 0.25s; -} - -.navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:focus, .navbar-inverse .navbar-nav>.active>a:hover { - color: var(--color-foreground); - background-color: var(--color-background-dark); - border-bottom: 3px solid var(--color-foreground); - transition: all ease 0.25s; -} - -.navbar-form .form-control { - border: none; - border-radius: 0; -} - -.light-theme .navbar-brand svg { - filter: brightness(20%); -} - -.toc .level1>li { - font-weight: 400; -} - -.toc .nav>li>a { - color: var(--color-foreground); -} - -.sidefilter { - background-color: var(--color-background); - border-left: none; - border-right: none; -} - -.sidefilter { - background-color: var(--color-background); - border-left: none; - border-right: none; -} - -.toc-filter { - padding: 10px; - margin: 0; - background-color: var(--color-background); -} - -.toc-filter>input { - border: none; - border-radius: unset; - background-color: var(--color-background-subnav); - padding: 5px 0 5px 20px; - font-size: 90% -} - -.toc-filter>.clear-icon { - position: absolute; - top: 17px; - right: 15px; -} - -.toc-filter>input:focus { - color: var(--color-foreground); - transition: all ease 0.25s; -} - -.toc-filter>.filter-icon { - display: none; -} - -.sidetoc>.toc { - background-color: var(--color-background); - overflow-x: hidden; -} - -.sidetoc { - background-color: var(--color-background); - border: none; -} - -.alert { - background-color: inherit; - border: none; - padding: 10px 0; - border-radius: 0; -} - -.alert>p { - margin-bottom: 0; - padding: 5px 10px; - border-bottom: 1px solid; - background-color: var(--color-background-dark); -} - -.alert>h5 { - padding: 10px 15px; - margin-top: 0; - margin-bottom: 0; - text-transform: uppercase; - font-weight: bold; - border-top: 2px solid; - background-color: var(--color-background-dark); - border-radius: none; -} - -.alert>ul { - margin-bottom: 0; - padding: 5px 40px; -} - -.alert-info { - color: #1976d2; -} - -.alert-warning { - color: #f57f17; -} - -.alert-danger { - color: #d32f2f; -} - -pre { - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - word-break: break-all; - word-wrap: break-word; - background-color: var(--color-background-dark); - border-radius: 0; - border: none; -} - -code { - background: var(--color-background-dark) !important; - border-radius: 2px; -} - -.hljs { - color: var(--color-foreground); -} - -.toc .nav>li.active>.expand-stub::before, .toc .nav>li.in>.expand-stub::before, .toc .nav>li.in.active>.expand-stub::before, .toc .nav>li.filtered>.expand-stub::before { - content: "▾"; -} - -.toc .nav>li>.expand-stub::before, .toc .nav>li.active>.expand-stub::before { - content: "▸"; -} - -.affix ul ul>li>a:before { - content: "|"; -} - -.breadcrumb { - background-color: var(--color-background-subnav); -} - -.breadcrumb .label.label-primary { - background: #444; - border-radius: 0; - font-weight: normal; - font-size: 100%; -} - -#breadcrumb .breadcrumb>li a { - border-radius: 0; - font-weight: normal; - font-size: 85%; - display: inline; - padding: 0 .6em 0; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - color: var(--color-breadcrumb); -} - -#breadcrumb .breadcrumb>li a:hover { - color: var(--color-foreground); - transition: all ease 0.25s; -} - -.breadcrumb>li+li:before { - content: "⯈"; - font-size: 75%; - color: var(--color-background-dark); - padding: 0; -} - -.light-theme .breadcrumb>li+li:before { - color: var(--color-foreground) - } - -.toc .level1>li { - font-weight: 600; - font-size: 130%; - padding-left: 5px; -} - -.footer { - border-top: none; - background-color: var(--color-background-dark); - padding: 15px 0; - font-size: 90%; -} - -.toc .nav>li>a:hover, .toc .nav>li>a:focus { - color: var(--color-toc-hover); - transition: all ease 0.1s; -} - -.form-control { - background-color: var(--color-background-subnav); - border: none; - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -input#search-query:focus { - color: var(--color-foreground); -} - -.table-bordered, .table-bordered>tbody>tr>td, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>td, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>thead>tr>th { - border: 1px solid var(--color-background-dark); -} - -.table-striped>tbody>tr:nth-of-type(odd) { - background-color: var(--color-background-table-alt); -} - -blockquote { - padding: 10px 20px; - margin: 0 0 10px; - font-size: 110%; - border-left: 5px solid var(--color-background-quote); - color: var(--color-background-quote); -} - -.pagination>.disabled>a, .pagination>.disabled>a:focus, .pagination>.disabled>a:hover, .pagination>.disabled>span, .pagination>.disabled>span:focus, .pagination>.disabled>span:hover { - background-color: var(--color-background-subnav); - border-color: var(--color-background-subnav); -} - -.breadcrumb>li, .pagination { - display: inline; -} - -.tabGroup a[role="tab"] { - border-bottom: 2px solid var(--color-background-dark); -} - -.tabGroup a[role="tab"][aria-selected="true"] { - color: var(--color-foreground); -} - -.tabGroup section[role="tabpanel"] { - border: 1px solid var(--color-background-dark); -} - -.sideaffix > div.contribution > ul > li > a.contribution-link:hover { - background-color: var(--color-background); -} - -.switch { - position: relative; - display: inline-block; - width: 40px; - height: 20px; -} - -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - -webkit-transition: .4s; - transition: .4s; -} - -.slider:before { - position: absolute; - content: ""; - height: 14px; - width: 14px; - left: 4px; - bottom: 3px; - background-color: white; - -webkit-transition: .4s; - transition: .4s; -} - -input:checked + .slider { - background-color: #337ab7; -} - -input:focus + .slider { - box-shadow: 0 0 1px #337ab7; -} - -input:checked + .slider:before { - -webkit-transform: translateX(19px); - -ms-transform: translateX(19px); - transform: translateX(19px); -} - -/* Rounded sliders */ -.slider.round { - border-radius: 20px; -} - -.slider.round:before { - border-radius: 50%; -} -.toggle-mode .icon { - display: inline-block; -} - -.toggle-mode .icon i { - font-style: normal; - font-size: 17px; - display: inline-block; - padding-right: 7px; - padding-left: 7px; - vertical-align: middle; -} - -@media (min-width: 1600px) { - .container { - width: 100%; - } - .sidefilter { - width: 18%; - } - .sidetoc { - width: 18%; - } - .article.grid-right { - margin-left: 19%; - } - .sideaffix { - width: 11.5%; - } - .affix ul>li.active>a { - white-space: initial; - } - .affix ul>li>a { - width: 99%; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } -} \ No newline at end of file diff --git a/docs/template/darkfx/styles/toggle-theme.js b/docs/template/darkfx/styles/toggle-theme.js deleted file mode 100644 index f2ea5f5f..00000000 --- a/docs/template/darkfx/styles/toggle-theme.js +++ /dev/null @@ -1,35 +0,0 @@ -const sw = document.getElementById("switch-style"), sw_mobile = document.getElementById("switch-style-m"), b = document.body; -if (b) { - function toggleTheme(target, dark) { - target.classList.toggle("dark-theme", dark) - target.classList.toggle("light-theme", !dark) - } - - function switchEventListener() { - toggleTheme(b, this.checked); - if (window.localStorage) { - this.checked ? localStorage.setItem("theme", "dark-theme") : localStorage.setItem("theme", "light-theme") - } - } - - var isDarkTheme = !window.localStorage || !window.localStorage.getItem("theme") || window.localStorage && localStorage.getItem("theme") === "dark-theme"; - - if(sw && sw_mobile){ - sw.checked = isDarkTheme; - sw_mobile.checked = isDarkTheme; - - sw.addEventListener("change", switchEventListener); - sw_mobile.addEventListener("change", switchEventListener); - - // sync state between switches - sw.addEventListener("change", function() { - sw_mobile.checked = this.checked; - }); - - sw_mobile.addEventListener("change", function() { - sw.checked = this.checked; - }); - } - - toggleTheme(b, isDarkTheme); -} \ No newline at end of file diff --git a/docs/template/no_inherited_members/partials/class.header.tmpl.partial b/docs/template/no_inherited_members/partials/class.header.tmpl.partial deleted file mode 100644 index 3ca2c8b3..00000000 --- a/docs/template/no_inherited_members/partials/class.header.tmpl.partial +++ /dev/null @@ -1,104 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - -

{{>partials/title}}

-
{{{summary}}}
-
{{{conceptual}}}
-{{#inClass}} -
-
{{__global.inheritance}}
- {{#inheritance}} -
{{{specName.0.value}}}
- {{/inheritance}} -
{{name.0.value}}
- {{#derivedClasses}} -
{{{specName.0.value}}}
- {{/derivedClasses}} -
-{{/inClass}} -{{#implements.0}} -
-
{{__global.implements}}
-{{/implements.0}} -{{#implements}} -
{{{specName.0.value}}}
-{{/implements}} -{{#implements.0}} -
-{{/implements.0}} -
{{__global.namespace}}: {{{namespace.specName.0.value}}}
-
{{__global.assembly}}: {{assemblies.0}}.dll
-
{{__global.syntax}}
-
-
{{syntax.content.0.value}}
-
-{{#syntax.parameters.0}} -
{{__global.parameters}}
- - - - - - - - - -{{/syntax.parameters.0}} -{{#syntax.parameters}} - - - - - -{{/syntax.parameters}} -{{#syntax.parameters.0}} - -
{{__global.type}}{{__global.name}}{{__global.description}}
{{{type.specName.0.value}}}{{{id}}}{{{description}}}
-{{/syntax.parameters.0}} -{{#syntax.return}} -
{{__global.returns}}
- - - - - - - - - - - - - -
{{__global.type}}{{__global.description}}
{{{type.specName.0.value}}}{{{description}}}
-{{/syntax.return}} -{{#syntax.typeParameters.0}} -
{{__global.typeParameters}}
- - - - - - - - -{{/syntax.typeParameters.0}} -{{#syntax.typeParameters}} - - - - -{{/syntax.typeParameters}} -{{#syntax.typeParameters.0}} - -
{{__global.name}}{{__global.description}}
{{{id}}}{{{description}}}
-{{/syntax.typeParameters.0}} -{{#remarks}} -
{{__global.remarks}}
-
{{{remarks}}}
-{{/remarks}} -{{#example.0}} -
{{__global.examples}}
-{{/example.0}} -{{#example}} -{{{.}}} -{{/example}} diff --git a/docs/toc.yml b/docs/toc.yml index baaba530..4d8c91dc 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -1,8 +1,11 @@ - name: Home href: index.md -- name: Wiki +- name: Modding Wiki href: wiki/ homepage: wiki/index.md -- name: API Documentation +- name: Inscryption API Documentation href: api/ - homepage: api/index.md \ No newline at end of file + homepage: api/index.md +- name: Inscryption Community Patch Documentation + href: community/ + homepage: community/index.md \ No newline at end of file From 8c34d84afb9618b50a53b6ae4316dc837137b771 Mon Sep 17 00:00:00 2001 From: Raven/Chaosyr Date: Sat, 14 Nov 2026 11:01:27 -0500 Subject: [PATCH 28/28] Implement Embedding (#346) * Update Styling * Remove Styles folder from `api_wiki` * Fix Style and implement Community Patch and APIPatcher to Docs * remove arbitrary exclusions for CSProj * Replace code block font to match * Update toc.yml * Update main.css * Update main.css * Update main.css * Update main.css * Update main.css * Update main.css * Remove unneeded Partials folder carried over from DarkFX Copy * Typo fix and Prettify class.header.tmpl.partial * Fix up inheritence related look * Update main.css * Update main.css * Update main.css * Update main.css * Update Table Implementation to DL * Undo Table Changes Gonna look back into this with a fresh state of mind tommarrow * Pop off API Patcher from Docs * Move the class header partial under api_wiki and delete inheritence template * Experiment with disabling darkfx * part 2 * fix css * switch to min-height * Update Templates * Some fixing * 2col params, and fields table * CSS Cleaning and quick fix * Inline code background * Underscore the page heading * Underscore H3 Headers * Fix borders * Update main.css * Conditionalize H3 Headers * Overhaul Index.md * Conditionalize H1 * Make Wiki be named Wiki * Allow Embedding * Fix Embeddability --- .github/workflows/documentation.yml | 18 +- docs/DiscordIcon.png | Bin 0 -> 421359 bytes docs/docfx.json | 3 + docs/template/api_wiki/layout/_master.tmpl | 175 ++++++++++++++++++ .../api_wiki/partials/head.tmpl.partial | 51 +++++ 5 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 docs/DiscordIcon.png create mode 100644 docs/template/api_wiki/layout/_master.tmpl create mode 100644 docs/template/api_wiki/partials/head.tmpl.partial diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 9f88e69b..5c234615 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -30,7 +30,23 @@ jobs: chmod +x docfx/docfx - name: Generate documentation - run: ./docfx/docfx docs/docfx.json + env: + REPOSITORY_OWNER: ${{ github.repository_owner }} + REPOSITORY_NAME: ${{ github.event.repository.name }} + run: | + if [ "$REPOSITORY_NAME" = "$REPOSITORY_OWNER.github.io" ]; then + DOCFX_BASE_URL="https://${REPOSITORY_OWNER}.github.io/" + else + DOCFX_BASE_URL="https://${REPOSITORY_OWNER}.github.io/${REPOSITORY_NAME}/" + fi + + jq --arg base "$DOCFX_BASE_URL" \ + '.build.globalMetadata._appBaseUrl = $base' \ + docs/docfx.json > docs/docfx.generated.json + + ./docfx/docfx docs/docfx.generated.json + + rm docs/docfx.generated.json - name: Checkout gh-pages uses: actions/checkout@v4 diff --git a/docs/DiscordIcon.png b/docs/DiscordIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..957c20be56a2ba46668f7ba181ea5a8ae05ab272 GIT binary patch literal 421359 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%0ALQ$nR8DiAn8MgR@>wo}q5jqF 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%0DO>#oLnbCTW`l#SE37W*fY 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
8I}vP6{Y-N(i+V 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

Mz}#rm#iE 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

!3Y|;uv)~l| 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 + + + + {{#redirect_url}} + + {{/redirect_url}} + {{^redirect_url}} + {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} + + + {{#_description}}{{/_description}} + {{#description}}{{/description}} + + + + + + {{#_description}}{{/_description}} + {{^_description}}{{#description}}{{/description}}{{/_description}} + + + + + + {{#_description}}{{/_description}} + {{^_description}}{{#description}}{{/description}}{{/_description}} + + + + + + + + {{#_noindex}}{{/_noindex}} + {{#_enableSearch}}{{/_enableSearch}} + {{#_disableNewTab}}{{/_disableNewTab}} + {{#_disableTocFilter}}{{/_disableTocFilter}} + {{#docurl}}{{/docurl}} + + + + + + + + + + + + + + + + + + {{#_googleAnalyticsTagId}} + + + {{/_googleAnalyticsTagId}} + {{/redirect_url}} + + + {{^redirect_url}} + +

+ {{^_disableNavbar}} + + {{/_disableNavbar}} +
+ +
+ {{^_disableToc}} +
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ {{/_disableToc}} + +
+
+ {{^_disableToc}} + + {{/_disableToc}} + + {{^_disableBreadcrumb}} + + {{/_disableBreadcrumb}} +
+ +
+ {{!body}} +
+ + {{^_disableContribution}} +
+ {{#sourceurl}} + {{__global.improveThisDoc}} + {{/sourceurl}} + {{^sourceurl}}{{#docurl}} + {{__global.improveThisDoc}} + {{/docurl}}{{/sourceurl}} +
+ {{/_disableContribution}} + + {{^_disableNextArticle}} + + {{/_disableNextArticle}} + +
+ + {{^_disableAffix}} +
+ +
+ {{/_disableAffix}} +
+ + {{#_enableSearch}} +
+ {{/_enableSearch}} + +
+
+
+ {{{_appFooter}}}{{^_appFooter}}Made with docfx{{/_appFooter}} +
+
+
+ + {{/redirect_url}} + \ No newline at end of file diff --git a/docs/template/api_wiki/partials/head.tmpl.partial b/docs/template/api_wiki/partials/head.tmpl.partial new file mode 100644 index 00000000..62d911c1 --- /dev/null +++ b/docs/template/api_wiki/partials/head.tmpl.partial @@ -0,0 +1,51 @@ + +{{!Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license.}} + + + + {{#_googleAnalyticsTagId}} + + + {{/_googleAnalyticsTagId}} + {{#redirect_url}} + + {{/redirect_url}} + {{^redirect_url}} + + {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} + + + {{#_description}}{{/_description}} + {{#description}}{{/description}} + + + + + + {{#_description}}{{/_description}} + {{^_description}}{{#description}}{{/description}}{{/_description}} + + + + + + {{#_description}}{{/_description}} + {{^_description}}{{#description}}{{/description}}{{/_description}} + + + + + + + + + {{#_noindex}}{{/_noindex}} + {{#_enableSearch}}{{/_enableSearch}} + {{#_enableNewTab}}{{/_enableNewTab}} + {{/redirect_url}} +