Example #1
0
 public override void LoadContent(bool firstLoad)
 {
     base.LoadContent(firstLoad);
     SpriteBank = new SpriteBank(GFX.Game, "Graphics/EtherHelper/Sprites.xml");
 }
Example #2
0
        public void ctor(Session session, Vector2?startPosition = default(Vector2?))
        {
            if (CoreModule.Settings.LazyLoading)
            {
                MainThreadHelper.Do(() => VirtualContentExt.UnloadOverworld());
            }

            // Vanilla TileToIndex mappings.
            SurfaceIndex.TileToIndex = new Dictionary <char, int> {
                { '1', 3 },
                { '3', 4 },
                { '4', 7 },
                { '5', 8 },
                { '6', 8 },
                { '7', 8 },
                { '8', 8 },
                { '9', 13 },
                { 'a', 8 },
                { 'b', 23 },
                { 'c', 8 },
                { 'd', 8 },
                { 'e', 8 },
                { 'f', 8 },
                { 'g', 8 },
                { 'h', 33 },
                { 'i', 4 },
                { 'j', 8 },
                { 'k', 3 },
                { 'l', 25 },
                { 'm', 44 },
                { 'n', 40 },
                { 'o', 43 }
            };

            AreaData area = AreaData.Get(session);
            MapMeta  meta = area.GetMeta();
            string   path;

            path = meta?.BackgroundTiles;
            if (string.IsNullOrEmpty(path))
            {
                path = Path.Combine("Graphics", "BackgroundTiles.xml");
            }
            GFX.BGAutotiler = new Autotiler(path);

            path = meta?.ForegroundTiles;
            if (string.IsNullOrEmpty(path))
            {
                path = Path.Combine("Graphics", "ForegroundTiles.xml");
            }
            GFX.FGAutotiler = new Autotiler(path);

            path = meta?.AnimatedTiles;
            if (string.IsNullOrEmpty(path))
            {
                path = Path.Combine("Graphics", "AnimatedTiles.xml");
            }
            GFX.AnimatedTilesBank = new AnimatedTilesBank();
            XmlElement animatedData = Calc.LoadContentXML(path)["Data"];

            foreach (XmlElement el in animatedData)
            {
                if (el != null)
                {
                    GFX.AnimatedTilesBank.Add(
                        el.Attr("name"),
                        el.AttrFloat("delay", 0f),
                        el.AttrVector2("posX", "posY", Vector2.Zero),
                        el.AttrVector2("origX", "origY", Vector2.Zero),
                        GFX.Game.GetAtlasSubtextures(el.Attr("path"))
                        );
                }
            }

            GFX.SpriteBank = new SpriteBank(GFX.Game, Path.Combine("Graphics", "Sprites.xml"));

            path = meta?.Sprites;
            if (!string.IsNullOrEmpty(path))
            {
                SpriteBank bankOrig = GFX.SpriteBank;
                SpriteBank bankMod  = new SpriteBank(GFX.Game, path);

                foreach (KeyValuePair <string, SpriteData> kvpBank in bankMod.SpriteData)
                {
                    string     key      = kvpBank.Key;
                    SpriteData valueMod = kvpBank.Value;

                    if (bankOrig.SpriteData.TryGetValue(key, out SpriteData valueOrig))
                    {
                        IDictionary animsOrig = valueOrig.Sprite.GetAnimations();
                        IDictionary animsMod  = valueMod.Sprite.GetAnimations();
                        foreach (DictionaryEntry kvpAnim in animsMod)
                        {
                            animsOrig[kvpAnim.Key] = kvpAnim.Value;
                        }

                        valueOrig.Sources.AddRange(valueMod.Sources);
                    }
                    else
                    {
                        bankOrig.SpriteData[key] = valueMod;
                    }
                }
            }

            // This is done exactly once in the vanilla GFX.LoadData method.
            PlayerSprite.ClearFramesMetadata();
            PlayerSprite.CreateFramesMetadata("player");
            PlayerSprite.CreateFramesMetadata("player_no_backpack");
            PlayerSprite.CreateFramesMetadata("badeline");
            PlayerSprite.CreateFramesMetadata("player_badeline");
            PlayerSprite.CreateFramesMetadata("player_playback");

            path = meta?.Portraits;
            if (string.IsNullOrEmpty(path))
            {
                path = Path.Combine("Graphics", "Portraits.xml");
            }
            GFX.PortraitsSpriteBank = new SpriteBank(GFX.Portraits, path);

            orig_ctor(session, startPosition);
        }
Example #3
0
        private void PostAreaLoad(On.Celeste.AreaData.orig_Load orig)
        {
            orig();
            var heartTextures = new HashSet <string>();
            int altsides      = 0;

            foreach (var map in AreaData.Areas)
            {
                // Load "mapdir/mapname.altsideshelper.meta.yaml" as a AltSidesHelperMeta
                AltSidesHelperMeta meta;
                if (Everest.Content.TryGet("Maps/" + map.Mode[0].Path + ".altsideshelper.meta", out ModAsset metadata) && metadata.TryDeserialize(out meta))
                {
                    foreach (var mode in meta.Sides)
                    {
                        mode.ApplyPreset();
                        altsides++;
                        heartTextures.Add(mode.ChapterPanelHeartIcon);
                    }
                    // Attach the meta to the AreaData w/ DynData
                    DynData <AreaData> areaDynData = new DynData <AreaData>(map);
                    areaDynData["AltSidesHelperMeta"] = meta;
                    if (meta.AltSideData.IsAltSide)
                    {
                        var aside = AreaData.Get(meta.AltSideData.For);
                        if (meta.AltSideData.CopyEndScreenData)
                        {
                            map.Meta.CompleteScreen = aside.Meta.CompleteScreen;
                        }
                        map.Meta.Mountain       = aside.Meta.Mountain;
                        map.MountainCursor      = aside.MountainCursor;
                        map.MountainCursorScale = aside.MountainCursorScale;
                        map.MountainIdle        = aside.MountainIdle;
                        map.MountainSelect      = aside.MountainSelect;
                        map.MountainState       = aside.MountainState;
                        map.MountainZoom        = aside.MountainZoom;
                    }
                }
            }

            Logger.Log("AltSidesHelper", $"Loaded {altsides} alt-sides!");

            SpriteBank crystalHeartSwaps = new SpriteBank(GFX.Gui, "Graphics/AltSidesHelper/Empty.xml");

            // TODO: allow using XMLs too - load them and copy them in
            Dictionary <string, Sprite> sprites = new Dictionary <string, Sprite>();

            foreach (var heart in heartTextures)
            {
                // our sprite ID will be "<heart sprite path keyified>"
                // we're talking along the lines of "collectables/heartgem/0/spin"
                // use the last part of the name as the loop paths, and the rest as element path

                var    parts    = heart.Split('/');
                var    loopPath = parts[parts.Length - 1];
                string elemPath = heart.Substring(0, heart.Length - loopPath.Length);

                var sprite = new Sprite(GFX.Gui, elemPath);
                sprite.AddLoop("idle", loopPath, 0, new int[] { 0 });
                sprite.AddLoop("spin", loopPath, 0.08f, new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
                sprite.AddLoop("fastspin", loopPath, 0.08f, new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
                sprite.Play("idle");
                sprite.CenterOrigin();
                sprites.Add(heart.DialogKeyify(), sprite);
            }

            int hearts = 0;

            foreach (var kvp in sprites)
            {
                hearts++;
                crystalHeartSwaps.SpriteData[kvp.Key] = new SpriteData(GFX.Gui)
                {
                    Sprite = kvp.Value
                };
            }

            HeartSpriteBank = crystalHeartSwaps;
            Logger.Log("AltSidesHelper", $"Loaded {hearts} crystal heart UI textures.");
        }