Skip to content

EA 23.54

December 10, 2024

13 files modified. 2 new files created.

Important Changes

None.

ActRide

@@ -123,7 +123,10 @@ public static void Unride(Chara host, bool parasite = false, bool talk = true)

cs
		host.SetDirtySpeed();
		chara.SetDirtySpeed();
		host.Refresh();
		Point randomNeighbor = host.pos.GetRandomNeighbor(); 
		chara.MoveImmediate(randomNeighbor); 
		Point randomPoint = host.pos.GetRandomPoint(1); 
		if (randomPoint != null) 
		{ 
			chara.MoveImmediate(randomPoint); 
		} 
	}
}

BaseListPeople

@@ -292,6 +292,10 @@ public override void OnClick(Chara c, ItemGeneral i)

cs
			{
				if (c.pccData == null)
				{
					uIContextMenu.AddButton("editPCC", delegate
					{ 
						EClass.ui.AddLayer<LayerEditPortrait>().Activate(c); 
					}); 
					uIContextMenu.AddButton("togglePCC", delegate
					{
						bool isSynced = c.isSynced;

Card

@@ -3036,8 +3036,8 @@ public bool TryStackTo(Thing to)

cs
	{
		return false;
	}
	to.ModNum(Num); 
	to.decay = (to.decay * to.Num + decay * Num) / (to.Num + Num);
	to.ModNum(Num); 
	if (c_isImportant)
	{
		to.c_isImportant = true;

Chara

@@ -4023,7 +4023,7 @@ public void TryDropCarryOnly()

cs
	{
		DropHeld();
	}
	foreach (Thing item in EClass.pc.things.List((Thing t) => t.trait.CanOnlyCarry)) 
	foreach (Thing item in things.List((Thing t) => t.trait.CanOnlyCarry)) 
	{
		DropThing(item);
	}

@@ -4707,7 +4707,10 @@ public override void Die(Element e = null, Card origin = null, AttackSource atta

cs
			Msg.SetColor();
			SpawnLoot(origin);
		}
		TryDropCarryOnly(); 
		if (IsPC) 
		{ 
			TryDropCarryOnly(); 
		} 
	}
	if (IsPCFaction)
	{

ConTransmute

@@ -4,7 +4,7 @@ public class ConTransmute : BaseBuff

cs

	public override void Tick()
	{
		if (owner.host == null) 
		if (owner.host == null && owner.conSleep == null && (EClass.pc.conSleep == null || EClass.pc.conSleep.pcSleep == 0)) 
		{
			base.Tick();
		}

LayerColorPicker

@@ -1,50 +1,22 @@

cs
using System;
using Empyrean.ColorPicker;
using UnityEngine;
using UnityEngine.UI; 

public class LayerColorPicker : ELayer
{
	public ColorPicker picker; 
	public UIColorPicker uiPicker; 

	public Action<PickerState, Color> onChangeColor; 
	public ColorPicker picker => uiPicker.picker; 

	public Color resetColor; 
	public Action<PickerState, Color> onChangeColor => uiPicker.onChangeColor; 

	public Color startColor; 
	public Color resetColor => uiPicker.resetColor; 

	public GridLayoutGroup layoutColors; 
	public Color startColor => uiPicker.startColor; 

	public void SetColor(Color _startColor, Color _resetColor, Action<PickerState, Color> _onChangeColor)
	{
		UIItem t = layoutColors.CreateMold<UIItem>(); 
		for (int i = 0; i < 8; i++) 
		{ 
			UIItem item = Util.Instantiate(t, layoutColors); 
			int _i = i; 
			item.button1.icon.color = IntColor.FromInt(ELayer.core.config.colors[_i]); 
			item.button1.SetOnClick(delegate
			{ 
				picker.SelectColor(item.button1.icon.color); 
			}); 
			item.button2.SetOnClick(delegate
			{ 
				item.button1.icon.color = picker.SelectedColor; 
				ELayer.core.config.colors[_i] = IntColor.ToInt(picker.SelectedColor); 
				SE.Tab(); 
			}); 
		} 
		layoutColors.RebuildLayout(); 
		picker.ColorUpdated += delegate(Color c) 
		{ 
			_onChangeColor(PickerState.Modify, c); 
		}; 
		startColor = _startColor; 
		resetColor = _resetColor; 
		picker.Init(); 
		picker.SelectColor(_startColor); 
		picker.SelectColor(_startColor); 
		onChangeColor = _onChangeColor; 
		uiPicker.SetColor(_startColor, _resetColor, _onChangeColor); 
	}

	public void OnClickConfirm()

LayerEditPCC

@@ -116,6 +116,15 @@ public void Apply()

cs
		applied = true;
	}

	public void OnClickChangePortrait() 
	{ 
		ELayer.ui.AddLayer<LayerEditPortrait>().Activate(chara, uiPCC.pcc.data, delegate
		{ 
			portrait.SetChara(chara, uiPCC.actor.data); 
			uiPCC.actor.Reset(); 
		}); 
	} 

	public override void OnKill()
	{
		Apply();

+LayerEditPortrait

File Created
cs
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class LayerEditPortrait : ELayer
{
	public Portrait portrait;

	public Chara chara;

	public UISlider sliderPortrait;

	public UIColorPicker uiPicker;

	public UIDynamicList list;

	public PCCData pcc;

	public UIButton buttonGender;

	public UIButton buttonUnique;

	public Color hairColor;

	public Action<Color> action;

	private bool hasColorChanged;

	private bool gender = true;

	private bool unique;

	public void Activate(Chara _chara, PCCData _pcc = null, Action<Color> _action = null)
	{
		chara = _chara;
		pcc = _pcc;
		action = _action;
		if (action == null)
		{
			action = delegate
			{
			};
		}
		portrait.SetChara(chara);
		if (chara.GetInt(105) == 0)
		{
			hairColor = portrait.GetRandomHairColor(chara);
		}
		else
		{
			hairColor = IntColor.FromInt(chara.GetInt(105));
		}
		if (pcc != null)
		{
			hairColor = pcc.GetHairColor();
		}
		uiPicker.SetColor(hairColor, hairColor, delegate(PickerState state, Color _c)
		{
			if (pcc == null)
			{
				chara.SetInt(105, IntColor.ToInt(_c));
			}
			else
			{
				pcc.SetColor("hair", _c);
			}
			portrait.SetChara(chara, pcc);
			action(_c);
			hairColor = _c;
			hasColorChanged = true;
		});
		RefreshList();
		InvokeRepeating("RefreshHairColor", 0f, 0.1f);
		buttonGender = windows[0].AddBottomButton("portrait_gender", delegate
		{
			gender = !gender;
			RefreshButtons();
			list.List();
		});
		buttonUnique = windows[0].AddBottomButton("portrait_unique", delegate
		{
			unique = !unique;
			RefreshButtons();
			list.List();
		});
		RefreshButtons();
	}

	public void RefreshButtons()
	{
		buttonGender.mainText.SetText("portrait_gender".lang() + " (" + (gender ? "On" : "Off") + ")");
		buttonUnique.mainText.SetText("portrait_unique".lang() + " (" + (unique ? "On" : "Off") + ")");
		buttonGender.RebuildLayout();
		buttonUnique.RebuildLayout();
	}

	public void OnClickClear()
	{
		SE.Trash();
		chara.c_idPortrait = null;
		portrait.SetChara(chara, pcc);
		action(hairColor);
	}

	public void RefreshHairColor()
	{
		if (hasColorChanged)
		{
			list.Redraw();
			hasColorChanged = false;
		}
	}

	public void RefreshList()
	{
		list.Clear();
		list.callbacks = new UIList.Callback<ModItem<Sprite>, Portrait>
		{
			onClick = delegate(ModItem<Sprite> a, Portrait b)
			{
				list.Select(a);
				SE.Click();
				chara.c_idPortrait = a.id;
				portrait.SetChara(chara, pcc);
				action(hairColor);
			},
			onRedraw = delegate(ModItem<Sprite> a, Portrait b, int i)
			{
				b.mainText.SetText(a.id);
				b.SetPortrait(a.id, hairColor);
			},
			onList = delegate
			{
				int num = (gender ? chara.bio.gender : 0);
				IEnumerable<ModItem<Sprite>> enumerable = Portrait.ListPortraits(num, "c").Concat(Portrait.ListPortraits(num, "guard")).Concat(Portrait.ListPortraits(num, "special"))
					.Concat(Portrait.ListPortraits(num, "foxfolk"));
				if (unique)
				{
					enumerable = enumerable.Concat(Portrait.ListPortraits(0, "UN"));
				}
				foreach (ModItem<Sprite> item in enumerable.ToList())
				{
					list.Add(item);
				}
			}
		};
		list.List();
		list.Select((ModItem<Sprite> a) => a.id == chara.c_idPortrait);
	}
}

Portrait

@@ -192,9 +192,7 @@ public void SetChara(Chara c, PCCData pccData = null)

cs
		}
		else
		{
			Rand.SetSeed(c.uid); 
			colorOverlay = PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor(); 
			Rand.SetSeed(); 
			colorOverlay = GetRandomHairColor(c); 
			if (c.id == "shojo")
			{
				overlay.enabled = false;

@@ -204,6 +202,14 @@ public void SetChara(Chara c, PCCData pccData = null)

cs
		SetPortrait(c.GetIdPortrait(), colorOverlay);
	}

	public Color GetRandomHairColor(Chara c) 
	{ 
		Rand.SetSeed(c.uid); 
		Color randomColor = PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor(); 
		Rand.SetSeed(); 
		return randomColor; 
	} 

	public void SetPortrait(string id, Color colorOverlay = default(Color))
	{
		Sprite @object = modPortraits.GetItem(id).GetObject();

TaskDrawWater

@@ -6,7 +6,17 @@ public class TaskDrawWater : TaskDesignation

cs

	public override bool CanPressRepeat => true;

	public override bool Loop => CanProgress(); 
	public override bool Loop 
	{ 
		get 
		{ 
			if (CanProgress()) 
			{ 
				return !owner.HasCondition<ConSuffocation>(); 
			} 
			return false; 
		} 
	} 

	public override CursorInfo CursorIcon => CursorSystem.Hand;

TraitBed

@@ -20,6 +20,7 @@ public int MaxHolders

cs

	public override void TrySetAct(ActPlan p)
	{
		ValidateOwners(); 
		p.TrySetAct(new AI_Sleep
		{
			target = owner.Thing

@@ -82,6 +83,23 @@ public override void TrySetAct(ActPlan p)

cs
		}, owner);
	}

	public void ValidateOwners() 
	{ 
		CharaList data = owner.c_charaList; 
		if (data == null) 
		{ 
			return; 
		} 
		data.list.ForeachReverse(delegate(int i) 
		{ 
			Chara chara = EClass._map.FindChara(i) ?? EClass.game.cards.globalCharas.Find(i); 
			if (chara == null || (chara.IsPCFaction && chara.homeBranch != EClass._zone.branch)) 
			{ 
				data.list.Remove(i); 
			} 
		}); 
	} 

	public void AddHolder(Chara c)
	{
		CharaList charaList = owner.c_charaList;

TraitNewZone

@@ -117,7 +117,8 @@ public override void TrySetAct(ActPlan p)

cs
				Msg.Say("badidea");
				return false;
			}
			return MoveZone(); 
			MoveZone(); 
			return false; 
		}, owner, CursorSystem.MoveZone);
	}

UICharaMaker

@@ -78,6 +78,8 @@ public void SetChara(Chara c)

cs
	chara = c;
	BuildRaces();
	SetPortraitSlider();
	portrait.SetChara(chara, chara.pccData); 
	portraitZoom.SetChara(chara); 
	Refresh();
	toggleExtra.SetToggle(extraRace, delegate(bool a)
	{

@@ -457,16 +459,6 @@ public void ListAge()

cs

	public void SetPortraitSlider()
	{
		if ((bool)sliderPortrait) 
		{ 
			List<ModItem<Sprite>> list = Portrait.ListPlayerPortraits(chara.bio.gender); 
			sliderPortrait.SetList(list.Find((ModItem<Sprite> a) => a.id == chara.c_idPortrait), list, delegate(int a, ModItem<Sprite> b) 
			{ 
				chara.c_idPortrait = b.id; 
				portrait.SetChara(chara); 
				portraitZoom.SetChara(chara); 
			}, (ModItem<Sprite> a) => a.id); 
		} 
	}

	public void RerollPCC()

@@ -502,4 +494,12 @@ public void EditPCC()

cs
			SetPortraitSlider();
		});
	}

	public void OnClickChangePortrait() 
	{ 
		EMono.ui.AddLayer<LayerEditPortrait>().Activate(chara, chara.pccData, delegate
		{ 
			portrait.SetChara(chara, chara.pccData); 
		}); 
	} 
}

+UIColorPicker

File Created
cs
using System;
using Empyrean.ColorPicker;
using UnityEngine;
using UnityEngine.UI;

public class UIColorPicker : EMono
{
	public ColorPicker picker;

	public Action<PickerState, Color> onChangeColor;

	public Color resetColor;

	public Color startColor;

	public GridLayoutGroup layoutColors;

	public void SetColor(Color _startColor, Color _resetColor, Action<PickerState, Color> _onChangeColor)
	{
		UIItem t = layoutColors.CreateMold<UIItem>();
		for (int i = 0; i < 8; i++)
		{
			UIItem item = Util.Instantiate(t, layoutColors);
			int _i = i;
			item.button1.icon.color = IntColor.FromInt(EMono.core.config.colors[_i]);
			item.button1.SetOnClick(delegate
			{
				picker.SelectColor(item.button1.icon.color);
			});
			item.button2.SetOnClick(delegate
			{
				item.button1.icon.color = picker.SelectedColor;
				EMono.core.config.colors[_i] = IntColor.ToInt(picker.SelectedColor);
				SE.Tab();
			});
		}
		layoutColors.RebuildLayout();
		picker.ColorUpdated += delegate(Color c)
		{
			_onChangeColor(PickerState.Modify, c);
		};
		startColor = _startColor;
		resetColor = _resetColor;
		picker.Init();
		picker.SelectColor(_startColor);
		picker.SelectColor(_startColor);
		onChangeColor = _onChangeColor;
	}
}