Compare commits
No commits in common. "641c971f95e6b755b15705b2bd957c50c237c89d" and "64f1ad7808c32b6d5c8ccbbb7c52470d184b89da" have entirely different histories.
641c971f95
...
64f1ad7808
0
.readme_generator.py
Executable file → Normal file
0
AutoDropBedding/AutoDropBeddingMenu.cs
Normal file → Executable file
0
AutoDropBedding/Config.cs
Normal file → Executable file
0
AutoDropBedding/Extensions.cs
Normal file → Executable file
0
AutoDropBedding/HarmonyPatches/Patch_Survival_Camp.cs
Normal file → Executable file
0
AutoDropBedding/Helpers.cs
Normal file → Executable file
0
AutoDropBedding/ObjectBlueprints.xml
Normal file → Executable file
0
AutoDropBedding/Options.xml
Normal file → Executable file
0
AutoDropBedding/manifest.json
Normal file → Executable file
0
AutoDropBedding/preview.png
Normal file → Executable file
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
0
AutoDropBedding/screenshot_campfire.png
Normal file → Executable file
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
0
AutoDropBedding/screenshot_menu.png
Normal file → Executable file
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
0
AutoDropBedding/workshop.json
Normal file → Executable file
142
CyberneticHearingAid/CyberneticHeightenedHearingEffect.cs
Normal file → Executable file
|
@ -2,7 +2,6 @@ using System;
|
||||||
using XRL.UI;
|
using XRL.UI;
|
||||||
using XRL.World.Capabilities;
|
using XRL.World.Capabilities;
|
||||||
using XRL.World.Parts;
|
using XRL.World.Parts;
|
||||||
using XRL.World.Parts.Mutation;
|
|
||||||
|
|
||||||
// this is 95% copy/pasted from decompiled vanilla HeightenedHearingEffect
|
// this is 95% copy/pasted from decompiled vanilla HeightenedHearingEffect
|
||||||
// only thing added was a reference to the implant because it has the part rather than the implantee
|
// only thing added was a reference to the implant because it has the part rather than the implantee
|
||||||
|
@ -11,12 +10,18 @@ namespace XRL.World.Effects
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class CyberneticHeightenedHearingEffect : Effect
|
public class CyberneticHeightenedHearingEffect : Effect
|
||||||
{
|
{
|
||||||
public bool Identified;
|
public bool bIdentified;
|
||||||
public int Level = 1;
|
public int Level = 1;
|
||||||
public GameObject Listener;
|
public GameObject Listener;
|
||||||
public GameObject Implant;
|
public GameObject Implant;
|
||||||
|
public CyberneticHeightenedHearingEffect() => Duration = 1;
|
||||||
|
|
||||||
public CyberneticHeightenedHearingEffect() => this.Duration = 1;
|
public CyberneticHeightenedHearingEffect(int Level, GameObject Listener)
|
||||||
|
: this()
|
||||||
|
{
|
||||||
|
this.Level = Level;
|
||||||
|
this.Listener = Listener;
|
||||||
|
}
|
||||||
|
|
||||||
public CyberneticHeightenedHearingEffect(int Level, GameObject Listener, GameObject Implant)
|
public CyberneticHeightenedHearingEffect(int Level, GameObject Listener, GameObject Implant)
|
||||||
: this()
|
: this()
|
||||||
|
@ -32,65 +37,78 @@ namespace XRL.World.Effects
|
||||||
|
|
||||||
public override string GetDescription() => (string)null;
|
public override string GetDescription() => (string)null;
|
||||||
|
|
||||||
public override bool WantEvent(int ID, int cascade) => base.WantEvent(ID, cascade) || ID == SingletonEvent<EndTurnEvent>.ID || ID == EnteringCellEvent.ID;
|
|
||||||
|
|
||||||
public override bool HandleEvent(AfterPlayerBodyChangeEvent E)
|
|
||||||
{
|
|
||||||
this.CheckListen();
|
|
||||||
return base.HandleEvent(E);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool HandleEvent(EndTurnEvent E)
|
|
||||||
{
|
|
||||||
this.CheckListen();
|
|
||||||
return base.HandleEvent(E);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool HandleEvent(EnteringCellEvent E)
|
|
||||||
{
|
|
||||||
this.CheckListen();
|
|
||||||
return base.HandleEvent(E);
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool BadListener()
|
private bool BadListener()
|
||||||
{
|
{
|
||||||
this.Listener = (GameObject)null;
|
Listener = null;
|
||||||
this.Object?.RemoveEffect((Effect)this);
|
Object.RemoveEffect(this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CheckListen()
|
public bool CheckListen()
|
||||||
{
|
{
|
||||||
if (!GameObject.Validate(this.Object))
|
if (!GameObject.validate(ref Listener) || !Listener.IsPlayer())
|
||||||
return true;
|
|
||||||
if (!GameObject.Validate(ref this.Listener) || !this.Listener.IsPlayer())
|
|
||||||
return this.BadListener();
|
|
||||||
CyberneticsHearingAid part = this.Listener.GetPart<CyberneticsHearingAid>();
|
|
||||||
if (part == null || part.Level <= 0)
|
|
||||||
return this.BadListener();
|
|
||||||
if (!(Implant.GetPart("CyberneticsHearingAid") is CyberneticsHearingAid otherpart))
|
|
||||||
return this.BadListener();
|
|
||||||
int num = this.Object.DistanceTo(this.Listener);
|
|
||||||
if (num > part.GetRadius())
|
|
||||||
return this.BadListener();
|
|
||||||
if (this.Identified || this.Object.CurrentCell == null)
|
|
||||||
return true;
|
|
||||||
if (((int)((double)(100 + 10 * this.Level) / Math.Pow((double)(num + 9), 2.0) * 100.0)).in100())
|
|
||||||
{
|
{
|
||||||
this.Identified = true;
|
return BadListener();
|
||||||
if (this.Listener.IsPlayer())
|
|
||||||
AutoAct.CheckHostileInterrupt();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(Implant.GetPart("CyberneticsHearingAid") is CyberneticsHearingAid part))
|
||||||
|
{
|
||||||
|
return BadListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
int num = Object.DistanceTo(Listener);
|
||||||
|
if (num > part.Radius)
|
||||||
|
{
|
||||||
|
return BadListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bIdentified)
|
||||||
|
{
|
||||||
|
CheckInterruptAutoExplore();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Object.CurrentCell == null)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (((int)((100 + (10 * Level)) / Math.Pow(num + 9, 2.0) * 100.0)).in100())
|
||||||
|
{
|
||||||
|
bIdentified = true;
|
||||||
|
CheckInterruptAutoExplore();
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void CheckInterruptAutoExplore()
|
||||||
|
{
|
||||||
|
if (!bIdentified || !GameObject.validate(ref Listener) || !Listener.IsPlayer() || !AutoAct.IsInterruptable() || AutoAct.IsGathering() || !Listener.IsRelevantHostile(Object))
|
||||||
|
return;
|
||||||
|
AddPlayerMessage(Listener.GenerateSpotMessage(Object, verb: "hear"));
|
||||||
|
AutoAct.Interrupt(null, null, Object);
|
||||||
|
}
|
||||||
|
|
||||||
public override bool Apply(GameObject Object)
|
public override bool Apply(GameObject Object)
|
||||||
{
|
{
|
||||||
this.CheckListen();
|
if (Object.pBrain != null)
|
||||||
|
Object.pBrain.Hibernating = false;
|
||||||
|
CheckListen();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RegisterActive(GameObject Object, IEventRegistrar Registrar) => Registrar.Register((IEventSource)The.Game, (IEventHandler)this, PooledEvent<AfterPlayerBodyChangeEvent>.ID);
|
public override void Register(GameObject Object)
|
||||||
|
{
|
||||||
|
Object.RegisterEffectEvent(this, "EndTurn");
|
||||||
|
base.Register(Object);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Unregister(GameObject Object)
|
||||||
|
{
|
||||||
|
Object.UnregisterEffectEvent(this, "EndTurn");
|
||||||
|
base.Unregister(Object);
|
||||||
|
}
|
||||||
|
|
||||||
public bool HeardAndNotSeen(GameObject obj)
|
public bool HeardAndNotSeen(GameObject obj)
|
||||||
{
|
{
|
||||||
|
@ -104,24 +122,36 @@ namespace XRL.World.Effects
|
||||||
|
|
||||||
public override bool FinalRender(RenderEvent E, bool bAlt)
|
public override bool FinalRender(RenderEvent E, bool bAlt)
|
||||||
{
|
{
|
||||||
if (!this.HeardAndNotSeen(this.Object) || !this.Object.CanHypersensesDetect())
|
if (!HeardAndNotSeen(Object) || !Object.CanHypersensesDetect())
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
E.Tile = (string)null;
|
}
|
||||||
if (this.Identified)
|
|
||||||
|
if (bIdentified)
|
||||||
{
|
{
|
||||||
E.HighestLayer = 0;
|
E.HighestLayer = 0;
|
||||||
E.NoWake = true;
|
Object.Render(E);
|
||||||
this.Object.ComponentRender(E);
|
|
||||||
E.RenderString = this.Object.Render.RenderString;
|
|
||||||
if (Options.UseTiles)
|
|
||||||
E.Tile = this.Object.Render.Tile;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
E.RenderString = "?";
|
|
||||||
E.ColorString = "&K";
|
E.ColorString = "&K";
|
||||||
E.DetailColor = "K";
|
E.DetailColor = "K";
|
||||||
|
E.RenderString = Object.pRender.RenderString;
|
||||||
|
E.Tile = !Options.UseTiles ? null : Object.pRender.Tile;
|
||||||
E.CustomDraw = true;
|
E.CustomDraw = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
E.RenderString = "&K?";
|
||||||
|
E.Tile = null;
|
||||||
|
E.CustomDraw = true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool FireEvent(Event E)
|
||||||
|
{
|
||||||
|
if (E.ID == "EndTurn" && Object != null)
|
||||||
|
CheckListen();
|
||||||
|
return base.FireEvent(E);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
4
CyberneticHearingAid/CyberneticsHearingAid.cs
Normal file → Executable file
|
@ -16,9 +16,7 @@ namespace XRL.World.Parts
|
||||||
get { return GetAvailableComputePowerEvent.GetFor(ParentObject.Implantee) + 1; }
|
get { return GetAvailableComputePowerEvent.GetFor(ParentObject.Implantee) + 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int GetRadius(int Level) => Level < 10 ? 3 + Level * 2 : 40;
|
public override bool SameAs(IPart p) => false;
|
||||||
|
|
||||||
public int GetRadius() => CyberneticsHearingAid.GetRadius(this.Level);
|
|
||||||
|
|
||||||
public override bool WantEvent(int ID, int cascade) => base.WantEvent(ID, cascade) || ID == EndTurnEvent.ID || ID == GetShortDescriptionEvent.ID;
|
public override bool WantEvent(int ID, int cascade) => base.WantEvent(ID, cascade) || ID == EndTurnEvent.ID || ID == GetShortDescriptionEvent.ID;
|
||||||
|
|
||||||
|
|
0
CyberneticHearingAid/ObjectBlueprints.xml
Normal file → Executable file
0
CyberneticHearingAid/Textures/Items/hearingaid.png
Normal file → Executable file
Before Width: | Height: | Size: 726 B After Width: | Height: | Size: 726 B |
2
CyberneticHearingAid/manifest.json
Normal file → Executable file
|
@ -2,7 +2,7 @@
|
||||||
"id": "CyberneticHearingAid",
|
"id": "CyberneticHearingAid",
|
||||||
"title": "{{cybernetic hearing aid|Cybernetic Hearing Aid}}",
|
"title": "{{cybernetic hearing aid|Cybernetic Hearing Aid}}",
|
||||||
"description": "Enhanced hearing mutation but in cybernetics form.",
|
"description": "Enhanced hearing mutation but in cybernetics form.",
|
||||||
"version": "1.0.1",
|
"version": "1.0.0",
|
||||||
"author": "{{paisley|Celediel}}",
|
"author": "{{paisley|Celediel}}",
|
||||||
"previewImage": "preview.png"
|
"previewImage": "preview.png"
|
||||||
}
|
}
|
0
CyberneticHearingAid/preview.png
Normal file → Executable file
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
2
CyberneticHearingAid/workshop.json
Normal file → Executable file
|
@ -3,6 +3,6 @@
|
||||||
"Title": "Cybernetic Hearing Aid",
|
"Title": "Cybernetic Hearing Aid",
|
||||||
"Description": "Like the Enhanced Hearing mutation, but a cybernetic.",
|
"Description": "Like the Enhanced Hearing mutation, but a cybernetic.",
|
||||||
"Tags": "Script,Cybernetic",
|
"Tags": "Script,Cybernetic",
|
||||||
"Visibility": "2",
|
"Visibility": "0",
|
||||||
"ImagePath": "preview.png"
|
"ImagePath": "preview.png"
|
||||||
}
|
}
|