tModLoader Boss Checklist - In-game progression checklist.

Updated to 0.9.

So far only Thorium and Calamity are supported.

It is open source, btw, so anyone can add native support.

There is also support for adding support through Mod.Call().

So how do we modify the source to include other mods in the list?
 
Say, how come only calamity, thorium, and bluemagic is supported now? What has changed that made mine and others no longer supported?
Yes, the update thing, but also because I have to download all the new mods all the time to update so it can build. Actually, I think it would be great if you just added the code to PostSetupContent in your mod, you you can keep it up to date and it can always be supported easily. Let me know if you want to know the code to add to do that.
 
Yes, the update thing, but also because I have to download all the new mods all the time to update so it can build. Actually, I think it would be great if you just added the code to PostSetupContent in your mod, you you can keep it up to date and it can always be supported easily. Let me know if you want to know the code to add to do that.
Oooh, yes. I would like to know that code.
 
Oooh, yes. I would like to know that code.
In your Mod class, add the following code.
Code:
        public override void PostSetupContent()
        {
            Mod bossChecklist = ModLoader.GetMod("BossChecklist");
            if(bossChecklist != null)
            {
                // 14 is the value BossChecklist gives to Moonlord.
                bossChecklist.Call("AddBoss", "Jumbo Cactuar", 14.7f, (Func<bool>)(() => JoostWorld.downedJumboCactuar));
                bossChecklist.Call("AddBoss", "SA-X", 14.8f, (Func<bool>)(() => JoostWorld.downedSAX));
            }
        }
Should work.
 
Okay, I'm having some problems. I got the Jumbo Cactuar and SA-X to show up on the list, but when I kill the bosses it wont change. Here are my codes:
Code:
using System;
using System.IO;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Collections.Generic;
using Terraria;
using Terraria.DataStructures;
using Terraria.ID;
using Terraria.ModLoader;

namespace JoostMod.NPCs
{
	public class JumboCactuar : ModNPC
	{
		public override void SetDefaults()
		{
			npc.name = "JumboCactuar";
			npc.displayName = "Jumbo Cactuar";
			npc.width = 648;
			npc.height = 768;
			npc.damage = 100;
			npc.defense = 30;
			npc.lifeMax = 250000;
			npc.boss = true;
			npc.lavaImmune = true;
			npc.HitSound = SoundID.NPCHit1;
			npc.DeathSound = SoundID.NPCDeath1;
			npc.value = Item.buyPrice(100, 10, 10, 10);
			npc.knockBackResist = 0f;
			npc.aiStyle = 39;
			npc.buffImmune[24] = true;
			music = mod.GetSoundSlot(SoundType.Music, "Sounds/Music/TheDecisiveBattle");
			Main.npcFrameCount[npc.type] = Main.npcFrameCount[NPCID.Zombie];
			animationType = NPCID.Zombie;
			bossBag = mod.ItemType("JumboCactuarBag");
		}

		public override void ScaleExpertStats(int numPlayers, float bossLifeScale)
		{
			npc.lifeMax = (int)(npc.lifeMax * bossLifeScale);
			npc.damage = (int)(npc.damage * 0.6f);
		}
		public override void BossLoot(ref string name, ref int potionType)
		{
			potionType = ItemID.SuperHealingPotion;
		}
		public override void NPCLoot()
		{
			if (Main.expertMode)
			{
				npc.DropBossBags();
			}
			else
			{
				int choice = Main.rand.Next(2);
				if (choice == 0)
				{
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));

				}
				else if (choice == 1)
				{
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarMask"));
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarTrophy"));

				}
				else if (choice == 2)
				{
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarMask"));
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarTrophy"));
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("DecisiveBattleMusicBox"));

				}
			JoostWorld.downedJumboCactuar = true;
			}
		}
		public override void AI()
		{
			npc.ai[0]++;
			Player P = Main.player[npc.target];
			if (npc.target < 0 || npc.target == 255 || Main.player[npc.target].dead || !Main.player[npc.target].active)
			{
				npc.TargetClosest(true);
				npc.velocity = new Vector2(0f, -200f);
				npc.noTileCollide = true;
				if (npc.timeLeft > 10)
				{
					npc.timeLeft = 10;
				}
				return;
			}

			npc.netUpdate = true;
			npc.ai[3]++;
			if (npc.ai[3] >= 120)
			{
			npc.ai[1]++;
			}
			if (npc.ai[3] >= 150)
			{
			npc.ai[3] = 0;
			}

			if (npc.ai[1] >= 1)
			{
				float Speed = 12f;
				Vector2 vector8 = new Vector2(npc.position.X + (npc.width/2), npc.position.Y + (npc.height/2));
				int damage = 30;
				int type = mod.ProjectileType("CactusNeedle");
				Main.PlaySound(2, (int)npc.position.X, (int)npc.position.Y, 1);
				float rotation = (float)Math.Atan2(vector8.Y - (P.position.Y + (P.height * 0.5f)), vector8.X - (P.position.X + (P.width * 0.5f)));
				int num54 = Projectile.NewProjectile(vector8.X, vector8.Y, (float)((Math.Cos(rotation) * Speed) * -1), (float)((Math.Sin(rotation) * Speed) * -1), type, damage, 0f, 0);
				npc.ai[1] = 0;
			}

		}
	}
}
Code:
using System;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;

namespace JoostMod {
public class JoostMod : Mod
{
    public JoostMod()
    {
       Properties = new ModProperties()
		{
			Autoload = true,
			AutoloadSounds = true

		};
		
    }
        public override void PostSetupContent()
        {
            Mod bossChecklist = ModLoader.GetMod("BossChecklist");
            if(bossChecklist != null)
            {
                // 14 is the value BossChecklist gives to Moonlord.
                bossChecklist.Call("AddBoss", "Jumbo Cactuar", 14.7f, (Func<bool>)(() => JoostWorld.downedJumboCactuar));
                bossChecklist.Call("AddBoss", "SA-X", 14.8f, (Func<bool>)(() => JoostWorld.downedSAX));
            }
        }
		public override void AddRecipes()
		{
			ModRecipe recipe = new ModRecipe(this);
		recipe.AddIngredient("Hallowed Bar", 15);
recipe.AddIngredient("Soul of Light", 25);
recipe.AddTile(TileID.MythrilAnvil);
recipe.SetResult("Rod of Discord");
		recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Piggy Bank");
recipe.AddIngredient("Gold Coin", 10);
recipe.AddIngredient("Feather", 10);
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Money Trough");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Iron Bar", 6);
recipe.AddIngredient("Wire", 30);
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("DPS Meter");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Lead Bar", 6);
recipe.AddIngredient("Wire", 30);
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("DPS Meter");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Warrior Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Ranger Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Warrior Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Sorcerer Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Warrior Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Summoner Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Ranger Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Warrior Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Ranger Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Sorcerer Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Ranger Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Summoner Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Sorcerer Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Warrior Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Sorcerer Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Ranger Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Sorcerer Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Summoner Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Summoner Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Warrior Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Summoner Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Ranger Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Summoner Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Sorcerer Emblem");
recipe.AddRecipe();


		}
		public override void Load()
		{
			if (!Main.dedServ)
			{
		AddMusicBox(GetSoundSlot(SoundType.Music, "Sounds/Music/TheDecisiveBattle"), ItemType("DecisiveBattleMusicBox"), TileType("DecisiveBattleMusicBox"));
		AddMusicBox(GetSoundSlot(SoundType.Music, "Sounds/Music/VsSAX"), ItemType("SAXMusicBox"), TileType("SAXMusicBox"));
		AddMusicBox(GetSoundSlot(SoundType.Music, "Sounds/Music/ClashOnTheBigBridge"), ItemType("COTBBMusicBox"), TileType("COTBBMusicBox"));
			}
		}
    class SpawnRateMultiplierGlobalNPC : GlobalNPC
		{
		public override void EditSpawnRate(Player player, ref int spawnRate, ref int maxSpawns)
		{
			if (player.GetModPlayer<JoostPlayer>(mod).HavocPendant)
			{
				spawnRate = (int)(spawnRate / 5f);
				maxSpawns = (int)(maxSpawns * 5f);
			}
			if (player.GetModPlayer<JoostPlayer>(mod).HarmonyPendant)
			{
				spawnRate = (int)(spawnRate * 5f);
				maxSpawns = (int)(maxSpawns / 5f);
			}

       	}
		}

}
}
Code:
using System.IO;
using System.Collections.Generic;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using Terraria.World.Generation;
using Microsoft.Xna.Framework;
using Terraria.GameContent.Generation;
using System.Linq;
using Terraria.ModLoader.IO;

namespace JoostMod
{
	public class JoostWorld : ModWorld
	{
		private const int saveVersion = 0;
		public static bool downedJumboCactuar = false;
		public static bool downedSAX = false;
		public override void Initialize()
		{
			downedJumboCactuar = false;
			downedSAX = false;
		}
		public override TagCompound Save()
		{
			var downed = new List<string>();
			if (downedJumboCactuar) downed.Add("JumboCactuar");
			if (downedSAX) downed.Add("SAX");

			return new TagCompound {
				{"downed", downed}
			};
		}

		public override void Load(TagCompound tag)
		{
			var downed = tag.GetList<string>("downed");
			downedJumboCactuar = downed.Contains("JumboCactuar");
			downedSAX = downed.Contains("SAX");
		}

		public override void LoadLegacy(BinaryReader reader)
		{
			int loadVersion = reader.ReadInt32();
			if (loadVersion == 0)
			{
				BitsByte flags = reader.ReadByte();
				downedJumboCactuar = flags[0];
				downedSAX = flags[1];
			}
			else
			{
				ErrorLogger.Log("JoostMod: Unknown loadVersion: " + loadVersion);
			}
		}

		public override void NetSend(BinaryWriter writer)
		{
			BitsByte flags = new BitsByte();
			flags[0] = downedJumboCactuar;
			flags[1] = downedSAX;
			writer.Write(flags);
		}

		public override void NetReceive(BinaryReader reader)
		{
			BitsByte flags = reader.ReadByte();
			downedJumboCactuar = flags[1];
			downedSAX = flags[2];
		}

	}
}
I just tried copying things in ExampleMod and editing it.
 
Okay, I'm having some problems. I got the Jumbo Cactuar and SA-X to show up on the list, but when I kill the bosses it wont change. Here are my codes:
Code:
using System;
using System.IO;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Collections.Generic;
using Terraria;
using Terraria.DataStructures;
using Terraria.ID;
using Terraria.ModLoader;

namespace JoostMod.NPCs
{
    public class JumboCactuar : ModNPC
    {
        public override void SetDefaults()
        {
            npc.name = "JumboCactuar";
            npc.displayName = "Jumbo Cactuar";
            npc.width = 648;
            npc.height = 768;
            npc.damage = 100;
            npc.defense = 30;
            npc.lifeMax = 250000;
            npc.boss = true;
            npc.lavaImmune = true;
            npc.HitSound = SoundID.NPCHit1;
            npc.DeathSound = SoundID.NPCDeath1;
            npc.value = Item.buyPrice(100, 10, 10, 10);
            npc.knockBackResist = 0f;
            npc.aiStyle = 39;
            npc.buffImmune[24] = true;
            music = mod.GetSoundSlot(SoundType.Music, "Sounds/Music/TheDecisiveBattle");
            Main.npcFrameCount[npc.type] = Main.npcFrameCount[NPCID.Zombie];
            animationType = NPCID.Zombie;
            bossBag = mod.ItemType("JumboCactuarBag");
        }

        public override void ScaleExpertStats(int numPlayers, float bossLifeScale)
        {
            npc.lifeMax = (int)(npc.lifeMax * bossLifeScale);
            npc.damage = (int)(npc.damage * 0.6f);
        }
        public override void BossLoot(ref string name, ref int potionType)
        {
            potionType = ItemID.SuperHealingPotion;
        }
        public override void NPCLoot()
        {
            if (Main.expertMode)
            {
                npc.DropBossBags();
            }
            else
            {
                int choice = Main.rand.Next(2);
                if (choice == 0)
                {
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));

                }
                else if (choice == 1)
                {
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarMask"));
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarTrophy"));

                }
                else if (choice == 2)
                {
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("Cactustoken"));
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarMask"));
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("JumboCactuarTrophy"));
                Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType("DecisiveBattleMusicBox"));

                }
            JoostWorld.downedJumboCactuar = true;
            }
        }
        public override void AI()
        {
            npc.ai[0]++;
            Player P = Main.player[npc.target];
            if (npc.target < 0 || npc.target == 255 || Main.player[npc.target].dead || !Main.player[npc.target].active)
            {
                npc.TargetClosest(true);
                npc.velocity = new Vector2(0f, -200f);
                npc.noTileCollide = true;
                if (npc.timeLeft > 10)
                {
                    npc.timeLeft = 10;
                }
                return;
            }

            npc.netUpdate = true;
            npc.ai[3]++;
            if (npc.ai[3] >= 120)
            {
            npc.ai[1]++;
            }
            if (npc.ai[3] >= 150)
            {
            npc.ai[3] = 0;
            }

            if (npc.ai[1] >= 1)
            {
                float Speed = 12f;
                Vector2 vector8 = new Vector2(npc.position.X + (npc.width/2), npc.position.Y + (npc.height/2));
                int damage = 30;
                int type = mod.ProjectileType("CactusNeedle");
                Main.PlaySound(2, (int)npc.position.X, (int)npc.position.Y, 1);
                float rotation = (float)Math.Atan2(vector8.Y - (P.position.Y + (P.height * 0.5f)), vector8.X - (P.position.X + (P.width * 0.5f)));
                int num54 = Projectile.NewProjectile(vector8.X, vector8.Y, (float)((Math.Cos(rotation) * Speed) * -1), (float)((Math.Sin(rotation) * Speed) * -1), type, damage, 0f, 0);
                npc.ai[1] = 0;
            }

        }
    }
}
Code:
using System;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;

namespace JoostMod {
public class JoostMod : Mod
{
    public JoostMod()
    {
       Properties = new ModProperties()
        {
            Autoload = true,
            AutoloadSounds = true

        };
       
    }
        public override void PostSetupContent()
        {
            Mod bossChecklist = ModLoader.GetMod("BossChecklist");
            if(bossChecklist != null)
            {
                // 14 is the value BossChecklist gives to Moonlord.
                bossChecklist.Call("AddBoss", "Jumbo Cactuar", 14.7f, (Func<bool>)(() => JoostWorld.downedJumboCactuar));
                bossChecklist.Call("AddBoss", "SA-X", 14.8f, (Func<bool>)(() => JoostWorld.downedSAX));
            }
        }
        public override void AddRecipes()
        {
            ModRecipe recipe = new ModRecipe(this);
        recipe.AddIngredient("Hallowed Bar", 15);
recipe.AddIngredient("Soul of Light", 25);
recipe.AddTile(TileID.MythrilAnvil);
recipe.SetResult("Rod of Discord");
        recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Piggy Bank");
recipe.AddIngredient("Gold Coin", 10);
recipe.AddIngredient("Feather", 10);
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Money Trough");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Iron Bar", 6);
recipe.AddIngredient("Wire", 30);
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("DPS Meter");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Lead Bar", 6);
recipe.AddIngredient("Wire", 30);
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("DPS Meter");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Warrior Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Ranger Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Warrior Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Sorcerer Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Warrior Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Summoner Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Ranger Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Warrior Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Ranger Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Sorcerer Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Ranger Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Summoner Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Sorcerer Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Warrior Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Sorcerer Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Ranger Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Sorcerer Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Summoner Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Summoner Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Warrior Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Summoner Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Ranger Emblem");
recipe.AddRecipe();

recipe = new ModRecipe(this);
recipe.AddIngredient("Summoner Emblem");
recipe.AddTile(TileID.TinkerersWorkbench);
recipe.SetResult("Sorcerer Emblem");
recipe.AddRecipe();


        }
        public override void Load()
        {
            if (!Main.dedServ)
            {
        AddMusicBox(GetSoundSlot(SoundType.Music, "Sounds/Music/TheDecisiveBattle"), ItemType("DecisiveBattleMusicBox"), TileType("DecisiveBattleMusicBox"));
        AddMusicBox(GetSoundSlot(SoundType.Music, "Sounds/Music/VsSAX"), ItemType("SAXMusicBox"), TileType("SAXMusicBox"));
        AddMusicBox(GetSoundSlot(SoundType.Music, "Sounds/Music/ClashOnTheBigBridge"), ItemType("COTBBMusicBox"), TileType("COTBBMusicBox"));
            }
        }
    class SpawnRateMultiplierGlobalNPC : GlobalNPC
        {
        public override void EditSpawnRate(Player player, ref int spawnRate, ref int maxSpawns)
        {
            if (player.GetModPlayer<JoostPlayer>(mod).HavocPendant)
            {
                spawnRate = (int)(spawnRate / 5f);
                maxSpawns = (int)(maxSpawns * 5f);
            }
            if (player.GetModPlayer<JoostPlayer>(mod).HarmonyPendant)
            {
                spawnRate = (int)(spawnRate * 5f);
                maxSpawns = (int)(maxSpawns / 5f);
            }

           }
        }

}
}
Code:
using System.IO;
using System.Collections.Generic;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using Terraria.World.Generation;
using Microsoft.Xna.Framework;
using Terraria.GameContent.Generation;
using System.Linq;
using Terraria.ModLoader.IO;

namespace JoostMod
{
    public class JoostWorld : ModWorld
    {
        private const int saveVersion = 0;
        public static bool downedJumboCactuar = false;
        public static bool downedSAX = false;
        public override void Initialize()
        {
            downedJumboCactuar = false;
            downedSAX = false;
        }
        public override TagCompound Save()
        {
            var downed = new List<string>();
            if (downedJumboCactuar) downed.Add("JumboCactuar");
            if (downedSAX) downed.Add("SAX");

            return new TagCompound {
                {"downed", downed}
            };
        }

        public override void Load(TagCompound tag)
        {
            var downed = tag.GetList<string>("downed");
            downedJumboCactuar = downed.Contains("JumboCactuar");
            downedSAX = downed.Contains("SAX");
        }

        public override void LoadLegacy(BinaryReader reader)
        {
            int loadVersion = reader.ReadInt32();
            if (loadVersion == 0)
            {
                BitsByte flags = reader.ReadByte();
                downedJumboCactuar = flags[0];
                downedSAX = flags[1];
            }
            else
            {
                ErrorLogger.Log("JoostMod: Unknown loadVersion: " + loadVersion);
            }
        }

        public override void NetSend(BinaryWriter writer)
        {
            BitsByte flags = new BitsByte();
            flags[0] = downedJumboCactuar;
            flags[1] = downedSAX;
            writer.Write(flags);
        }

        public override void NetReceive(BinaryReader reader)
        {
            BitsByte flags = reader.ReadByte();
            downedJumboCactuar = flags[1];
            downedSAX = flags[2];
        }

    }
}
I just tried copying things in ExampleMod and editing it.
Did you try hiding and showing the boss checklist ui? I have it only update when being shown again so it doesn't bog things down.
 
Did you try hiding and showing the boss checklist ui? I have it only update when being shown again so it doesn't bog things down.
I have, neither boss will check on the list after death.
Also, I can't scroll the checklist, I grab the bar and nothing happens. My usb ports are broken so I can't use a mouse. Could you add a way to scroll with the arrow keys or something?
 
I have, neither boss will check on the list after death.
Also, I can't scroll the checklist, I grab the bar and nothing happens. My usb ports are broken so I can't use a mouse. Could you add a way to scroll with the arrow keys or something?
Hmm, are you in expert mode? Your code is wrong here:

Code:
public override void NPCLoot()
        {
            if (Main.expertMode)
            {
                npc.DropBossBags();
            }
            else
            {
                ...................Cut out.....................
               JoostWorld.downedJumboCactuar = true;
            }
        }
You are only setting downedJumboCactuar when in normal mode.
 
Hmm, are you in expert mode? Your code is wrong here:

Code:
public override void NPCLoot()
        {
            if (Main.expertMode)
            {
                npc.DropBossBags();
            }
            else
            {
                ...................Cut out.....................
               JoostWorld.downedJumboCactuar = true;
            }
        }
You are only setting downedJumboCactuar when in normal mode.
Doh! That's probably it...
EDIT: Yup, that's definitely it. Fixed now, thanks Jopojelly!
 
Last edited:
Downloaded the latest version and found a bug:

Bottom left corner, pressing the hotkey to bring up the list causes text to appear.

20170129022713_1.jpg
 
Back
Top Bottom