Elin:Code Analysis/Ether Diseases

From Ylvapedia
Revision as of 01:36, 21 December 2024 by Inno (talk | contribs) (Created page with "{{spoiler}} ==Ether Diseases (EA23.61)== ===Depiction of Ether Disease in code: an Index=== <syntaxhighlight lang="c#" line="1"> public const int etherManaBattery = 1564; public const int etherPoisonHand = 1565; public const int etherProvoke = 1563; public const int etherStupid = 1561; public const int etherWeak = 1560; public const int etherAddict = 1559; public const int etherRain = 1558; public const int etherHead = 1557; public const int etherViolence = 1556; public...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Ether Diseases (EA23.61)

Depiction of Ether Disease in code: an Index

public const int etherManaBattery = 1564;
public const int etherPoisonHand = 1565;
public const int etherProvoke = 1563;
public const int etherStupid = 1561;
public const int etherWeak = 1560;
public const int etherAddict = 1559;
public const int etherRain = 1558;
public const int etherHead = 1557;
public const int etherViolence = 1556;
public const int etherNeck = 1555;
public const int etherWing = 1554;
public const int etherEye = 1553;
public const int etherFeet = 1552;
public const int etherArmor = 1562;
public const int etherUgly = 1551;
public const int etherGravity = 1550;
  • All ether disease is depicted with integer (i.e. level). There are 16 kinds of diseases, and we will review each of them.
  • If you want to see for the effect yourself, just search for that number in code.

Mana Battery

    case 1564:
			ModBase(961, a * 5, hide: false);
			break;
  • This disease increase your magic resistance (961) by 5 per level (there is only one level currently).
public void TryAbsorbRod(Thing t)
	{
		if (!IsPC || !(t.trait is TraitRod) || t.c_charges <= 0 || !HasElement(1564))
		{
			return;
		}
		Say("absorbRod", this, t);
		TraitRod rod = t.trait as TraitRod;
		bool flag = false;
		if (rod.source != null)
		{
			using IEnumerator<SourceElement.Row> enumerator = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.id == rod.source.id).GetEnumerator();
			if (enumerator.MoveNext())
			{
				SourceElement.Row current = enumerator.Current;
				if (IsPC)
				{
					GainAbility(current.id, t.c_charges * 100);
					flag = true;
				}
			}
		}
		if (!flag)
		{
			mana.Mod(-50 * t.c_charges);
		}
		t.c_charges = 0;
		LayerInventory.SetDirty(t);
	}
    ...
    public void GainAbility(int ele, int mtp = 100)
	{
		Element orCreateElement = elements.GetOrCreateElement(ele);
		if (orCreateElement.ValueWithoutLink == 0)
		{
			elements.ModBase(orCreateElement.id, 1);
		}
		if (orCreateElement is Spell)
		{
			int num = mtp * orCreateElement.source.charge * (100 + Evalue(307) + (HasElement(307) ? 20 : 0)) / 100 / 100;
			if (orCreateElement.source.charge == 1)
			{
				num = 1;
			}
			orCreateElement.vPotential += Mathf.Max(1, num / 2 + EClass.rnd(num / 2 + 1));
		}
		Say("spell_gain", this, orCreateElement.Name);
		LayerAbility.SetDirty(orCreateElement);
	}
  • Once detect PC have mana battery, it will take the charges in a rod, then call Gainability(this spell, 100 * charge number) to give PC this spell.
  • This does not mean you get 100 wish spells for 1 charge of wish rod! Each spell have a unique charge parameter (see SourceGame/Element for more), and depend on the charge number it will give you number of spell casting.
    • This value is modified by your memorization skill. If you have the skill, a flat 20% is added, then for each skill level, 1% added.
    • For example, for a wish rod, and you have lvl 80 memorization, the num will equal to = 100 * 1 (Wish has a charge number of 1) * (80+100+20) / 100 / 100 = 2
    • Which is pretty good, yes, you get 2 wishes out of 1 rod, but can you cast it, hum?
  • After that, if you are not PC, your mana will be drained by 50 per charge of rod. Then the rod goes to 0 charges.

Poison Hand

    case 1565:
			ModBase(955, a * 20, hide: false);
			break;
  • Each level of poison hand raise your poison resistance by 20 (there is only 1 level).
    if (conWeapon == null && weapon == null && (CC.MainElement != Element.Void || CC.HasElement(1565)))
			{
				num5 = (CC.HasElement(1565) ? 915 : CC.MainElement.id);
				num6 = CC.Power / 3 + EClass.rnd(CC.Power / 2);
				if (CC.MainElement != Element.Void)
				{
					num6 += CC.MainElement.Value;
				}
				showEffect = false;
				num7 = 50;
			}
  • When you attack with no weapon, all your attack will be transformed into element Poison (915).
  • We see in the code a -50% penalty will be applied to your damage as well but this need confirmation.
    public Thing TryPoisonPotion(Thing t)
	{
		if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
		{
			string text = EClass.sources.things.rows.Where((SourceThing.Row a) => a._origin == "potion" && a.tag.Contains("neg") && a.chance > 100).ToList().RandomItemWeighted((SourceThing.Row a) => a.chance)
				.id;
			Say("poisonDrip", this);
			int num = t.Num;
			t.Destroy();
			t = ThingGen.Create(text).SetNum(num);
		}
		return t;
	}
  • This is the code use to make all your potions in your bag poison.
  • A random chance of 50% is applied first, so there is 50% chance your potion will be spared.
  • It also looks like it will transform a whole stack of your potions at once.