Skip to content

EA 23.343.3 Nightly โ€‹

September 7, 2026

6 files modified.

Important Changes โ€‹

None.

CurrencyType โ€‹

public enum CurrencyType

cs
	Money2,
	BranchMoney,
	Influence,
	Casino_coin 
	Casino_coin, 
	BlueCapsule 
}

DNA โ€‹

using System;

cs
using System;
using System.Collections.Generic;
using System.Linq; 
using System.Runtime.Serialization;
using Newtonsoft.Json;
using UnityEngine;

public enum Type

cs
	Inferior = 0,
	Default = 3,
	Superior = 5,
	Superimani = 6, 
	Brain = 8
}

public int slot

cs
	}
}

public bool isManiGene 
{ 
	get 
	{ 
		return bits[0]; 
	} 
	set 
	{ 
		bits[0] = value; 
	} 
} 
[OnSerializing]
private void _OnSerializing(StreamingContext context)
{

public static void GenerateManiGene(Card owner)

cs
Rand.SetSeed(owner.c_seed);
CardRow r = SpawnList.Get("chara").Select(100);
Rand.SetSeed(owner.c_seed);
Thing thing = GenerateGene(r, Type.Superior, owner.LV, owner.c_seed); 
thing.c_DNA.cost = thing.c_DNA.cost / 2; 
thing.c_DNA.isManiGene = true; 
thing.ChangeMaterial(36); 
Thing thing = GenerateGene(r, Type.Superimani, owner.LV, owner.c_seed); 
thing.MakeRefFrom("mani");
Rand.SetSeed();
owner.c_seed++;

public void Generate(Type _type, Chara model = null)

cs
	}
	AddSpecial();
	break;
case Type.Superimani:
	AddRandom(EClass.rnd(EClass.rnd(4)) + 3); 
	if (EClass.rnd(3) == 0) 
	{ 
		AddSpecial(); 
	} 
	AddSpecial(); 
	if (EClass.rnd(3) != 0) 
	{ 
		IEnumerable<SourceElement.Row> enumerable = EClass.sources.elements.map.Values.Where((SourceElement.Row row) => row.tag.Contains("gene_mani") && lv + ((!EClass.debug.enable) ? 1 : 100) >= row.LV); 
		if (enumerable.Count() > 0) 
		{ 
			SourceElement.Row e = enumerable.RandomItem(); 
			AddVal(e.id, (!(e.category == "ability")) ? 1 : 100, allowStack: false, (int v) => e.cost[0], allowNegative: false); 
		} 
	} 
	cost = cost / 2 - 10; 
	break; 
}
if (vals.Count == 0)
{
	for (int i = 0; i < 10; i++) 
	for (int num = 0; num < 10; num++) 
	{
		if (EClass.rnd(4) == 0)
		{

void AddBody()

cs
if (body == 0)
{
	BodySlot bodySlot = null;
	for (int j = 0; j < 100; j++) 
	for (int i = 0; i < 100; i++) 
	{
		BodySlot bodySlot2 = model.body.slots.RandomItem();
		if (bodySlot2 != null && bodySlot2.elementId != 40 && bodySlot2.elementId != 44 && bodySlot2.elementId != 46)

void AddFeat()

cs
	if (listFeat.Count != 0)
	{
		feat++;
		Element e = listFeat.RandomItem(); 
		if (maxSlot <= 1 || e.source.geneSlot <= 1) 
		Element e2 = listFeat.RandomItem(); 
		if (maxSlot <= 1 || e2.source.geneSlot <= 1) 
		{
			if (e.source.geneSlot > maxSlot) 
			if (e2.source.geneSlot > maxSlot) 
			{
				maxSlot = e.source.geneSlot; 
				maxSlot = e2.source.geneSlot; 
			}
			AddVal(e.id, 1, allowStack: false, (int v) => e.source.cost[0] * 5, allowNegative: false); 
			AddVal(e2.id, 1, allowStack: false, (int v) => e2.source.cost[0] * 5, allowNegative: false); 
		}
	}
}
void AddRandom(int n)
{
	for (int j = 0; j < n; j++) 
	for (int i = 0; i < n; i++) 
	{
		if (EClass.debug.enable && EClass.rnd(2) == 0)
		{

void AddVal(int id, int v, bool allowStack, Func<int, int> funcCost, bool allowNโ€ฆ)

cs
if (v >= 0 || allowNegative)
{
	bool flag = false;
	int num = EClass.curve(v, 20, 10, 90); 
	int num2 = EClass.curve(v, 20, 10, 90); 
	if (v < -100)
	{
		num = EClass.curve(Mathf.Abs(v + 100), 20, 10, 90); 
		num2 = EClass.curve(Mathf.Abs(v + 100), 20, 10, 90); 
	}
	v = EClass.curve(v, 20, 10, 80);
	for (int j = 0; j < vals.Count; j += 2) 
	for (int i = 0; i < vals.Count; i += 2) 
	{
		if (vals[j] == id) 
		if (vals[i] == id) 
		{
			if (allowStack)
			{
				v /= 2;
				num /= 2; 
				vals[j + 1] += v; 
				Debug.Log(vals[j + 1] + ": " + v + "/" + num); 
				num2 /= 2; 
				vals[i + 1] += v; 
				Debug.Log(vals[i + 1] + ": " + v + "/" + num2); 
				flag = true;
				break;
			}

void AddVal(int id, int v, bool allowStack, Func<int, int> funcCost, bool allowNโ€ฆ)

cs
				vals.Add(id);
				vals.Add(v);
			}
			cost += Mathf.Max(0, funcCost(num)); 
			cost += Mathf.Max(0, funcCost(num2)); 
		}
	}
}

public void CalcSlot()

cs
for (int i = 0; i < vals.Count; i += 2)
{
	Element element = Element.Create(vals[i], vals[i + 1]);
	if (element.source.geneSlot < 0) 
	if (type != Type.Superimani || !element.HasTag("gene_mani")) 
	{
		slot = 99; 
	} 
	if (element.source.geneSlot > slot) 
	{ 
		slot = element.source.geneSlot; 
		if (element.source.geneSlot < 0) 
		{ 
			slot = 99; 
		} 
		if (element.source.geneSlot > slot) 
		{ 
			slot = element.source.geneSlot; 
		} 
	}
}
if (slot < 0)

public static Type GetType(string idMat)

cs
		"jelly" => Type.Default, 
		"gold" => Type.Superior, 
		"amethyst" => Type.Brain, 
		"lapis" => Type.Superimani,  
		_ => Type.Inferior, 
	};
}

public string GetMaterialId(Type type)

cs
{
	Type.Default => "jelly", 
	Type.Superior => "gold", 
	Type.Superimani => "lapis",  
	Type.Brain => "amethyst", 
	_ => "process", 
};

Trait โ€‹

public virtual int CostRerollShop

cs
	}
}

public virtual CurrencyType CurrencyRerollShop => CurrencyType.Influence; 
public virtual bool AllowCriminal => owner.isThing;

public virtual int RestockDay => 5;

public virtual void OnBarter(bool reroll = false)

cs
	break;
}
ShopType shopType = ShopType;
if ((uint)(shopType - 24) <= 1u && EClass._zone is Zone_Yowyn) 
if ((uint)(shopType - 24) <= 1u) 
{
	Add("milk_kumiromi", EClass.rndHalf(6), 0); 
	if (EClass._zone is Zone_Yowyn) 
	{ 
		Add("milk_kumiromi", EClass.rndHalf(6), 0); 
	} 
	if (EClass._zone is Zone_Nefu) 
	{ 
		Add("milk_horome", EClass.rndHalf(6), 0); 
	} 
}
switch (owner.id)
{

TraitGodStatue โ€‹

public override void OnCreate(int lv)

cs
	OnChangeMaterial();
}

public override void OnBarter(bool reroll = false) 
{ 
	if (Religion.id == "machine") 
	{ 
		DNA.GenerateManiGene(owner); 
	} 
} 
public void OnChangeMaterial()
{
	owner.isOn = owner.material.alias == "gold";

TraitPowerStatue โ€‹

public override bool CanBeDestroyed

cs
public override string IDInvStyle => "jewelbox";

public override int CostRerollShop => 0; 
public override int CostRerollShop => 1; 
public override CurrencyType CurrencyRerollShop => CurrencyType.BlueCapsule; 

public override bool CanStack => false;

public override bool OnUse(Chara c)

cs
	{
		DNA.GenerateManiGene(owner);
	}
	LayerInventory.CreateContainer<InvOwnerChoose>(owner, owner); 
	LayerInventory.CreateContainer<InvOwnerChoose>(owner, owner).TryShowHint("h_invManiGene"); 
	SE.Play("pop_principal"); 
	return false;
}
Msg.Say("shrine_power", owner);

UIInventory โ€‹

public void SwitchTab(Tab tab)

cs
{
	tab.owner.BuildUICurrency(layer.uiCurrency, tab.owner.owner.trait.CostRerollShop != 0 || EMono.debug.enable);
}
layer.TryShowHint("h_inv" + tab.mode); 
if ((bool)headerRow)
{
	UIHeader[] componentsInChildren = headerRow.GetComponentsInChildren<UIHeader>(includeInactive: true);

void RefreshDist2()

cs
	{
		break;
	}
	menuBottom.AddButton("rerollShop".lang(cost.ToString() ?? ""), delegate
	menuBottom.AddButton("rerollShop".lang(cost.ToString() ?? "", (_owner.trait.CurrencyRerollShop == CurrencyType.BlueCapsule) ? EMono.sources.things.map["drug_blue"].GetName() : "influence".lang()), delegate
	{
		if (EMono._zone.influence < cost) 
		if (_owner.trait.CurrencyRerollShop == CurrencyType.BlueCapsule) 
		{
			SE.Beep(); 
			Msg.Say("notEnoughInfluence"); 
			if (EMono.pc.GetCurrency("drug_blue") < cost) 
			{ 
				SE.Beep(); 
				Msg.Say("notEnoughSomething", EMono.sources.things.map["drug_blue"].GetName()); 
				return; 
			} 
			EMono.pc.ModCurrency(-1, "drug_blue"); 
		}
		else
		{
			SE.Dice(); 
			if (EMono._zone.influence < cost) 
			{ 
				SE.Beep(); 
				Msg.Say("notEnoughInfluence"); 
				return; 
			} 
			EMono._zone.influence -= cost;
			_owner.c_dateStockExpire = 0; 
			_owner.trait.OnBarter(reroll: true); 
			RefreshGrid(); 
			Sort(); 
			SE.Play("shop_open"); 
		}
	}); 
		SE.Dice(); 
		_owner.c_dateStockExpire = 0; 
		_owner.trait.OnBarter(reroll: true); 
		RefreshGrid(); 
		Sort(); 
		SE.Play("shop_open"); 
		TooltipManager.Instance.HideTooltips(immediate: true); 
	}, null, "DefaultContentFit").RebuildLayout(); 
	break;
}
}