Hekateras Posted December 18, 2019 Share Posted December 18, 2019 Hi. Amazing work you've done with the asset extraction. I didn't read all 60 pages of the thread, but do you have the extracted sprites uploaded somewhere? The dupe sprites, in particular. I'm toying with the idea of making a mod with custom dupe templates... 1 Link to comment Share on other sites More sharing options...
MF99K Posted December 18, 2019 Share Posted December 18, 2019 1 hour ago, Hekateras said: Hi. Amazing work you've done with the asset extraction. I didn't read all 60 pages of the thread, but do you have the extracted sprites uploaded somewhere? The dupe sprites, in particular. I'm toying with the idea of making a mod with custom dupe templates... do you mean the sprite sheets? if so, here: dupesprites.zip Link to comment Share on other sites More sharing options...
watermelen671 Posted December 18, 2019 Author Share Posted December 18, 2019 5 hours ago, Hekateras said: Hi. Amazing work you've done with the asset extraction. I didn't read all 60 pages of the thread, but do you have the extracted sprites uploaded somewhere? The dupe sprites, in particular. I'm toying with the idea of making a mod with custom dupe templates... Well boy howdy hey do I have a metric butt ton of stuff for you! duplicant_sprites.zip Also I finally managed to get around to finishing updating all of the old job jumpsuits! Spoiler They are, in order: Spoiler Athlete Builder Body Builder Cook Doctor Mechanic Miner Scientist Water Suit For those curious. Also @Hekateras, if you'd like to have the old/scrapped helms just lemme know and I'll post 'em here. 1 1 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 18, 2019 Author Share Posted December 18, 2019 Okay...so I found something that's kinda interesting, it's a scrapped disease called "Fiery Skin". No it's actually not heatstroke, but it's similar. Apparently it's an illness that causes duplicants to periodically give off heat for the duration of their illness. I think that'd be a neat thing for those seeking for a challenge to deal with. Spoiler I mean yeah you could just let them die, but the same could be said for literally everything else in the game. And when you think like that it causes any potential challenge to be yeeted out the window. Here's some of the old code for it: Spoiler // Klei.AI.FierySkin using Klei.AI; using UnityEngine; public class FierySkin : AnimatedDisease { private struct InstanceData { public SchedulerHandle schedulerHandle; public KAnimControllerBase controller; } private const float EmitInterval = 3f; private const float EmitEnergy = 10f; public FierySkin() : base("FierySkin", 0.1f, 900f, "anim_idle_fiery", "SickFierySkin") { } protected override object OnInfect(GameObject go) { base.OnInfect(go); InstanceData instanceData = default(InstanceData); instanceData.schedulerHandle = GameScheduler.Instance.SchedulePeriodic("EmitHeat", 3f, Emit, go); Emit(go); KBatchedAnimController kBatchedAnimController = FXHelpers.CreateEffect("fiery_fx", go.transform, update_looping_sounds_position: true); kBatchedAnimController.transform.localPosition = Vector3.zero; kBatchedAnimController.Play(new string[2] { "working_pre", "working_loop" }, KAnim.PlayMode.Loop); instanceData.controller = kBatchedAnimController; return instanceData; } protected override void OnCure(GameObject go, object instance_data) { InstanceData instanceData = (InstanceData)instance_data; instanceData.schedulerHandle.Clear(); KAnimControllerBase controller = instanceData.controller; controller.Play("working_pst"); controller.destroyOnAnimComplete = true; base.OnCure(go, instance_data); } private void Emit(object data) { GameObject gameObject = (GameObject)data; int num = Grid.PosToCell(gameObject.transform.position); int gameCell = Grid.CellAbove(num); SimMessages.ModifyEnergy(num, 5f, SimMessages.EnergySourceID.FierySkin); SimMessages.ModifyEnergy(gameCell, 5f, SimMessages.EnergySourceID.FierySkin); } } And here's the code for every other scrapped disease too while I'm at it! Spoiler DWEEBCEPHALY Spoiler // Klei.AI.Dweebcephaly using Klei.AI; using STRINGS; public class Dweebcephaly : AttributeModifierDisease { public Dweebcephaly() : base("Dweebcephaly", use_custom_effect: false, new AttributeModifier[1] { new AttributeModifier("Learning", -2f, DUPLICANTS.DISEASES.DWEEBCEPHALY.NAME) }, 0.005f, 900f, new EffectProbabilityDelta[1] { new EffectProbabilityDelta { effectID = "DirtyHands", probabilityDelta = 0.005f } }) { } } LAZIBONITIS Spoiler // Klei.AI.Lazibonitis using Klei.AI; using STRINGS; public class Lazibonitis : AttributeModifierDisease { public Lazibonitis() : base("Lazibonitis", use_custom_effect: false, new AttributeModifier[2] { new AttributeModifier("Athletics", -4f, DUPLICANTS.DISEASES.LAZIBONITIS.NAME), new AttributeModifier("Strength", -3f, DUPLICANTS.DISEASES.LAZIBONITIS.NAME) }, 0.1f, 900f) { } } TRENCH STENCH Spoiler // Klei.AI.PutridOdour using Klei.AI; using UnityEngine; public class PutridOdour : Disease { private struct InstanceData { public SchedulerHandle schedulerHandle; public KAnimControllerBase controller; } private const float EmitInterval = 5f; private const float EmissionRadius = 1.5f; private const float MaxDistanceSq = 2.25f; public PutridOdour() : base("PutridOdour", 0.000833333354f, 900f) { } protected override object OnInfect(GameObject go) { InstanceData instanceData = default(InstanceData); instanceData.schedulerHandle = GameScheduler.Instance.SchedulePeriodic("PutridOdourEmit", 5f, Emit, go); KBatchedAnimController kBatchedAnimController = FXHelpers.CreateEffect("odor_fx", go.transform, update_looping_sounds_position: true); kBatchedAnimController.transform.localPosition = Vector3.zero; kBatchedAnimController.Play(new string[2] { "working_pre", "working_loop" }, KAnim.PlayMode.Loop); instanceData.controller = kBatchedAnimController; Emit(go); return instanceData; } protected override void OnCure(GameObject go, object instance_data) { InstanceData instanceData = (InstanceData)instance_data; KAnimControllerBase controller = instanceData.controller; controller.Play("working_pst"); controller.destroyOnAnimComplete = true; instanceData.schedulerHandle.Clear(); } private void Emit(object data) { GameObject gameObject = (GameObject)data; Components.Cmps<MinionIdentity> liveMinionIdentities = Components.LiveMinionIdentities; Vector2 a = gameObject.transform.position; for (int i = 0; i < liveMinionIdentities.Count; i++) { MinionIdentity minionIdentity = liveMinionIdentities[i]; if (minionIdentity.gameObject != gameObject.gameObject) { Vector2 b = minionIdentity.transform.position; float num = Vector2.SqrMagnitude(a - b); if (num <= 2.25f) { minionIdentity.Trigger(508119890, Strings.Get("STRINGS.DUPLICANTS.DISEASES.PUTRIDODOUR.CRINGE_EFFECT").String); minionIdentity.GetComponent<Effects>().Add("SmelledPutridOdour", should_save: true); minionIdentity.gameObject.GetSMI<ThoughtGraph.Instance>().AddThought(Db.Get().Thoughts.PutridOdour); } } } } } SAWCORPSIS Spoiler // Klei.AI.SawCorpsosis using Klei.AI; using STRINGS; public class SawCorpsosis : AttributeModifierDisease { public SawCorpsosis() : base("SawCorpsosis", use_custom_effect: false, new AttributeModifier[1] { new AttributeModifier("StressDelta", 3f, DUPLICANTS.DISEASES.SAWCORPSOSIS.NAME) }, 0.1f, 1200f) { } } SPORES Spoiler // Klei.AI.Spores using Klei.AI; using UnityEngine; public class Spores : Disease { private struct InstanceData { public SchedulerHandle schedulerHandle; } private const float EmitInterval = 3f; private const float EmitMass = 0.05f; private const SimHashes EmitElement = SimHashes.ContaminatedOxygen; private const string KAnimFilename = "anim_idle_spores"; public Spores() : base("Spores", 0.000833333354f, 900f) { } protected override object OnInfect(GameObject go) { InstanceData instanceData = default(InstanceData); instanceData.schedulerHandle = GameScheduler.Instance.SchedulePeriodic("EmitSpores", 3f, Emit, go); KAnimFile anim = Assets.GetAnim("anim_idle_spores"); go.GetComponent<KAnimControllerBase>().AddAnimOverrides(anim, 10f); go.GetComponent<FaceGraph>().AddExpression(Db.Get().Expressions.SickSpores); Emit(go); return instanceData; } protected override void OnCure(GameObject go, object instace_data) { go.GetComponent<FaceGraph>().RemoveExpression(Db.Get().Expressions.SickSpores); KAnimFile anim = Assets.GetAnim("anim_idle_spores"); go.GetComponent<KAnimControllerBase>().RemoveAnimOverrides(anim); ((InstanceData)instace_data).schedulerHandle.Clear(); } private void Emit(object data) { GameObject gameObject = (GameObject)data; int gameCell = Grid.PosToCell(gameObject.transform.position); float value = Db.Get().Amounts.Temperature.Lookup(gameObject).value; SimMessages.AddRemoveSubstance(gameCell, SimHashes.ContaminatedOxygen, CellEventLogger.Instance.ElementConsumerSimUpdate, 0.05f, value); KBatchedAnimController kBatchedAnimController = FXHelpers.CreateEffect("spore_fx", gameObject.transform, update_looping_sounds_position: true); kBatchedAnimController.transform.localPosition = Vector3.zero; kBatchedAnimController.Play(new string[3] { "working_pre", "working_loop", "working_pst" }); kBatchedAnimController.destroyOnAnimComplete = true; } } Also...what the heck is "Voronoi"? Spoiler It's split up into separate parts: Tree, Leaf, Node, and Diagram. I'm not sure if it's some sort of analogous coding term, or an actual tree we're talking about here... Also! Does anybody remember the Kukumelon? Spoiler This bad boy: Apparently this is also a Ginko Nut...which has anti fungal properties. Spoiler In game, ginko nuts don't exist in real life. Note that mostly everything that I'm posting here has been expunged from the latest build of the game. And everything else that's old that I've decided to dig up. Spoiler Meanwhile I'm going to continue trying to assemble how the really old UI looked...wish me luck. Spoiler Also I haven't forgotten about your werepig request @minespatch 2 1 Link to comment Share on other sites More sharing options...
minespatch Posted December 18, 2019 Share Posted December 18, 2019 34 minutes ago, watermelen671 said: What a shame. Would love a plant that crawls from the side. 1 Link to comment Share on other sites More sharing options...
Hekateras Posted December 18, 2019 Share Posted December 18, 2019 Thank you! You're a legend. Damn, So this looks complicated. So what, the game essentially uses one atlas and build for all duplicants, and then elsewhere (presumably wherever the duplicant templates are defined), it's specified which subset of sprites included in the atlas are actually used for that specific duplicant? That's the impression I'm getting here. This seems kinda modding-unfriendly, although I can think of a way one might work around this... 2 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 18, 2019 Author Share Posted December 18, 2019 Spoiler And I just found the noise overlay code! Spoiler public class NOISE_POLLUTION { public class NAMES { public static LocString PEACEFUL = "Peaceful"; public static LocString QUIET = "Quiet"; public static LocString TOSSANDTURN = "Moderate"; public static LocString WAKEUP = "Noisy"; public static LocString PASSIVE = "Loud"; public static LocString ACTIVE = "Cacophonous"; public static LocString EXTREME = "Painful"; } public class TOOLTIPS { public static LocString PEACEFUL = "[{0} dB]" + HORIZONTAL_BR_RULE + "Peaceful areas improve Duplicants' quality of sleep and Learning ability.\n\nSoundproofed rooms and areas free of buildings and critters will generally be quieter."; public static LocString QUIET = "[>{0} dB]" + HORIZONTAL_BR_RULE + "Quiet areas are necessary for Duplicants to fall asleep.\n\nSoundproofed rooms and areas free of buildings and critters will generally be quieter."; public static LocString TOSSANDTURN = "[>{0} dB]" + HORIZONTAL_BR_RULE + "Duplicants will feel unrested if forced to sleep in Moderate noise.\n\nSoundproofed rooms and areas free of buildings and critters will generally be quieter."; public static LocString WAKEUP = "[>{0} dB]" + HORIZONTAL_BR_RULE + "Noisy areas will wake Duplicants up during the night, but are tolerable to them during the day.\n\nDuplicant foot traffic, generators, and powered buildings can create high noise levels."; public static LocString PASSIVE = "[>{0} dB]" + HORIZONTAL_BR_RULE + "Loud areas will impair Duplicants' Learning abilities and cause minor Stress.\n\nDuplicant foot traffic, generators, and powered buildings can create high noise levels."; public static LocString ACTIVE = "[>{0} dB]" + HORIZONTAL_BR_RULE + "Cacophonous noise causes significant Stress and prevents Duplicants from sleeping or researching.\n\nDuplicant foot traffic, generators, and powered buildings can create high noise levels."; public static LocString EXTREME = "[>{0} dB]" + HORIZONTAL_BR_RULE + "Painful noise levels are extremely Stressful to Duplicants and will cause them physical pain.\n\nDuplicant foot traffic, generators, and powered buildings can create high noise levels."; public static LocString HIGH_NOISE_POLLUTION = "Exposure to loud noises causes Duplicant Stress over time and makes it difficult to sleep or concentrate" + HORIZONTAL_BR_RULE + "High Duplicant traffic and powered buildings can create noisy areas"; public static LocString LOW_NOISE_POLLUTION = "Quiet areas decrease Stress, ensure Duplicants have quality sleep, and help them to concentrate" + HORIZONTAL_BR_RULE + "Soundproofed rooms and areas free of buildings and critters will generally be quieter."; } public static LocString NAME = "ACOUSTICS OVERLAY"; public static LocString BUTTON = "Acoustics Overlay"; public static LocString TOTAL = "Total"; public static LocString HOVERTITLE = "Acoustics"; public static LocString NOTAFFECTING = "Drowned out:"; public static LocString VALUE = "<color=#{0}>{1} dB</color>"; public static LocString RANGE = "{0} dB"; public static LocString LOUDNESS_STRING = " <color=#{0}>({1})</color>"; public static LocString DESCRIPTION = "Two " + FormatAsLink("Sounds", "SOUND") + " of equal dB will sum for a <b>+3 dB</b> increase.\nA " + FormatAsLink("Sound", "SOUND") + " that is 10 dB quieter will add approximately <b>+0.5 dB</b> to the total signal.\nAnything more than 10 dB quieter will be inaudible."; } public class Sound : Mode { public static readonly HashedString ID = "Sound"; private UniformGrid<NoisePolluter> partition; private HashSet<NoisePolluter> layerTargets = new HashSet<NoisePolluter>(); private HashSet<Tag> targetIDs = new HashSet<Tag>(); private int targetLayer; private int cameraLayerMask; private ColorHighlightCondition[] highlightConditions = new ColorHighlightCondition[1] { new ColorHighlightCondition(delegate(KMonoBehaviour np) { Color black = Color.black; Color b = Color.black; float t = 0.8f; if (np != null) { float num = 0f; int cell = Grid.PosToCell(CameraController.Instance.baseCamera.ScreenToWorldPoint(KInputManager.GetMousePos())); num = (np as NoisePolluter).GetNoiseForCell(cell); if (num < 36f) { t = 1f; b = new Color(0.4f, 0.4f, 0.4f); } } return Color.Lerp(black, b, t); }, delegate(KMonoBehaviour np) { List<GameObject> highlightedObjects = SelectToolHoverTextCard.highlightedObjects; bool result = false; for (int i = 0; i < highlightedObjects.Count; i++) { if (highlightedObjects[i] != null && highlightedObjects[i] == np.gameObject) { result = true; break; } } return result; }) }; public Sound() { targetLayer = LayerMask.NameToLayer("MaskedOverlay"); cameraLayerMask = LayerMask.GetMask("MaskedOverlay", "MaskedOverlayBG"); List<Tag> prefabTagsWithComponent = Assets.GetPrefabTagsWithComponent<NoisePolluter>(); targetIDs.UnionWith(prefabTagsWithComponent); } public override HashedString ViewMode() { return ID; } public override string GetSoundName() { return "Sound"; } public override void Enable() { RegisterSaveLoadListeners(); List<Tag> prefabTagsWithComponent = Assets.GetPrefabTagsWithComponent<NoisePolluter>(); targetIDs.UnionWith(prefabTagsWithComponent); partition = Mode.PopulatePartition<NoisePolluter>(targetIDs); Camera.main.cullingMask |= cameraLayerMask; } public override void Update() { Grid.GetVisibleExtents(out Vector2I min, out Vector2I max); Mode.RemoveOffscreenTargets(layerTargets, min, max); IEnumerable allIntersecting = partition.GetAllIntersecting(new Vector2(min.x, min.y), new Vector2(max.x, max.y)); IEnumerator enumerator = allIntersecting.GetEnumerator(); try { while (enumerator.MoveNext()) { NoisePolluter instance = (NoisePolluter)enumerator.Current; AddTargetIfVisible(instance, min, max, layerTargets, targetLayer); } } finally { IDisposable disposable; if ((disposable = (enumerator as IDisposable)) != null) { disposable.Dispose(); } } UpdateHighlightTypeOverlay(min, max, layerTargets, targetIDs, highlightConditions, BringToFrontLayerSetting.Conditional, targetLayer); } protected override void OnSaveLoadRootRegistered(SaveLoadRoot item) { Tag saveLoadTag = item.GetComponent<KPrefabID>().GetSaveLoadTag(); if (targetIDs.Contains(saveLoadTag)) { NoisePolluter component = item.GetComponent<NoisePolluter>(); partition.Add(component); } } protected override void OnSaveLoadRootUnregistered(SaveLoadRoot item) { if (!(item == null) && !(item.gameObject == null)) { NoisePolluter component = item.GetComponent<NoisePolluter>(); if (layerTargets.Contains(component)) { layerTargets.Remove(component); } partition.Remove(component); } } public override void Disable() { DisableHighlightTypeOverlay(layerTargets); Camera.main.cullingMask &= ~cameraLayerMask; UnregisterSaveLoadListeners(); partition.Clear(); layerTargets.Clear(); } } Dunno if this was already in the game...but acoustic research? Spoiler public class ACOUSTICS { public static LocString NAME = UI.FormatAsLink("Sound Amplifiers", "ACOUSTICS"); public static LocString DESC = "Precise control of the audio spectrum allows Duplicants to get funky."; } I think if it is already in game then it's where the jukebot is located. Now I can't remember who it was...so I'm gonna make an educated guess and say that @goboking is probably going to squee at this. Spoiler public class Radiation : Mode { public static readonly HashedString ID = "Radiation"; public override HashedString ViewMode() { return ID; } public override string GetSoundName() { return "Lights"; } } Spoiler Or not...maybe I dunno. It's the radiation overlay. Spoiler // RadiationGermSpawner using UnityEngine; public class RadiationGermSpawner : KMonoBehaviour { private const float GERM_SCALE = 100f; private const int CELLS_PER_UPDATE = 1024; private int nextEvaluatedCell; private float cellRatio; private byte disease_idx; protected override void OnPrefabInit() { base.OnPrefabInit(); cellRatio = Grid.CellCount / 1024; disease_idx = byte.MaxValue; } private void Update() { } private void EvaluateRadiation() { for (int i = 0; i < 1024; i++) { int num = (nextEvaluatedCell + i) % Grid.CellCount; if (Grid.RadiationCount[num] < 0) { continue; } int num2 = Mathf.RoundToInt((float)Grid.RadiationCount[num] * 100f * (Time.deltaTime * cellRatio)); if (Grid.DiseaseIdx[num] == disease_idx) { SimMessages.ModifyDiseaseOnCell(num, disease_idx, num2); continue; } int num3 = Grid.DiseaseCount[num] - num2; if (num3 < 0) { SimMessages.ModifyDiseaseOnCell(num, disease_idx, num3); } else { SimMessages.ModifyDiseaseOnCell(num, Grid.DiseaseIdx[num], -num2); } } nextEvaluatedCell = (nextEvaluatedCell + 1024) % Grid.CellCount; } } Oof. Radiation sickness? Spoiler // TUNING.BUILDINGS.SELF_HEAT_KILOWATTS public const float TIER_NUCLEAR = 16384f; Holy heck that's a LOT of heat! Spoiler And maybe I'm just looking at things wrong, but...something seems amiss here: // TUNING.BUILDINGS.SELF_HEAT_KILOWATTS public class SELF_HEAT_KILOWATTS { public const float TIER0 = 0f; public const float TIER1 = 0.5f; public const float TIER2 = 1f; public const float TIER3 = 2f; public const float TIER4 = 4f; public const float TIER5 = 8f; public const float TIER6 = 16f; public const float TIER7 = 32f; public const float TIER8 = 64f; public const float TIER_NUCLEAR = 16384f; } From 64f to 16,384f Spoiler and if it isn't you I'm sorry. 5 minutes ago, Hekateras said: So what, the game essentially uses one atlas and build for all duplicants, and then elsewhere (presumably wherever the duplicant templates are defined), it's specified which subset of sprites included in the atlas are actually used for that specific duplicant? That's the impression I'm getting here. This seems kinda modding-unfriendly, although I can think of a way one might work around this... Basically yeah, I've managed to get around that by just making a custom body_comp_default file: Spoiler body_comp_default_build.txt It functions perfectly with any duplicant animation, so hopefully that's a good starting template for your endeavors. 2 Link to comment Share on other sites More sharing options...
Hekateras Posted December 18, 2019 Share Posted December 18, 2019 (edited) !! Dang clever. Awesomesauce. You have truly done pioneering work there, good chap, and I applaud you. Edited December 18, 2019 by Hekateras 1 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 20, 2019 Author Share Posted December 20, 2019 For those wondering, here's what the fiery skin disease looks like: 3 2 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 20, 2019 Author Share Posted December 20, 2019 OH BOI that new animated short! Everything about it is just...perfect. Spoiler Also RIP Meep, canonically yeeted into the vacuum of space by Max. 1 1 Link to comment Share on other sites More sharing options...
Weavilemeinfep Posted December 20, 2019 Share Posted December 20, 2019 1 minute ago, watermelen671 said: RIP Meep, canonically yeeted into the vacuum of space by Max. *temporarily RIP Meep who got yeeted into space by Max, but came back in a piss comet. Spoiler *obligatory Snapcube reference here* 3 Link to comment Share on other sites More sharing options...
minespatch Posted December 20, 2019 Share Posted December 20, 2019 4 hours ago, Weavilemeinfep said: piss comet. Only Klei. 4 Link to comment Share on other sites More sharing options...
Xenologist Posted December 21, 2019 Share Posted December 21, 2019 Hey, @watermelen671, can you properly datamine the frames of the short? Also, just look at gossman's face 1 2 Link to comment Share on other sites More sharing options...
0rutyna0 Posted December 21, 2019 Share Posted December 21, 2019 (edited) On 20.12.2019 at 6:10 AM, watermelen671 said: Hide contents Скачать видео Скачать видео Скачать видео Скачать видео Скачать видео New short by ONI, let's see. Vomiting, farting, excrement on one’s head, and now urine asteroids ... The whole cosmos cannot give any other ideas for the story. Spoiler Edited December 21, 2019 by 0rutyna0 4 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 21, 2019 Author Share Posted December 21, 2019 7 hours ago, Xenologist said: Hey, @watermelen671, can you properly datamine the frames of the short? I've already done so. But where am I going to put it? 1 1 Link to comment Share on other sites More sharing options...
Primalflower Posted December 23, 2019 Share Posted December 23, 2019 @watermelen671 may you please show me the animation that a dupe uses when they're administering a cure through the disease clinic? not the actual dupe being cured, but the dupe giving the cure? I won't be encountering zombie spores any time soon again so I'd like to see the animation here. 1 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 23, 2019 Author Share Posted December 23, 2019 42 minutes ago, Lbphero said: @watermelen671 may you please show me the animation that a dupe uses when they're administering a cure through the disease clinic? not the actual dupe being cured, but the dupe giving the cure? I won't be encountering zombie spores any time soon again so I'd like to see the animation here. I uh...have no idea what animation you're talking about. Do you mean the general doctor interacting animation, or something else? I thought I had posted the completed version, but I guess it was too much of a headache for me to bother. Spoiler Here's all I have for the time being While I work on the updated one... 1 Link to comment Share on other sites More sharing options...
Primalflower Posted December 23, 2019 Share Posted December 23, 2019 3 minutes ago, watermelen671 said: I uh...have no idea what animation you're talking about. Do you mean the general doctor interacting animation, or something else? I thought I had posted the completed version, but I guess it was too much of a headache for me to bother. Reveal hidden contents Here's all I have for the time being While I work on the updated one... I'm referring to the animation that plays when a dupe administers a cure to a sick dupe that's in this disease clinic building. Link to comment Share on other sites More sharing options...
watermelen671 Posted December 23, 2019 Author Share Posted December 23, 2019 Just now, Lbphero said: I'm referring to the animation that plays when a dupe administers a cure to a sick dupe that's in this disease clinic building. Oh heck, that one. That's gonna be, like, a 5-part animation compilation effort. 2 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 23, 2019 Author Share Posted December 23, 2019 I mean, it's gonna be done, @Lbphero, but it's gonna take a while. 1 Link to comment Share on other sites More sharing options...
Primalflower Posted December 23, 2019 Share Posted December 23, 2019 (edited) 16 minutes ago, watermelen671 said: I mean, it's gonna be done, @Lbphero, but it's gonna take a while. thanks for going through all this for me! Spoiler and thanks for those unused outfits...they'll look great in my [wip] mod! Spoiler Edited December 23, 2019 by Lbphero 3 Link to comment Share on other sites More sharing options...
Dovahkick Posted December 23, 2019 Share Posted December 23, 2019 (edited) 1 hour ago, Lbphero said: "YES! I like this." Will you post a link to your mod on the forums? Edited December 23, 2019 by Dovahkick Link to comment Share on other sites More sharing options...
Primalflower Posted December 23, 2019 Share Posted December 23, 2019 Just now, Dovahkick said: YES! I like this. Will you post a link to your mod on the forums? sure, when I'm done with it! Glad to see people excited about it. 1 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 23, 2019 Author Share Posted December 23, 2019 1 hour ago, Lbphero said: YES!! YES!! FINALLY SOMEONE'S ACTUALLY DONE IT!! Spoiler 1 Link to comment Share on other sites More sharing options...
watermelen671 Posted December 24, 2019 Author Share Posted December 24, 2019 7 hours ago, Lbphero said: but the dupe giving the cure? Holy heck this took seven hours to make?! Spoiler I want to die 3 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now