EA 23.296 Nightly
April 18, 2026
24 files modified. 2 new files created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
SpriteData (4)
public Sprite[] GetSprites()
public void LoadSprites() public Sprite GetSprite() public void Validate() public void Load() AM_Bird
public class AM_Bird : AM_MiniGame
public override void OnActivate()
{
EClass.scene.transFocus = EClass.scene.flock._roamers.RandomItem().transform;
EClass.screen.SetTargetZoomIndex(1);
EClass.screen.SetTargetZoomIndex(2);
EClass.screen.RefreshTilt();
EClass.ui.layerFloat.SetActive(enable: false);
}public override void OnDeactivate()
{
EClass.scene.transFocus = null;
EClass.screen.RefreshTilt();
EClass.screen.SetTargetZoomIndex(1);
EClass.screen.SetTargetZoomIndex(2);
EClass.ui.layerFloat.SetActive(enable: true);
}
}BaseGameScreen
public virtual void RefreshPosition()
{
float z = position.z;
targetZoom = TargetZoom;
for (int i = 0; i < EMono.core.config.camera.zooms.Length; i++)
for (int i = 0; i < EMono.core.config.camera.listZoom.Length; i++)
{
if (targetZoom == EMono.core.config.camera.zooms[i])
if (targetZoom == EMono.core.config.camera.listZoom[i])
{
targetZoomIndex = i;
}public virtual void RefreshPosition()
pushBack = Vector3.zero;
int num = scrollX - scrollY;
int num2 = scrollY + scrollX;
if ((float)num <= mapLimit.x)
if ((float)num * Zoom <= mapLimit.x)
{
pushBack.x = mapLimit.x - (float)num;
pushBack.x = mapLimit.x - (float)num * Zoom;
}
if ((float)num2 <= mapLimit.y)
if ((float)num2 * Zoom <= mapLimit.y)
{
pushBack.y = mapLimit.y - (float)num2;
pushBack.y = mapLimit.y - (float)num2 * Zoom;
}
if ((float)num >= (float)EMono._map.Size + mapLimit.width - (float)(width / 2))
if ((float)num >= (float)EMono._map.Size + mapLimit.width - (float)(width / 2) * Zoom)
{
pushBack.x = (float)EMono._map.Size + mapLimit.width - (float)(width / 2) - (float)num;
pushBack.x = (float)EMono._map.Size + mapLimit.width - (float)(width / 2) * Zoom - (float)num;
}
if ((float)num2 >= (float)EMono._map.Size + mapLimit.height - (float)(height / 2))
if ((float)num2 >= (float)EMono._map.Size + mapLimit.height - (float)(height / 2) * Zoom)
{
pushBack.y = (float)EMono._map.Size + mapLimit.height - (float)(height / 2) - (float)num2;
pushBack.y = (float)EMono._map.Size + mapLimit.height - (float)(height / 2) * Zoom - (float)num2;
}
position += Quaternion.Euler(planeAngle) * pushBack * Core.delta * pushbackSpeed;
}public void SetTargetZoomIndex(int index)
{
targetZoomIndex = index;
float num = targetZoom;
targetZoom = EMono.core.config.camera.zooms[targetZoomIndex];
targetZoom = EMono.core.config.camera.listZoom[targetZoomIndex];
if (num != targetZoom)
{
zoomTimer = 0f;public void ModTargetZoomIndex(int a)
{
int num = targetZoomIndex;
targetZoomIndex -= a;
int num2 = ((!EMono.core.config.camera.extendZoomMin) ? 1 : 0);
int num3 = (EMono.core.config.camera.extendZoomMax ? 4 : 3);
int num2 = ((!EMono.core.config.camera.extendZoomMin) ? 2 : 0);
int num3 = (EMono.core.config.camera.extendZoomMax ? 5 : 4);
if (targetZoomIndex < num2)
{
targetZoomIndex = num2;BaseListPeople
public override void OnClick(Chara c, ItemGeneral i)
{
uIContextMenu.AddButton("editPCC", delegate
{
EClass.ui.AddLayer<LayerEditPCC>().Activate(c, UIPCC.Mode.Full);
EClass.ui.AddLayer<LayerEditPCC>("LayerPCC/LayerEditPCC").Activate(c, UIPCC.Mode.Full);
});
uIContextMenu.AddButton("togglePCC", delegate
{CalcMoney
public static int Whore(Chara seller, Chara buyer)
public static int InvestShop(Chara c, Chara tc)
{
long a = Guild.Merchant.InvestPrice(tc.c_invest * 700);
return Mathf.Max(b: Invest(Guild.Merchant.InvestPrice(tc.c_invest * tc.c_invest * 80 + 200)), a: Invest(a));
long a = Guild.Merchant.InvestPrice((long)tc.c_invest * 700L);
return Mathf.Max(b: Invest(Guild.Merchant.InvestPrice((long)tc.c_invest * (long)tc.c_invest * 80 + 200)), a: Invest(a));
}
public static int InvestZone(Chara c)
{
long a = EClass._zone.development * 50;
long a = (long)EClass._zone.development * 50L;
return Mathf.Max(b: Invest((long)EClass._zone.development * (long)EClass._zone.development / 4 + 500), a: Invest(a));
}
}Card
public virtual void SetImage(Image image)
SpriteReplacer spriteReplacer = SpriteReplacer.dictSkins.TryGetValue(c_idSpriteReplacer);
if (spriteReplacer != null)
{
RenderData renderData = ResourceCache.Load<RenderData>("Scene/Render/Data/chara_custom_" + ((spriteReplacer.data.GetSprite().texture.height <= 128) ? "128" : "256"));
sprite = spriteReplacer.data.GetSprite();
sprite = spriteReplacer.GetSprite();
RenderData renderData = ResourceCache.Load<RenderData>("Scene/Render/Data/chara_custom_" + ((sprite.texture.height <= 128) ? "128" : "256"));
sourceRenderCard.SetImage(image, sprite, colorInt, setNativeSize: true, 0, 0, renderData, spriteReplacer.data.pref ?? Pref);
return;
}CardRenderer
public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)
pref = replacer.pref;
SubPassData.Current = SubPassData.Default;
}
if (isChara)
if (isChara || hasActor)
{
p.x += pref.x * (float)((!owner.flipX) ? 1 : (-1));
p.z += pref.z;public override void OnEnterScreen()
{
if (isSynced)
{
Debug.LogError("renderer alraedy synced:" + owner);
Debug.LogError("renderer already synced:" + owner);
}
isSynced = true;
if (!usePass) {
return EClass.core.refs.prefs.pcc;
}
if (owner.sourceCard.replacer?.data?.pref != null)
{
return owner.sourceCard.replacer.data.pref;
}
return owner.Pref;
}
}Chara
public override SourcePref Pref
{
get
{
if (spriteReplacer != null)
if (spriteReplacer == null)
{
return spriteReplacer.data?.pref ?? EClass.core.refs.prefs.replacer1;
}
if (base.idSkin > 0)
{
switch (sourceCard.tiles.TryGet(base.idSkin))
if (base.idSkin > 0)
{
case 2319:
case 2619:
case 2621:
case 2623:
case 2625:
return EClass.core.refs.prefs.sonwputit1;
case 2320:
case 2611:
case 2620:
case 2622:
case 2624:
case 2626:
case 2828:
return EClass.core.refs.prefs.snowputit2;
switch (sourceCard.tiles.TryGet(base.idSkin))
{
case 2319:
case 2619:
case 2621:
case 2623:
case 2625:
return EClass.core.refs.prefs.sonwputit1;
case 2320:
case 2611:
case 2620:
case 2622:
case 2624:
case 2626:
case 2828:
return EClass.core.refs.prefs.snowputit2;
}
}
return sourceCard.replacer.data?.pref ?? sourceCard.pref;
}
return sourceCard.pref;
return spriteReplacer.data?.pref ?? EClass.core.refs.prefs.replacer1;
}
}CharaActorPCC
public override void OnRender(RenderParam p)
case 0:
{
Thing thing = ((owner.IsPC && EMono.player.currentHotItem.RenderThing != null) ? EMono.player.currentHotItem.RenderThing : ((!flag && owner.body.slotMainHand?.thing != null) ? owner.body.slotMainHand.thing : null));
if (thing != null)
if (thing == null)
{
bool flag2 = num == 0 || num == 1;
if (thing.trait.InvertHeldSprite)
{
flag2 = !flag2;
}
Vector3[] mainHandPos = EMono.setting.render.mainHandPos;
Vector3[] mainHand = EMono.setting.render.animeWalk[provider.currentFrame].mainHand;
SourcePref pref = thing.sourceCard.pref;
thing.dir = ((!flag2) ? 1 : 0);
thing.SetRenderParam(p);
p.x = org.x + mainHandPos[num].x + mainHand[num].x + (flag2 ? 0.01f : (-0.01f)) * (float)pref.equipX;
p.y = org.y + mainHandPos[num].y + mainHand[num].y + 0.01f * (float)pref.equipY;
p.z = org.z - thing.renderer.data.offset.z + mainHandPos[num].z + mainHand[num].z;
p.v.x = p.x;
p.v.y = p.y;
p.v.z = p.z;
if (thing.renderer.hasActor)
break;
}
bool flag2 = num == 0 || num == 1;
if (thing.trait.InvertHeldSprite)
{
flag2 = !flag2;
}
Vector3[] mainHandPos = EMono.setting.render.mainHandPos;
Vector3[] mainHand = EMono.setting.render.animeWalk[provider.currentFrame].mainHand;
SourcePref pref = thing.Pref;
thing.dir = ((!flag2) ? 1 : 0);
thing.SetRenderParam(p);
p.x = org.x + mainHandPos[num].x + mainHand[num].x + (flag2 ? 0.01f : (-0.01f)) * (float)pref.equipX;
p.y = org.y + mainHandPos[num].y + mainHand[num].y + 0.01f * (float)pref.equipY;
p.z = org.z - thing.renderer.data.offset.z + mainHandPos[num].z + mainHand[num].z;
if (thing.renderer.hasActor)
{
thing.renderer.RefreshSprite();
if (!flag2)
{
thing.renderer.RefreshSprite();
p.x -= thing.renderer.data._offset.x * 2f;
}
thing.renderer.Draw(p, ref p.v, drawShadow: false);
}
p.v.x = p.x;
p.v.y = p.y;
p.v.z = p.z;
thing.renderer.Draw(p, ref p.v, drawShadow: false);
break;
}
case -1:public override void OnRender(RenderParam p)
break;
}
Thing thing2 = owner.body.slotOffHand.thing;
if (thing2 != null)
if (thing2 == null)
{
break;
}
bool flag4 = num == 1 || num == 3;
Vector3[] offHandPos = EMono.setting.render.offHandPos;
Vector3[] offHand = EMono.setting.render.animeWalk[provider.currentFrame].offHand;
SourcePref pref2 = thing2.Pref;
thing2.dir = ((!flag4) ? 1 : 0);
thing2.SetRenderParam(p);
p.x = org.x + offHandPos[num].x + offHand[num].x + (flag4 ? 0.01f : (-0.01f)) * (float)pref2.equipX;
p.y = org.y + offHandPos[num].y + offHand[num].y + 0.01f * (float)pref2.equipY;
p.z = org.z - thing2.renderer.data.offset.z + offHandPos[num].z + offHand[num].z;
if (thing2.renderer.hasActor)
{
bool flag4 = num == 1 || num == 3;
Vector3[] offHandPos = EMono.setting.render.offHandPos;
Vector3[] offHand = EMono.setting.render.animeWalk[provider.currentFrame].offHand;
SourcePref pref2 = thing2.source.pref;
thing2.dir = ((!flag4) ? 1 : 0);
thing2.SetRenderParam(p);
p.x = org.x + offHandPos[num].x + offHand[num].x + (flag4 ? 0.01f : (-0.01f)) * (float)pref2.equipX;
p.y = org.y + offHandPos[num].y + offHand[num].y + 0.01f * (float)pref2.equipY;
p.z = org.z - thing2.renderer.data.offset.z + offHandPos[num].z + offHand[num].z;
if (thing2.renderer.hasActor)
thing2.renderer.RefreshSprite();
if (!flag4)
{
thing2.renderer.RefreshSprite();
p.x -= thing2.renderer.data._offset.x * 2f;
}
thing2.renderer.Draw(p);
}
p.v.x = p.x;
p.v.y = p.y;
p.v.z = p.z;
thing2.renderer.Draw(p, ref p.v, drawShadow: false);
break;
}
case -1:CharaRenderer
public override void SetOwner(Card c)
SpriteReplacer spriteReplacer = SpriteReplacer.dictSkins.TryGetValue(owner.c_idSpriteReplacer);
if (spriteReplacer != null)
{
data = ResourceCache.Load<RenderData>("Scene/Render/Data/chara_custom_" + ((spriteReplacer.data.GetSprite().texture.height <= 128) ? "128" : "256"));
data = ResourceCache.Load<RenderData>("Scene/Render/Data/chara_custom_" + ((spriteReplacer.GetSprite().texture.height <= 128) ? "128" : "256"));
owner.spriteReplacer = spriteReplacer;
}
}CoreConfig
public int moveframe;
public float[] zooms;
public float[] listZoom = new float[7] { 0.125f, 0.25f, 0.5f, 0.75f, 1f, 1.5f, 2f };
}
[Serializable]CoreDebug
public void InitDebugCommands()
});
Add(cat2, "Edit PCC", delegate
{
EClass.ui.AddLayer<LayerEditPCC>().Activate(EClass.pc, UIPCC.Mode.Full);
EClass.ui.AddLayer<LayerEditPCC>("LayerPCC/LayerEditPCC").Activate(EClass.pc, UIPCC.Mode.Full);
});
Add(cat2, "COM_Teleport", COM_Teleport);
Add(cat2, "LOG_Spatials", LOG_Spatials);DramaCustomSequence
if (c.affinity.CanBecomeMama() || EClass.pc.faith == EClass.game.religions.MoonShadow || EClass.debug.enable)
{
Steam.GetAchievement(ID_Achievement.MAMA);
string id2 = c.id;
if (!(id2 == "farris"))
{
if (id2 == "quru")
{
Steam.GetAchievement(ID_Achievement.MAMA3);
}
}
else
{
Steam.GetAchievement(ID_Achievement.MAMA2);
}
TempTalkTopic("mama_yes", StepEnd);
EClass.pc.SetAI(new AI_Fuck
{ID_Achievement
OYS,
MAMA,
PRIEST,
PRIEST2
PRIEST2,
MAMA2,
MAMA3
}LayerEditPCC
public void Activate(Chara _chara, UIPCC.Mode m, string idUniform = null, Action
actor.Reset();
});
};
uiPCC.onRefreshParts = SetPccPicker;
PCCData newData = new PCCData();
newData.Set(chara.pccData);
backup = IO.DeepCopy(newData);public void OnClickChangePortrait()
});
}
public void OnClickPartPicker(UIItemPCC uiItemPcc)
{
ELayer.ui.AddLayer<LayerPickPCC>("LayerPCC/LayerPickPCC").Activate(uiPCC, uiItemPcc);
}
public override void OnKill()
{
Apply();public void SetPortraitSlider()
}, (ModItem<Sprite> a) => (!a.id.IsEmpty()) ? a.id : "None");
}
}
public void SetPccPicker()
{
foreach (UIItemPCC item in uiPCC.items)
{
item.buttonPicker.onClick.AddListener(delegate
{
OnClickPartPicker(item);
});
item.buttonPicker.GetComponent<ButtonGeneral>().tooltip.lang = "LayerPickPCC".lang();
}
}
}+LayerPickPCC
File Created
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Empyrean.Utils;
using UnityEngine;
using UnityEngine.UI;
public class LayerPickPCC : ELayer
{
public UIItemPCCPart mold;
public LayoutGroup layoutParts;
private UIItemPCC _uiItemPcc;
private UIPCC _uiPcc;
private List<UIItemPCCPart> _items = new List<UIItemPCCPart>();
private List<Outline> _outlines = new List<Outline>();
private static readonly Dictionary<PCC.Part, BaseModPackage> _cached = new Dictionary<PCC.Part, BaseModPackage>();
private static readonly Regex _idRegex = new Regex("(\\d+)|(\\D+)", RegexOptions.Compiled);
public void Activate(UIPCC uiPcc, UIItemPCC uiItemPcc)
{
_uiPcc = uiPcc;
_uiItemPcc = uiItemPcc;
PopulateButtons();
}
private void Update()
{
SpriteProvider provider = _uiPcc.actor.provider;
int frame = (provider.currentFrame + 2) % 4;
foreach (UIItemPCCPart item in _items)
{
item.SetSpriteIndex(provider.currentDir, frame);
}
}
public void PopulateButtons()
{
List<PCC.Part> list = _uiItemPcc.parts.ToList();
list.Sort(PartSorter);
foreach (PCC.Part part in list)
{
UIItemPCCPart item = Util.Instantiate(mold, layoutParts);
if (part == _uiItemPcc.part)
{
SetOutline(item.outline);
}
if (part == null)
{
item.button.onClick.AddListener(delegate
{
_uiItemPcc.slider.value = 0f;
SetOutline(item.outline);
});
item.button.tooltip.lang = "empty";
}
else
{
ModItem<Texture2D> modItem = part.modTextures.TryGetValue("walk");
if (modItem == null)
{
break;
}
item.button.tooltip.lang = GetPartProviderString(part);
item.button.onClick.AddListener(delegate
{
_uiItemPcc.slider.value = _uiItemPcc.parts.IndexOf(part);
SetOutline(item.outline);
});
item.SetSprites(IO.LoadPNG(modItem.fileInfo.FullName));
HSVColor hsv = _uiPcc.pcc.data.GetColor(_uiItemPcc.idPartSet).ToHsv();
hsv.v = 1f;
hsv.a = 1f;
item.button.icon.color = hsv.ToRGB();
}
_items.Add(item);
}
void SetOutline(Outline outline)
{
_outlines.Add(outline);
foreach (Outline outline in _outlines)
{
outline.enabled = false;
}
outline.enabled = true;
}
}
public static string GetPartProviderString(PCC.Part part)
{
return "ID: " + part.id + "\n<i>" + GetPartProvider(part).title.TagColor(Color.cyan) + "</i>\n" + part.dir.ShortPath();
}
public static BaseModPackage GetPartProvider(PCC.Part part)
{
if (part == null)
{
return null;
}
if (_cached.TryGetValue(part, out var value))
{
return value;
}
string dir = part.dir;
value = BaseModManager.Instance.packages.FirstOrDefault((BaseModPackage p) => dir.StartsWith(p.dirInfo.FullName)) ?? new BaseModPackage
{
title = "unknownAuthor".lang()
};
return _cached[part] = value;
}
public static int PartSorter(PCC.Part lhs, PCC.Part rhs)
{
if (lhs == null)
{
if (rhs != null)
{
return -1;
}
return 0;
}
if (rhs == null)
{
return 1;
}
int num = GetPartSortOrder(lhs);
int num2 = GetPartSortOrder(rhs);
if (num != num2)
{
return num - num2;
}
string id = lhs.id;
string id2 = rhs.id;
if (id == id2)
{
return 0;
}
int result;
bool flag = int.TryParse(id, out result);
int result2;
bool flag2 = int.TryParse(id2, out result2);
if (flag && flag2)
{
return result.CompareTo(result2);
}
if (flag)
{
return -1;
}
if (flag2)
{
return 1;
}
MatchCollection matchCollection = _idRegex.Matches(id);
MatchCollection matchCollection2 = _idRegex.Matches(id2);
int num3 = Math.Min(matchCollection.Count, matchCollection2.Count);
for (int i = 0; i < num3; i++)
{
string value = matchCollection[i].Value;
string value2 = matchCollection2[i].Value;
int result3;
bool num4 = int.TryParse(value, out result3);
int result4;
bool flag3 = int.TryParse(value2, out result4);
int num5 = ((!(num4 && flag3)) ? string.Compare(value, value2, StringComparison.OrdinalIgnoreCase) : result3.CompareTo(result4));
if (num5 != 0)
{
return num5;
}
}
return matchCollection.Count - matchCollection2.Count;
static int GetPartSortOrder(PCC.Part part)
{
int num6 = BaseModManager.Instance.packages.IndexOf(GetPartProvider(part));
if (num6 < 0)
{
return int.MaxValue;
}
return num6;
}
}
}RenderData
public class RenderData : EScriptable, IRenderer
public static Quaternion deadRotation = Quaternion.Euler(0f, 0f, 90f);
protected Vector3 _offset;
[NonSerialized]
public Vector3 _offset;
public static GameSetting.RenderSetting renderSetting;SourcePref
public void WriteIni(string path)
}
File.CreateText(path).Close();
IniData iniData = fileIniDataParser.ReadFile(path, Encoding.UTF8);
iniData.Global["x"] = ints[4].ToString() ?? "";
iniData.Global["y"] = ints[5].ToString() ?? "";
iniData.Global["z"] = ints[2].ToString() ?? "";
iniData.Global["pivotX"] = pivotX.ToString() ?? "";
iniData.Global["pivotY"] = pivotY.ToString() ?? "";
iniData.Global["shadow"] = shadow.ToString() ?? "";
iniData.Global["shadowX"] = shadowX.ToString() ?? "";
iniData.Global["shadowY"] = shadowY.ToString() ?? "";
iniData.Global["height"] = ints[3].ToString() ?? "";
iniData.Global["scaleIcon"] = scaleIcon.ToString() ?? "";
iniData.Global["liquidMod"] = liquidMod.ToString() ?? "";
iniData.Global["hatY"] = ints[23].ToString() ?? "";
iniData.Global["flags"] = ints[1].ToString() ?? "";
iniData.Global["x"] = ints[4].ToString();
iniData.Global["y"] = ints[5].ToString();
iniData.Global["z"] = ints[2].ToString();
iniData.Global["pivotX"] = pivotX.ToString();
iniData.Global["pivotY"] = pivotY.ToString();
iniData.Global["shadow"] = shadow.ToString();
iniData.Global["shadowX"] = shadowX.ToString();
iniData.Global["shadowY"] = shadowY.ToString();
iniData.Global["shadowRX"] = shadowRX.ToString();
iniData.Global["shadowRY"] = shadowRY.ToString();
iniData.Global["shadowBX"] = shadowBX.ToString();
iniData.Global["shadowBY"] = shadowBY.ToString();
iniData.Global["shadowBRX"] = shadowBRX.ToString();
iniData.Global["shadowBRY"] = shadowBRY.ToString();
iniData.Global["height"] = ints[3].ToString();
iniData.Global["heightFix"] = ints[24].ToString();
iniData.Global["scaleIcon"] = scaleIcon.ToString();
iniData.Global["liquidMod"] = liquidMod.ToString();
iniData.Global["liquidModMax"] = liquidModMax.ToString();
iniData.Global["hatY"] = ints[23].ToString();
iniData.Global["equipX"] = equipX.ToString();
iniData.Global["equipY"] = equipY.ToString();
iniData.Global["stackX"] = ints[17].ToString();
fileIniDataParser.WriteFile(path, iniData);
}public static SourcePref ReadFromIni(string path)
sourcePref.pivotY = iniData.Global["pivotY"].ToInt();
sourcePref.shadow = iniData.Global["shadow"].ToInt();
sourcePref.shadowX = iniData.Global["shadowX"].ToInt();
sourcePref.shadowRX = -sourcePref.shadowX;
int num2 = (sourcePref.shadowRY = iniData.Global["shadowY"].ToInt());
sourcePref.shadowY = num2;
sourcePref.shadowY = iniData.Global["shadowY"].ToInt();
sourcePref.shadowRX = iniData.Global["shadowRX"].ToInt();
sourcePref.shadowRY = iniData.Global["shadowRY"].ToInt();
sourcePref.shadowBX = iniData.Global["shadowBX"].ToInt();
sourcePref.shadowBY = iniData.Global["shadowBY"].ToInt();
sourcePref.shadowBRX = iniData.Global["shadowBRX"].ToInt();
sourcePref.shadowBRY = iniData.Global["shadowBRY"].ToInt();
sourcePref.ints[3] = iniData.Global["height"].ToInt();
sourcePref.ints[24] = iniData.Global["heightFix"].ToInt();
sourcePref.scaleIcon = iniData.Global["scaleIcon"].ToInt();
sourcePref.liquidMod = iniData.Global["liquidMod"].ToInt();
sourcePref.liquidModMax = iniData.Global["liquidModMax"].ToInt();
sourcePref.ints[23] = iniData.Global["hatY"].ToInt();
sourcePref.equipX = iniData.Global["equipX"].ToInt();
sourcePref.equipY = iniData.Global["equipY"].ToInt();
sourcePref.ints[17] = iniData.Global["stackX"].ToInt();
sourcePref.ints[1] = iniData.Global["flags"].ToInt();
return sourcePref;
}SpriteData
public Sprite[] sprites;
public DateTime date;
public DateTime dateTex;
public DateTime dateIni;
public DateTime datePref;
public int frame = 1;public void LoadAnimationIni()
{
if (!File.Exists(path + ".ini"))
{
frame = 1;
scale = 50;
time = 0.2f;
return;
}
try
{
IniData iniData = new FileIniDataParser().ReadFile(path + ".ini", Encoding.UTF8);
if (!int.TryParse(iniData.GetKey("frame") ?? "1", out frame))
{
frame = 1;
}
if (!int.TryParse(iniData.GetKey("scale") ?? "50", out scale))
{
scale = 50;
}
if (!float.TryParse(iniData.GetKey("time") ?? "0.2", out time))
{
time = 0.2f;
}
frame = Mathf.Max(1, (!int.TryParse(iniData.GetKey("frame"), out var result)) ? 1 : result);
scale = (int.TryParse(iniData.GetKey("scale"), out var result2) ? result2 : 50);
time = (float.TryParse(iniData.GetKey("time"), out var result3) ? Mathf.Max(0.016f, result3) : 0.2f);
}
catch (Exception exception)
{
Debug.LogException(exception);
frame = 1;
scale = 50;
time = 0.2f;
}
}
public Sprite[] GetSprites()
public void LoadSprites()
{
Validate();
return sprites;
}
public Sprite GetSprite()
{
Validate();
return sprites[0];
}
public void Validate()
{
DateTime lastWriteTime = File.GetLastWriteTime(path + ".png");
if (date.Year == 1 || !(date == lastWriteTime))
{
Load();
date = lastWriteTime;
}
}
public void Load()
{
LoadPref();
LoadAnimationIni();
Texture2D texture2D = IO.LoadPNG(path + ".png");
Debug.Log(texture2D.width + "/" + texture2D.height + "/" + path);
if ((bool)tex) }
int num = tex.width / frame;
int height = tex.height;
sprites = new Sprite[frame];
if (sprites == null || sprites.Length != frame)
{
sprites = new Sprite[frame];
}
Vector2 pivot = new Vector2(0.5f, 0.5f);
for (int i = 0; i < frame; i++)
{
sprites[i] = Sprite.Create(tex, new Rect(i * num, 0f, num, height), pivot, 100f, 0u, SpriteMeshType.FullRect);
}
}
public Sprite[] GetSprites()
{
if (sprites == null)
{
Load();
}
return sprites;
}
public Sprite GetSprite()
{
if (sprites == null)
{
Load();
}
return sprites.TryGet(0, returnNull: true);
}
public void Validate()
{
if (IsDirty(".png", ref dateTex) || IsDirty(".ini", ref dateIni) || IsDirty(".pref", ref datePref))
{
Load();
}
bool IsDirty(string p, ref DateTime lastChecked)
{
string text = path + p;
if (!File.Exists(text))
{
return false;
}
DateTime lastWriteTimeUtc = File.GetLastWriteTimeUtc(text);
if (lastWriteTimeUtc == lastChecked)
{
return false;
}
lastChecked = lastWriteTimeUtc;
return true;
}
}
public void Load()
{
LoadAnimationIni();
LoadPref();
LoadSprites();
}
}Thing
public override SourcePref Pref
get
{
SourcePref pref = trait.GetPref();
if (pref == null)
if (pref != null)
{
if (source.origin == null || source.pref.UsePref)
{
return source.pref;
}
pref = source.origin.pref;
return pref;
}
return pref;
CardRow cardRow = ((source.origin != null && !source.pref.UsePref) ? source.origin : source);
return cardRow.replacer.data?.pref ?? cardRow.pref;
}
}Trait
public void OnBarter(bool reroll = false)
break;
case ShopType.Moyer:
{
for (int num14 = 1; num14 <= 20; num14++)
for (int num14 = 1; num14 <= 21; num14++)
{
AddAdvWeek(num14);
}TraitAltar
public void OnOffer(Chara c, Thing t)
}
if (Deity.id != EClass.pc.faith.id)
{
bool flag = EClass.rnd(EClass.pc.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200);
bool flag = EClass.rnd(EClass.pc.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200) || IsEyth;
if (GetParam(1) != null || EClass.pc.IsEyth)
{
Msg.Say("nothingHappens");TraitBrewery
public override bool CanChildDecay(Card c)
public override bool OnChildDecay(Card c, bool firstDecay)
{
if (c.trait is TraitFoodFishSlice)
if (c.trait is TraitFoodFishSlice || c.HasElement(707))
{
return true;
}TraitMirror
public override void TrySetAct(ActPlan p)
{
p.TrySetAct("actDress", delegate
{
EClass.ui.AddLayer<LayerEditPCC>().Activate(EClass.pc, UIPCC.Mode.Body);
EClass.ui.AddLayer<LayerEditPCC>("LayerPCC/LayerEditPCC").Activate(EClass.pc, UIPCC.Mode.Body);
return false;
}, owner);
p.TrySetAct("actDress2", delegate
{
EClass.ui.AddLayer<LayerEditPCC>().Activate(EClass.pc, UIPCC.Mode.Extra);
EClass.ui.AddLayer<LayerEditPCC>("LayerPCC/LayerEditPCC").Activate(EClass.pc, UIPCC.Mode.Extra);
return false;
}, owner);
}UICharaMaker
public void RerollBio(bool keepParent)
public void EditPCC()
{
EMono.ui.AddLayer<LayerEditPCC>().Activate(chara, UIPCC.Mode.Body, null, delegate
EMono.ui.AddLayer<LayerEditPCC>("LayerPCC/LayerEditPCC").Activate(chara, UIPCC.Mode.Body, null, delegate
{
portrait.SetChara(chara);
SetPortraitSlider();+UIItemPCCPart
File Created
using System;
using UnityEngine;
using UnityEngine.UI;
public class UIItemPCCPart : EMono
{
public ButtonGeneral button;
public Outline outline;
[NonSerialized]
public Sprite[] sprites = new Sprite[16];
private bool _init;
public void SetSpriteIndex(int dir, int frame)
{
if (_init)
{
button.icon.sprite = sprites[dir * 4 + frame];
}
}
public void SetSprites(Texture2D texture)
{
int num = texture.width / 4;
int num2 = texture.height / 4;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
int num3 = j * num;
int num4 = (3 - i) * num2;
Rect rect = new Rect(num3, num4, num, num2);
sprites[i * 4 + j] = Sprite.Create(texture, rect, new Vector2(0.5f, 0.5f), 100f, 0u, SpriteMeshType.FullRect);
}
}
_init = true;
}
}WindowChara
{
if (chara.IsPC)
{
EClass.ui.AddLayer<LayerEditPCC>().Activate(chara, UIPCC.Mode.Body, null, delegate
EClass.ui.AddLayer<LayerEditPCC>("LayerPCC/LayerEditPCC").Activate(chara, UIPCC.Mode.Body, null, delegate
{
portrait.SetChara(chara);
});