Talk:Overloaded

From Caves of Qud Wiki
Revision as of 03:31, 2 August 2021 by Chaos (talk | contribs) (respond)
Jump to navigation Jump to search

Notes from decompilation

[1]

if (IsPowerLoadSensitive && E.Subject == ParentObject && E.BaseDamage != "0")
			{
				int num = MyPowerLoadBonus(); // +=300 if overloaded, =100 by default {{Code Reference|class=IActivePart.cs|method=MyPowerLoadBonus}}
				if (num != 0)
				{
					E.GetDamageRoll()?.AdjustResult(num);
				}
			}
			return base.HandleEvent(E); load min value baseline 100 divisor 150 

IsPowerLoadSensitive is true by default, the only ones that are specified to be false is hypertractor, ganglionic teleprojector, and the overloaded laser pistol (presumably because it is already overloaded). i dont understand AdjustResult, but it always seems to add a +2 to the original damage.

[2]

int @for = GetOverloadChargeEvent.GetFor(Object, Amount);
			if (@for > 0)
			{
				GameObject gameObject = Object.Equipped ?? Object.Implantee ?? Object.InInventory;
				Object.TemperatureChange(1 + @for / 100, gameObject);
				gameObject?.TemperatureChange(1 + @for / 100, gameObject);
				if ((1 + @for / 10).in10000() && Object.ApplyEffect(new Broken(FromDamage: false, FromExamine: false, FromOverload: true)))
				{
					Messaging.XDidY(Object, "overheat", null, "!", null, null, null, UseFullNames: false, IndefiniteSubject: false, gameObject, null, DescribeSubjectDirection: false, DescribeSubjectDirectionLate: false, AlwaysVisible: false, FromDialog: false, UsePopup: false, gameObject);
				}
			}

I have no idea what number the event here is returning X_X if i learn what @for is here, I would be able to get everything. Teamtoto (talk) 02:19, 2 August 2021 (UTC)

  • The name of the variable you're decompiling as @for is just charge. It's the amount of charge to use for heat/breakage calculations. GetOverloadChargeEvent allows that to be modified; it's unused at the moment and just passes back the actual amount of charge consumed.
  • IsPowerLoadSensitive is a field on IActivePart and only controls applicability of ModOverloaded to IActivePart inheritors; the actual control is IsOverloadableEvent, which IActivePart responds to in a fashion defined by IsPowerLoadSensitive but can also be responded to independently, and two parts do so, Teleprojector and GeomagneticDisk. (So the indication in the page that ganglionic teleprojectors can't be overloaded is incorrect, and it's not that IsPowerLoadSensitive is set to false for it, it's that that field doesn't even exist in Teleprojector because Teleprojector is not an IActivePart.)
  • FWIW I don't think becoming tech scannable or EMPable is worth highlighting; it's not clear to me that there's a case where ModOverloaded could be applied where those weren't already the case.
  • Also FWIW, the original line for that message is Messaging.XDidY(Object, "overheat", terminalPunctuation: "!", SubjectPossessedBy: who, UseVisibilityOf: who);. What the decompiler is doing to it is pretty hideous. --Chaos (talk) 03:30, 2 August 2021 (UTC)
    1. XRL.World.Parts.EnergyAmmoLoader.cs
    2. XRL.World.ChargeUsedEvent.cs