diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index bb05ac2f..b14de20b 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -9,14 +9,14 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; -import java.lang.reflect.*; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import WayofTime.alchemicalWizardry.common.rituals.*; -import cpw.mods.fml.common.*; -import cpw.mods.fml.common.event.*; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; @@ -77,6 +77,7 @@ import WayofTime.alchemicalWizardry.common.alchemy.CombinedPotionRegistry; import WayofTime.alchemicalWizardry.common.block.ArmourForge; import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.UpgradedAltars; import WayofTime.alchemicalWizardry.common.book.BUEntries; +import WayofTime.alchemicalWizardry.common.book.SpecialEntryRegistry; import WayofTime.alchemicalWizardry.common.commands.CommandBind; import WayofTime.alchemicalWizardry.common.commands.CommandSN; import WayofTime.alchemicalWizardry.common.commands.CommandUnbind; @@ -141,6 +142,41 @@ import WayofTime.alchemicalWizardry.common.potion.PotionReciprocation; import WayofTime.alchemicalWizardry.common.potion.PotionSoulFray; import WayofTime.alchemicalWizardry.common.potion.PotionSoulHarden; import WayofTime.alchemicalWizardry.common.renderer.AlchemyCircleRenderer; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAlphaPact; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAnimalGrowth; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAutoAlchemy; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectBiomeChanger; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectContainment; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectCrushing; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectDemonPortal; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectEllipsoid; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectEvaporation; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectExpulsion; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFeatheredEarth; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFeatheredKnife; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFlight; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFullStomach; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectGrowth; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectHarvest; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectHealing; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectInterdiction; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectItemRouting; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectItemSuction; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectJumping; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLava; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLeap; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLifeConduit; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectMagnetic; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaStalling; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaTest; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSupression; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectUnbinding; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectVeilOfEvil; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWater; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWellOfSuffering; import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeDefaultEarth; import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeDefensiveEarth; import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeEnvironmentalEarth; @@ -240,8 +276,18 @@ import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable; import WayofTime.alchemicalWizardry.common.tileEntity.gui.GuiHandler; import WayofTime.alchemicalWizardry.common.tweaker.MineTweakerIntegration; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLInterModComms; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; @@ -625,12 +671,19 @@ public class AlchemicalWizardry ItemStack magicalesStack = new ItemStack(ModItems.magicales); //All crafting goes here GameRegistry.addRecipe(sacrificialDaggerStack, "ggg", " dg", "i g", 'g', glassStack, 'd', goldIngotStack, 'i', ironIngotStack); + SpecialEntryRegistry.registerLatestIRecipe("sacrificialKnife"); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(lavaCrystalStackCrafted, "glg", "lbl", "odo", 'g', glassStack, 'l', lavaBucketStack, 'b', weakBloodOrbStack, 'd', diamondStack, 'o', obsidianStack)); + SpecialEntryRegistry.registerLatestIRecipe("lavaCrystal"); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(waterSigilStackCrafted, "www", "wbw", "wow", 'w', waterBucketStack, 'b', blankSlateStack, 'o', weakBloodOrbStack)); + SpecialEntryRegistry.registerLatestIRecipe("waterSigil"); GameRegistry.addRecipe(lavaSigilStackCrafted, "lml", "lbl", "lcl", 'l', lavaBucketStack, 'b', blankSlateStack, 'm', magmaCreamStack, 'c', lavaCrystalStack); + SpecialEntryRegistry.registerLatestIRecipe("lavaSigil"); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(voidSigilStackCrafted, "ese", "ere", "eoe", 'e', emptyBucketStack, 'r', reinforcedSlateStack, 'o', apprenticeBloodOrbStack, 's', stringStack)); + SpecialEntryRegistry.registerLatestIRecipe("voidSigil"); GameRegistry.addRecipe(bloodAltarStack, "s s", "scs", "gdg", 's', stoneStack, 'c', furnaceStack, 'd', diamondStack, 'g', goldIngotStack); + SpecialEntryRegistry.registerLatestIRecipe("bloodAltar"); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(bloodRuneCraftedStack, "sss", "ror", "sss", 's', stoneStack, 'o', weakBloodOrbStack, 'r', blankSlateStack)); + SpecialEntryRegistry.registerLatestIRecipe("blankRune"); GameRegistry.addRecipe(speedRuneStack, "sbs", "uru", "sbs", 'u', sugarStack, 's', stoneStack, 'r', bloodRuneStack, 'b', blankSlateStack); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 1), "sbs", "bob", "srs", 's', stoneStack, 'o', magicianBloodOrbStack, 'b', emptyBucketStack, 'r', new ItemStack(ModItems.imbuedSlate))); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 2), "sbs", "bob", "srs", 's', stoneStack, 'o', magicianBloodOrbStack, 'b', waterBucketStack, 'r', new ItemStack(ModItems.imbuedSlate))); @@ -1566,7 +1619,7 @@ public class AlchemicalWizardry continue; } - if(strLine.startsWith("//TITLE ")) + if(strLine.startsWith("//TITLE ")) //New entry~ { String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing for(int i=0; i basics = new HashMap(); public static HashMap rituals = new HashMap(); public static HashMap bloodUtils = new HashMap(); + public static HashMap test = new HashMap(); public static Entry[] getEntriesInOrderForCategory(Category category) { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java b/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java index 167285b8..453ecf4c 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java @@ -1,6 +1,7 @@ package WayofTime.alchemicalWizardry.common.book; import java.util.HashMap; +import java.util.List; import java.util.Map; import net.minecraft.item.ItemStack; @@ -30,16 +31,20 @@ public class BUEntries categoryRituals = new Category("Rituals", new ItemStack(ModItems.itemRitualDiviner), EnumType.ITEM); catagoryArchitect = new Category("The Architect", new ItemStack(ModBlocks.blockAltar), EnumType.BLOCK); + categoryTest = new Category("Test", new ItemStack(ModItems.aether), EnumType.ITEM); + registerCategories(); } public static Category categoryBasics; public static Category categoryRituals; public static Category catagoryArchitect; + public static Category categoryTest; public void registerCategories(){ EntryRegistry.registerCategories(BUEntries.categoryBasics); EntryRegistry.registerCategories(BUEntries.categoryRituals); EntryRegistry.registerCategories(BUEntries.catagoryArchitect); + EntryRegistry.registerCategories(BUEntries.categoryTest); } public void initEntries() @@ -133,6 +138,8 @@ public class BUEntries /** Debug */ debug = new Entry(new IEntry[]{new EntryText("Debug"), new EntryImage("bloodutils:textures/misc/screenshots/t1.png", 854, 480, "Debug")}, EnumChatFormatting.AQUA + "De" + EnumChatFormatting.RED + "bug", 1); + + registerKeys(); registerEntries(); } @@ -251,6 +258,11 @@ public class BUEntries public static Entry debug; + public void registerKeys() + { + + } + public void registerEntries() { /* Architect */ @@ -332,5 +344,17 @@ public class BUEntries /** Debug */ EntryRegistry.registerEntry(BUEntries.categoryBasics, EntryRegistry.basics, BUEntries.debug); + + + + this.registerCategory(BUEntries.categoryTest, EntryRegistry.test, BookParser.parseTextFile()); + } + + public void registerCategory(Category cat, HashMap entryMap, List entries) + { + for(Entry entry : entries) + { + EntryRegistry.registerEntry(cat, entryMap, entry); + } } } \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/book/BookParser.java b/src/main/java/WayofTime/alchemicalWizardry/common/book/BookParser.java new file mode 100644 index 00000000..30174e18 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/book/BookParser.java @@ -0,0 +1,319 @@ +package WayofTime.alchemicalWizardry.common.book; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.crafting.IRecipe; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.book.compact.Entry; +import WayofTime.alchemicalWizardry.book.entries.EntryCraftingRecipeCustomText; +import WayofTime.alchemicalWizardry.book.entries.EntryImageCustomText; +import WayofTime.alchemicalWizardry.book.entries.EntryTextCustomText; +import WayofTime.alchemicalWizardry.book.entries.IEntryCustomText; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BookParser +{ + @SideOnly(Side.CLIENT) + public static List parseTextFile() + { + File textFiles = new File("config/BloodMagic/bookDocs"); + ArrayList entryList = new ArrayList(); + //if(textFiles.exists()) + { + try { + System.out.println("I am in an island of files!"); + + InputStream input = AlchemicalWizardry.class.getResourceAsStream("/assets/alchemicalwizardryBooks/books/book.txt"); + + Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(true); + + if(input != null) + { + DataInputStream in = new DataInputStream(input); + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + String strLine; + //Read File Line By Line + + int defMaxLines = 16; + int maxLines = defMaxLines; + + int currentPage = 0; + + int pageIndex = 1; + + String currentTitle = "aw.entry.Magnus"; + + String[] strings = new String[1]; + strings[0] = ""; + + //New entry stuff + ArrayList iEntryList = new ArrayList(); + IEntryCustomText currentIEntry = new EntryTextCustomText(); + + boolean lastPageWasSpecial = true; + + int entriesPerPage = 14; + + while ((strLine = br.readLine()) != null) + { + if(strLine.trim().isEmpty()) + { + continue; + } + + if(strLine.startsWith("//TITLE ")) //New entry~ + { + lastPageWasSpecial = false; + String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing + for(int i=0; i maxLines) + { + changePage = true; + } + if(changePage) //Encode into current entry, then move to next entry + { + String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing + for(int i=0; i 3L) +// { +// +// }else + { + PrintWriter writer = new PrintWriter(file); + for(String stri : strings) + { + writer.println(stri); + } + writer.close(); + } + +// + } + + Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(false); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + return entryList; + } + + public static IEntryCustomText[] getArrayForList(List list) + { + Object[] tempArray = list.toArray(); + IEntryCustomText[] customTextArray = new IEntryCustomText[tempArray.length]; + for(int i=0; i= 5) + { + return new EntryImageCustomText(arguments[3], xSize, ySize, arguments[4]); + }else + { + return new EntryImageCustomText(arguments[3], xSize, ySize); + } + }else if(unparsedString.startsWith("//CRAFTING ")) + { + String lines = unparsedString.replaceFirst("//CRAFTING ", ""); + IRecipe recipe = SpecialEntryRegistry.getIRecipeForKey(lines); + if(recipe != null) + { + return new EntryCraftingRecipeCustomText(recipe); + } + } + + return new EntryTextCustomText(); + } + + public static int getlineLimitForStringTitle(String unparsedString, int def) + { + if(unparsedString.startsWith("//IMAGE ")) + { + String lines = unparsedString.replaceFirst("//IMAGE ", ""); + String[] arguments = lines.split(" "); + if(arguments.length < 4) + { + return def; + } + + return Integer.decode(arguments[0]); + }else if(unparsedString.startsWith("//CRAFTING ")) + { + return 0; + } + + return def; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/book/SpecialEntryRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/book/SpecialEntryRegistry.java new file mode 100644 index 00000000..1961e729 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/book/SpecialEntryRegistry.java @@ -0,0 +1,27 @@ +package WayofTime.alchemicalWizardry.common.book; + +import java.util.HashMap; +import java.util.Map; + +import WayofTime.alchemicalWizardry.book.registries.RecipeRegistry; +import net.minecraft.item.crafting.IRecipe; + +public class SpecialEntryRegistry +{ + public static Map recipeStringMap = new HashMap(); + + public static void registerIRecipeKey(IRecipe recipe, String key) + { + recipeStringMap.put(key, recipe); + } + + public static IRecipe getIRecipeForKey(String str) + { + return recipeStringMap.get(str); + } + + public static void registerLatestIRecipe(String key) + { + SpecialEntryRegistry.registerIRecipeKey(RecipeRegistry.getLatestCraftingRecipe(), key); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectDemonPortal.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectDemonPortal.java index 16c6646e..b74df1c2 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectDemonPortal.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectDemonPortal.java @@ -57,7 +57,7 @@ public class RitualEffectDemonPortal extends RitualEffect if(reagentAmount < neededAmount) { reagentsFulfilled = false; - System.out.println("Reagents not fulfilled. Missing: " + ReagentRegistry.getKeyForReagent(reagent)); +// System.out.println("Reagents not fulfilled. Missing: " + ReagentRegistry.getKeyForReagent(reagent)); int drainAmount = Math.min(drainRate, neededAmount - reagentAmount); if(drainAmount <= 0) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java index fa49395e..b539f0fb 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java @@ -619,7 +619,7 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui PotionEffect regenEffect = player.getActivePotionEffect(Potion.regeneration); if (regenEffect != null && regenEffect.getAmplifier() > 0) { - if(AlchemicalWizardry.causeHungerChatMessage && player.getActivePotionEffect(Potion.hunger) != null) + if(AlchemicalWizardry.causeHungerChatMessage && player.getActivePotionEffect(Potion.hunger) == null) { player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.altar.hunger"))); } diff --git a/src/main/resources/assets/alchemicalwizardryBooks/books.txt b/src/main/resources/assets/alchemicalwizardryBooks/books.txt index 1f3c946f..5616cbf6 100644 --- a/src/main/resources/assets/alchemicalwizardryBooks/books.txt +++ b/src/main/resources/assets/alchemicalwizardryBooks/books.txt @@ -1,12 +1,12 @@ aw.entry.Magnus.1= -aw.entry.Your classic tragic backstory.1= My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some -aw.entry.Your classic tragic backstory.2=travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village. I was brought to a village nearby, where a magician named Magus helped tend to my wounds. The magic that he used was something that I had never seen before - it wasn't Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes -aw.entry.Your classic tragic backstory.3=were open, holding his finger to his lips. Fast-forward several years, and I have learned almost everything from Master Magus, being his third student ever to master his arts. Against his wishes, I have recorded my research and put several wards and spells on this book. So welcome, apprentice. I am known as The Architect, and I am a Blood Mage. It took several years of pestering before I managed to convince Magus to teach -aw.entry.Your classic tragic backstory.4=me. He kept on telling me that, "Magic that uses the life essence of living beings requires patience and preparation in order to master it. One false move, go a little past your natural endurance, and you may find yourself taking a nice vacation in Tartarus." The thing was, I wanted to go there - I had some unfinished business with the demons. The process that Magus originally constructed -aw.entry.Your classic tragic backstory.5=required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of "Equivalent Exchange," I managed to construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight! -aw.entry.The Blood Altar.1= To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master -aw.entry.The Blood Altar.2=Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand. The blood dissipated in a cloud of red swirls as I waited for the atoms of the diamond to shift and reform. There were a few moments where the particles turned gray, which meant that the altar was empty and I had to hurry to fill it. After the diamond burst in a shower of red particles, what finally -aw.entry.The Blood Altar.3=sat in the altar was a Weak Blood Orb. +aw.entry.Your classic tragic backstory.1= My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village. I was brought to a village nearby, where a magician +aw.entry.Your classic tragic backstory.2=named Magus helped tend to my wounds. The magic that he used was something that I had never seen before - it wasn't Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes were open, holding his finger to his lips. Fast-forward several years, and I have learned almost everything from Master Magus, being his third student ever to master his arts. Against his wishes, I have recorded +aw.entry.Your classic tragic backstory.3=my research and put several wards and spells on this book. So welcome, apprentice. I am known as The Architect, and I am a Blood Mage. It took several years of pestering before I managed to convince Magus to teach me. He kept on telling me that, "Magic that uses the life essence of living beings requires patience and preparation in order to master it. One false move, go a little past your natural endurance, and you may find +aw.entry.Your classic tragic backstory.4=yourself taking a nice vacation in Tartarus." The thing was, I wanted to go there - I had some unfinished business with the demons. The process that Magus originally constructed required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of "Equivalent Exchange," I managed to +aw.entry.Your classic tragic backstory.5=construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight! +aw.entry.The Blood Altar.1= //IMAGE 8 854 480 bloodutils:textures/misc/screenshots/t1.png //CRAFTING sacrificialKnife To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really +aw.entry.The Blood Altar.2=close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand. The blood dissipated in a cloud of red swirls as I waited for the atoms of the diamond to shift and reform. There were a few moments where the particles turned gray, which meant that the +aw.entry.The Blood Altar.3=altar was empty and I had to hurry to fill it. After the diamond burst in a shower of red particles, what finally sat in the altar was a Weak Blood Orb. aw.entry.The Soul Network.1= One thing that I initially didn't understand was the overarching connection between the blood orb and myself. When I initially met Magus, I could see many sparkling strands branching off of him, flowing throughout his house and linking with intricate stones and runic drawings. I asked Magus about the strands, but he had no clue what I was talking about. It took three years of thorough research to finally find the answer, and when I aw.entry.The Soul Network.2=brought my notes to him he was really impressed with what I have found. When you send power into the orb, the energy is transmitted from the strand connecting the orb and into the very soul of the person the orb is bound to. Similarly, and Magus managed to show this effect with several of his rituals, when you use something that drains energy it will drain the energy directly from the soul. The thing is that if you aw.entry.The Soul Network.3=use an item whose owner has no energy left, the item will instead grab the requisite energy from the user of the item. Directly. From his or her life force. As such, the unit of measurement is called "Life Points," or LP. I experimented with this, and one heart equals 200 LP. I have christened this system to be the "Soul Network," and is used in all branches of Blood Magic indirectly. Sigils diff --git a/src/main/resources/assets/alchemicalwizardryBooks/books/book.txt b/src/main/resources/assets/alchemicalwizardryBooks/books/book.txt index af2c5b4a..00df69e1 100644 --- a/src/main/resources/assets/alchemicalwizardryBooks/books/book.txt +++ b/src/main/resources/assets/alchemicalwizardryBooks/books/book.txt @@ -1,5 +1,4 @@ //TITLE Your classic tragic backstory -//SPECIAL 8 My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village. I was brought to a village nearby, where a magician named Magus helped tend to my wounds. The magic that he used was something that I had never seen before – it wasn’t Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes were open, holding his finger to his lips. @@ -10,6 +9,8 @@ It took several years of pestering before I managed to convince Magus to teach m The process that Magus originally constructed required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of “Equivalent Exchange,” I managed to construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight! //TITLE The Blood Altar +//IMAGE 8 854 480 bloodutils:textures/misc/screenshots/t1.png +//CRAFTING sacrificialKnife To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand.